ITSimplified: Mitul programatorului genial

Există o percepție bizară asupra mediului IT, și mi-aș dori să o îndrept. Există o mantie de mitologie aruncată asupra tuturor celor care mânuiesc tastaturi și oamenii le acordă super-puteri mai ceva ca lui Prâslea cel voinic sau Harap Alb (comparația cu Făt Frumos nu e deloc exagerată).

Mitul programatorului genial nu e de azi, de ieri ci vine dintr-o realitate istorică. În anii ’60 s-au făcut studii (deși se pare că ar fi unul singur, făcut într-o singură după amiază) legate de felul în care sunt folosite calculatoarele, și s-a observat că un programator care lucrează cu “batch processing” poate rezolva chiar de zece ori mai multe lucruri decât programatorii care lucrau interactiv cu calculatoarele.

În primul rând, e cât se poate de corect. Programatorul care folosea batch processing de fapt își pregătea toate lucrurile de făcut din timp și lăsa calculatorul să lucreze fără întrerupere. Modul interactiv de lucru era mult mai lent și mai anevoios. “Procesarea de loturi” cum e numită în română e un pas înainte în lumea programării, făcut în preistoria calculatoarelor, deci nu e deloc de mirare că lucrurile au avansat atunci așa. Studiul era ceva de genul: “cineva cu un Ford Model T ajunge de zece ori mai repede la piață decât cineva cu un car cu boi”. Comparația nu e deloc exagerată.

Dar mitul ăsta al programatorului genial a rămas: ideea că un programator e atât de bun încât zece alți programatori stau în spatele lui și nu reușesc să facă ce face și el. Unii îi spun “rockstar”, alții “ninja”, “divă”, “geniu”. Ați auzit despre ei, unii din voi poate chiar cunoașteți astfel de oameni (din auzite, astfel de oameni nu au prieteni printre pleavă). Recunoașteți programatorul acesta din articolele despre “tânărul programator român care a uimit pe XXX” (unde XXX e firmă mare de IT din State).

E un mit convenabil. Ziarele și televiziunile au despre ce să vorbească, și oricum nu le pasă de soarta celor pe care îi ridică la rang de geniu. Unele firme de IT idolatrizează genul acesta de programatori. Toată lumea crede că firmele mari adună în mod special numai astfel de genii, așa au reușit să ridice chestii precum Google Search Engine, Youtube, Amazon Cloud și alte chestii super-tari.

Realitatea însă e incredibil de dezamăgitoare. V-am povestit aici despre soarta lui Marc Tasman, considerat un geniu al calculatoarelor prin anul 1984. V-am spus de Budișteanu că o să fie un mare eșec comparat cu așteptările pe care oamenii le au de la el, la fel ca toți ceilalți programatori geniali pe care i-am cunoscut, cu care am lucrat sau pe care i-am urmărit.

Realitatea e că nu există o astfel de discrepanță între rezultate între programatori. Există programatori de două-trei ori mai buni decât ceilalți pentru că ceilalți au o atitudine de secretare plictisite când vine vorba de jobul lor. Dar mai departe nu, nu există o discrepanță atât de mare dată de “geniu”. Între doi programatori silitori, diferența de productivitate va fi mult mai mică chiar și în acele zone în care programatorul e considerat geniu. Realitatea e însă că programatorul “genial” este o povară pentru firma care îl angajează și foarte rar programatorul respectiv va reuși să producă la fel de mult ca un “negenial” care nu își ocupă timpul cu genialitate. Pentru că, serios, rezultatele genialilor sunt cel mult rizibile.

Programatorii ăștia RockStar sunt niște oameni cu ego-uri umflate, prea cool ca să facă lucruri normale pe care le fac toți ceilalți. Ei nu se apleacă asupra problemelor ridicate de un input-box care nu e focalizat corect și când trebuie, ei se apleacă asupra problemelor mari, importante, eventual cu litere mari alături de îngroșare (MARI, IMPORTANTE). Ei nu rezolvă problemele concrete, ci cele invizibile, cele adânci. Uneori, sau cel mai des, cele inexistente. Pentru că problemele inexistente nu le pot contesta calitățile, pentru că nu vor trebui să dovedească faptul că, în realitate, programatorul genial e la fel de mediocru ca și colegul de lângă el care nu e lăudat în fiecare zi pentru un rezultat la o olimpiadă sau ceva similar.

