Kao rezultat dugog niza slučajnosti postao sam programer, što je postalo zvanično 1952. godine, i koliko sam istražio, bio sam prvi Holanđanin koji se time bavio u svojoj zemlji.

Nakon tri godine od mog početka bavljenja programiranjem, morao sam da donesem odluku: da prestanem da programiram i postanem teorijski fizičar ili da završim samo osnovne studije sa minimumom truda i da postanem… Šta? Programer?

Sećam se kako sam zavideo svojim kolegama koji su se bavili hardverom, koji su, kada su upitani za svoje profesije, mogli barem da kažu da znaju sve o vakuum cevima, pojačalima i sl. Dok ja, sa druge strane, na to pitanje nisam imao nikakav odgovor.

Profesor A. van Vijngarden se složio sa mnom da programiranje nije disciplina. Ali onda je počeo da objašnjava kako su kompjuteri ovde da ostanu, da je ovo samo početak i da bih ja mogao da budem jedna od osoba zbog koje će programiranje postati poštovana disciplina u godinama koje dolaze? Zato sam i postao programer.

Dozvolite da opišem situaciju tih starih dana malo detaljnije, u nadi da ćemo bolje razumeti sadašnju situaciju. Dok sledimo analizu, videćete koliko zajedničkih nerazumevanja o pravoj prirodi programiranja ima korene u dubokoj prošlosti.

Veliki računari, mali programer

Prvi automatski električni računari su bile unikatne mašine i mogli su se naći u okruženju eksperimentalne laboratorije. Kada se pojavila vizija električnog računara, njeno shvatanje je bio veliki izazov za do tada dostupnu električnu tehnologiju.

Neverovatna oprema kakva je tada korišćena, izaziva čuđenje današnjih posmatrača: kako su te prve mašine uopšte i radile, bar nekad. Zapravo, ogroman problem je bio da se mašina pokrene i da radi.

Šta je sa jadnim programerom? Pa, iskreno govoreći, on je jedva bio primećivan. Prve mašine su bile tako glomazne da si jedva mogao da ih pomeraš i osim toga, one su zahtevale komplikovano održavanje, pa je bilo logično da je mesto na kom su ljudi pokušavali da koriste mašinu bila laboratorija u kojoj je mašina i bila razvijana. Drugo, njegov nevidljiv rad je bio bez ikakvog glamura. Posetiocima je mogao da pokaže mašinu, koja je bila za nijansu spektakularnija od par linija upotrebljenog koda.

Ali najbitnije od svega je to što je sam programer imao skroman pogled na svoj posao: Sjajna mašina je davala značaj njegovom poslu. Kako je to bila jedinstvena mašina, programer je znao veoma dobro da njegovi programi imaju samo lokalizovan značaj i takođe, pošto je bilo očigledno da mašina ima ograničen vek trajanja, da će samo deo programerovog rada imati trajnu vrednost.

Konačno, ovo je još jedna okolnost koja je imala dubok uticaj na programerov stav na poslu: sa jedne strane, osim što je nepouzdana, njegova mašina je uglavnom prespora, a njena memorija uglavnom premala. Da dočaram: programer je bio suočen sa uskim mogućnostima, ali je sa druge strane sa pravim redom koda mogao da opsluži najneočekivanije konstrukcije.

I u onim danima, pametni programer je osećao veliko intelektualno zadovoljstvo kada bi poturio nekakav lukavi trik i uspeo da ostvari nemoguće uz ograničenost opreme.

Šta stoji iza softverske krize?

Dva mišljenja o programiranju imaju svoje poreklo u tom vremenu. Jedno je da bi veoma sposoban programer trebalo da bude klikeraš i da voli trikove, a drugo mišljenje je da programiranje nije ništa više do optimizovanja efikasnosti u kompjuterskim procesima.Ovo drugo mišljenje je rezultat okolnosti — dostupnost opreme kao bolna tačka.

Tih dana se naivno očekivalo da će, kada se pojave moćnije mašine, programiranje biti znatno olakšano, jer borba da se mašina gurne do svojih granica neće biti potrebna, a svrha programiranja je upravo u tome, zar ne? Ali u narednim decenijama desilo se nešto sasvim drugačije: moćnije mašine postale su dostupne, i to daleko moćnije mašine. Ali umesto da se radujemo što su svi programerski problemi rešeni, našli smo se u softverskoj krizi do guše.

