Cum stabilești dacă ești junior, mediu sau senior în limbajul tău de programare?

Ce ar trebui sa stie fiecare din cele 3 categorii de programatori?

Stiu ca s-a mai discutat aici Ce ar trebui să ştie un programator PHP de nivel mediu? dar ma gandeam ca poate putem genera o lista de “skilsuri” php/programare pe care ar trebui sa il aiba fiecare din aceste categorii.

3 Likes

Hai să încep eu (dar nu cred că-i valabil doar pentru PHP ci pentru orice limbaj).

Începător

  • să poată explica fără prea mari probleme flow-ul unui program (sau să poată scrie o diagramă de la zero). Ori printr-un flowchart ori prin pseudocod;
  • să înțeleagă conceptele din spatele oricărui limbaj: variabile, constante, arrays, loops, condiții (o să rămâi surprins să vezi cât de greu sunt de priceput anumite noțiuni) , recursivitate;
  • noțiuni de bază OOP: nu neaparat scrierea propriilor clase, dar să facă diferența dintre o clasă/metodă statică și una non-statică, să știe când o clasă se instanțiază și când nu, să știe să apeleze metodele unei clase ( :: vs ->)
  • DRY să fie o mantra to live by;
  • să digere orice informație, nu să o înghită pe nerăsuflate; altfel spus: question everything;
  • să cunoască un sistem de version control;
  • să fi citit Clean Code, Clean Coders și Pragmatic Programmer
  • să știe să folosească motoarele de căutare;

Mediu

  • să înțeleagă OOP și concepte SOLID;
  • să înțeleagă și să practice unit testing;
  • să înțeleagă design patterns: MV* (depinde de limbaj: MVC, MVVM etc), singleton, facades etc;
  • să înțeleagă (și să poată explica) cum funcționează o aplicație ceva mai complexă (e.g. una care folosește design patterns)
  • să fi citit Clean Code, Clean Coders și Pragmatic Programmer a doua oară :smiley:

Avansat

  • încă n-am ajuns acolo, îi las pe alții :smiley:

10 Likes

Ar fi interesant daca am putea sa stabilim pt. php sau JS un set de reguli pt. nivelele incepator si mediu, ca apoi sa folosim static analysis tools sa le consolidam in proiecte; despre ceva similar se vb in prezentarea asta.

4 Likes

Ma gandesc sa fac un spreadsheed pe baza celor discutate aici. As face pe 4 niveuluri: incepator. junior, mediu, avansat.

In legatura cu cele spuse de @iamntz , eu nu as baga TDD-ul la mediu. OK - sunt de acord ca trebuie sa stie ce inseamna, stie beneficiile lui, dar sa il si practici e mai greu (mai ales in varianta corecta: intai scrii testul si apoi codul).

La mediu as mai trece

  • sa inteleaga foarte clar cum functioneaza sesiunile
  • sa inteleaga cum functioneaza autorizarea si autentificarea intr-o aplicatie
  • sa intelegea optimizarea client side, server side,
  • sa inteleaga nevoia un precompiler scss
  • sa identifice riscurile de securitate (sql injection, xss,etc)

La avansat as trece

  • experiente de lucru cu anumite tehnologii “specifice” : payment, gandirea unui api, cozi de evenimente, autorizare Outh,
  • cunostinte minime de dev-ops: configurare apache, nginx, memcached, redis, logrotate, etc
  • partea de tooling avansat: vagrant, code quality tools
  • sa fie capabil sa gandeasca o aplicatie cap-coada
  • sa mai stie cel putin inca un alt limbaj decat php (JavaScript, Ruby, etc) la un nivel satisfacator
1 Like

Cred că tocmai de asta e ceva greu de practicat: că este introdus mult prea târziu. Cu cât mai devreme e asimilat, cu atât mai bine, pentru că nu se formează obiceiuri greșite (e.g. “Cod greu de testat”; cum vei putea scrie cod greu de testat dacă singurul mod cunoscut de a scrie cod este cel însoțit de teste?)

Unit testing-ul este pentru un programator ce este metrul pentru un croitor sau echerul pentru un arhitect. Nimeni nu îi spune unui ucenic sau unui atudent la arhitectură că sunt începători și, prin urmare, nu au nevoie de metru sau de echer…

