Începutul de an pare să fie permanent o situaţie care poate genera momentum pozitiv. “Vreau să fac asta în anul care vine”. Şi, de cele mai multe ori, ajungi undeva cam la 60-70% (din estimările proprii, care evident sunt mult prea optimiste) din drumul care trebuie să-l parcurgi ca să-ţi atingi obiectivul.
Niciodată nu m-au încântat jumătăţile de măsură, aşa că renunţam din start. Chiar şi la examenele de la facultate: o groază de restanţe le-am acumulat pentru că n-am mai mers la examen. Pentru că nu ştiam materia şi, în sinea mea, ziceam că n-are sens. (Sfat pentru politehnişti: niciodată să nu faceţi asta. Un examen e picat sigur doar dacă nu te prezinţi la el.)
Anul trecut am zis “What the fuck? Hai să încerc!”.
Pe la sfârşitul lui martie m-am angajat la o companie, Brainient pe nume. Ruby on Rails developer amator, cu ceva cunoştinţe generale despre programare. Nimic impresionant. Am încercat să prind tot ce am putut de acolo până când am simţit că nu mai evoluez şi că performanţele mele de la serviciu erau din ce în ce mai slabe. Era vorba de mediu, de lipsa experienţa oamenilor cu care lucram (nu o zic cu răutate, media de vârstă era undeva pe la 22 de ani, Emi, patronul, având 21), de nerăbdarea unor clienţi, calitatea rezultatelor.
Toate aceste lucruri m-au făcut să-mi pierd interesul, deşi am avut marea şansă să discut cu oamenii care plăteau pentru software. Am apucat să văd nişte sume pentru vreo două proiecte, am apucat să primesc un mail entuziast de la o clientă, mulţumindu-mi mie şi programatorului care a făcut toată magia într-un timp foarte scurt. Pe de altă parte, am avut şi un proiect ratat complet, cu întârzieri de vreo 3 săptămâni şi mare parte e vina mea, pentru că nu reuşisem să creez un momentum şi că eram destul de detaşat de soluţia respectivă (erau momente în care habar n-aveam cam ce s-a implementat, ce bug-uri s-au rezolvat, etc).
După Brainient, am învăţat câteva lucruri:
- Orice unealtă e bună, cât timp e folosită. De exemplul, software-ul de planning. Fusese cândva Basecamp, apoi am trecut la ActiveCollab, apoi Trac, apoi RedMine şi apoi nimic. Aşa că mai nimeni nu folosea uneltele respective pentru că erau şanse ca peste vreo 2-3 săptămâni să se piardă totul. Doar bug-tracking-ul se făcea via Google Spreadsheets, o decizie nu neapărat fericită.
- Cel care conduce echipa e responsabil de viteza de execuţie. Foarte rapid după ce am ajuns “in charge” am observat că interacţiunile mele cu codul erau nule. Ceea ce e foarte fals. Un Project Manager bun rulează codul zilnic, ştie ce se întâmplă pe acolo şi nu se uită prin cod cum mă uitam eu prin PHP (eu m-am apucat de Ruby pentru că nu suport PHP-ul). Eu nu făceam acele lucruri şi acesta era motivul pentru care un proiect a fost ratat (sau era să fie ratat).
- “Best practices” se numesc “best” dintr-un motiv anume. Utilizarea unui sistem de versionare a codului sursă era oarecum opţională şi se făcea un “push” în direcţia aceasta. Dar dacă dădeai un `svn log` nu vedeai nici un mesaj de commit. O unealtă specifică pentru bug tracking nu exista (spreadsheet-ul nu prea se pune, avem nevoie de screenshot-uri când lucram cu web-ul). Testare ioc, şi aici nu mă refer la unit testing, ci la verificat dacă merge codul pe care l-ai scris.
- Cuvântul dat contează foarte mult. Şi aici nu mă refer la discuţiile cu clienţii, ci promisiunile făcute în interiorul firmei. Dacă ai spus că faci un lucru la un moment dat, atunci să te asiguri că faci asta atunci. Aşa creezi viteză în cadrul echipei, nu mai vorbesc de respect şi de o comunicare mai bună. Şi mişcarea asta trebuie să vină de sus în jos, nu invers.
- Interestingness-ul contează mult. Aşa, ca întrebare de 1000 de puncte şi excursie la mare: câte soluţii identice (sau aproape identice) din punct de vedere tehnic poate un programator să facă până când se plictiseşte?
Imediat după, la insistenţele unui prieten bun de-al meu, am intrat într-un proiect ASP.NET. Ştiu că nu eram pregătit, dar eram destul de la pământ cu finanţele şi am acceptat. Big mistake. Şi încă nu băgasem la cap ce învăţasem la Brainient.
După o perioadă de repaus, lucrez cu un mic start-up din Silicon Valley, TrexGlobal. Fac aplicaţii financiare pe Ruby on Rails, deşi acum 2 ani aş fi putut să jur că nu-s în stare să fac aşa ceva. Adevărul e că n-ai nevoie de un strop de ASE pentru asta (oricum legislaţia e diferită) şi, oricum, domain expert-ul ştie să vorbească pre limba programatorilor. Iar problemele cu care mă confrunt sunt strict de natură tehnică.
Pe 2008 sper să devin un programator mai bun. Sunt două laturi deficitare, pe partea tehnică: testarea automată a codului şi documentarea. Am început să presar comment-uri prin codul sursă, dar nu e nimic compatibil RDoc şi în maxim o lună vreau să fumez rSpec. Mai sunt două proiecte la care vreau să lucrez, separat de munca pentru startup-ul de care ziceam mai devreme. O idee a unui amic plus un proiect pe care l-am început acum un an şi l-am abandonat (nu-i o idee uimitoare, dar vreau să-l finalizez).
Iar la sfârşitul anului aş vrea să ajung commiter la un proiect open source, cum spuneam acum două luni. Mă gândeam la Rails, dar acolo numai membrii echipei core au drepturi de commit. Apoi, cu lansarea Ruby 1.9 mi-am dat seama că m-ar încânta să contribui la Ruby, nu doar la Rails (şi, în acelaşi timp, aş învăţa o groază de lucruri). Cu puţină ambiţie, poate o să am patch-uri la amândouă, dar… Who knows ;-)
Pe plan personal, aş vrea să fiu un pic mai independent de ai mei şi cred că dacă m-aş muta într-o garsonieră (un fost coleg de liceu ar fi interesat să share-uim un apartament de 2 camere, we’ll see) ar fi un pas în această direcţie.
Peste vreo 12 luni tragem linie.
Succes ;)
Eu nu plec d-acasă, îmi convine să am mâncarea gata, țoalele aranjate și cheltuieli zero. În rest ne descurcăm noi :D
:) Bafta cu obiectivele…
Totusi, mi se pare straniu ca dupa ce ai lucrat la Poli cu Microsoft sa mai fie nevoie de inca o experienta pentru a ajunge la unele din concluziile trase… de exemplu
“Un Project Manager bun rulează codul zilnic, ştie ce se întâmplă pe acolo…”
WELL DUH…Project Managerul e reponsabil de proiect si de reusita acestuia….deci adjectivul bun nu are ce cauta acolo.Poate orice Project Manager care nu e fara experienta stie ce se intampla pe acolo.
Mi se par incredibile si lipsa de versioning system, de testare a codului scris (????!?!?!) iar partea asta
“Orice unealtă e bună, cât timp e folosită” cred ca nu o inteleg…schimbarile alea se datorau carui fapt?
Mi-e greu sa cred ca o firma atat de haotica poate supravietui…
Well, pot să pariez cu tine că peste 50% din firmele de software din România lucrează fără versionarea codului sursă. Şi în majoritatea cazurilor nu prea se explică ce-i cu sistemul ăla acolo.
Un mic test: întreabă 10 studenţi din Politehnică ce se descurcă la materiile de programare ce sistem de versionare a codului folosesc şi de ce. Răspunsurile sunt destul de relevante pentru că ei sunt viitorii programatori.
Cât despre Project Manager: poate că nu am fost suficient de explicit, dar încercam să subliniez importanţa interacţiunii cu codul scris. Nu e suficient să ai un fişier în care să “ştii” cum ar trebui să stea aplicaţia, trebuie să simţi cum evoluează de la o versiune la alta (chit că-i doar o versiune în plus în subversion, de exemplu). E un pic mai complicat să faci acest lucru fără să baţi la cap programatorii. Aş risca spunând că în ziua de azi PM-ul nu-şi are rostul, putând fi înlocuit de un Team Lead sau ceva aproximativ.
Experienţa cu Microsoft a fost un pic de altă natură. N-am avut ocazia să interacţionezi cu oameni în subordinea mea, să văd cum se mişcă ei, cum mă mişc eu, etc.
Majoritatea proiectelor mari de soft sunt imposibil de coordonat/finalizat/whatever fara un sistem de versioning…mai ales cu cat este mai mare numarul de programatori care lucreaza la acel proiect.Iar studentii din Poli ar tb sa se inspire de la Google cand invata (sau sa zicem ca isi dau interesul pentru the real world) si nu de la firmele romanesti care traiesc de pe o zi pe alta.
(totusi stiu o multime de firme romanesti care folosesc versioning system)
Nu sunt foarte de acord cu interactiunea Project Managerului cu codul scris, de altfel in firmele de soft Project Managerul este mai mult un fel Senior Developer + Team Lead + Coordonator + Project Manager (si mult mai putin Project Manager decat oricare din cele mentionate).
Nu cred ca vei gasi in orice manual de Project Management, inclusiv cele de PM pe soft, obligativitatea interactiunii cu codul.
Nu asta inseamna Project Management…si da ai risca spunand ca PM-ul nu-si are rostul…cred ca pur si simplu nu se potrivea in peisaj in situatia data.
Sunt perfect de acord cu tine. Project Managerul trebuie să fie Senior Developer + Team Lead + Coordonator + Project Manager.
Succes in a deveni un programator mai bun! Eu vroiam doar sa te felicit pentru ca citesti Jack Kerouac, On the Road! Good choice! :)
Cu greu se ajunge commiter la Rails ,baietii au mentalitate de gasca prea dezvoltata…
Oricum success cu Ruby sau cu orice proiect iti alegi!
succes pe 2008!
Eu nu am auzit de firme in Romania care sa nu foloseasca source control. Pana si la primul meu job - care a fost mult mai dezastru decat ce ai descris tu acolo - foloseam CVS. Cred ca e mai mult o chestie de bun timt decat de educatie. Cand vezi cat e de aberant sa copiezi fisierele manual incepi sa cauti o solutie mai buna. Asta desigur daca vrei sa evoluezi.
Cand vine vorba de testare automata, acolo nu e asa evidenta nevoia. Dar odata ce incepi sa o folosesti te intrebi cum puteai fara. Arunca un ochi si peste Continuous Integration!
Fii atent cu “documentarea” - teoria mea e ca codul trebuie sa fie “self explanatory”. Daca ai o structura cat de cat ok si denumesti clasele, functiile si variabilele calumea codul (in mare parte) se poate citi ca si o poveste. In cazul asta nu numai ca nu are sens sa pui comentarii - ci vei ajunge in situatii in care schimbi codul si nu modifici comentariul. Sau vei vedea aberatii de genul (eu le-am vazut peste tot si de fiecare data ma gandesc ce era in capul celui care a scris comentariul):
// process the request
request.Process()
Deci dupa mine comentariile ar trebui folosite DOAR in situatiile in care nu e evident ce se intampla - sa fie ca o completare nu ca o duplicare la firul povestii.
E bine sa continui sa scrii cod, iti tine mintea antrenata. Desigur, depinde in ce “doze” o faci …