Principiul după care mă ghidez la muncă

Despre nevoia de munci după un principiu fundamental am aflat într-o prezentare făcută de Bret Vitor. Principiul după care se ghidează acesta spune că între creator și creație trebuie să fie o conexiune imediată: “when you make a change you need to see that change immediatly, without delay”.

Principiul după care mă ghidez eu e asemănator, dacă nu chiar identic, însă nu se referă doar la creație, ci la un spectru mai larg din munca mea.

Odată ce am o imagine clară despre scopul companiei în care lucrez, rolul meu e să identific și să îndepărtez orice barieră din calea acelui scop.

Cred cu certitudine că nimic n-ar trebui să intervină între tine și activitatea care contează cu adevărat. Și atunci trebuie să îndepărtez orice obstacol. Ăsta e principiul meu: “clear any barriers for important work”.

Acest principiu poate suna abstract așa că am să dau câteva exemple care să clarifice lucrurile.

Automatizez orice muncă repetitivă

Lucrurile pe care le faci în mod repetat nu sunt deloc “real work”, ci doar niște pași pe care trebuie să-i urmezi ca să ajungi la activitatea care contează cu adevărat. Rolul meu e să găsesc acele activități și să încerc să le automatizez.

Aveam la un job vreo 15 tabele care trebuiau șterse de fiecare dată când QA-ul testa un anumit feature. Timp de un an nimeni nu s-a gândit să scrie un script de 5 rânduri ca să automatizeze chestia aia. L-am scris eu în două minute. Nu e un câștig enorm, însă la cât de des testau chestia aia, după vreo două luni au fost pe profit în materie de timp. Și în loc să facă chestii repetitive s-au putut concentra pe ce contează cu adevărat: real work.

Poate că cea mai profitabilă chestie a fost un alt script care scria migrații automat în funcție de niște parametrii. Acolo am văzut cum o muncă a unui programator de două ore a devenit două minute.

Cât mai puțin efort din partea utilizatorului

Când fac o librărie nu mă mai gândesc la ce face, ci la cum e folosită. Cred că de aceea TDD-ul produce un cod flexibil, pentru că atunci când un programator face TDD, acesta scrie codul din perspectiva utilizatorului și nu din cea a dezvoltatorului.

Însă nu trebuie să fac TDD ca să-mi urmez principiul. E suficient să mă pun în papucii colegului care va lucra cu librăria mea. Și îl înțeleg ce vrea să facă: vrea să facă cât mai puțin efort, ca mai apoi să se concentreze pe munca adevărată. De aceea caut cu orice prilej să produc o librărie care să necesite cât mai puțin efort din partea celui care o va folosi.

Aici trebuie să subliniez că cine va folosi acest principiu trebuie să fie umil și să nu aibă așteptări. Cu cât faci o treabă mai bună atunci când scrii o librărie, cu atât mai puțini vor fi deranjați de ea. Și puțini observă lucrurile care nu-i deranjează, însă toți se plâng de codul care-i “jenează”. Git blame, annotate îți spune ceva? :)

Cât mai puțin efort din partea celor ce îmi citesc codul

Când scriu o bucată de cod, vreau să încerc să îndepărtez orice sarcină cognitivă a programatorului care o să-mi citească codul. De exemplu, detest if statement-urile. Cu fiecare if pe care-l citești, ocupi un anumit spațiu din memoria ta. Când trebuie să ții cont de prea multe if-uri, o iei razna și de multe ori trebuie s-o iei de la capăt ca să fii sigur că ai înțeles tot. Un fel de “allowed memory size exhausted” personal :)

Detest if-urile atât de mult, încât cred că dacă un programator se va concentra să scrie un program cu cât mai puține if-uri, va deveni un programator mai bun.

În acest gist am adăugat două exemple simple. Atunci când lucrăm cu date, în loc să ne gândim la un flow imperativ, ar trebui să ne gândim mai mult la structuri de date. Linus Torvalds spunea “good programmers worry about data structures and their relationships.

O structură care îți spune ceva e mult mai eficientă decât o logică cu multe if-uri.

Veți spune probabil că al doilea exemplu ar fi mai simplu cu if. În acel exemplu simplist da, însă când ai logică mai complexă ca aici, vei fi mai câștigat.

Polimorfismul ne ajută enorm, sau alte structuri simple precum un stack sau queue. Nu o să intru în detalii, însă o prezentare foarte bună pe această temă găsiți aici.

Nu sunt un obstacol când comunicăm în echipă

