Isti se softver ne piše dvaput

Isti se softver ne piše dvaput

"Težak je život programera", umeo je šaljivo da kaže jedan moj prijatelj. I jeste težak. Naša profesija napreduje veoma brzo. Tehnologije i prakse, koje danas koristimo za razvoj softvera, već sutra postaće naš tehnički dug. Često imamo ambivalentan odnos prema svom poslu: konstantno smo oduševljeni novim, a ogorčeni nasleđem. Nije retkost da poželimo da otvorimo praznu datoteku i počnemo iz početka.

programiranje

“Težak je život programera”, umeo je šaljivo da kaže jedan moj prijatelj. I jeste težak. Naša profesija napreduje veoma brzo. Tehnologije i prakse, koje danas koristimo za razvoj softvera, već sutra postaće naš tehnički dug. Često imamo ambivalentan odnos prema svom poslu: konstantno smo oduševljeni novim, a ogorčeni nasleđem. Nije retkost da poželimo da otvorimo praznu datoteku i počnemo iz početka.

Promena je jedina konstanta

Sigurno ste već čuli izreku da “dobar softver nikada nije završen”. Svako ko je na tržište poslao bar jednu komercijalnu aplikaciju, zna da razvoj softvera nije precizno isplaniran, vremenski ograničen projekat. Mene više podseća na dečiju igru Lego kockama, gde nam se na početku čini da imamo jasnu ideju šta želimo da napravimo, a onda se ciljevi često menjaju. U igru odjednom uleću i neki autići i kartonska kutija, a neretko shvatimo i da nam fale neke kocke. Igra zapravo nikada ne dolazi do nekog logičnog kraja. Uglavnom se završava kad nas prekine mama. Ili žena.

Promene su u prirodi razvoja softvera. Na njega utiče toliko nepoznatih stvari, da je svako dugoročnije planiranje potpuno besmisleno. Pod našom su kontrolom samo vizija i proces. Sve ostalo je reakcija na tržište i korisnike. Programer, koji nakon mnogih godina razvoja nekog softvera želi da ga napiše iz početka, zaboravlja na tu promenljivu prirodu svog posla. On gleda unazad i jasno vidi pogrešne odluke, koje su uzrok za tehnički dug. Međutim, često ne može da razume pod kakvim su okolnostima takve odluke donete i pogrešno pretpostavlja da će ovog puta, poučen iskustvom, moći bolje da planira i izbegne nove greške. Iskustvo jeste važno ali novo vreme donosi nove nepoznate, koje imaju neki novi, nepredvidljiv uticaj na razoj. Najbolje što možemo da uradimo nije da srušimo i počnemo iz početka, već da prilagodimo naš proces, nadajući se da će za par godina nekog novog programera glava boleti manje nego nas.

Loša ideja

Smatram da u praksi ili:

  1. refaktorišemo, popravljamo, odnosno nadgrađujemo postojeći softver ili
  2. pišemo novi, koji treba da prati neku novu viziju i odgovori nekom novom tržištu.

Trećeg nema. Napisati postojeći softver iz početka ima smisla koliko i ponovo napraviti isti avion od Lego kocaka. Ko ima decu, razumeće.

Koliko je ponovno pisanje postojećeg softvera loša ideja, najbolje je opisao Joel Spolsky u svom članku: “Stvari koje nikad ne bi smeli da radite, prvi deo”. U njemu opisuje slučaj kompanije Netscape, na koju je odluka da iz početka napiše svoj web browser imala katastrofalne poslovne posledice. Mlađi čitaoci možda neće znati za Netscape, ali možda je i to jedna od tih posledica. Ako ikada poželite da napišete neki softver iz početka, predlažem da prvo pročitate Joelov članak.

Opasna terminologija

Uprkos svemu, programeri i danas često koriste termin “napisati iz početka”. Sve i da smo vas do sad Joel i moja malenkost ubedili u besmislenost toga, ponekad je i sama terminologija opasna. Ali to bih želeo da vam objasnim na primeru iz sopstvenog iskustva.