Să nu înțelegem greșit: există oameni mai buni decât ceilalți. Dar faptul că sunt buni îi forțează să se specializeze, și nu toată lumea poate să hrănească un astfel de dezvoltator cu lucruri de făcut special pe ceea ce știe el. Firmele mari pot profita de geniul lor, dar cel mult după ce teoretizează o soluție inițială, realitatea programării e că e mult de lucru fără prea multă gândire. “The grunt work”, așa o numesc eu. Majoritatea muncii de programator nu cere geniu, în consecință genialii se pierd în ea. Adesea au rezultate sub așteptări, și foarte rar se întâmplă ca ei să confirme.

Așa că mulți programatori geniali iau calea prezentărilor de IT. Își cizelează discursul și îi învață pe ceilalți cum să facă, pe principiul “cei care nu știu învață pe ceilalți”. Ajung foarte des să câștige mult mai mult din acele prezentări, mai mult decât din serviciul lor, pentru că ceea ce îi învață pe ceilalți are valoare în munca celorlalți. Și e un parcurs cât se poate de ok.

Cel mai mare pericol în legătură cu programatorul genial e însă să ajungi să îi dai mai multă importanță decât are, în ideea că “programatorul genial e de zece/o sută de ori mai bun decât cei de lângă el”. Dacă ar fi așa, cineva l-ar angaja pe Budișteanu (sau pe orice alt genial) și ar da afară 100 de oameni din firma lui, însă nu o să auzi niciodată de așa ceva.

Așa că atunci când citiți următorul articol despre copilul genial care “a uimit America”, “i-a făcut să crape de invidie pe cei de la Google”, “i-a făcut pe cei de la Amazon să avorteze spontan de uimire” sau orice altă prostie de genul ăsta, să știți că e un articol despre o dramă în desfășurare. E o dramă a unui copil care nu va reuși niciodată să facă față așteptărilor pe care le are societatea de la el, care o să-și ascundă incompetența cu disperare, o să-și demoleze orice șansă de a se integra cu cei din jurul lui pentru că asta va demasca faptul că nu e deloc genial. Copilul genial va deveni adultul înfumurat nesusținut de rezultate, și va începe ca Marc Tasman să-și facă selfies în fiecare zi, în disperarea de a face ceva ‘relevant’.

Programatorul genial e o dramă.

Rock-star-developer-or-programmer

… o dramă la fel de mare ca eșecul carierei lui Bono. Toată lumea îi zice că e bun, și el chiar crede. În plus, articolul spre care duce poza (sursa pozei) e unul din cele mai amuzante articole scrise vreodată.

Comments

