"Software Engineering" je izmišljen da zvuči ozbiljno

Garmisch, 1968.: šef struke koja ne postoji odluči da sad postoji — pa je pola stoljeća poslije još nitko nikome ne odgovara za bug.

poglavlje H1/3416 min čitanja∞ – 1969

Garmisch-Partenkirchen, listopad 1968. Alpski hotel, planine oko njega još čuvaju snijeg od prošle zime, a u konferencijskoj sali NATO je skupio pedesetak ljudi koji rade nešto što se u tom trenutku uopće ne zove kako se danas zove. Zovu ih programeri, koderi, sistem analitičari — ljudi koji su, ruku na srce, dotad radili nešto s brojevima ili elektronikom, pa su se nekako zatekli baš ovdje. Softver kasni. Ne malo — katastrofalno. Projekti koji su trebali trajati godinu dana traju tri, budžeti pucaju kao balončići, i netko na tom skupu izgovara dva slatka slova koja će zauvijek promijeniti povijest jedne struke: software engineering — »softversko inženjerstvo«.

Nisu mislili da je to opis stvarnosti. Mislili su da je to recept, aspiracija, poziv u pomoć obučen u odijelo respektabilnosti — kao kad kažeš djetetu da je hrabro, u nadi da će se onda i ponašati hrabro. Termin je posuđen namjerno, provokativno, gotovo ironično: ako se ovaj kaos već zove inženjerstvo, možda ćemo se jednog dana početi i tako ponašati.

A projekt i dalje kasni. Budžet i dalje puca. Samo umjesto pedesetak ljudi u alpskom hotelu, sad je to petsto ljudi na Slacku, sprint — radni ciklus koji u agilnim metodologijama obično traje dva do četiri tjedna, dovoljno kratko da se ne izgubi fokus, dovoljno dugo da se nešto stigne napraviti — koji je trebao trajati dva tjedna traje šest, i netko na standupu, tom kratkom jutarnjem sastanku tima gdje svatko u dvije minute kaže na čemu radi, izgovara rečenicu koju bi 1968. prepoznali kao svoju: „skoro smo gotovi, još malo”.

Pitanje koje danas postavljamo pred ovaj sud nije jesu li programeri sposobni, pametni ili vrijedni — jesu, većina njih zaslužuje respekt više nego što ga dobiva. Pitanje je uže i opasnije: zaslužuje li to što rade titulu koju nosi zajedno s ljudima koji projektiraju mostove, avione i brane. Titulu koja u nekim zemljama ide s ispitom, licencom i pravnom odgovornošću — dakle, ako pravi inženjer napravi grešku, ide pred sud i gubi papire, ne samo posao — i titulu koju je u industriji softvera moguće staviti na vizitkartu nakon tri mjeseca bootcampa.

Sud neće presuditi umjesto tebe. Iznijet ćemo dokaze — s fusnotama, s datumima, s brojkama koje bole — i optužbu i obranu, jednako glasno. Ti si porota. Ali prije nego sjedneš, zapamti gdje je sve počelo: u hotelu u planinama, gdje je gomila umornih ljudi izmislila ime za posao koji su tek trebali naučiti raditi.

Optužba poziva prvog svjedoka: rječnik. Jer sve počinje riječju koju je netko odabrao prije pola stoljeća, u dvorani punoj ljudi koji su upravo priznali da im se cijela struka raspada pod rukama. Da se podsjetimo, ona ista konferencija u Garmischu iz poglavlja 31. Netko je te večeri, umoran od poraza, rekao: zovimo to inženjerstvom. Ne jer to jest, nego jer se nadamo da će jednog dana biti.

To je optužnica u jednoj rečenici: naziv je izmišljen kao želja, a industrija ga je preuzela kao da je opis stanja. Aspiracija je tiho postala fasada. I šezdeset godina kasnije, dok ti u ugovoru o radu piše Software Engineer, dok ti fakultet zove studij Software Engineering, dok se ozbiljni ljudi u odijelima ozbiljno pozivaju na inženjerske principe — nitko se ne pita je li ta riječ ikad prošla ispit. Zvuči li ozbiljno? Da. Jest li ozbiljno? To je ono što danas ispitujemo.

