Uroš Mesojedec: Obilje
Računalnike in njim podobne naprave danes uporabljamo že za vse mogoče in zdijo se celo čedalje preprostejši za uporabo, vendar smo pogosto žrtve začetnega navdušenja. Porajajo se celo pomisleki, da so računalniki za nekatera opravila preprosto neprimerni. Pred leti sem se pogovarjal z direktorjem večjega podjetja, ki je v širši družbi brez zadržkov preklinjal nad svojimi računovodkinjami, saj pri rabi pisarniške programske opreme preprosto ne preverjajo več izračunov. Računalnik se pač ne zmoti. Že res, če bi delo opravil v celoti sam in bi ga pri tem krmilil popoln program. Pri ročnem preračunavanju so uslužbenke vsako številko trikrat vtipkale in znova seštele, elektronska preglednica pa tako lepo prikazuje izračun in vse spremembe samodejno upošteva, da preprosto niso pomislile, da bi celoten izračun opravile še enkrat, morda na drugem listu preglednice.
Podobno, preveliko zaupanje v tehnologijo najdemo tudi pri programerjih. S prihodom najrazličnejših vizualnih orodij, ki jih krmili preprost jezik, se je njihovo število silno pomnožilo. Marsikateri med njimi je prepričan, da svoj posel obvlada, v resnici pa ne pozna niti osnov, na katerih bi moral graditi. Danes po podjetjih kar mrgoli najrazličnejših polovičnih ali četrtinskih "rešitev", ki navidez delujejo, v resnici pa so že v izhodišču zgrajene napačno. Vsako spreminjanje takega programa je drago in zamudno, vnese pa še več nereda, tako da na koncu vedno nekdo obupa. Ali programer izgubi veselje ali pa plačnik zavrne račun. Tudi zaradi tega se vedno iste stvari pišejo kar naprej in vedno znova, žal zelo pogosto tudi v drugo z enakimi, temeljnimi napakami v načrtu.
Recepti za odpravo programerske krize so številni in obsegajo skoraj vse, od zaposlovanja programerjev na Daljnem vzhodu do črne magije, vendar se kaže, da bo pravo rešitev prinesla popolnoma drugačna koda, ki bo nastala na povsem drugačnih temeljih. Industrija programske opreme pa tudi posamezniki, ki jo razvijajo za hobi ali hiter zaslužek, danes večinoma temelji na zelo verjetno napačnih predpostavkah. Da bi jih lahko ponazorili, si najprej oglejmo zgled, ki precej nazorno pokaže, kako je mogoče razviti praktično popolno kodo.
Kljub tragični bilanci poletov ameriškega vesoljskega čolnička (Space Shuttle) je njegova programska oprema blizu popolnosti. Njena velikost, merjena z običajnim vatlom, številom vrstic izvirne programske kode, ni impresivna. Obsega slabega pol milijona vrstic, kar je za velikostni razred ali dva manj, kot ga imajo nekateri priljubljeni programi. Okna XP npr. obsegajo 40 milijonov vrstic. Programsko opremo za čolniček je skoraj 20 let razvijalo 260 programerjev in pri tem porabilo okrog 700 milijonov dolarjev. Vsaka programska vrstica praktično popolnega programa je bila pod budnim očesom programerja vsaj 25 ur, njena cena pa je bila okrog 1500 zelencev. Ena vrstica! Kdo si lahko privošči tak proračun? Le vlada najbogatejše države, in še to le za projekt vesoljske tehnologije, od katerega so odvisna človeška življenja.
Temeljna težava pri programski opremi se skriva v njeni neverjetni zapletenosti. Ker pri njenem razvoju nismo soočeni z običajnimi omejitvami resničnega sveta, lahko že posameznik zgradi in obvladuje sistem, ki ga sestavlja celo na milijone preprostih gradnikov. Vsi ti členi pa so še vedno tesno povezani in med seboj odvisni, kar lahko pripelje do cele vrste čudnih izidov, ki si jih zelo pogosto ne moremo niti zamisliti. Vštejmo v vse skupaj še lenobo, neumnost in preveliko zaupanje v tehnologijo in hitro bomo dobili današnjo, porazno sliko.
Obrat lahko prinese drugačno razmišljanje. Sodobna računalniška tehnologija je zgrajena na predpostavki omejenih virov. Hitrosti, širine, prostega pomnilnika ni nikoli preveč. Pri programerskih projektih je stanje še hujše, saj - razen NASE in njenega vesoljskega čolnička - trpijo zaradi primanjkljaja delovne sile, nerealnih rokov in prenizkih proračunov. Poleg tega je miselnost pri razvoju programa zelo pogosto povsem napačna, saj že programski jeziki ne upoštevajo znanega dejstva, da je edina stalnica sprememba. Že res, da so sodobni programski jeziki opremljeni s pridevnikom "dinamični", kar naj bi ponazarjalo njihovo sposobnost prilagajanja, v resnici pa temeljijo na vprašljivem kratkovidnem ciklu razmisli-kodiraj-poženi-zavrzi. Danes se tržniki celo hvalijo s tem, da je bila nova različica priljubljenega progama "napisana povsem na novo", kar bi v resnici prej moralo pričati o nesposobnosti razumevanja resničnosti.
Učinkovita programska oprema prihodnosti bi morala nastajati drugače. Namesto da 40-krat rešujemo enak problem v okolju omejitev na vseh straneh, bi se morali problemu posvetiti tako, kot da teh omejitev ni. Kot da je časa, denarja in ljudi na voljo brez meja. Spletna enciklopedija Wikipedia je zgled "pisanja programja", ki nastaja v takih okoliščinah. Nastala je leta 2001, septembra letos pa je obsegala že več kot milijon člankov v sto jezikih. Že res, da se tu in tam pojavijo primeri "vandalizma" in napačnih navedb, a so razmeroma hitro počiščeni. Res je tudi, da je enciklopedija precej amerikocentrična, a to je le odraz stanja današnje rabe spleta. Zelo verjetno je Wikipedia na poti, da postane daleč najpopolnejša zbirka človeškega znanja. Vendar ne mislimo, da gre za posamezen primer, ki je mogoč le v dobi interneta.
Leta 1857 je Richard Chenevix Trench predlagal izdelavo novega, čim bolj izpopolnjenega slovarja angleškega jezika, ki bi temeljil na iskanju najzgodnejših navedb posameznih besed v tiskanih virih. Slovar bi se sestavil s prebiranjem vseh znanih knjig v angleščini in iskanjem mest v njih, kjer se pojavljajo značilne rabe posamezne besede. Taki povzetki bi se uporabili za zapis pomena besede in zgodovine njene rabe. Seveda je tak način izdelave slovarja monumentalen podvig, vendar je predlagatelj našel način za učinkovito delo. Na pomoč je poklical prostovoljce iz različnih angleško-govorečih dežel. V času 70 let je na stotine ljudi prispevalo več kot šest milijonov izvlečkov, ki so postali del Oxford English Dictionary, ki še danes velja za najpopolnejši slovar sodobne angleščine, ki vključuje pol milijona besed in 2,5 milijona citatov.
Podobnega podviga se je lotil tudi drugače organizirani posameznik. Samuel Johnson je v devetih letih s pomočjo peščice sodelavcev naredil izjemno stvar, vendar mu je uspelo sestavili le slovar s 40.000 besedami in približno toliko citati.
To nas pripelje do programske kode. Ravno v Wikipedii pri pojmu "število programskih vrstic" (Source lines of code - SLOC) najdemo zanimiv podatek. Študija, ki je bila opravljena na priljubljeni in zelo bogati distribuciji operacijskega sistema Debian različice 2.2, izšla je avgusta 2000, je pokazala, da ga sestavlja 55 milijonov vrstic kode, ki bi, razvita v običajnih okoliščinah lastniškega modela, zahtevala vsaj 14.005 človek-let in bi stala skoraj dve milijardi dolarjev! Koda, ki sestavlja Debian, pa je nastala in se še danes ustvarja v povsem drugačnih okoliščinah.