teisipäev, 20. aprill 2010

Huvitavaid asjaolusid aju tööst ja produktiivsusest

Ma olen mõned korrad siin juba kirjutanud kellaaegadest.

Minu elus on ilmselt sadu juhtumeid, kus ma saan õhtul sisse tohutu töötempo, kuna mul on väga hästi paika loksunud, mida teha. Istun õhtul maha, mul on ülesanne silme ees ja hakkan lihtsalt täie hooga kirjutama - tihtipeale lõpetan hommikul kell kaheksa, asi töötab ja "hommikul" on natuke viimistlemist ja lihvimist, siis on tulemus käes.

Paljudel juhtudel on ka teisiti - õhtul tekib koodi mingi viga, miski ei lähe käima ja asi ei tööta. Vanasti, olles algajam, otsisin sellisel juhul tihtipeale viga, kulutades selleks kaks, kolm, neli tundi - üldjuhul täiesti tulemusetult. Nende tundide jooksul kadus (loomulikult) igasugune produktiivsus ja kui leidsingi vea, olin juba nii väsinud, et enam polnud võimalik midagi teha - sellisel juhul on veel üleval püsimine juba mõttetu aja raiskamine, kahe-kolme päeva lõikes väga suur produktiivsuse kadu. Hommikuvärskuses ei ole küll kunagi sellist produktiivsust - on rahulikum rütm, rohkem mõtteid ja loovam lähenemine, ent mitte produktiivsust asjas, kus mõttetöö on juba tehtud. Hommikune töö on köögis kohvitassiga, kui aju töötab selgelt, aga kirja pole mõtet midagi panna - iga asi ju sõltub igast muust asjast, koodi ei kirjutata rida-realt, vaid korraga peale kontseptsiooni välja arenemist, kirjutamise ajal mõeldakse detailidele, ent tervik peab enne (vägagi detailselt, igakülgselt läbi kaalutult) juba silme ees olema. Hommikune töö võib käia ka hoopis muude asjadega tegeldes, jalutades ja nõusid pestes. Ajad arenevad ja kuna mul on väga hea pimedalt koodi kirjutamise võime, mis kogemuse kasvades järjest paraneb, siis olen leidnud teise tehnika, kui sellise mõttetu õhtuse kvaliteedi pärast muretsemise. Nimelt - kui kood ei tööta, siis ei tööta. Kirjutan lihtsalt edasi ja ei proovigi käima panna. Ühtu on lihtsalt sedavõrd hea aeg justnimelt suure hulga koodiridade produtseerimiseks - julgelt võib öelda, et kakskümmend korda hommikust parem, sest hommikul kirjutab kuue tunniga heal juhul 0-50 rida töötavat koodi, õhtul aga sama ajaga 200-500 rida, 500 küll erilises hoos juba -, et seda aega ei tasu raisata vigade otsimisele. Ühe vea leidmiseks pruugi õhtul üldse värskust piisatagi - küll aga leiab selle hommikul viie minutiga. Seega on hommik tihtipeale, kui see on viis minutit nelja tunni suhtes, oma 20-40 korda produktiivsem aeg vigade leidmiseks. Seega ongi tekkinud mul komme kirjutada õhtul palju vigast koodi - tegelikult küll kaks kolmandikku ajast suht töötavat - ja parandada vigu ning muretseda kvaliteedi pärast alles hommikul. On muidugi palju vigu, nagu näpukad, kus ei tule otsida sõltuvustest ja tervikust, vaid konkreetsest kohast, mida leiab just õhtul - vahel lahendan õhtul just produktiivselt korraga sadu tüüpvigu, aga siis juba kindla tehnikaga, kuidas seda teha. Vead, mis nõuavad loovat lähenemist, jäävad hommikule.

Teine huvitav aspekt - tihtipeale kirjutan palju koodi, mis pealtnäha töötab, aga kus on mõni väike ja võib-olla üsna raskesti leitav viga. Teen töö ära, commitin ja lähen jalutama. Või tegelen lihtsalt muude asjadega. Lõõgastun ära, mõtlen juba täiesti muule ning siis tuleb poes, bussis või suvalisel hetkel pähe, et tegelikult oleks tulnud real 243 kirjutada 21 asemel 22, sest kasutasin selle jada jaoks ju ühepõhist, aga mitte nullipõhist indekseerimist. Või tuleb pähe mõni märksa rohkem taustauuringut nõudev viga, so. selline, kus mitmetest asjadest tuleb kokku, et mingi nüanss oleks tulnud teisiti teha, et asi mingis olukorras suvaliselt kokku ei jookseks või vale tulemust ei annaks. See jääb siis meelde ja kui jälle arvuti taha jõuan, võtan selle rea ette, parandan kiirelt ära ja commitin uuesti.

Teiseks on veel üks naljakas asjaolu ilmnenud, mis kehtib 99% juhtudest - ma ei tea kindlalt, kas mu koodis on vigu ja kus need võiks olla, kuni neid veel on. Aga siiski ma tean üsna kindlalt, et seal võib vigu olla. So. selliseid, mis võiksid midagi reaalselt häirida. Kui viimane viga on parandatud, siis tean ma üsna kindlalt, et selles koodis enam vigu ei ole. Lihtsalt tean. Ja see on sedavõrd konsistentselt ilmnenud, et selline nähtus eksisteerib, et olen hakanud sellele juba üsna rahulikult toetuma - kui on teatud kindel tunne koodi suhtes, mida ma tean, siis ma sellest konkreetsest koodiosast vigade otsimisega enam ei tegele, vaid panen selle kinni. Lihtsalt mingi kahtlus kaob ära või udune aimdus või tunne, et see ei ole veel päris lõplik. Ja vead ise võivad olla täiesti sellised, et need tulevad välja kuidagi juhuslikult või testimise käigus vms. - need ei ole üldiselt mingid konkreetsed vead, mille iseloomu ma vähegi kirjeldada võiks, vaid ainult see udune aimdus, et kood ei ole veel päris lõpuni viimistletud. Ja mulle teeb iga kord lausa nalja, kui see asi jälle kinnitust leiab, et selline sisetunne on "targem, kui mina".

Kirjutasin selle selleks, et inimesed mõtleks oma töökorralduse peale ;) Kuigi ma tan, et isegi paljud ülemused arvavad, et programmeerimine on miski töö, mida tehakse rida-realt arvuti taga passides ja parim oleks, kui kindlatel kellaaegadel - kunagi olin päris närvis, et sellised üldse IT sektorisse midagi juhtima satuvad, aga ajaga suht neutraalseks muutunud selle suhtes, lihtsalt ise ei taha selliste alluvuses töötada. Ega neid ju õpetada ka ei saa - ei saa ju kogemusi, annet ja head metoodikatundmist inimesele lihtsalt pähe panna kuidagi.

Kommentaare ei ole:

Postita kommentaar