Klijent za koga trenutno radim je jedno veselo, nemačko softversko preduzeće. Već 8 godina razvijaju softver, čiji su korisnici uglavnom pravnici, koji cene sigurnost. Prodaja ide dobro, pa je direktor uglavnom zadovoljan. Zadovoljna je i operativa. Zadovoljna je čak i recepcija. Jedini, koji nisu toliko zadovoljni, su programeri. Tokom svih tih godina, u njihovom se softveru nagomilao tehnički dug. Tištio je taj tehnički dug vođu razvoja, pa je s vremena na vreme preklinjao svog šefa, da ga pusti da softver “refaktoriše buldožerom”. Iskusni direktor se nije dao prevariti, pa je zahteve da se počne iz početka dugo odbijao. Sve do prošle godine. Tada je, na veliko veselje svojih programera, dao zeleno svetlo za razvoj nove verzije – iz nule. Šta li se promenilo?

Slušajući programere, dok su mi pričali šta sve žele da urade u novoj verziji, odzvanjala su uglavnom moderna tehnička rešenja: te Angular, te Node, te Redis, te Bootstrap, itd. A onda sam upoznao direktora. Njegova očekivanja nisu bila toliko tehnička. Pričao mi je oduševljeno o tome kako advokati budućnosti žele da rade na telefonima i tabletima. Objašnjavao je kako su se promenili poslovni modeli jer su se i konzervativniji klijenti navikli na SaaS, kako postoje nove prilike na drugim tržištima, gde sigurnost, posebno nakon poslednjih NSA skandala, ima sve veću cenu, itd. Stekao sam utisak da razgovaram s vizionarom, koji zapravo ne želi toliko novu verziju postojećeg softvera, koliko neki nov proizvod, koji će odgovoriti nekim novim izazovima. Motiv je poslovni, a ne tehnički. Izašao sam oduševljen. Zasukali smo rukave i razvoj je počeo.

Nešto, što sam na početku ignorisao, a što mi je tek kasnije upalo u uši, je da ceo tim razvoj nove verzije naziva “pisanje iz početka”. “Pišemo iz početka”, govorili su drugim kolegama. “Gradimo je iz nule”, čuo sam kako neko objašnjava preko telefona. Nekako sam neoprezno i sam prihvatio tu terminologiju ali sam ubrzo počeo da shvatam njen negativan uticaj. Obzirom da mi “pišemo iz početka” postojeći softver, onda ga koristimo kao da je specifikacija za novi. Produktna ekipa je pokušavala da osmisli novi korisnički interfejs, sve vreme gledajući u stari i pretpostavljajući da će korisnici nove verzije biti identični postojećim. Programeri su pokušavali da reše iste tehničke probleme na novi način, ne pitajući se da li te probleme ovog puta uopšte treba rešavati. Postalo mi je jasno da “pisanje iz početka” nije samo bezazlena terminologija, već pristup, koji ima opasan uticaj na naš razvojni proces.

Korisnik pre tehnologije

Kada razvoj softvera počne iz početka, u glavama treba imati viziju, a ne tehnologiju. Motiv treba da bude poslovni, a ne tehnološki. Ako su nam prioriteti poređani tako, da nam je glavni cilj otplatiti tehnički dug, a ne rešiti nove probleme ili napasti novo tržište, da li ćemo dovoljno vremena utrošiti na inovaciju? Bojim se da ne.

“Težak je život programera”, umeo je šaljivo da kaže moj prijatelj. Imao je pravo. Ali život prvo moramo da olakšamo korisniku, pa tek onda sebi.

ponuda

Komentari

  1. Petar

    Petar

    13. 12. 2013. u 3:38 pm Odgovori

    Osobno ne volim kada ljudi daju isključive savjete. Uvijek radi ovo, nikad ne radi ono.

    Više volim “možda”, “ovisi”, “ponekad”, ali da, problem je da se to teže “prodaje”.

    Tako da ovo “Isti se softver ne piše dvaput” može biti istina većinu vremena ali nikako uvijek.

    Život je komplicirana stvar i možemo doći u bezbroj situacija, posebno kad se okolnosti često mijenjaju.

    Popravljao sam jako slabi kod, koji je “radio”. Ali više se je isplatilo tu jad i bijedu napisati iznova nego biti pod stalnom brigom kad će puknuti i koliko dana ću potrošiti da nađem gdje je problem. Ali tada je išlo za relativno malu investiciju, tako da sve ovisi.

    Na nekoj burzi su investirali milijune u .NET kod, pa su koliko se sjećam otkrili da im je problem garbage collector, jer im stvara kašnjenje od nekoliko milisekundi. Ali tamo su te ms vrijedne ogromne pare. I bacaj sve u vodu i piši na novo u C-u.

    It depends……

    :))

  2. Poratl za posao

    Poratl za posao

    16. 12. 2013. u 10:41 am Odgovori

    Slažem se s Petrom. Sve je stvar pojedinačne situacije. I ja sam imao slučajeve gdje sam nasljedio kod od prijašnjih programera koji su napravili kupus od programa, a potom dali otkaz. Vidio sam da je krajnje besmisleno to održavati jer se na održavanje gubi jako puno vremena. Zato sam napisao sve iznova. Bio sam sretan i ja i poslovodstvo.

    Štoviše, svaki program, odnosno svaki IS ima svoj životni ciklus. Kada vrijeme (i troškovi) održavanja počinju biti veliki i besmisleni, onda ide “Jovo nanovo”.