OK, sve jasno do sad? Dobro, jer optužnica se upravo zaoštrava.

Nema komore softverskih inženjera koja te može izbaciti iz struke, kao što liječnika mogu izbaciti iz liječničke komore ili odvjetnika iz odvjetničke. Nema ispita koji moraš položiti da smiješ napisati liniju koda koja upravlja avionikom, bankovnim transferom ili — da, doći ćemo do toga, s dužnim poštovanjem prema onima koji su platili cijenu — uređajem koji ubrizgava zračenje u ljudsko tijelo. Postoje certifikati, da, oni koje si dobio za tri dana i test od pedeset pitanja s višestrukim izborom. Postoje diplome. Ali diploma nije licenca, a certifikat nije zakletva.

I tu je srž optužnice, ogoljena do kosti: riječ inženjer u svakom drugom kontekstu civilizacije znači odgovornost koja se može pravno i profesionalno provesti. U softveru znači da imaš pojam o apstrakciji podataka i da znaš na sastanku bez crvenjenja izgovoriti riječ »scalable« (u prijevodu: da sustav ne pucne kad naraste broj korisnika). To nije isto. To nikad nije bilo isto. Samo smo pola stoljeća pravili se da jest, jer je zvučalo bolje na posjetnici nego programer, a mnogo bolje nego ono što bismo možda trebali zvati — zanatlija koji radi po osjećaju i nadi da testovi prođu.

Optužba tvrdi: naziv je uzet posuđeno, nikad otplaćen. I dok traje ovo suđenje, dok slušamo dokaze s obje strane, sjeti se da ti to piše u ugovoru o radu, na tvojoj posjetnici, možda i na vratima tvoje kancelarije s foosball stolom. Pitanje koje sud postavlja nije zvuči li to ozbiljno. Pitanje je — jesi li ikad potpisao nešto što te može poslati u zatvor ako pogriješiš?

Dokazi optužbe
§ 02

Dokazi optužbe

Tužiteljstvo poziva sljedećeg svjedoka: papirologiju. Otvori bilo koju licencu za softver koji koristiš — Windows, iOS, onu aplikaciju za praćenje mjesečnice, svejedno — i potraži rečenicu koja se, uz varijacije, ponavlja od osamdesetih. Softver se isporučuje „as is”. Bez ikakvog jamstva, izričitog ili implicitnog, uključujući ali ne ograničavajući se na jamstva prikladnosti za određenu svrhu. Prevedeno na hrvatski razgovorni: ako ovo ne radi, ne radi, sam si kriv što si to kupio, sretno na sudu. Nijedan proizvođač mostova ne smije ti prodati most s klauzulom „most nije prikladan za prelaženje”. Nijedan proizvođač lifta se ne izvlači rečenicom da lift „možda vozi, možda ne, koristiš na svoju odgovornost”. Kod softvera je to standardna praksa, ne skandal — toliko standardna da je nitko ne čita, jer svi znaju što piše.

To je prvi dokaz: cijela industrija je pravno ugovorila vlastitu neodgovornost, i to unaprijed, u dokumentu koji nitko ne čita ali svi potpisuju. Drugi dokaz je odsutnost onoga što svaka prava inženjerska struka ima — tijela koje ti može oduzeti pravo rada. Ako si strukturalni inženjer i tvoj most padne, netko provjerava tvoj potpis na nacrtu, i ako je propust tvoj, više nikad ne potpisuješ nacrt. Ako si softverski inženjer i tvoja aplikacija izbriše nekome bazu klijenata, provjerava se — ništa. Nema komore. Nema licence koja zaista nešto znači. Nema pečata koji nosiš kao dokaz da si položio provjeru znanja prije nego što te puste da pišeš kod koji upravlja avionima, bankama ili semaforima.

