Trikovi za boljeg tebe u ovom poslu (1. dio)
Koja je osnovna razlika između dobrog i lošeg programera ?
Ako ste freelancer, ovo pitanje Vam vaš prosječni poslodavac neće sebi postaviti.
Ako se spremate na intervju u neku firmu, unaprijed očekujete da Vas tamo izrešetaju rafalom teških pitanja, i da znaju odgovor na moje pitanje.
Postoji li odgovor na moje pitanje ??
Naravno da postoji. Dobar programer je programer koji razumije svoj kôd, kojemu je jednako lagano (pazi, lagano ne teško, čaša je polu puna) čitati i ispraviti svoj kôd isto kao napisati na novo sve.
Nitko ne želi programera koji će napisati kôd na pola, onda shvatiti da je prethodni dio njesra i krenut isponova. Stvarno, takva osoba samo troši resurse.
Zašto je to tako ? Svaki programer će proglasiti svoju prethodnu verziju kôda rasulom, osim ako nije jedan od onih kakvi se traže. A traže se kao što sam rekao, oni kojima je jednako lagano čitati i ispravljati kao i pisati na novo.
Tvoj kod (slika lijevo :)) je dobar samo ga ne znaš čitati. Nažalost, ne ispunjavaš kriterij. Žao mi je. Ako to kod tebe nije slučaj, ti si taj koji se traži (opet slika lijevo).
Kako god okrenuo, isplati se čitati. Logika je svakog programera da je prethodni kôd loš jer "Ima viška kôda, pogle ti samo ovaj dio.". Taj dio je savršen, ako ćeš odustati zbog toga, promjeni struku.
1. Prati situaciju
Da bi bio dobar programer moraš biti uporan i samouk. Mi na Balkanu ne želimo napredovati, ali nažalost računala i informatika napreduje na dnevnoj bazi. Ako ne pratiš situaciju, ako ne čitaš blog, ako nemaš tisuću RSS feedova ugrađenih u svoj Netvibes, ne prošvrljaš Digg-om, ne čitaš mail redovito, jednostavno.. ako nisi "ukopčan" loše ti se piše.
Ima jedna epizoda Scrubsa u kojoj se priča o tome, da u medicini, da bi bio dobar doktor, jednostavno moraš odlaziti na konferencije, pretplatiti se na razno razne medicinske časopise, i jednostavno biti u toku. To što si naučio na faksu prije 20 godina više nije to što se danas rabi. Jednostavno, to te čini lošim doktorom.
Isti slučaj je i kod programera, koristiti zastarjelu tehnologiju je loše. Budi u toku, piši blog, prati ostale, napreduj i ti :)
2. Poredaj prioritete
Recimo, login je A MUST. "Zaboravljena lozinka" nije toliko.. Poredaj prioritete, poslodavcu "biti će gotovo uskoro" ništa ne znači. Imaš neki deadline, drži ga se. Ako pravilno poredaš prioritete, razdvojiš bitno od nebitnog, vjerojatno ćeš stići na vrijeme.
Bitno je stići na vrijeme, deadline je deadline i nema pomicanja. Uzmi papir i napiši što je bitno. Drži se toga !
Poslodavcu je bitnije da proizvod bude isporučen 1.5.2008. nego da pri listanju galerije ima super lijepi hover efekt na sliku, ali proizvod kasni tri dana.
3. Upornost ?
Ako si poredao prioritete, i znaš da je login važan, da je dodavanja i listanje novosti važno, da su to stvari koje moraju biti savršeno napravljene, onda daj potroši još 4 sata više na usavršavanje istih. Koristi "hallway usability testing", kao što kaže Joel Spolsky.
Što je "hallway usabiliy testing" ?
Joel je to dobro opisao, to je kada tijekom rada na nekom projektu, odjednom nasumce odabranog prolaznika (ako si na poslu, kolegu, ako si doma, ženu, mamu, baku, tetu, brata) povućeš za rukav i daš im da probaju. Oni kao osobe koje nisu razvijale program, moraju biti u mogućnosti ga koristiti sa lakoćom. Daj im da sami dodaju novu sliku u galeriju (primjer), ali ne govori "sad klikni tu.. e sad ovdje ukucaj ovo". Ako taj zadatak sa lakoćom obave, tvoj posao je tu gotov :)
Ali vratimo se na upornost. Login mora savršeno raditi. Dodavanje novosti također. Svaka iznimka mora biti pokrivena. Korisnika ne smije dočekati prazan ekran. Ako se i dogodi pogreška, napiši lijepo korisniku "došlo je do te i te pogreške" ali ne odaj podatke, nema logike reći korisniku "došlo je do pogreške te i te u datoteci toj i toj, kod funkcije te i te koja radi to i to." jer taj korisnik ili ne zna što to znači pa mu to ne pruža neku utjehu, ili točno želi postići bug jer je on zlonamjeran haker kojemu točno ti detalji trebaju.
Hakerima je error glavni prijatelj stoga ga nemoj dozvoliti.
Ispiši korisniku lijepu poruku "Nažalost, došlo je do pogreške pri izvršavanju radnje. Administrator je obavješten o problemu."
Utješi korisnika, reci mu da si obavješten o problemu. Inače, kada radim nešto uvijek imam funkciju koja zapisuje u jednu datoteku sve pogreške koje se događaju pri radu tako da stvarno jesam obavješten o problemu. Ali nastavimo dalje..
Utuci dodatne sate, i stvarno ne ostavljaj bug-ove. Kada uđeš u dućan, kupiš neku tekućinu (to sam odaberi :)), očekuješ dobiti tekućinu, bocu, čep i etiketu. Ako ne dobiš etiketu, svejedno je uredu. Nije. Uvijek ćeš dobiti i etiketu, proizvod se ne može isporučiti bez da je dovršen do kraja. Prema tomu, niti ti ne možeš dati poslodavcu nedovršeni program. Ako si poredao prioritete, i izračunao koliko će ti vremena trebati, u to uračunao i ovaj dio posla, i dalje stižeš :).
Ostaviti bug u kôdu je generalna pogreška. Nema "vratit ću se na to kad završim ostalo". Ako si radio na većem programu, u biti, sve ovisi jedno o drugome. Promijeniš li jedno, morat ćeš i drugo izmjeniti. Ostaviš li bug u kôdu, i kasnije se vratiš na njega, pa i da ga ispraviš potrošiti ćeš puno vremena da prilagodiš i sve ostalo. A vrijeme je novac, a ti imaš deadline.
Ako i to nije dovoljno da te uvjeri da ne ostavljaš bug-ove za kasnije, evo još jednog razloga. Kada se vratiš ispraviti bug, sve izgleda loše. Dolaziš opet u situaciju da proglašavaš svoj kôd rasulom (iako nije), čisto iz razloga koji je gore naveden, a to je da je teže čitati i ispraviti stari kôd nego napisati novi. Nemoj se dovoditi u takvu situaciju, a ako već jesi u njoj:
NIKAKO NEMOJ ISPONOVA IĆI TO RADITI
To bi bila najveća moguća pogreška koju možeš napraviti. Pazi, riječ je o jednom bug-u. Ne isplati se zbog njega sve isponova pisati. Izgubit ćeš vremena, program će se raspasti, popucat će po šavovima, sve ćeš zeznuti. Znam da je teško se natrag "ušaltati" u prethodno napisani kôd, ali ako si se već doveo u tu situaciju budi uporan, fokusiraj se i ispravi bug.
Kako god bilo, nemoj se iznenaditi ako izgubiš cijeli dan na ispravljanje jednog bug-a, ako si se već doveo u tu situaciju, budi i spreman na to.
Mogao bi pisati još o ovome jako puno, i budem pisao. Slobodno očekuj još pokoji nastavak ovog, sada već dugog posta. Čisto stvar preglednosti, odlučio sam rascjepati post na više malih, koje ću kroz budućnost izbacivati u javnost. U postu sam se obraćao na TI čisto iz razloga jer smo svi kolege, jelda ? :)
Lijep pozdrav ljudi, komentare ostavite i očekujte nastavak