IT priče

Programeri su lenštine

programmeratwork

Sa mogućim izuzetkom filosofa, pesnika i srpskih političara, programeri su najlenja grupacija ljudi za koju znam.
Čini mi se da bilo ko iz druge profesije ima neku vrstu manuelno zahtevne, neretko repetativne, profesije.

Ako malo bolje razmislite, biolozi non-stop izvode slične eksperimente/rade iste analize – zasejavanje 100 kultura bakterija nikako ne može biti automatizovano. Doktori moraju da pregledaju silne pacijente, profesori predaju iste lekcije godinama, arhitekti crtaju planove iz različitih perspektiva.

Ako gledamo one jednostavnije profesije, postaje (uslovno) još gore. Frizeri rade istu stvar dan za danom, kasirke prevlače istu robu preko bar-kod skenera na isti način po 10.000 puta u toku dana, a o ljudima po fabrikama da ne pričam.

Kapirate gde idem sa ovim, na svetu ima mnogo, mnogo ljudi koji rade istu stvar dan za danom, sat za satom, godinama za redom; u nekim slučajevima i ceo svoj život.

Programeri – druga priča

U slučaju da radimo istu stvar dva puta – gledamo kako da automatizujemo proces. Ako pišemo isti kod koji radi nešto što nije toliko retko u programima, jurimo biblioteku. Ako počinjemo projekt na isti način, jurimo boilerplate.C++ Code
Mi izbegavamo „ropski rad“ i olakšavamo sebi život. Poznat vic kaže da će programer pre pisati bash skriptu pet dana nego kopirati i pejstovati isti fajl pet puta i završiti posao za 2 minuta.
Životi programera su posvećeni eliminisanju repetativnosti.
Jedan od osnovnih principa programiranja je DRY (Don’t Repeat Yourself) princip, koji u suštini kaže da je bolje pisati zamršenu apstrakciju nego pisati sličan, a u suštini vrlo sličan kod dva puta.

Ovo naravno, vodi do puno problema.

Prosečan program ili inforamcioni sistem je prepun apstrakcija zasnovanih na apstrakcijama, koje opet počivaju na apstrakcijama. Na kraju je gotovo nemoguće razaznati šta taj kod radi iako ste ga sami pisali. Kratko i jednostavno: Nevidljiva slojevitost.

Sa druge strane, lenjost je zvezda vodilja mnogih važnih naučnih i inženjerskih napredaka tokom istorije. Lakše je koristiti točak nego nositi stvari, lakše je biti u čamcu nego plivati. Lakše je baciti bombu jačine par megatona nego stotinu slabijih – pod pretpostavkom da hoćete da sravnite grad sa zemljom…

Možda programeri nisu ti koji su lenji? Možda su svi inženjeri lenji, a samo se potrefilo da su u ovom datom trenutku programeri najočigledniji inženjeri koji najviše rade za bolju i lepšu budućnost. Ipak, u progamerskoj branši napredaka ove ili one vrste ima svaki dan. Svako malo izađe neki novi framework, template, plugin, IDE. Za razliku od drugih naučnih disciplina koje već imaju stabilizovan način rada, ili je kod njih jednostavno potrebno više vremena da bi se adaptirali na nove alate.

Pitanja koja se nameću sama po sebi su: Da li su programeri po prirodi lenji? Da li programiranje privlači pametne, a lenje ljude? Da li je lenjost posledica dobrih programerskih tehnika, ili dobre programerske tehnike nastaju iz lenjosti?

Programeri vs. Arhitekte

Pre nekoliko dana sam baš imao prilike da iz prve ruke vidim kako studentkinja arhitekture završava svoje obaveze vezane za fakultet i uporedim sa sa sobom (ili bilo kojim drugim softverskim inženjerom).
Najveći deo svog života arhitekte provode radeći onaj manuelni rad o kome sam pisao iznad. Kada nije na fakultetu, ona ili sastavlja neki model od drveta i kartona, ili crta neki objekat iz 6-8-10 perspektiva u AutoCadu, ili pravi 3D model – koji se posle importuje u PhotoShop da bi se ulepšao.

THE Model

Ona nema jedan takav projekt ili domaći po semestru. Neretko je potrebno više modela za samo jedan predmet, a dosta predmeta zahteva konkretan rad.
Po mojoj slobodnoj proceni, mislim da više radi na modelima i za kompjuterom nego što provodi vremena na fakultetu. A da stvar bude gora, to što postaje bolja u izradi ne znači da će pre završiti sa poslom. Eventualno nauči jos 10-15 novih prečica na tastaturi ili pravi manje grešaka pri crtanju.