Treći dokaz je najteži, i tužiteljstvo ga iznosi s dužnim poštovanjem prema ljudima o kojima govori, jer ovo nije apstraktna rasprava o terminologiji — ovo su stvarni ljudi koji su stvarno umrli. Therac-25, radioterapijski uređaj iz osamdesetih. Bug u softveru — utrka signala (race condition), ako želiš tehnički naziv, ali suština je jednostavnija: operater je mogao unijeti komande dovoljno brzo da softver izgubi korak sa stvarnošću, što je dovodilo do toga da pacijenti dobiju i stotinu puta veću dozu radijacije od propisane. Barem šest ljudi je stradalo, a neki su umrli u agoniji koju su liječnici opisivali kao opekline nekompatibilne s vjerovanjem da im je uzrok bilo »liječenje«. Proizvođač je prvu prijavu problema odbio s obrazloženjem da je greška operatera nemoguća, jer softver ima sigurnosne provjere. Softver koji je, ispada, imao bug baš u tim sigurnosnim provjerama.

I evo ključnog pitanja koje tužiteljstvo postavlja poroti: koliko je ljudi zbog Therac-25 izgubilo licenciju? Koliko je programera stalo pred stručno tijelo i odgovaralo za svoj kod, kao što bi arhitekt odgovarao da mu se zgrada sruši? Odgovor je — nitko, jer takvo tijelo ne postoji. Firma je platila odštete, promijenila proceduru, i industrija se pomaknula dalje. Slučaj se danas na fakultetima predaje kao obavezan primjer upozorenja — svaki kolegij softverskog inženjerstva ga gura studentima pod nos — ali to je, priznajmo, samo ljepše ime za 'i to je to', bez stvarne institucionalne posljedice koja bi sutra promijenila tko dobije pisati kod za medicinske uređaje.

Tužiteljstvo zaključuje ovaj dio izlaganja jednom jednostavnom tvrdnjom: riječ „inženjer” u svakom drugom kontekstu nosi odgovornost teže od same profesije. U softveru nosi samo bolju plaću na razgovoru za posao. To, drage porotnice i poroteci, nije inženjerstvo. To je marketing s diplomom.

Dokazi obrane
§ 03

Dokazi obrane

Obrana ustaje. Prva rečenica koju izgovara jest prigovor na samu premisu optužbe: usporedba s mostom je lažna analogija, i cijeli slučaj tužiteljstva stoji na njoj kao kula na pijesku.

Kad graditelj počne raditi na mostu, zna točno što gradi. Ima nacrt, ima teren, ima fiziku koja se ne pregovara. Rijeka će i za deset godina teći istom brzinom, čelik će popustiti pri istom broju newtona, i nitko — baš nitko — neće mu sredinom radova nazvati i reći „ej, može li ta rijeka sad teći u drugom smjeru, klijent je promijenio mišljenje”. Gravitacija ne šalje e-mailove s promjenom specifikacije. Softver? Softver dobiva takav e-mail u prosjeku svaki drugi dan.

To je prva razlika i ona sama ruši pola optužnice: zahtjevi za softver nisu fiksna točka, nego pokretna meta koju netko mijenja dok gađaš. Naruči ti mostograditelju da promijeni širinu rijeke nakon što je postavio prvi stup, pa da vidimo koliko je taj most siguran. A upravo to se traži od programera — svaki sprint, svaki put kad product owner (osoba u timu koja odlučuje što se gradi i koja voli mijenjati mišljenje) jučer bio na konferenciji i čuo za novu modnu tehnološku frazu koju sad hoće u proizvodu.