Felul în care mă comport se subordonează aceluiași principiu. Iar dacă vreau să îndepărtez obstacole, mă asigur să nu fiu eu însumi un obstacol.

La meeting-uri aleg să tac atunci când ceea ce aș spune nu contribuie cu nimic la tema întâlnirii. Atunci când se pune o întrebare, mă gândesc bine dacă din toată încăperea eu sunt cel potrivit ca să răspund la ea. Poate că acest lucru te va face mai puțin vizibil, dar felul ăsta de a fi nu te va ajuta să fii mai vizibil, ci să faci ceea ce e cu adevărat important.

Veți crede că dacă vorbiți mai puțin, ideile voastre nu vor fi luate în considerare. Nu e adevărat. Recent am avut un meeting în care soluția mea a fost acceptată, deși la început toți programatorii au vrut să facă altceva. Am preferat să tac și să-i ascult. La sfârșit CTO-ul m-a întrebat “Andrei, what do you think?”.  În 2 minute mi-am explicat poziția luând în considerare tot ce au spus colegii mei și în cele din urmă i-am convins.

Dincolo de multă vorbărie, prefer substanța și logica. Și nu poți să ai substanță dacă nu taci și asculți. N-o să fiu niciodată omul care vorbește cel mai mult într-un meeting, dar când voi spune ceva, atunci mă vei asculta pentru că știi că nu vorbesc decât atunci când am ceva util de spus.

Simplific procese complicate cu o documentație solidă

Când am observat că mai mulți programatori aveau o problemă cu o parte din sistem am profitat de această ocazie ca să mai îndepărtez un obstacol. Am documentat acel proces ca să mă asigur că nimeni nu va mai avea probleme cu partea aceea și vor putea face ceea ce e cu adevărat important: să producă valoare.

Dincolo de exemplele de mai sus sunt atâtea modalități de a îndepărta obstacole. Poate fi un refactor al unui feature important, poate fi o îmbunătățire a unui proces care ia prea mult timp(code reviews, workflow etc), sau să știi când să te oprești într-o dezbatere. Trebuie doar să fii atent și să observi obstacolele.

Uneori va dura ceva timp, obstacolele sunt deghizate în sisteme acceptate(“this is how we do things around here”), și poate fi greu să le observi pentru că toată lumea se folosește de ele.

Felul ăsta de a fi implică disciplină, modestie și proactivitate. Dacă vrei să fii cineva poate nu e cel mai potrivit mod de a munci. Dacă vrei să faci ceva, atunci cred că e un principiu bun.

Omul care a influențat extrem de mult armata americană e un tip necunoscut. Pentru că a ales un mod de viață care se opune ideii de a fi vizibil. Am să închei cu vorbele lui spuse unui tânăr:

“Tiger, one day you will come to a fork in the road and you’re going to have to make a decision about which direction you want to go.
If you go that way you can be somebody. You will have to make compromises and you will have to turn your back on your friends. But you will be a member of the club and you will get promoted and you will get good assignments.
Or you can go that way and you can do something — something for your country and for your Air Force and for yourself. If you decide you want to do something, you may not get promoted and you may not get the good assignments and you certainly will not be a favorite of your superiors. But you won’t have to compromise yourself. You will be true to your friends and to yourself. And your work might make a difference.
To be somebody or to do something. In life there is often a roll call. That’s when you will have to make a decision. To be or to do? Which way will you go?”

Code is not literature

But then it hit me. Code is not literature and we are not readers. Rather, interesting pieces of code are specimens and we are naturalists. So instead of trying to pick out a piece of code and reading it and then discussing it like a bunch of Comp Lit. grad students, I think a better model is for one of us to play the role of a 19th century naturalist returning from a trip to some exotic island to present to the local scientific society a discussion of the crazy beetles they found: “Look at the antenna on this monster! They look incredibly ungainly but the male of the species can use these to kill small frogs in whose carcass the females lay their eggs.”

Code is not literature

Nu mă mai interesează

Cine mă cunoaște știe că tot timpul am fost preocupat de politică și situația din România. E o pasiune mai veche de-a mea, de pe vremea când aveam 13 ani și îmi petreceam zilele urmărind la TV tot ce mișca pe scena politică.

De aceea cineva s-ar fi mirat să vadă că n-am mai polemizat pe Facebook despre protestele recente. Iar azi am început să dau unfolllow jurnaliștilor care mă țineau la curent. It’s time to move on.

