Prije nekoliko godina u ruke mi je dopala knjiga "The Pragmatic Programmer" od Andrewa Hunta i Davida Thomasa.
Ta je knjiga jako utjecala na moje razmišljanje o programerskoj struci i potaknula me da razmišljam o razvoju svoje karijere. Kroz 8 cjelina (više ili manje "jakih") autori prolaze kroz mnoge bitne elemente svakodnevne programerske prakse. Zadržat ću se samo na jednom poglavlju iz prve cjeline koju su autori nazvali "Pragmatična filozofija". Poglavlje govori o portfoliu znanja i prenosi jednu od najvažnijih poruka u cijeloj knjizi.
Za programera nikad ne možemo reći da je "naučio zanat". Dobrom programeru učenje mora postati navika. Zahvaljujući manjku fizičkih ograničenja IT industrija si dozvoljava konstantne i snažne promjene u tehnologiji. Ideje o kojima smo čitali prije 5 godina danas su općeprihvaćena praksa, a isto će se desiti i s mnogim idejama o kojima čitamo danas. Ne postoji škola ili fakultet koji će vam dati svo znanje koje bi vam moglo trebati do kraja radnog vijeka. Jedini lijek je stalno pratiti nova zbivanja u industriji i prije svega učiti.
Dobra vijest je da se tehnologija mainstream industrije uglavnom zasniva na temeljima postavljenima u počecima struke, u 60tim i 70tim godinama prošlog stoljeća. Zato je prvi savjet kojeg se isplati poslušati ne vjerovati promotorima novih hype tehnologija kad kažu da je to nešto revolucionarno. Već sasvim malo istraživanja pokazat će vam da se većina današnjih alata i proizvoda ne razlikuje jako od već viđenih rješenja iz prošlosti.
Programeru je jedan od osnovnih alata njegovo znanje programskog jezika u kojem radi i sposobnost da ga primijeni na problem kojeg rješava. Neki tvrde da jezik kojim se opisuje i rješava problem utječe na način razmišljanja programera. Zato vam barem površno znanje drugih programskih jezika može pomoći da problem sagledate iz neuobičajenog kuta i da brže nađete povoljnije rješenje. Prema TIOBE indeksu danas najpopularniji programski jezici su C/C++, Java, PHP i Visual Basic (prvih 5 na njihovoj top 50 listi). Na toj se listi "stari" jezici kao što su Lisp, ML/Caml, Prolog, Smalltalk itd. nalaze na prilično niskim pozicijama, ispod 20. mjesta. Svi ti stari jezici imaju jednu zajedničku karakteristiku: zadnje verzije standarda koji upisuju jezik datiraju iz 80tih godina prošlog stoljeća. Na njima je razvoj, iz nekog razloga, stao.
Ja ipak mislim da je poznavanje baš tih jezika jako korisno za snalaženje u današnjoj poplavi novih programerskih tenologija i "novih" programskih jezika. Uzmimo kao primjer Smalltalk i Common Lisp/CLOS. Smalltalk je nastao u vrijeme kad je izmišljen pojam "objektno orijentirano programiranje". To je, možemo reći, prototipski jezik koji opisuje sve važne koncepte u objektno orijentiranom programiranju. Zašto bi ga danas itko htio naučiti? Kao i za bilo koji drugi jezik, glavni razlog trebao bi biti trening, vježba, a jednom kad se poželite malo odmoriti od vaših svakodnevnih C/C++ i Java problema i prebaciti se na recimo iPhone programiranje shvatite ćete da je Objective-C, glavni jezik u Apple svijetu, imao snažan uzor upravo u Smalltalku.
Lisp kao ideja je nastao u 60tim, a Common Lisp standard je stvoren 80tih godina prošlog stoljeća. U tom su standardu uhvaćene potrebe programera identificirane u tom ne baš kratkom razdoblju što je rezultiralo programskim jezikom standardiziranim kod ANSI organizacije. Jedan malo spominjani dragulj u toj specifikaciji je CLOS (Common Lisp Object System). To je donekle dodatak na Common Lisp specifikaciju (možete pisati kompletne programe i Common Lispu bez da dotaknete CLOS) no možemo ga shvatiti kao jednu vrlo dobro osmišljenu dizertaciju o objektno orijentiranim sustavima. Ideje zapisane u Common Lisp/CLOS standardu već godinama kopiraju programski jezici kao što su Perl, Ruby, Python i slični, a potiho su se neke ideje naselile i u mainstream jezike kao što je Java. Ono što je značajno je da je podugačak popis još ne-kopiranih ideja tako da tako da vrijedi naučiti ovaj stari jezik (prošle godine je proslavio 50 godina postojanja) jer migracija ideja u mainstream jezike još nije završena.
Dotaknut ću se ovdje i jezika iz ML tradicije iako s njima osobno imam manje iskustva. ML, Caml, Erlang i Haskell su svi funkcionalni jezici sa sličnom sintaksom, iako je Erlang jezik dinamičkih tipova podataka dok su ostali statički jezici. Rasadnik ideja koje možete naći u ovim jezicima je gotovo nepregledan. Od "čistih" funkcionalnih svojstava do lijene evaluacije izraza, pronaći ćete pravo bogatstvo ideja. Ti su jezici (posebno Haskell) i danas u snažnom razvoju. Zašto bi htjeli naučiti jedan od tih jezika? Funkcionalni jezici su popularni u financijskom svijetu (Ocaml u Jane Street Capital itd.), a jedan novi funkcionalni jezik F# se od ove godine nalazi u prvoj postavi Microsoftovog Visual Studia 2010. Taj .NET kompatibilni jezik je nastao na Ocaml osnovama, s primjesama nekih vrlo pažljivo (i dobro) izabranih Haskell svojstava. Svi funkcionalni jezici danas ulaze u fokus i zbog puno lakšeg pisanja programa koji rade paralelno na više jezgri. To je područje u koje definitivno treba uložiti malo vremena!
Od "starih" alternativnih jezika (PHP, Perl, Ruby, Python) imam najviše iskustva s Perlom i od zanimljivih crtica mogu reći da je Perl slatka tajna mnogih u bankarskom svijetu (Morgan Stanley, Saxo Bank, itd.) gdje se koristi za sve od izrade statističkih izvještaja do kontrole rada cijelih zgrada napunjenih serverima. Znači rade li vam se male web aplikacije za po doma i poželite koristiti neki od ovih klasičnih "skriptnih" jezika to bi vam znanje kasnije moglo lijepo pomoći u karijeri, na sasvim neočekivan način.
Pragmatični programeri s početka ove priče predlažu da svake godine treba naučiti jedan programski jezik i pri tom izabrati nešto sa radikalno drukčijim pristupom programiranju jer od sličnih jezika osim nove sintakse nećete naučiti puno novog. Naravno, u godini dana se ne može postati majstor u nekom programskom jeziku, ali ako ste ozbiljno pokušali shvatiti pristup kojeg autor jezika ima u rješavanju problema tad ste sigurno skupili znanje koje će vam biti korisno i u svakodnevnoj praksi.
Igor Rumiha trenutno radi u tvrtki ZoomMediaPlus kao Senior Engineer, a u svojoj IT karijeri od 2000. godine do danas, bavio se izradom sustava za mrežni nadzor, provisioning sustavima u ISP i mobile telekom okolinama i automatizacije testova na embedded platformama. U pauzama između tih poslova bavio se administracijom Oracle i MSSQL baza, billing sustava pa čak i izradom billing sustava. |