Tačka preokreta je bila na Konferenciji softverskog inžinjerstva u Garmišu, oktobra 1968. godine. Konferencija je napravila senzaciju jer se na njoj prvi put javno priznala softverska kriza. Kako se kriza desila?

Postoji jedan razlog: U jednom ili dva aspekta moderne mašine su u suštini teže za održavanje i upravljanje nego stare. Prvo, imamo I/O prekide koji se javljaju u nepredvidivim i neponovljivim okolnostima u poređenju sa starim sekvencijalnim mašinama koje su bile potpuno deterministički automatizovane.

Ovo je bila dramatična promena i mnoge sede vlasi programera svedoče činjenici da ne bi trebalo olako pričati o logističkim problemima koje su ove promene donele. Drugo, imamo mašine sa više nivoa, što predstavlja problem upravljačke strategije koji uprkos opširnoj literaturi na tu temu, ostaje prilično nedostižan. Toliko o dodatim komplikacijama uzrokovanim strukturnim promenama stvarnih mašina.

Onda, sredinom šezdesetih, nešto strašno se desilo: pojavili su se komjuteri treće generacije. Zvanična literatura nam je govorila da je odnos njihove cene i performansi bio jedan od dizajnerskih prioriteta. Ali ako za performanse uzimate ciklus aktivnosti različitih delova mašina, teško da će vas nešto zaštititi da završite sa dizajnom u kome je najveći deo performansi kojima stremiš već dostignuto unutrašnjom održavanjem od nesumnjive važnosti. I ako je tvoja definicija cene — cena koju plaćaš za hardver, malo šta će te zaštiti da završiš sa dizajnom za koji je teško programirati. U velikoj meri, izgleda da su ove neprijatne mogućnosti postale stvarnost.

Ako je programiranje problem, skromnost je rešenje

Deluje da postoje tri ključna uslova koja se moraju ispuniti da bi se nešto promenilo. Svet mora da prepozna potrebu za promenom; drugo, ekonomska potreba mora da bude jaka; i treće, promena mora da bude tehnički izvodljiva.

Uz to želim da upozorim sve koji izjednačavaju težinu programerskih zadataka sa borbom protiv neodgovarajućih alata, jer ih to može dovesti do zaključka da programiranje više neće biti problem kada alati postanu odgovarajući. Programiranje će ostati teško, zato što jednom kada se oslobodimo neprijatnosti sadašnjih okolnosti, postaćemo slobodni da se bacimo na probleme koji sada prevazilaze naše programerske sposobnosti.

Očekujem revoluciju u obrazovnim institucijama koje danas pružaju obuku i u konzervativnim grupama korisnika računara koji smatraju svoje zastarele programe toliko važnim da ne mogu da ih ponovo ispišu i unaprede. Sa ovim u vezi, tužno je videti da je na mnogim univerzitetima izbor računarskih centara često padao na par ustanovljenih, ali skupih aplikacija, sa kojima su hiljade “malih korisnika” morali da rade i da se pate umesto da pišu svoje programe po izboru.

Razlog zašto sam obratio pažnju na hardverski deo je zato što smatram da je jedan od najbitnijih aspekata korišćenja računarskih alata njihov uticaj na razmišljanje korisnika i zato što imam razloga da verujem da je taj uticaj mnogo veći nego što se inače pretpostavlja.

Već smo naučili po koju lekciju, a one koje sam izabrao da obrađujem u ovom tekstu su sledeće: Trebalo bi da svoje programerske poslove radimo mnogo bolje, tako što ćemo pristupiti zadatku sa punim poštovanjem njegove neopisive teškoće, rešeni da se držimo elegantnih i skromnih programskih jezika, što će usloviti poštovanje unutrašnjih ograničenja ljudskog uma i pristupimo im kao vrlo skromni programer.


Tekst “The Humble Programmer” je transkript govora Edsgera W. Dijkstra iz 1972. godine koji je održao prilikom prijema Tjuringove nagrade. Pred vama se nalazi deo eseja koji smo preveli i uredili za potrebe Startita.