Totalna suprotnost meni (i drugim softverskim inženjerima). Kada nisam na fakultetu, mogu da radim do mile volje na svojim ličnim (i ponekad honorarnim) projektima. Bilo zbog toga što jednostavno mogu, bilo zbog toga jer imam vremena. Kada izađe domaći zadatak, uglavnom može da se završi za nekoliko sati (u najgorem slučaju za jedan ceo dan). Čak i za one najluđe, najteže projekte ne treba više od nedelju dana koncentrisanog rada (2 nedelje ako je OS1 u pitanju).

Vičnost u rogramiranju ne znači kucati brže. Vičnost je smišljanje rešenja koja su lakša za implementaciju, koristeći alate koji rade pola posla koji bi ja trebalo da radim. Sa druge strane, implementacija je nebitna jer svaki programer može da implementira ono što se od njega zahteva na neki način. Ako imam vremena ,iskodiraću. Ako imam više vremena taj kod će biti i lep, i modularan, i moći će da se koristi za nešto drugo.
U suštini, ako se implementacija odradi brzo, većina posla ode na ulepšavanje koda. No, to nije bitno za samu svrhu koda, to se radi jer se može, a i zbog toga što ima vremena.
Kada se gleda sa strane, čini se da programeri od dosade ulepšavaju kod.  Kad im to ulepšavanje dosadi, naprave alat koji će napraviti implementaciju lepom od starta.

Ciklus se ponavjla, pa će sledeći programer koristiti taj novi alat da implementira nešto još brže, izglačati to do „mirror shine“ efekta, pa će napraviti novi, bolji, alat.

Težak rad? LOL, nikako!

Lenjost BREDa se vratim na prvobitnu misao: Koliko rad zaista ima udela u produktivnosti programera?
Dugotrajan rad može imati negativan efekat na produktivnost programera. Takav rad negira optimizacije iza poznate rečenice: „Eeee, ovo može brzinski (mesarski), trebaće mi 10 minuta“ (Naravno, treba minimum pola sata). I kada nešto slično naleti kasnije, opet se radi mesarski – što dovodi do toga da je potrebno mnogo vremena za optimizaciju.
Dugotrajan rad zaglupljuje programere! Kad smo umorni, loše debagujemo i donosimo loše odluke. Čak i donošenje puno odluka vodi do loših odluka (Decision Fatigue).
Na kraju se sve svodi na to da se koriste sve dostupne apstrakcije, biblioteke, pluginovi. Neka neko drugi donosi skoro sve odluke, da bih ja mogao da se fokusiram na one najkritičnije.

Ja i dalje ne mogu da odlučim – Da li lenje ljude privlači programiranje, ili programiranje čini ljude lenjima.

Addendum #1: Mene je programiranje olenjilo, majke mi! :D

Leave a Comment

11 Comments

  • Jako dobro pitanje, ali ako pogledaš na to malo drugačije koliko treba da savladaš logiku programiranja, čime podrazumevam i implementaciju gotovih džidža midža, a koliko da naučiš raditi ko kasirka.
    A opet normalno mi djeluje, da primeniš nešto što je neko već rešio. Zamisli na što bi ličilo da sve moraš sam kodirati O.o … još uvijek bismo bili na mašinskom jeziku…

    • Salim se, procitao sam, nisam bio lenj :)
      Bitna stvar kod programiranja je razdvojiti projektovanje softvera/algotirma od samog implementiranja/kodiranja. Isto kao sto se razlikuju principi razvoja softvera u visim programskim jezicima, gde se samo sklapaju kockice i gotove stvari iz fejmvorka, sa nizim programskim jezicima, gde se paznja obraca na svaku sitnicu, na efikasnost.
      Vecina ovoga sto si gore napisao, podseca me na moje tumacenje programiranja u visim programskim jezicima. To nije ono pravo programiranje gde je bitno logicko misljenje i poznavanje matematike i arhitekture racunara. To nije ono programiranje koje volim(o). To je ono ‘glupo’ koriscenje gotovih resenja. Ali u vremenu u kome zivimo (i radimo) bitno je da se proizvod sto brze i lakse napravi jer od toga direktno zavisi i cena istog. Zato za novac radimo ono sto se placa, a ih zobija sopstvene projekte koje volimo. Jer nismo lenji, vec nas ono prvo umrtvljuje!

  • Imaj u vidu da su i kasirke nekada morale da kucaju cene / kodove proizvoda, a da ih danas samo prevlace preko bar kod citaca :) – sto ne samo da olaksavao proces naplate, vec i mnoge druge (npr. knjigovodstvente poslove). Mogli bi se reci da kasirke sada koriste unapredjeni interfejs kasa (iako ga nisu same napisale / implementirale)

  • kad se radi u nekom iole većem sistemu, i npr. imaš sličan kod na 10 različitih mesta (antiDRY) i imaš zahtev za izmenom, mislim da je savršeno jasno koji je pristup bolji, ali ajde

  • A ja sam bila sigurna da je lenjost najveći neprijatelj programerima…Hm,interesantnu perspektivu na buduci fax mi pruzaju tvoji postovi,ETFovče :)))