ITSimplified: Mitul programatorului genial — 37 Comments

  1. Adevarat.

    Mai e un aspect: programatorul genial (sau perceput ca genial) nu e bun in echipa. Nici-un muritor n-are chef sa-l intrebe despre o chestie “normala”. Pt ca e posibil ca genialul sa pufneasca in ris. Si de ce sa te faci de kko cind exista google? Si de ce sa-l intrebi ceva care pentru EL poate fi o banalitate?
    Deci genialul e in turnul lui de fildes, nu e partas la problemele muritorilor de rind.
    Cel mai nasol e genialul care chiar crede ca e genial. Ala fara modestie. Un genial “full of shit” poate chiar sa faca “damage”, in sensul ca poate sa faca o echipa intreaga neproductiva (discutii sterile de teoria chibritului, solutii bineinteles geniale dar care cer complete rewrite/overhaul, deci timp etc).

    • Cunosc diverși oameni de genul ăsta. Unii au eșuat fix pentru că și-au luat genialitatea în cap și au considerat că sunt intangibili. Alții au înțeles care le sunt limitările, și s-au concentrat pe lucrurile care contează, printre care skill-uri de colaborare, au redus la tăcere lumea care îi puneau pe un piedestal și s-au integrat chiar bine. Modestia, cred, e cheia.

  2. ‘Un programator bun îți face o aplicație într-o săptămână, cel mult două. Chiar n-aveți și voi un programator bun pe-aici?’ Inepția asta am auzit-o rostită de om de business, foarte grăbit să livreze o soluție pentru un client care-i făcea ochi dulci, dar care, într-un final, avea să-l lase sedus și abandonat, chiar dacă soluția fusese livrată. Omul chiar credea ce spunea pentru că, așa cum știm cu toții, un serviciu funcțional pentru client implică doar codul scris de un programator, n-are nicio legătură cu infrastructura, integrare, conectivitate, datele folosite, etc. Tot ce conta era ACEL programator BUN!

  3. Exista diferente, dar nu sunt intre programatori slabi si programatori geniali. Sistemul (mai ales cel din Vest) s-a cam obisnuit sa creeze “baieti care codeaza”, nu programatori, adica niste oameni care stiu bine putin Java, putin PHP si poate Ruby sau Python, dar cam atat. In comparatie cu ei, baietii care au mancat ceva algoritmica, care au facut si putin Assembler (sau ceva similar) si au urcat prin C, C++ la alte limbaje (exemplele sunt aleatorii) sunt mai buni.

    Ca om care a programat (dar n-a fost programator) si care a cochetat cu domeniul pana sa intre in marketing/publicitate iti pot spune ca pe programatorii de tipul I nu-i iei aproape niciodata in brainstorming-uri sau sedintele de productie. Pe cei de tipul 2, care de multe ori merg spre UX sau arhitectura de sistem (in cazuri fericite) sunt considerati indispensabili atunci cand se proiecteaza sau gandeste o aplicatie mai mare. Executantii intereseaza mai putin.

    • În România încă există o scară a programatorilor, în care din Senior developer mergi către zona ‘creativă’ și de comandă. Management, sau pe-acolo. E un pas interesant, și cred că acolo merg ‘băieții care codează’ de care spui tu 🙂 Mulți din managerii din IT-ul românesc au trecut de programatori, și oamenii confundă skill-urile într-o zonă cu cele din cealaltă zonă.

      Cred că există și opinia că programatorii care doar programează sunt niște code monkeys. Există un ideal pe care îl am și la care tind – un developer care înțelege foarte business-ul și care poate să facă challenge la deciziile luate de cei de mai sus, și care poate comunica asta coerent către management. Ăsta e Senior-developer-ul din punctul meu de vedere, și omul ăsta scrie cod cel puțin 50% din timp.

    • Dorin: Nu pot sa-ti dau reply tie, asa ca o sa-mi dau reply mie – de acord ca daca pierzi legatura cu propria profesie nu ai cum sa fii un ”senior” bun.

  4. Eu zic așa: când o să ai și tu pe blog câteva selfie-uri, eventual poze cu tine privind încruntat monitorul, ceva paragrafe auto-referențiale despre cât de bun ești, de abia atunci să vorbești de Budișteanu, da? Până atunci, e vorba doar de invidie!

    PS: Bono FTW!

  5. Romanii au un fetiș pentru omul nou / geniul nepereche / geniul din Carpați / olimpici… Etc.
    Nu există săptămână sa nu avem cel puțin o știre de genul asta, sunt o constanta ca și vasluianul care își violează fata.

    E una din moștenirile lăsate de comuniști.

    Mai acum ceva timp niște copii câștigase un concurs de desene sau ceva de genul asta la NASA. NASA fiind un fetiș înrudit cu fetișul pentru genialitate, s-a creat o isterie ca de ce nu le asigura guvernul deplasarea în USA pentru ridicarea premiului. Asta în timp ce avem copii care fac zeci de km pe jos pana la scoala pentru ca lipsește un mijloc de transport.

    Dpmdv, as aloca 0(zero) resurse pentru olimpici și alte categorii de geniu. Sunt bani risipiți total aiurea. Cine vrea excelență sa plătească din propriul buzunar.

  6. Foarte interesant, like!

    Din experienta mea am intalnit (si mi s-a parut legitima) folosirea in urmatoarea instanta: pentru a descrie un potential candidat la un job intr-o companie mica / startup unde sunt necesare mai multe abilitati si este singurul (sau printre putinii tehnici). Mai ales este folosita in prezentarea candidatului unui potential angajator/partener atehnic, gen “e genial”, “gets shit done”, “face cat 10” adica anecdotic.

    IMHO are sens in contextul dat 🙂

  7. Sunt cateva tipuri de oameni care nu cred in mitul asta:
    1. Developerii cu colegi de top ca si ei (pentru ca a stiut cineva sa-i filtreze bine).
    2. Developerii cu colegi mediocri ca si ei si care nu citesc si deci nu stiu cum se arde in cercurile inalte.
    3. Developerii cu colegi de coada ca si ei si care nu citesc sau nu inteleg nivelul la care se arde in cercurile inalte.
    4. Non developerii care nu sesizeaza nici miturile ogradei industriei proprii.

    De ce un idiot e de 10-1000 mai costisitor decat un programator bun si nu doar de 2 ori? Pentru ca a programa nu inseamna a insuruba, da cu sapa: adica a face o munca repetitiva ce nu acumuleaza probleme. A programa (ca si alte multe activitati) inseamna a acumula o solutie din taskuri care se pot intinde pe luni sau ani. Problema cu acumularea de taskuri e ca duce si la acumularea de greseli. O mica greseala netratata la timp provoaca in cascada greseli de 1000 de ori mai costisitoare. Daca produci un surub gresit el poate fi eliminat in pasul urmator iar diferentele intre un strangator de surub bun si unul prost sunt de 1-1.5-2 ori mai mari.

    De fapt problema exista de cand lumea (si deci nu e specifica numai programatorilor): au existat militari geniali, pictori geniali, cantareti geniali. Ce mare rahat au facut ei: au dat niste ordine (cu putin mai bune decat a oricarora, hai de 2 ori mai bune), au dat cu niste vopsea, si au pus niste note in ordine. Mare rahat! Si eu pot, ce mare branza!

  8. Pentru mine programator bun = cel care învață tehnologii și limbaje noi chiar dacă nu are nevoie de ele la muncă, scrie cod open source și pentru el în timpul liber, etc.

    Programator mediocru = cel care participă la toate meetup-urile și întâlnirile Agile/Java dar nu se strofoacă de loc să învețe orice altceva nu e deja popular. Cineva care știe doar Eclipse și orice altceva e o blasfemie că vorba aia, nu poți face refactoring, nu poți fi “agile” fără un IDE.

    Programator prost = cel care e programator doar o portiune din timpul de la muncă.

    Desigur, granițele sunt destul de fuzzy.

    • Granițele sunt fuzzy. Ideea e că din punctul meu de vedere un programator bun e unul care are aplecare înspre subiectele tehnice, știe chestii la un nivel mai jos decât nivelul la care lucrează de obicei și are atitudinea corectă față de proiectul pe care lucrează. Un om care programează doar 8 ore pe zi poate fi un bun programator care să aibă și o viață echilibrată. E ok 🙂

    • Ok, programator bun, mediocru şi prost. Unde sunt genialii ? 🙂 Cu singuranţă nu în aceste exemple.
      De ex., Steve Wozniak a fost genial. Dar fără ajutorul lui Jobs, ar fi rămas un necunoscut. Mai ales că nu era prea sociabil. Iar media îl ia pe Steve Jobs de genial.

  9. Dar pe un ton mai serios. Spunea Dorin că game programmers ar fi o temă de ITSimplified. Cred că o rasă mult mai bună de programatori geniali o găseşti printre ei. Motivele poate mai degrabă le lăsăm pentru articolul respectiv, dar să înşirăm nişte exemple:

    Copilul-minune care la la 20 de ani are scrise nşpe librării. De la motoare grafice la middleware pentru networking pe TCP, UDP şi ceva layer custom peste UDP cu packet ordering. Copilul care a primit oferte pentru librăriile respective, şi un post într-o afacere indie ca senior programmer. Care a început să povestească cu lumea de la firma de la care şi-a început cariera despre “devii lui”. Şi care, la sfârşitul zilei, s-a întors să-şi ceară postul de la prima companie înapoi, şi a fost refuzat.
    R&D experts, cu vechime de vreo 10-15 ani, care îşi optimizează codul scriind clase întregi ca #DEFINE-uri şi variabilele de maxim două caractere. Într-adevăr, librăriile lor sunt bune. Şi ca şi performanţă, şi ca şi funcţionalitate. În acelaşi timp, librăriile respective imobilizează alţi 2-3 senior programmers de fiecare dată când e găsit un bug în codul respectiv, din cauza ambiguităţii stilului de programare şi a lipsei de documentaţie.
    Oameni care au terminat facultăţi de CS cu distincţii, cu multe concursuri şi proiecte de success la activ: la 30 şi-un pic de ani, când sunt în faţa unui proiect care de-abia se ţine pe picioare din cauza managment-ului şi arhitecturii care nici una dintre ele, practic, nu există, îţi spun că deh, ăsta e singurul mod în care nu-ţi moare un proiect, n-ai altă soluţie.

    Şi nu neg, poate unii dintre ei chiar au material de geniu. Dar asta doar pe o nişă, şi doar când lucrează de unii singuri. Între timp, ei lucrează în cadrul unor echipe de oameni cu, mai mult sau mai puţin, aceleaşi calificări, şi furnizează soluţii noi şi complexe pentru probleme care au fost deja găsite şi rezovate în moduri simple, generale, şi la fel de performante.

    • Cantrem: poate și la ei mă refer, dar pe mine mă interesa cu articolul ăsta altceva: mă interesa demitizarea programatorului magic care face cât zece. Acest programator nu există. End of story.

      Există programatori buni sau mai puțin buni, mai pasionați sau mai puțin pasionați. Un programator plictisit de viață poate fi cea mai bună alegere pentru layer-ul de baze de date, dar în niciun caz pentru bibliotecile de networking. Din contră, tânărul ambițios care scrie cod cu găleata poate nu-l vrei nici pe el pe biblioteci, că acolo ai nevoie de oameni care înțeleg mai bine felul în care poate fi chemată o funcție (prost sau bine).

      Diferențiatorul mi se pare mie că e interesul pe care și-l dau oamenii pentru rezolvarea problemelor. Pentru că majoritatea problemelor din IT sunt grunt-work, sunt aproape ‘mindless’. Și realitatea e că programatorul genial va intra și el, natural, în mediocritate. Sau va fi venerat, și se va întâmpla ce s-a întâmplat cu Tasman.

    • E un sistem de comentarii care îmi displace, dar nu am chef de săpat prin wordpress să văd cum se poate rezolva problema comentariilor.

      Data viitoare promit că o să-l tai pe Blue mai repede când începe să bea la tastatură.

  10. 1) Se încearcă unde?
    2) Asta zic și eu, că nu e nevoie de ei, dar tu o dai înainte cu Batman, că de ce m-au refuzat Google. Poate că aveai și tu nevoie de un loc să-ți verși frustrările în seara asta. Te rog nu o mai fă pe blogul meu. Te rog frumos. Nu o să te mai rog a doua oară.

  11. Încă un lucru. E foarte mișto să fii pionier într-o problemă. E mai nasol să faci lucrurile să funcționeze. Da, poți încropi o soluție, genială ea, dar realitatea muncii de jos e cea care sperie geniile astea care îți plac ție. Oamenii sunt inconsistenți și faptul că nu sunt în stare să ducă la capăt cele 90% din proiecte e mai important. Pentru că de fapt ei nu rezolvă decât 10% din muncă, și restul de 90% e rezolvată de oameni mediocri sau bunicei.

    “Geniile” astea sunt disruptive, te sfâșie la un code review că se simt atacați când le zici că ideea lor e proastă sau codul e scris prost. Adeseori au de rezolvat probleme simple dar ei rezolvă cu totul altceva, complică lucrurile inutil și apoi își impun cu nervozitate punctul de vedere, argumentând mereu cu ‘geniul’ lor și cu experiența lor. Serios, Blue, am lucrat cu sau am studiat mai multe genii de genul ăsta, și știu ce vorbesc. Nu știu de ce îi placi, știu doar că știi tu de ce nu mă vrea Google.

  12. @Blue: Putem și noi, nimenii, să auzim niște nume de programatori geniali ? Un amărât de repo pe github ? Serios. Vreau și eu să văd ce poate un genial. Se poate ? Numai dacă se poate și nu e prea greu.

    Cât despre Dorin și Google, asta are relevanța unei clanțe-n câmp. El are o doză de aroganță, treaba lui. Eu trec pe aici și mă uit la ce scrie. Rar sunt de acord, dar aici, pe subiectul ăsta, are dreptate. Nu ai nevoie de logică cu ghiotura să îți dai seama că așa e. Aprope nimeni nu e genial.
    Totul ține efort susținut. Poate chiar o doză de manie. Genialitatea, dacă e sa existe, e rară și stă călare pe un cumul de circumstanțe care îi permite să apară.

    Dacă te apropii de 50 de ani și crezi ce spui, îmi pare sincer rău pentru tine. Ești o rață. Nu te-ai udat deloc.

    25 de ani, în domeniu, și crezi în ce spui ? Mi-e greu să înțeleg cu dracu’ ai făcut.

    În fine. Dăi cu code samples. Sunt curios.

  13. Nu conteaza denumirile: geniu, bun, mediocru, prost. Cert este ca sunt diferente de ordine de marime intre ce pot produce programatorii pentru ca deciziile se cumuleaza. Imi pare un domeniu ce tine de teoria haosului.

  14. Eu nu cred ca un programator “genial” ar lucra pentru o firma oricat de mare ar fi aceastea, si asta nu tine doar de programatori ci si in alte domenii, Genialul isi face el business si angajeaza oameni sa lucreze cum spune el in pas cu el. Parerea mea.