Întotdeauna am fost visător și lucrul ăsta m-a împiedicat să închei multe relații. Întotdeauna am crezut că e păcat să dai cu piciorul unui viitor ideal pe care-l aveam în minte. Și dintre toate relațiile ratate, poate în cea cu țara mea mi-am pus cele mai multe speranțe.

Azi am ales să nu mă mai intereseze ce mișcă în România. Îmi pasă, dar nu o să-mi mai consum timpul să urmăresc ce se întâmplă. Pe de-o parte, devin tot mai conștient de felul în care vreau să-mi petrec timpul, iar pe de altă parte am înțeles că nu pot face prea mult ca să schimb felul în care România alege să existe.

Nu sunt pesimist, e doar o ignoranță asumată. Cred că România poate deveni o țară foarte mișto, dar asta depinde doar de milioanele de români care trăiesc în ea și nu de cei de la guvernare sau de imaginația unui tânăr.

În altă ordine de idei, în perioada 15-19 martie o să mă aflu în România în caz că cineva are timp de o cafea :)

Fiecare zi e un nou început

Am norocul să lucrez într-un loc în care simt că e nevoie de un om ca mine și că am libertatea de a face o contribuție. Mă mai uit în urmă și realizez că am acumulat o experiență decentă atât la nivel tehnic cât și la relații interpersonale.

În condițiile astea e foarte ușor să pic în capcana de a crede că nu mai sunt la început. Vrem să fie bine, iar atunci când lucrurile sunt bune ar trebui să fim împliniți. “Everything will be okay in the end. If it’s not okay, it’s not the end”. Ce te faci însă când totul e OK? Is this the end?

Ca oameni avem tendința de a folosi un model spațial(început-sfârșit) când vine vorba de experiențe. Problema e că experiențele nu funcționează așa. O experiență se termină când încetezi să o mai faci, dar atâta timp cât o faci, nu te poți afla niciodată la mijloc, de exemplu.

Fiecare zi e un nou început. Nu lăsa modul eronat al minții de a percepe lucruri să fie o scuză ca să nu devii mai bun.

Urmează 2 luni grele


Până să mă angajez, am fost tot timpul slăbănog. Așa că niciodată nu mi-am pus problema slăbitului sau dacă ceea ce mănânc are efecte asupra mea. După ce m-am angajat, am trecut la un stil de viață mai sedentar și mai stresant, iar după un an de muncă aveam cu 15 kg mai mult. Nici atunci nu mi-am făcut probleme. 70 de kg era o greutate ok la înălțimea mea. Însă era o greutate înșelătoare pentru că kilogramele s-au dus doar la piept, burtă și într-o gușă enervantă.
[…]

Despre ce ne propunem în viață

Exilat în camera mea de o răceală nenorocită, am profitat de timp să scriu trei idei legate de scopurile pe care ni le propunem în viață. Sunt concluzii la care am ajuns în ultimele săptămâni inspirat atât de lucrurile ce mi s-au întâmplat cât și de cărțile pe care le-am citit.

Nu încerc să dau nimănui lecții despre cum să-și trăiască viața; deși articolul e scris la persoana a 2-a, e de fapt un dialog cu mine însumi. Vouă cititorilor nu vă rămâne decât să aveți răbdarea să citiți și să reflectați dacă ceea ce am scris are sens sau nu.

[…]

Film: La La Land

Ieri, ne-am întâlnit așa că băieții la o bere. Și într-o notă de masculinitate am zis că e musai să vedem un musical romantic. Le-am spus că e un film pe care vreau neapărat să-l văd și ar putea fi interesant, în special partea în care o să merg apoi acasă și n-o să fac sex.
[…]

De ce să nu urmezi sfaturile altora

Facultatea s-a terminat, viața e frumoasă, dar nu durează mult până când “cei dragi”  o să-ți fută avântul. De la o vreme, rudele care vin în vizită nu se mai mulțumesc să fie zgomotoase, trebuie să-ți dea și sfaturi mascate în întrebări:

– Și, când te însori?

[…]

Relationship Accountability

Ghosting, icing, and simmering are manifestations of the decline of empathy in our society — the promoting of one’s selfishness, without regard for the consequences of others. There is a person on the other end of our text messages (or lack thereof), and the ability to communicate virtually doesn’t give us the right to treat others poorly.

sursa: Relationship Accountability

Cărtărescu despre proteste


Înțeleg că e ușor în aceste zile să devenim exaltați pe Facebook despre mișcările din stradă, dar să nu ne pierdem cu firea și să pierdem simțul realității precum Cărtărescu.
[…]