Odgovori

Tvoja e-mail adresa neće biti objavljena.

Popularno

Novost

Ni WiFi pojačivači vam ne pomažu? MESHtar pokriva svaki kut stana ili kuće, bez po muke.

Stabilan Wi-Fi je nevjerojatno teško postići, pogotovo ako imate nezgodan tlocrt prostorija ili više kvadrata. Srećom, postoje sustavi koji te probleme mogu zaobići.

Kultura 2.0

Treba li vam teta u Pošti pretvoriti Bitcoin u kune?

Hrvatska Pošta pokrenula je projekt mjenjačnica za kriptovalute u suradnji s tvrtkom Electrocoin i time može postati jedna od najprogresivnijih tvrtki u Hrvatskoj. Pitanje je - hoće li?

Tehnologija

Više od 100 inženjera Instituta RT-RK u Osijeku razvija softver za BMW, Audi i Mercedes

Tvrtka Institut RT-RK Osijek broji više od stotinu zaposlenika, a stalno su u potrazi za novim kadrom do kojeg uspješno dolaze stipendiranjem studenata u Osijeku.

Što ste propustili

Kultura 2.0

Što je za vas Instagram bez (broja) lajkova? Manji pritisak, bolji sadržaj

Instagram pomalo po svijetu povlači zavjesu svoje verzije bez lajkova, a dojmovi su i par mjeseci nakon još podijeljeni. Pa iako influenceri plaču jače – korisnici će biti oni na koje će promjena utjecati najviše.

Kultura 2.0

Jesu li video igre – u svijetu i u Hrvatskoj – umjetnost?

Ako je i limenka umjetnikovog izmeta umjetnost, zašto ne bi umjetnost bile i linije kodova uz prateću računalnu grafiku? Razmatrajući odabrane teorije umjetnosti istražujem mogu li se videoigre smatrati umjetnošću.

Startupi i poslovanje

Od Yahoove milijarde do Automatticovih par milijuna: Tumblr i WordPress pod istim krovom

Tumblr, svojedobno pionir microblogginga, a danas samo blijeda slika stare slave, ipak nalazi svog spasioca u nekada glavnom blogerskom konkurentu.

Internet marketing

Sve više brendova u komunikaciji bira nesavršenost, autentičnost, ljudskost – a vi?

Današnji korisnici u reklamama žele vidjeti “prave” modele, žele inkluzivnost, žele autentičnost. Prolazi li vrijeme savršenosti, dosadašnjeg marketinškog ideala?

Startupi i poslovanje

Imate rješenje za fintech ili banke? Zadnji vam je rok za prijavu na regionalni Elevator Lab Challenge!

Žele li ubrzati svoj razvoj poput švedske Klarne koja je osigurala skoro pola milijarde dolara investicije za svoje 'Buy now, pay later' rješenje, hrvatski fintech startupi mogu se prijaviti na Elevator Lab program do 10. kolovoza.

Internet marketing

Mariju Renić Marić majčinstvo “gurnulo” u potpuno nove blogerske vode (ali ne i na Instagram)

Nakon što je više od desetljeća blogala pod svojim imenom, Marija Renić Marić krajem prošle godine napravila je veliku promjenu - blog je preimenovala u “Maminu čaroliju” i počela pisati isključivo o temama vezanima uz roditeljstvo. Kako i zašto, otkriva u razgovoru.