Mnogi programeri na početku karijere ne vole programiranje. Moram da primetim i da istaknem razliku između - “napisao sam nešto što radi (da dobijem platu na kraju meseca)” i “napisao sam dobar kod”. I ne samo na početku karijere, to ljude ume da prati i mnogo duže. Tu počinjem od sebe. Zamislite majstora koji pravi satove, i kada mu neko kaže da napravi još jedan sat, on se isfrustrira. Kada mu neko kaže da hoće baš ovakav ili baš onakav sat, on nađe izgovor zašto takvi kaiševi ili takve skazaljke nisu višu u modi. To su programeri ukratko.
Počeci su uvek skromni. Ne znam kako je sad, ali kad sam ja upadao u programiranje počinjalo se od objektno orijentisane paradigme. Uzmeš recimo javu ili c# ili neki takav jezik pa napraviš klasu. Kaže klasa “automobil”, ima broj točkova (4), ima indikator da li motor radi (upaljen / nije upaljen) i možda broj litara goriva u rezervoaru (50). Ima ime, model šta god. I ti sad kao imaš klasu pa dodaš metodu “upali motor”. Pa proveriš na instanci da li je taj “prop” motor upaljen, da li je on sad “true” nakon invokacije metoda. Evo dok sam vam ovo ispričao, sabio sam samog sebe od dosade. Mladi entuzijasta ovo sve napiše, pogleda telefon, pogleda ponovo ekran, pa telefon… pogleda kroz prozor i počne da mašta o 1000 evra početnoj plati, za par godina 2000. Lepo, lepo.
Programiranje nam omogućava da u određenoj meri podvedemo stvarni svet pod apstrakcije. Međutim, to nije ništa novo ili specifično za programiranje. Ja kada kažem “auto” ja već apstrahujem jedan složeni sistem (o kome majke mi ne znam skoro ništa) u pojam “auto” koji mi nudi svoje metode: voziMe, stani, platiBogaOcaDaProđeRegistraciju…
Ono što mi niko nije rekao kada sam počinjao, pored toga da postoji i proceduralno programiranje i da niko ne piše čisto objektno orijentisano, jeste to da je programiranje poput pisanja. Uglavnom programiranje zamišljamo kao hladan, mehanički posao, ali je pisanje dobrog koda zapravo kao pisanje dobrog članka (ne bih znao ništa o tome). Dobro napisano parče koda se čita skoro sa uživanjem. Ima uvod, razradu i zaključak. Ima, shodno upotrebi, logičan sled operacija - jednostavno ima radnju koju možemo da ispratimo bez previše napora. Možemo otići korak dalje i reći da je poput slikanja! Pravimo skicu, dodajemo slojeve, detalje, senčimo, izvlačimo svetle tačke - sve sa namerom da stvorimo nešto estetski lepo (dobro ajde, moderno slikanje nije nužno estetično, ali to je tema za neki drugi članak i neki drugi portal).
Bilo kako bilo, ovaj estetski momenat govori o prirodi koda. Kada pravimo nešto “estetski ugodno”, znači da usvrhovljujemo proizvod svog rada. Šta je svrha estetskog proizvoda? Pa da ta estetika probudi (pozitivne) emocije kod nekoga ko taj proizvod “koristi”. Ono što hoću da kažem je da mi pišemo “lepo”, da bi NEKOME bilo “lepo”, a taj neko su kolege programeri (ili mi sami nakon određenog vremena). Dakle, taj mehanički proces kuckanja varijabli i funkcija i pakovanja logike u klase zapravo ima neku vrstu “plemenite srži” uperene u čoveka - u nekog našeg stvarnog ili fiktivnog saborca koji zajedno sa nama prevodi neki kompleksni koncept iz stvarnog sveta u apstrakcije sa kojima možemo da baratamo u vidu neke usluge/servisa/prikaza. Znači taj bledi naočarko, koji sedi za kompjuterom u podrumu zapravo ima svoju “meku stranu”, svoj poseban “osećaj za lepo” i svoj (skoro pa) plemeniti cilj da ugodi svom kolegi (krajnjem korisniku izvornog koda)! Mislim da smo na ivici toga da priznamo da su i programeri ljudi, mada moje višegodišnje iskustvo u branši govori u prilog suprotnom.
Pisanje koda jeste precizan zanat. Pisanje koda ima svoju metriku, od broja karaktera u jednoj liniji, do broja linija po fajlu, preko kognitivne kompleksnosti ili pokrivenosti testovima. Možemo mnogo brojki izvući pokušavajući da opišemo jednu aplikaciju, ali, NAKON što se upoznamo sa ovom metrikom i umemo da se izrazimo i objasnimo mlađim kolegama TAČNO ZAŠTO su nemači pojma i zašto treba da odustanu od programiranja - tek nakon tih tehnikalija ulazimo u prostor koji je mene osvojio u programiranju. Estetski kvalitet koda. Postoji sloj ispod zanatskog umeća. Postoji neka inherentna lepota u uredno uvučenom kodu, u tom dodatnom praznom redu između nekoliko varijabli koje su vezane za funkcionalnost A i sledećih nekoliko varijabli koje su vezane za funkcionalnost B. Da se vratim na analogiju sa pisanjem - dobro napisan kod želite da potpišete. Jednostavno - pre nego što “komitujete” dobar kod, ukoliko je on stvarno dobar, eksplicitno želite da neko pogleda “git blejm” i da iskoči vaše ime pored parčeta čitkog i efektivnog koda.
Šta želim da kažem je, da stvaranje tako estetičnog koda mora da proizvede neku vrstu satisfakcije kod onoga koji taj kod čuka. Zatim se ta satisfakcija prenosi na onog ko dobije zadatak, proceni ga na 6 sati i shvati da je postojeći kod toliko jasan i uredan, da je za promenu potrebno maksimalno 3 sata.
Idemo korak dalje - zamislite aplikaciju koju napiše tim ljudi gde svi imaju ovaj odnos prema pisanju. A zamislite aplikaciju gde jedva 50% ljudi ima taj odnos prema pisanju. Zatim, sigurno ste sreli pisanije bivšeg kolege koji je pisao svoj zadatak na otkaznom roku. Iako u svim ovim scenarijima aplikacija manje-više radi, ružan kod je teško i skupo održavati i ružan kod ne okuplja oko sebe “dobar” tim programera. Ružan kod čini “dobre” programere mrzovoljnim i tera ih da ga nadograđuju sa još ružnog koda. Pisanje ružnog koda čini da “dobri” programeri prestanu da vole programiranje. Ružan kod čini da svaki zadatak postane mučna obaveza. Okružen ružnim kodom, programer mora da ima jako snažnu volju i motivaciju da ogradi porciju od par kvadrata testnom ogradicom, pokupi smeće i zasadi skromne početke nekog LEPOG prolećnog vrta.
Možda nisam u pravu, ali moja neka teorija je da je aplikacioni kod onoliko lep koliko je voljen. Aplikacioni kod održavan od strane čoveka koji kodiranje voli nikad nije zapušten. Čovek koji voli da programira nema problem da programira još sat ili dva (U OKVIRU RADNOG VREMENA MOLIĆU LEPO), da bi dodatnih par redova pojasnilo kod. Ili, što je često slučaj, dodatnih sat ili dva će gotovom rešenju čak i skinuti nekoliko linija koda što održavanje i čitanje čini lakšim.
Želeo bih da završim sa jednim sloganom za neku od onih majici za roštiljanje. One XXL majice koje vise na vama, koje se dobiju besplatno, pa posle završe kao krpe u garaži kad započne dezintegracija materijala. Volite svoj kod i on će voleti vas.
1 komentar