1 Like

Salutare,

nu vreau sa fiu troll, dar unit testingul nu e chiar acelasi lucru cu TDD. @iamntz a vorbit despre unit-testing.

Si ca postarea mea sa aiba o oarecare valoare:

Începător

  • Sa cunoasca limbajul la un nivel decent, asta incluzand si OOP macar la nivel teoretic.
  • Sa fie in stare sa transforme niste cerinte scrise, sub o forma sau alta, intr-o “aplicatie” CRUD.

Mediu

  • Sa stie ce sunt cookies, sesiuni si de ce le folosim. Aici vreau un raspuns mai elaborat…sa inteleaga HTTP, de ce este un protocol “stateless”, cum ne ajuta cookies sa il facem stateful, etc. De aici extindem la Authentication/Authorization si putem merge mai departe pana la Oauth.
  • Sa stie si sa fi practicat unit testing. Aici e cu cantec deoarece multi cunosc termenul si au practicat, sau au un 10-20% coverage de teste in aplicatiile lor, dar nu au timp/nu vor/business-ul considera irelevant sa practice unit-testing pentru…sa zicem 90% din codul scris. Oricum, cred ca aici se pune problema mai mult daca “stie” unit-testing.

Avansat

  • Sa fi lucrat la o aplicatie cu cativa mii de useri concurenti
  • Sa aibe habar de scalabilitate(Aici putem merge cat de departe vreti, de la diferite layere de caching, la cozi, horizontal scaling, front-end performance etc).
  • Sa aibe cunostinte despre complexitatea unui algoritm.
2 Likes

@tacheshun: desi unii considera ca Unit Testul e doar o componenta din TDD, sunt de acord cu tine - poate avea sens. Dar nu m-am gadit asa, de aici si confuzia.

Unde ati trece:

  • lucrul cu debugger si nu cu var_dump, print_r, etc :smile:? La avansat sau medium?

I moved a post to a new topic: De ce este important Unit Testing-ul?

Folosirea unui debugger o vad ca o necesite daca vrei sa cresti productivitatea, deci as incadra-o la nivel mediu. Din pacate, cand vine vorba de PHP nu prea am vazut oamenii sa foloseasca Xdebug.

3 Likes

Pentru utilizarea debugger-ului nu iti trebuiesc nici experienta multa in dezvoltare, nici cunostinte foarte multe, teoretice, despre limbaj. Ai nevoie sa configurezi software-ul respectiv si sa pierzi 1-2 ore pentru a citi in documentatie ce ai nevoie.
Deci pasii astia cred ca i-ar putea face si un programator mediu.

Totusi, sa nu subestimam “var_dump-ul” folosit cu un IDE ca PHPStorm. S-ar putea sa ai timpi mai buni in rezolvarea problemelor cu tool-urile astea decat cu Blackfire sau Xdebug.

Oricum, din punct de vedere business, cred ca diferenta intre un programator mediu si unul avansat se reduce la timpi de executie si mai putin la cunostinte. Probabil ar trebui sa dezbatem si partea asta mai mult.

2 Likes

@tacheshun.
Nu inteleg de ce vardump-ul e mai bun decat xdebugul in PHPSTORM. Eu pun din IDE un breakpoint pe o linie si acolo se opreste codul meu. Pot face watches, stack call trace sau run to cursor. Si eu folosesc var_dump si print_r , dar mai mult acolo nu am debugger connection si dim obisnuinta. Dar e corect de discutat.

Tool-ingul e important. Chiar daca nu obtine tot timpul timpi mai rapizi, el ofera standardizare in executie la nivel de proiect. Iar debuggul e un tooling, la fel ca si code quality tools. Mergand pe ideea ta si eu inclin ca aptitudinile de a folosi mare parte din tooluri tin de nivelul mediu de programator mediu.

Apropo, stiu firme care au 3 niveluri pe fiecare din cele 3 categorii:

  • Junior (incepator, mediu, avansat)
  • Senior (incepator, mediu, avansat)
  • Expert (incepator, mediu, avansat)
1 Like

Nu vreau sa generalizez, dar in multe cazuri pur si simplu nu ai acces la debugger, cum ai punctat si tu.