Sad, obrana ne kaže da formalna rigoroznost ne postoji u softveru — kaže da postoji tamo gdje treba, i to precizno gdje gravitacija i ljudski životi to zahtijevaju. Avionika, na primjer. Kod koji leti u zrakoplovu koristi formalne metode, dokazane specifikacije, code review (postupak u kojem drugi programer pregleda i propituje svaku promjenu prije nego što uđe u kod) koji bi natjerao i najparanoičnijeg inženjera betona da zaplače od sreće. DO-178C standard, formalna verifikacija, statička analiza koja dokazuje da se određena grana koda NIKAD neće izvršiti pod danim uvjetima — ne 'testirali smo i radilo je', nego matematički dokaz. Postoje ljudi koji pišu kod za avione, medicinske uređaje, nuklearne elektrane, i taj kod se piše s preciznošću koja mostograditeljima ne bi bila strana. Znači — industrija ZNA kako biti rigorozna kad je ulog života. Pitanje nije 'možemo li', pitanje je 'je li vrijedno cijene' za obični CRUD (kratica za Create, Read, Update, Delete — dodaj, pročitaj, promijeni, obriši; to su te četiri dosadne, ali temeljne operacije koje radi devedeset posto aplikacija koje koristiš, uključujući onu za dostavu pizze) za dostavu pizze.

I tu obrana postavlja pitanje koje boli optužbu više od svega: zašto bi se ista rigoroznost tražila i za autopilot i za aplikaciju koja ti samo javi da ti je stigla dostava? Nema apsolutno nikoga na Zemlji tko misli da ta dva komada softvera zaslužuju istu razinu certifikacije. A upravo to optužba prešućuje kad kaže „softver ne odgovara nikome” — odgovara, gdje treba. I ne odgovara, gdje ne treba. To se ne zove nemar. To se zove razumna procjena rizika, ista logika po kojoj se ne traži statički proračun za dječju kućicu na drvetu.

Obrana zaključuje: nazovite to kako hoćete — engineering, craft, zanat, čarolija s tipkovnicom — ali nemojte suditi softveru po pravilima igre koju softver nikad nije igrao. Sudite mu po njegovim vlastitim pravilima, a ta pravila, iskreno rečeno, nisu ni malo lakša. Samo su druga.

Svjedoci: 60 godina pokušaja profesionalizacije
§ 04

Svjedoci: 60 godina pokušaja profesionalizacije

Sud poziva svjedoke. Šezdeset godina njih, redom, i svi imaju istu priču: pokušali su, i nije upalilo. Prvi na redu je kurikulum. Negdje sredinom sedamdesetih sveučilišta počinju nuditi „Software Engineering” kao zaseban smjer, s ambicijom da to postane inženjerski studij poput onih za mostove i turbine — matematika, formalne metode, projektni menadžment, sve pod jednim krovom. Ideja je bila da diplomirani inženjer softvera izađe iz predavaonice s istim tipom znanja kao građevinski inženjer: standardiziranim, provjerljivim, univerzalnim. Trideset godina kasnije stanje je ovakvo: pola ljudi koji danas pišu kod u toj industriji nikad nije upisalo informatiku, nego matematiku, fiziku, glazbenu produkciju — jednom sam čuo i za tipa koji je bio veterinar — i svi oni rade isti posao, na istoj poziciji, za istu plaću. Kurikulum je preživio. Monopol koji je trebao stvoriti nije.

Drugi svjedok: certifikat. IEEE — svjetska strukovna organizacija inženjera, ona vrsta institucije koja izdaje standarde i certifikate za pola tehničkih struka na planetu — lansirala je početkom dvijetisućitih CSDP, Certified Software Development Professional, s punom namjerom da to postane ono što je odvjetnički ispit za pravnike. Platiš, položiš, dobiješ papir, papir ti otvara vrata. Problem je bio banalan — nitko od poslodavaca nije tražio taj papir na intervjuu. Zašto bi, kad je tržište puno developera bez papira koji rade isti posao za istu ili veću plaću? Certifikat bez potražnje je diploma za frizbi. IEEE ga je tiho ukinuo 2019., bez fanfara, kao što se ugase televizijski programi koje nitko ne gleda — jedan mail pretplatnicima i gotovo.

