Sunt un programator mediocru, dar un dezvoltator excelent

Acest mesaj este cross-posted pe infoarena.ro

Discutat cu cineva despre anumite tehnologii și cum sunt bune la una sau alta și am simțit nevoia să scriu un articol despre cât de util este să fii expert în anumite tehnologii.

Eu mă consider mediocru în cunoștințele mele de limbaje de programare și cu toate astea mă consider foarte bun la ceea ce fac, ba chiar aș spune că sunt un world-class developer.

De ce spun că sunt mediocru?

Știu să programez în Java, C++, Python, Ruby, Javascript, Actionscript, PHP, ObjectiveC și am produs cod de calitate de pus în producție(*) în aproape fiecare din limbajele astea.

(*) A pune ceva în producție înseamnă că ce cod am scris eu a fost lansat către utilizatori. La Google asta înseamnă multe milioane de utilizatori care trec prin codul scris de tine.

Cu toate astea, știu probabil fiecare dintre ele cam la 70-80% din potențial și nu sunt guru în nici unul dintre ele (poate cu excepția Actionscript-ului).

Nu cunosc cele mai eficiente unelte pe care le oferă, nu cunosc tips and tricks magice, nu știu să aplic cel mai genial și recent feature al limbajului. Înțeleg lucrurile fundamentale pe care le-am învățat în facultate (closures, pointers, memory, threads, oop, etc) dar nu înțeleg implicațiile subtile are template-urilor din C++ sau alte feature-uri care sunt convins că sunt absolut magice.

Si atunci de ce spun că sunt world-class developer?

Pentru mine world-class developer înseamnă cineva care poate să producă cod de calitate de producție atunci când este nevoie, cod ușor de citit, extins, înțeles, ușor de adaptat și mai ales cod care face ceea ce este nevoie.

Un world-class developer este cineva care este capabil să învețe repede o tehnologie nouă, să își cunoască defectele și limitele, să ceară părerea altora și să accepte când nu are dreptate, să lucreze bine într-o echipă, să poată abstractiza ușor sisteme complexe, să le poată analiza și înțelege, să ofere soluții ingenioase la problemele care apar.

Rareori soluțiile sunt răspunsuri particulare unei anumite tehnologii.

La ce mi-ar folosi să fiu guru într-un limbaj?

Îmi imaginez două răspunsuri: poți obține performanță mai bună sau, prin artificii de limbaj, poți avea flexibilitate mai mare ca să scrii cod mai puțin, mai șmecher și mai magic.

Când vine vorba de perfomanță, pentru felul de sisteme la care lucrez eu (large internet-based products), de obicei cea mai mare limitare este timpul de acces la disc, timpii de comunicare prin rețea sau cât RAM ai la dispoziție. Faptul că binarul tău în C++ folosește niște cicluri de procesor în plus sau în minus nu contează.

Când vine vorba de artificii ezoterice care te ajută să scrii cod mai puțin, mai flexibil, mai magic, de multe ori sunt greu de înțeles dacă nu ești și tu expert și sunt foarte ușor de abuzat atunci când nu știi ce faci. Cum foarte puțini programatori sunt mega experți în anumite limbaje, când lucrezi într-o echipă ambele caracteristici de mai sus sunt importante.

De exemplu, am cunoscut mulți oameni mult mai deștepți decât mine care cred că inheritance este ceva evil. Dacă ai o clasă care moștenește altă clasă este greu de înțeles exact cum funcționează codul, e greu de înțeles ce metode sunt suprascrise și de ce, e greu de făcut debug, e ușor de stricat dacă clasa părinte se schimbă. Dacă inheritance este evil, imaginați-vă cum sunt privite alte construcții mai “puternice”. 🙂

Concluzia?

Cred că un programator are două opțiuni generale în carieră: devine guru într-o anumită tehnologie, sau încearcă să fie generalist.

În general cei care se hiper specializează tind să devină blocați într-o industrie, nu pot învăța ușor alte limbaje, se adaptează greu.