Clasificarea programatorilor mie mi se pare buna. Inseamna ca la un moment dat individului i se va face o evaluare(stiu ca unii veti rade, dar in multe companii nu se face asa ceva), inseamna ca programatorul stie exact care va fi traiectoria lui in firma, si de ce nu, poti face publice treptele salariale pentru o mai buna transparenta.

As fi curios sa aflu si motive contra acestei clasificari. Nu caut cearta :smile: doar sunt curios.

1 Like

Clasificarea asta a fost mereu o tema de discutie “nice to have” cand vorbeam cu diversi prieteni programatori (php sau non php). Apoi a devenit un pain in the ass cand discutam cu “recruiteri” (care imi aduceau cv-uri) si fiecare intelegea ce vroia cand discutam despre junior/senior/etc.

Acum, suntem in situatia de angaja programatori (senior sau medium) si ma gandeam ca o trecere in revista a lucrurilor m-ar ajuta foarte mult in a evalua cum stau lucrurile.

E clar ca intotdeauna o standardizare ajuta. Cand o sa am o prima versiune o sa o sharuiesc (criticile vor fi de ajutor :slight_smile: )

2 Likes

Esti exact ce crezi ca esti :slight_smile:
E mult mai usor sa devii mediu/avansat daca te bagi in situatii pentru programatori avansati.

Fake it till you make it

8 Likes

I moved 5 posts to a new topic: Despre anunțurile de angajare

1 Like

De mult aveam si eu in minte asa ceva. Cand esti junior, nu vezi prea mult in fata si nu iti spune nimeni. Pe masura ce acumulezi ore de munca tinzi sa te crezi senior, dar nimeni nu iti spune precis asta. Asteptarile pot fi uneori nerealiste. De multe ori am petrecut timp cu colegii aflati la inceput, pentru a le arata unde sunt, si cat de mult mai au de munca pana sa progreseze vizibil.
Pe de alta parte, cum ati observat si voi in threadul separat, HR people au alt limbaj (comune sunt doar prescurtarile :P), iar managerii non-tehnici reactioneaza la cei mai sociabili si alunecosi, in loc de cei mai priceputi (care sunt de obicei asociali).
Acestea fiind zise, m-am apucat sa formulez in forma unei piramide aceasta evolutie din viata dezvoltatorului, si mi-ar face mare placere sa aud parerile voastre: http://www.tekkie.ro/processes/the-software-craftsmanship-pyramid/
In mod firesc ar trebui sa urmeze detalierea fiecarei feliute de acolo, sa vedem cum stam si cu timpul.

5 Likes

Prostii și prejudecăți. V-ați obișnuit toți să credeți că developerii buni trebuie să fie cavemani, că așa scrie pe internet.

2 Likes

Tind sa nu fiu de acord cu tine, Bogdan. Pentu a putea produce cod de calitate, e important sa reusesti sa te detasezi si sa te focusezi asupra taskului care trebuie sa fie rezolvat. Asa-numitul “flow”. Asta a dus ca unii oameni sa perceapa asta (si sa o documenteze in diverse moduri) drept un comportament asocial. Dupa atatia ani intre programatori, inca nu am cunoscut niciunul care sa fie o floricica sociala si care sa produca un cod de calitate, in intervalul de 8h dintr-un job standard. Nu am citit undeva pe internet, asta e experienta mea personala, si am lucrat in mai multe companii si mai multe tari.

De asemenea, un trend care in sfarsit incepe sa fie demontat este cel de “cultural fit” gresit inteles, in care cei care au obiceiuri comune cu managerul sunt “fit” si ceilalti mai putin. Articolul la care fac trimitere aprofundeaza foarte bine parerea mea, asa ca nu voi repeta ce scrie acolo.

Eu cred in meritocratie, si crede-ma ca fiind fata am invatat pe pielea mea ca e doar un ideal spre care e bine sa tindem. E plin de oameni ca si tine care nu ofera argumente, doar pareri, si le impun cu mult testosteron si zbarlit de sprancene. Noi sa fim sanatosi :smile:

3 Likes

I moved 4 posts to a new topic: Introvertit, Asocial, Antisocial

I moved a post to an existing topic: Introvertit, Asocial, Antisocial