Treći svjedok, najambiciozniji: komora. Licencirani Professional Engineer za softver postoji u par američkih država od 2013., s punim aparatom struke — ispit, staž, obveza kontinuirane edukacije, potpis koji povlači pravnu odgovornost. Iza toga stoji NCEES, američko tijelo koje inače izdaje inženjerske licence za građevinare, strojare i sve one struke gdje pogrešan proračun sruši zgradu — softver je trebao dobiti istu vrstu papira. Koliko je ljudi ikad položilo taj ispit u cijeloj Americi? Pišući ovo, brojka se mjeri u stotinama, ne desecima tisuća. Za usporedbu, u istoj zemlji ima preko milijun aktivnih odvjetnika i skoro milijun liječnika s licencom. NCEES je 2019. ukinuo softverski PE ispit zbog premalog broja kandidata. Umro je od nezainteresiranosti, ne od otkaza.

Pa evo gdje smo. Liječnik koji zabrlja operaciju odgovara Liječničkoj komori i može ostati bez licence do kraja karijere. Odvjetnik koji zabrlja slučaj odgovara Odvjetničkoj komori, isto tako. Softverski inženjer čiji kod ubije ljude — sjetimo se Therac-25, aparata za radioterapiju iz osamdesetih čiji je softverski bug predoziranjem zračenja ubio i teško ozlijedio nekoliko pacijenata — odgovara, u praksi, nikome osim internoj istrazi tvrtke koja ga je zaposlila, a ta istraga rijetko ide dalje od interne mail-liste. Šezdeset godina pokušaja, tri ozbiljna pokušaja institucionalizacije, i sva tri su umrla ne zato što ih je netko ubio nasilno, nego zato što im nitko dovoljno nije trebao da ih održi na životu.

Presuda čitatelju
§ 05

Presuda čitatelju

Dobro. Porota je tu, dokazi su na stolu, a ja skidam togu — jer sam samo pripovjedač, ne sudac. Ali prije nego izađete iz sudnice, evo pitanja koja stvarno morate riješiti sami, jer vam ja neću ponuditi jeftinu presudu.

Pitanje jedno: bi li ti letio avionom čiji je softver pisao netko bez licence, bez odgovornosti, bez ikakvog formalnog dokaza da zna što radi? Pitanje dva: bi li povjerio istom čovjeku svoju medicinsku dozu zračenja? Vjerojatno ne. A onda pitanje tri, ono nezgodno: zašto to onda dopuštaš svaki dan, kad ti banka, semafor i pacemaker rade na kodu koji nitko nije ovjerio nikakvim pečatom, osim internog pregleda koda u petak popodne, tik prije pauze za pizzu?

Pa dobro, kažeš, i što sad? Trebamo li svi polagati državni ispit prije nego napišemo prvi if? Ne nužno. Ali možda minimalna »zakletva struke« ne bi bila loša ideja — ne birokratski papir, nego nekoliko rečenica koje bi svaki od nas trebao moći izgovoriti bez crvenjenja: da neću lagati o tome što kod radi. Da neću puštati u produkciju (žargon za trenutak kad se kod prestane igrati na sigurnom, testnom terenu i počne raditi za stvarne, žive korisnike) ono za što znam da je opasno, samo zato što je deadline u petak. Da ću priznati kad ne znam nešto, umjesto da kopiram s prošlog if-a i zovem se senior. Da ću se sjetiti da negdje na drugom kraju te funkcije postoji čovjek — pacijent, putnik, korisnik — kojem moja lijenost može stvarno nauditi.

Je li „software engineering” izmišljen naziv koji je pretjerao s obećanjima? Da, jasno da je. Znamo to od Garmischa. Pitanje je samo hoćemo li ikad odrasti u njega, ili ćemo mu samo dalje krasti čast bez plaćanja računa. Porota, presuda je vaša. Ja idem po pivu.