Legat Dobrih Inženjera

Ponavljam se, već je dosadno: softverski razvoj je zanat. Softversko inženjerstvo je primena znanja u svrhu korisnosti. Znanje je produkt bavljenja naukom. Ako je sve kako treba, softversko inženjerstvo fino balansira između nauke i primene.

Šta kada je ova ravnoteža narušena?

Dobrodošli u svakodnevicu. Ravnoteža odavno ne postoji: prevagnula je upotrebljivost, fiksacija na prečice i, ne možemo to zanemariti, profit. Derivati nauke gotovo da nemaju svoje mesto u softverskom razvoju - govorim o razvoju generalnog tipa, a ne specifičnim sistemima, kao što je mašinsko učenje.

Ništa novo. Ipak, tu je i zaplet. Neočekivano je da deo ovog nasleđa (ne bih nikako da upotrebim tako tešku, osuđujuću reč kao što je “krivica”) ostaje iza dobrih softverskih inženjera. Ne mislim na tehno-fluensere i uber-programarčine, već na one baš dobre softverke inženjere, koji znaju i umeju i komuniciraju.

Štos je u tome da je dobar inženjer vešt: kakav god mu alat daš, on će umeti da uradi nešto s njim. Pronaći će obrasce, naučiti sve šta može, napredovati, unaprediti… i učiniti sve da rezultat postane upotrebljiv. Zašto je to onda problem? Jer ne ostavlja mesta za kritičko sagledavanje tehnologije koja se koristi. Ne treba nam bolji dokaz od ovoga: i dalje postoje glasni programski jezici kao što su Java, Pajton, Javaskript…, gomilaju se biblioteke, prakse, pravila, zaobilaznice, prečice. Svaki od pomenutih programskih jezika je smišljen da bude “jednostavan” za korišćenje, a ne precizan i tačan. U isto vreme, naučnici se ne bave izmišljanjem programskih jezika, već otkrivanjem istih. Zašto je programski jezik uopšte toliko važan? Jer alati koje koristimo utiču na navike razmišljanja, a time i na sposobnost razmišljanja.

Težina vrline dobrih inženjera je u nemogućnosti sagledavanja čega ima van rupe koju sami dublje kopaju daljim usavršavanjem. Ne mislim pežorativno; reč je samo o literarnoj aluziji. Ne možemo sami da sagledamo sve. Zato je važno da imamo pristup drugačijem iskustvu, znanjima, veštinama; koje će nas izazvati da se zapitamo: “zašto ovo radimo ovako?” I, konačno, da imamo nekoga ko će umeti da odgovori na pitanje: softverskom inženjerstvu nedostaje naučni pristup i proces.

Nije sve izgubljeno; ima toga šta možemo činiti. A to je ono šta piše ispod svakog mog teksta: da je najvažnije da se razumemo, a ne da se slažemo. Slaganje oko nečega je možda najmanje važno svojstvo; isključivo je posledica razumevanja. Slaganje je pasivno, odlučeno, inertno. Razumevanje je aktivno preispitivanje stavova, koje je dozvoljeno da menjamo.

Pogodi se da često pomenem Dijkstru; ovo je tema u kojoj ga ne možemo zaobići. Sanjao je o naučnoj revoluciji u kojoj bi programiranje dobilo status matematičke discipline, a “nesposobne horde” koje trenutno kvare stvari bi bile počišćene i zamenjene “elitnim korpusom” naučnika upućenih u nove i formalnije metode softverskog razvoja. Poznat po britkim, direktnim kritikama, naklonosti prema polemici i preziru prema “status quo”, Dijkstra je sledeće tvrdnje smatrao nepobitnim:

  1. dobro programiranje verovatno nadilazi intelektualne sposobnosti današnjeg ‘prosečnog programera’;
  2. obaviti posao dovoljno dobro s današnjom vojskom praktičara, od kojih su mnogi namamljeni u profesiju koja daleko nadilazi njihove intelektualne sposobnosti, nerešiv je problem;
  3. naša jedina nada je da ćemo, otkrivajući intelektualne sadržaje programiranja, učiniti ga privlačnim tipu učenika kakvo zaslužuje, kako bi sledeća generacija bolje kvalifikovanih programera mogla postupno zameniti sadašnju.

Arogantno? Možda. Svakako nam je potreban još jedan glas u sazvučju biznisa i inženjerstva. Tek tada možemo da se nadamo kakvom progresu.

🧧
Nisam definisan svojim stavovima. Stavove usvajamo, menjamo, nadograđujemo, ali oni ne čine nas same. Manje je važno da li se slažemo,
koliko da se razumemo.
> ČASTI KAFU <