Programatorul Genial
Audio podcast:
Introducere
Nu sunt un geniu. Dacă în copilărie și adolescență aspiram să fiu cât mai ‘deștept’, odată cu înaintarea în cariera de programator, mi-am dat seama că ‘deșteptăciunea’ sau IQ-ul nu este singurul factor care contează în a fi un programator de succes. Este un factor important; nu oricine poate fi programator bun. Însă am văzut de-a lungul timpului că și programatorii care nu sunt geniali (adică nu sunt în top 5% IQ) pot crea soluții foarte bune, uneori chiar mai bune decât cineva care este mai inteligent.
Recent am avut de-a face cu un proiect în care un programator dintre cei mai inteligenți cu care am lucrat a creat o implementare dezastruoasă. Probabil din perspectiva lui, implementarea era genială, avea multe aspecte ‘deștepte’, dar per ansamblu, din perspectiva altui programator, era aproape imposibil de lucrat în acea zonă.
Și, ca o paranteză, să înțelegi că nu sunt subiectiv când spun că soluția respectivă era dezastroasă, îți voi descrie pe scurt două principii de validare pe care le-am aplicat:
Primul criteriu de validare – Cât de ușor este de înțeles soluția?
Dacă mâine vine un programator din afară, și îi prezint soluția respectivă, cât de ușor va fi să o înțeleagă? Dacă e nevoie de un efort mare sau realizezi că nu oricine poate înțelege soluția, atunci avem o soluție de complexitate prea mare.
Al doilea criteriu de validare – Cât de ușor se pot face schimbări în zona respectivă?
Dacă peste o lună am de adăugat sau schimbat ceva în acea zonă, dacă efortul schimbării este mare, atunci soluția are o problemă clară de rigiditate.
La ambele criterii, soluția respectivă a căzut testul.
Cum este posibil ca un programator foarte inteligent să creeze o soluție aproape imposibil de menținut, și acel programator, pe deasupra, probabil și crede încă cu tărie că soluția este bună?
Dar să ne întoarcem la IQ.
IQ-ul
Probabil, dacă citești articolul acesta, ești programator și te încadrezi în categoria de inteligență superioară, adică ești mai inteligent decât 80% din populație. Dacă ești un pic mai strălucit, este posibil să sari peste 90% din media populației. Iar dacă ești un geniu, te afli undeva peste 95% din populație.
O să folosesc ca punct de pornire ideea că IQ-ul este dat de capacitatea mea înnăscută de gândire. Nu sunt un expert în psihologie, dar dintr-o analiză sumară a studiilor în zona inteligenței, am înțeles că nu există dovezi concludente care să indice că IQ-ul poate fi îmbunătățit semnificativ. Deci nu putem umfla cu pompa IQ-ul, putem să-l ținem în formă bună, să-l optimizăm, dar nu să-l creștem semnificativ.
Marea intrebare pe care mi-o pun: Merita sa depun efort in dezvoltarea mea?
Dacă IQ-ul este înnăscut, și nu sunt un geniu, oare pot totuși să ating un potențial ridicat în rezolvarea problemelor, să devin un programator de succes cu IQ-ul pe care îl am?
Sau, întrebarea reformulată în direcția acțiunii: Merită să fac ceva în privința dezvoltării capacității mele de gândire, de a rezolva probleme, de a construi ceva valoros?
Nu o să încerc să răspund la această întrebare căutând studii psihologice. Nu o să fac o demonstrație matematică.
Ce o să-ți povestesc este ceea ce am văzut până acum în viața de zi cu zi, în realitatea palpabilă.
Multe din fabulele, proverbele și cuvintele de învățătură pe care le avem adunate de generațiile anterioare conțin o formă condensată a realității.
Acolo găsim o explicație cum cineva care nu este așa ‘dotat’ din naștere poate depăși pe cineva care este ‘supradotat’.
Banuiesc că ți-ai dat seama despre ce vorbesc – fabula lui Aesop – Iepurele și Broscuța.
Ajunsă în competiție, broscuța reușește să ajungă la destinație înaintea iepurelui.
Sună incredibil, dar văd și în jurul meu situații similare. În toate domeniile, financiare, profesionale, culturale, sociale.
Nu mai sunt surprins când văd persoane cu salarii mai mici care, pe termen lung, depășesc financiar persoane cu salarii mult mai mari.
Nu de puține ori am văzut în plan profesional oameni foarte deștepți rămânând în urma celor obișnuiți.
Sau oameni inteligenți care nu mai sunt în stare să distingă ce este adevăr și minciună în cultura în care trăim.
Din înțelepciunea populară și din ceea ce am observat în jurul meu, se pare că răspunsul este – DA, merită să depun efort în dezvoltarea mea. Și aș adăuga o subliniere importantă: DEZVOLTAREA MEA CONSTANTĂ.
ECUAȚIA succesului

Mi-aș defini ecuația succesului ca o combinație de factori.
IQ-ul este un factor pe care nu-l pot varia prea mult. El este un amplificator al acțiunilor mele.
Din observațiile mele asupra oamenilor de succes, doi factori au ieșit în evidență ca fiind extrem de importanți: PLANUL și DISCIPLINA.
Pe plan profesional, oamenii de succes au întotdeauna ținte clare, planuri bine definite și disciplină de fier.
Dar ce înseamnă succes? Pentru mine, succes înseamnă atingerea țintei.
Ținta
Dacă nu am o țintă clară, în orice domeniu, sunt ca un vapor pe ocean care nu are o destinație finală. Sunt purtat de valuri încoace și încolo, azi urmăresc o balenă spre nord, mâine mă iau după un vapor colorat frumos care merge spre sud, poimâine mă las în voia curenților.
Un lucru care mă surprinde în ziua de azi e că dintre tinerii cu care discut, tot mai puțini au ținte clare. Dacă în trecut, în copilăria și adolescența mea, majoritatea dintre prietenii mei știau destul de devreme ce vor să facă în viață, adică aveau ținte clare, astăzi majoritatea tinerilor sunt nesiguri și își schimbă des opțiunea. Ieri voiam să mă fac programator, azi visez la medicină, mâine să fiu artist.
Banuiala mea este că datorită expunerii la un flux uriaș de informație, în ziua de azi, social media are o influență care ne bulversează și contribuie major la această lipsă a țintelor.
În trecut aveam doar câteva modele de urmat, fie din persoanele de succes cunoscute, fie din personajele cărților care ne-au marcat. Ne urmam părinții, frații sau eroii din cărți.
Astăzi vedem pe social media ZILNIC zeci de modele demne de urmat. Vedem din postările prietenilor cum unul are succes mare în afaceri, altul este un medic renumit sau altul are o împlinire profundă prin călătorii. Cum să nu cedezi și să nu visezi și tu la aceste ținte când ele sunt prezentate atât de frumos și documentate cu dovezi vizibile pe social media?
Doar că schimbarea țintei vine la pachet cu o problemă. Când îți schimbi ținta, o iei de la capăt. Atunci când te refocusezi pe o nouă țintă, devii din nou începător. Rămâi un Peter Pan care nu vrea să crească, care nu își controlează emoțiile și visurile, se crede liber dar este prizonier al superficialității perpetue. Ești un călător în zigzag care nu va ajunge la nicio țintă.
De aceea trebuie să acorzi mare atenție și profunzime analizei acestui aspect. Care este ținta ta? La ce ești bun? Ce ești dispus să faci pentru următorii 10-20 ani, chiar dacă sentimentul se ofilește și nu o să mai fii așa entuziasmat despre domeniul respectiv.
Alege-ți ținte realiste care ți se potrivesc – dacă nu ai voce, nu visa să fii cântăreț la operă, sau dacă ai abilități analitice și ești bun la matematică, programarea poate fi o variantă potrivită
Planul
O persoană de succes, odată ce are o țintă clară, își definește un plan. Planul ne aduce cu picioarele pe pământ, ne ajută să înțelegem distanța între unde suntem și unde vrem să ajungem. Dacă rămân doar la nivelul viselor, nu am nicio idee cum aș putea să ajung la destinație, și cel mai probabil nu voi ajunge acolo niciodată.
Aș folosi analogia cu planul de călătorie. Ai harta pe perete, pui un pin în punctul de plecare și un alt pin pe destinație. Imparți drumul în bucăți clare, în ținte mai mici, concrete.
În călătorii, dacă ai un drum mai lung de făcut, îl împarți în zile. Parcurgi drumul la un pas susțenabil, te mai și odihnești. În prima zi trebuie să ajung la prima destinație, a doua zi la a doua. După 12 zile ajung la destinația finală și pot să mă bucur de ea.
Când planific drumul, văd ce resurse am nevoie. Câți bani, cât timp, ce echipament.
Fără o minimă planificare, s-ar putea să cad de oboseală după primele zile, să rămân fără resurse, sau să merg așa de relaxat și lejer că o să ajung la destinație bătrân și fără putere.
Ca să ajungi un programator de succes, trebuie să ai un plan. De obicei, ținta în sine nu este să fii programator. Îmi doresc să fiu un programator bun pentru a putea crea soluții și produse cât mai bune, mai inteligente, mai performante. Trebuie să te proiectezi și să te vezi în viitor ca un creator al unui software care rezolvă bine o problemă. Să-ți imaginezi că poți dezvolta un produs despre care să auzi laude din partea clienților.
Un lucru care mă ajută pe mine în atingerea destinației sunt țintele intermediare mici și concrete.
Mecanismul de recompensare funcționează foarte bine și mă ajută să simt bucuria unui progres, chiar dacă e mic. Ca exemplu, pot să îmi pun o țintă concretă să învăț un design pattern pe săptămână. Sau că în luna următoare să citesc o carte despre data streaming. Atunci când reușesc să duc la bun sfârșit o țintă intermediară concretă, simt satisfacție și împlinire, asemenea unui popas peste noapte pe un traseu lung. Îmi dă odihnă și curaj să pornesc mâine la drum pe o nouă etapă.
Dacă ai răbdare să mă urmărești până la final, o să-ți las și o schiță de plan pe care o recomand tinerilor interesați să se apuce de o carieră în programare sau care sunt la început de drum și vor să avanseze cât mai rapid.
Disciplina
Dacă ai observat, în ecuația succesului am pus factorul disciplina la puterea a doua. Impactul pe care disciplina îl are în viața omului de succes este uriaș. Am curajul să spun că disciplina este factorul cel mai important pentru a avea succes. Pot să am un IQ oricât de mare, pot să am un plan de care să se minuneze chiar și Einstein, dar dacă nu mă dau jos din pat și chiulesc toată ziua de la muncă, în cel mai bun caz o să fiu un mediocru. O să fiu iepurașul care se culcă pe o ureche și, în final, văd în departare broscuța făcându-mi cu mâna de la linia de sosire.
Ușor de zis, super greu de făcut. Disciplina este ceea ce ne diferențiază cel mai mult în viață.
Disciplina este cauza principală pentru care avem atât de puțini oameni de succes.
Oamenii care sunt deasupra mulțimii sunt super disciplinați. Urmează cu îndârjire un scop clar. Au reguli și proceduri bine definite care îi ajută să fie disciplinați. Nu duc o viață plină de excepții. Ei plantează zilnic, constant, disciplinat, semințe în pământul vieții lor.
În final, rezultatul este covârșitor, un câmp plin de rod.
Dacă plantezi doar din când în când câte o plantuță și te aștepți să ai aceeași recoltă, te înșeli singur. O să fii profund dezamăgit.
M-am întrebat dacă există o formulă pe care pot să o aplic și să devin disciplinat. Din păcate, nu am găsit o rețetă simplă care să funcționeze universal. Am citit cărți de dezvoltare personală, cărți care mi-au arătat cum să-mi creez obiceiuri, cărți despre eficiență. Toate aceste cărți sunt foarte bune și m-au ajutat, dar factorul determinant în această dezvoltare a disciplinei sunt eu. Pot să cunosc o sută de tehnici de auto-disciplină, dacă nu am voința să le aplic zilnic, rezultatul va fi mediocru, și în final voi renunța.
Pentru a ilustra dezvoltarea disciplinei, îmi imaginez o curte plină de iarbă, lucruri aruncate ici și colo, gardul părăginit și nevopsit, balansoarul rupt și ruginit, morman de pietre în mijlocul curții. Așa arată o viață nedisciplinată. Cu o astfel de curte, nu-mi vine să ies din casă, mai bine stau cu ochii în televizor și visez să ajung la o viață de succes ca a eroilor din filme
Dar să spunem că mă las proiectat într-un vis și mă văd pe mine în aceeași curte, umblând descult prin gazonul îngrijit, așezându-mă pe un balansoar curat la umbra unui pom, savurând o limonadă și privind mulțumit la teritoriul pe care l-am îmblânzit, spațiu în care am adus ordine și scop. Dacă am în minte acest vis și mi-l asum ca un scop, pot mai ușor crea un plan și să am motivația să-l aduc la îndeplinire.
Disciplina se învață cu pași mici. Dacă mă duc în grădină și încep nebuneste să rezolv toate problemele, o să-mi pierd suflul în câteva ore și o să renunț deznădăjduit.
Când însă îmi propun constant, în fiecare zi câte puțin, să cuceresc câte o problemă, fără să fiu doborât de efort, lucrurile vor evolua constant înspre ținta mea, visul meu de a avea o curte curată.
În prima zi tai iarba, apoi adun lucrurile aruncate, apoi mut pietrele și fac niște cărări pavate cu ele. În următoarea săptămână repar balansoarul, curăț pomii, vopsesc gardul.
În final, totul este curat și aranjat și pot să mă bucur de rezultatele efortului meu.
Urmează menținerea constantă a ordinii pe care am creat-o, care din nou necesită disciplină continuă, dar cu cât practic mai mult această disciplină, cu atât mai ușor este să fac acei pași zilnici.†
Revin la realitatea de zi cu zi. În cazul meu, ca să fiu disciplinat, trebuie să-mi autoimpun o cadență, un pas constant la care să merg. Pentru mine cel mai bine funcționează dimineața. Dacă mă trezesc mai devreme, am un timp liniștit dedicat unei ținte clare, un timp de autodisciplinare. Nu am reușit să ajung complet în clubul 5AM, dar mă străduiesc să ajung acolo.
Pentru a reuși să fiu disciplinat, constant în pașii de învățare pe care îi fac, am observat că singurul mod care funcționează pentru mine este să planific și să aloc un timp bine definit pentru asta. Mă trezesc dimineața la ora X și timp de două ore stau în jurul unui task bine definit, nu navighez pe internet și mă trezesc la final că nu am făcut nimic.
Nu reușesc constant să mă țin de program, uneori mă regăsesc deviat de la plan, uneori nu reușesc să mă trezesc, dar nu renunț, îmi reamintesc ținta și pașii pe care trebuie să-i fac și revin pe drum. Odată ce am văzut progresul pe care l-am avut prin metoda asta, e mult mai ușor să revin la ea și să fiu disciplinat, știu că merge.
Plan și Disciplină în programare
În programare, pentru a ajunge la profesionalism, la acea grădină mentală în care lucrurile sunt la locul lor, trebuie în primul rând să stăpânești anumite tehnici. Le numesc tehnici pentru că nu vorbesc doar despre cunoștințe. Cunoștințele fără practică se evaporă, dispar.
Stăpânirea unei tehnici are două picioare.
În primul rând, tehnica se bazează pe cunoașterea teoretică, cum ar fi enunțul unui design pattern. Îl citesc, îl pricep teoretic, știu despre ce e vorba. Aici am nevoie de disciplina cititului. Să citesc constant cărți, articole, prezentări.
Al doilea pas este aplicarea reală, practică a acelor cunoștințe. Aplicarea reală trece dincolo de exemplele din cărți sau microproiecte personale la care lucrez singur.
Aplicarea reală implică participarea într-un proiect mai complex în care colaborezi cu alți programatori. Proiect în care impactul codului produs de tine se vede în timp. Acolo o să vezi dacă aplicarea design patternului într-un anumit loc a fost o decizie bună sau nu. Într-un proiect real o să vezi când și cum poți aplica modelul teoretic pe care îl cunoști tu, într-un context complex imperfect.
Trebuie să-mi exersez ambele picioare. Dacă nu citesc și fac doar lucruri practice o să am primul picior anemic și al doilea musculos. Nu prea pot alerga bine.
Dacă doar citesc și nu aplic cunoștințele în proiecte reale, sunt în aceeași situație
Schița de plan
Pot să-ți dau o schiță de plan în linii mari încă de pe acum, dar detaliile trebuie să vină de la tine.
Primul pas: școala. Îți recomand să-ți începi drumul cu o facultate de calculatoare sau informatică. Chiar dacă unele materii pot părea inutile, disciplina și cadrul pe care îl înveți acolo te vor pune pe o direcție tehnică clară. Vei pleca de acolo cu un cadru sănătos pe care să construiești în continuare.
Începe să practici cât mai repede, încă din școală. Încearcă să te implici în proiecte care rezolvă probleme reale, nu rămâne doar la proiecte teoretice.
Scrie cod cât de mult. Programatorul, asemenea scriitorului, își ascute sabia scriind cât mai mult.
Asimilează pe rând toate aspectele importante ale programării. Din proprie experiență îți spun că doar cunoașterea teoretică a unei tehnici este ineficientă. Tehnica trebuie asimilată, trebuie înțeleasă în profunzime și asta vine doar din practicarea acelei tehnici.
Poți cunoaște pe de rost toate design patterns, dar dacă nu știi unde, când și cum să le aplici, această cunoaștere uneori te poate deruta mai mult decât te ajută.
În fișierul atașat, mi-am extras zonele importante pe care consider că trebuie să le stăpânească un programator. E o listă pe care o rafinez. Dacă ai și tu sugestii sau crezi că ceva nu merită să fie pe listă, te rog să îmi scrii.
https://silviumarcu.ro/blog/wp-content/uploads/2023/10/training-plan.pdf