Pe de altă parte cei care sunt generaliști ca și mine nu vor putea niciodată să se angajeze pentru optimizare hardcore de compilatoare sau scriere de codec-uri video pentru transmisii live.

În ambele situații, cel mai important este să faci ce simți că îți place. Dacă ești pasionat de ideea de a dezasambla kernel-ul linuxului, fă-o. Dacă vrei să faci web, fă-o. A face ce îți place este mai important decât orice altceva.

Tu ce fel de persoană crezi că ești sau ți-ai dori să fii?

15 Responses to “Sunt un programator mediocru, dar un dezvoltator excelent”

  1. Iulian says:

    Din start: urasc ideea de a ma numi programator :), prefer inginer sau software craftsman.

    Eu personal incerc sa fac pasul mai hotarat spre SaaS avand in spate experienta de baza C++.

    Eu consider ca cea mai de pret calitate a unui om e capacitatea de adaptare. Si in unele cazuri chiar un om adaptabil poate deveni, pe o perioada scurta de timp (1-2 ani), specializat intr-o anumita parte a unei tehnologii. Asta o spun din experienta relativ recenta pe o tehnologie in totalitate noua. Asta neluand in considerare oameni care au schimbat domeniul cu totul (unii chiar nu mai fac programare).

    ————-
    Referitor la specializare: din pacate si piata muncii o dicteaza. De exemplu la unele interviuri daca nu ai idee de nu stiu ce chichita in C/C++ esti reanalizat. Aceste chichite nu au nici o valoare practica in general. Din pacate, in RO si nu numai, mai toti vor sa elimine costurile unui training, ceea ce favorizeaza specializarea pe o anumita tehnologie. Caz concret: am fost sunat penru o pozitie pentru care satisfaceam toate criteriile fara unul si am observat nehotararea in tonul vocii cand am spus ca nu am lucrat cu una din tehnologii (development la stiva de protocoale de comunicatie, desi nu e o ‘limba straina’).

    http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/

  2. Aron says:

    Sunt perfect de acord cu tine!

    Tehnologiile vin şi pleacă. Însă în posesia unui nivel adecvat de cunoştinţe generale despre dezvoltare şi inginerie software, te vei putea adapta mereu în timp util la ultimele trenduri tehnologice. Eu am fost mereu de părere că o bază solidă de logică matematică, algoritmică, teoria informaţiei şi inginierie software sunt mai importante decât particularităţile tehnologice ale meseriei, care sunt volatile (o tehnologie importantă astăzi poate va fi complet uitată peste 10 ani).

  3. decoder says:

    Asta se intampla numai daca realizezi la un moment ca vrei sa fii mai mult decat “Dorel cu gura mare, cel priceput la toate”.

    Level 0: Sa taci si sa faci

  4. Cora_ says:

    Se primesc pareri si de la nespecialisti? Dupa umila-mi parere, un programator bun e acela care poate vedea dincolo de produsul lui, ii cunoaste bine aplicabilitatea practica si nu-l uita pe “amaratul” ala din fata tastelor care-l utilizeaza(pe el, produsul) si care – mai mereu – e nespecialist.

    Off topic, cu scuzele de rigoare, Vivi, stiu ca locuiesti in NY, ai putea sa-mi recomanzi vreun restaurant bun(acceptabil) la sud de “Central park”, chiar pana in Soho? Sunt pentru cateva zile la NY si m-ar ajuta parerea cuiva care le-a incercat. Multumesc!

  5. Vivi says:

    Cora, ce spui tu este un bun Product Manager, sau product person, cineva care se pricepe la produse, sau un designer.

    Două restaurante bune în Midtown la sud de Central Park sunt The Russian Vodka Room și altul un pic mai casual este Sapporo (49th and 7th ave) unde îți recomand să iei the pork curry ramen care e delicios. Bukhara Grill (49th and 3rd ave) are mâncare indiană foarte bună.

  6. Vivi says:

    Dacă ai nevoie de restaurante in the village (între Soho și 14th street) sunt prea multe ca să le pun aici. 🙂

  7. Cora_ says:

    Adica tu zici ca programatorul nu stie la ce serveste produsul lui? sau ii spune si lui product managerul? Io cred ca ar trebui… 🙂

    Sigur o sa-l incerc pe cel indian( daca ajungi la LA sa incerci “Akbar”). Si cred ca voi sta fix langa Sapporo, deci si el… apoi o sa vad in alte zone, ca am vreo doua intalniri si probabil o sa ma indrume si partenerii.

    O sa-ti spun cum au fost. Multumesc mult.

  8. Vivi says:

    Spun că sunt extrem de rari programatorii care sunt în același timp și foarte buni product people și foarte buni UX designers. Atât de rari încât deja nu mai sunt world-class developers, ci rock star exceptions. 🙂

    Dezvoltarea unui produs este un sport de echipă, nu un one-man-show.

    Evident există extrema la care mi se pare că faci tu aluzie în care programatorul este doar un sclav care dă cu sapa ca să implementeze specificațiile product managerului.

    În realitate însă, în echipele pe care eu le-am văzut, toată lumea participă cu skillurile pe care le are mai bune și fiecare știe să se dea la o parte acolo unde nu se pricepe.

    De foarte multe ori inginerii excelenți nu au un simț de design foarte bun. Așa cum spui tu, tind să uite de utilizator. De ce? Pentru că sunt socially awkward geeks și este foarte dificil să empatizezi cu oameni care nu sunt ca tine.

  9. Silviu says:

    Salut !
    Vivi crezi ca ai putea sa imi trimiti pe email adresa ta de messenger sa vorbim despre programarea (web in special) la modul general?:D
    Sunt incepator si mi-ar prinde bine niste sfaturi ;)) .
    Iti pot arata si la ce lucrez momentan…sunt pregatit sa primesc si aprecieri si critici 😀

  10. cora_ says:

    De acord cu tine pentru produsele dezvoltate in companiile mari. De obicei starurile rock de care vorbesti fie lucreaza pentru ei, fie in echipe mici sau chiar underground si produc chestii care nu sunt neaparat cunoscute la scara larga, ci doar de cei din bransa. Si de obicei tot ele(starurile) au lucrat multa vreme in echipe, au o experianta serioasa… Asta e parerea mea…

    In echipele din companiile mari(mai ales in us) sunt reguli stricte “nescrise” pe care nu prea le incalca nimeni… sau le incalca numai cei care sunt f. sus si-si permit. Chiar discutam cu cineva despre asta acum ceva vreme. E normal sa fie asa, altfel ar fi imposibil de “gestionat” proiecte serioase, de anvergura. Tu lucrezi acum intr-o companie sau pentru tine? Intreb de curiozitate, poti sa nu raspunzi daca nu vrei… 🙂

    PS- la NY a fost super, temperatura excelenta, dar am fost prea ocupati sa ne putem bucura de soare. Cred ca vom reveni intr-o luna.

  11. Florin says:

    Eu zic ca esti bun la ceea ce faci.
    E loc de mai bine, dar “mai bine” nu e tot timpul necear.

  12. kellogs says:

    mie imi pare ca faci confuzie intre developer si arhitect in ale softurilor. Trasaturile unui “world class developer” sunt de fapt cele ale unui arhitect software. Natural mi s’ar parea ca world class X sa fie urmatorul nivel (sau poate la 2-3 nivele distanta) de X mediocru; asadar, world class developer e ala guru in toate cate 7 limbaje cunoaste.

  13. David says:

    Eu zic ca ramane sa dovedesti in continuare unde te incadrezi … la bun sau la f. bun.

    Oricum esti sus! 😉

  14. Felix says:

    Programarea e la fel ca medicina, fiecare programator stie ceva general apoi se specializeaza pe ramura lui de chirurgie…

Leave a Reply