La fel ca orice profesionist, programatorii se straduiesc sa fie cei mai buni pe care ii pot in domeniul lor. Fie ca studiem algoritmi, invatam noi limbaje de programare sau lucram cu si cream noi biblioteci, a noastra este o cariera care implica invatarea pe tot parcursul vietii. Astazi, insa, vreau sa discut un aspect al codificarii care depaseste cunostintele: cel al performantei.

Array

Cum arata performantele de varf pentru coderi? In unele profesii, este evident: avocatul care castiga un caz extrem de dificil, medicul care efectueaza o interventie chirurgicala cu o acuratete impecabila, sportivul din proverbialul „varf al jocului lor” si asa mai departe. In al nostru, este putin mai dificil de masurat, deoarece codificarea este adesea o cautare solitara – petrecem ore intregi, examinand documentatia, masurand codul nostru in functie de specificatiile de testare si reparand erori dupa erori. Exista, desigur, ideea unui cod optim, care obtine rezultate folosind o cantitate minima de resurse – scrierea unui astfel de cod este cu siguranta o masura buna a unui programator.

Array

Dar cum ajungem intr-o stare mentala care sa ne permita sa codificam asa?

Un raspuns frecvent mentionat este Ballmer Peak, o gluma veche de programare care pretinde ca un programator se afla la inaltimea puterilor lor de codare atunci cand ating un anumit nivel de ebrietate. Acest lucru nu este intotdeauna realizabil, cu toate acestea, din cauza majoritatii companiilor care se incrunta pe betie la locul de munca si a faptului ca, ei bine, este mai degraba o gluma decat o reteta serioasa.

In schimb, raspunsul poate sta intr-un concept extras din psihologie.

Array

In 1990, psihologul Mihaly Csikszentmihalyi (pronuntat aproximativ ca „puiul m-a trimis la mare”) a publicat o carte intitulata Flow: The Psychology of Optimal Experience, in care descria ceea ce el considera „fluxul” starii de spirit. Fluxul, catre Csikszentmihalyi, este o stare de absorbtie completa cu sarcina la indemana – cand cineva este atat de consumat de o activitate incat nimic altceva nu pare sa conteze.

Mai cunoscut in mod colocvial ca fiind „in zona” sau „in canelura”, o stare de curgere este un sentiment de mare implinire, indemanare si angajament.

Intr-un interviu din 1996 cu Wired, Csikszentmihalyi a caracterizat fluxul ca „fiind complet implicat intr-o actiune de dragul sau. Eul cade. Timpul zboara. Fiecare actiune, miscare si gandire urmeaza inevitabil din cea anterioara, ca si cum ar juca jazz. Este implicata intreaga ta fiinta si iti folosesti abilitatile la maximum ”.

Am intalnit mai intai acest concept ca parte a orelor mele de psihologie educationala de la Colegiul Profesorilor, unde am discutat-o ​​in contextul modului de a-i ghida pe elevi intr-o astfel de stare de spirit pentru a asigura un mediu de invatare optim. Dupa ce am devenit coder, mi-am dat seama ca starea fluxului ar putea fi aplicata si programarii – la fel cum este posibil sa-i aducem pe elevi in starea mentala perfecta pentru a invata, asa ca ne-am putea duce si noi in mentalitatea perfecta pentru a codifica.

Deci, cum putem realiza starea fluxului si programarea potentiala Nirvana? Csikszentmihalyi a subliniat trei criterii cheie care trebuie indeplinite pentru a avea loc fluxul. In primul rand, trebuie sa fii implicat intr-o activitate cu un set clar de obiective si progrese. Uneori, acest lucru poate fi dificil atunci cand programam singuri – daca jucam doar fara scop, fluxul nu poate avea loc. Acesta este motivul pentru care exista structuri precum dezvoltarea bazata pe test si paradigma „skateboard-to-racecar”; ele ne permit sa ne impartim sarcinile intr-o serie de obiective realizabile pe care ne putem concentra.

In al doilea rand, fluxul necesita ca sarcina la indemana sa aiba feedback clar si imediat. Din fericire, feedback-ul este abundent in lumea programarii – desi mesajele de eroare nu pot fi intotdeauna binevenite, ele ne ofera totusi informatii importante care ne permit sa ne ajustam abordarea si performanta.

In cele din urma, pentru a obtine o stare de flux, o persoana are un echilibru bun intre abilitatile percepute si dificultatea perceputa a activitatii. Cu alte cuvinte, avem nevoie de incredere in capacitatea noastra de a finaliza sarcina la indemana. Daca ceva depaseste capacitatea unei persoane, produce anxietate si indoiala de sine, in timp ce, pe de alta parte, o sarcina care este prea mult sub nivelul de calificare al cuiva induce plictiseala si apatia. Csikszentmihalyi a trasat relatia dintre indemanare si dificultate astfel:

In mod ideal, vrem sa ajungem in zonele din dreapta sus ale graficului – aici traieste performanta optima ca programatori. Uneori este greu sa ajungi acolo, insa conditiile noastre de munca s-ar putea sa nu permita acest lucru. Uneori obiectivele slujbei noastre nu sunt clare, de exemplu. Desi munca noastra se poate incadra intr-o organigrama mai larga, acest lucru nu este intotdeauna evident. Mai mult, atunci cand exista putina comunicare de feedback, unui angajat nu i se pot atribui sarcini care ii provoaca sau par importante, ceea ce ar putea impiedica intrarea in starea de flux.

Astfel, pentru a ne permite sa introducem cel mai bun spatiu capabil pentru cod, trebuie sa existe trei conditii: obiectivele trebuie sa fie clare, feedback-ul trebuie sa fie rapid si trebuie sa existe un echilibru intre dificultate si abilitate. Daca ramanem constienti de acesti factori, ne-ar putea ajuta la codificare nemasurat.