Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2012-03-05 17:38:56.
Revizia anterioară   Revizia următoare  

blog/programator-mediocru-dezvoltator-bun

vivi
Octavian Costache
05 martie 2012

Pentru că cineva povestea într-un comentariu despre anumite tehnologii şi cum sunt bune la una sau alta, am simţit nevoia să scriu un articol despre cât de util este să fii expert în anumite tehnologii.

Eu de exemplu consider că sunt 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.

<blockquote>
(*) 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.
</blockquote>

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?
Ştiu că sunt cazuri în care jobul cere să fi super guru într-o anumită tehnologie şi respect asta.

Dar în general cei care se hiper specializează tind să rămână acolo specializaţi, nu sunt generalişti, nu pot învăţa uşor alte limbaje, nu se pot adapta. Nu e rău sau bine să te specializezi, doar că există avantaje şi dezavantaje.

Pentru mine este okay să fiu curios despre un anumit limbaj, e foarte important să vreau să învăţ şi să înţeleg detalii când dau peste ele, e necesar să înţeleg ceea ce folosesc, dar mie nu mi-a fost niciodată teamă că nu sunt guru în vreo tehnologie.

Nu am petrecut niciodată nopţi albe încercând să folosesc feature-uri esoterice. Nu am fost niciodată îngrijorat că nu sunt la curent cu cea mai recentă librărie cutting edge.

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

Categorii: