Mișcarea software craftsmanship promovează ideea că singurul mod în care un dezvoltator poate fi rapid este prin a se comporta rațional în perioade de criză. Această gândire este o reacție la comportamentul de a scrie cod greu de modificat și de înțeles, practic de a produce datorie tehnică (eng. Technical debt), în momentul în care trebuie să livrezi software într-o perioadă scurtă de timp.
Modul prin care mișcarea software craftsmanship crede că un dezvoltator poate să devină atât de rapid este prin a practica cât mai des, în contexte cât mai diferite, pe platforme și limbaje cât mai diferite. Astfel deliberate practice este foarte strâns legat de orice dezvoltator care se numește "aspiring software craftsman" sau "software craftsman".
Există nenumărate asemănări între sport, muzică și programare. Performanța pe teren, pe scenă sau în producție este un factor esențial pentru succes în aceste domenii. Dar la fel cum un sportiv sau un muzician are nevoie de practică pentru a deveni expert în momentul în care activeaza, la fel și un dezvoltator software are nevoie de practică pentru a stăpâni tot mai bine domeniul său.
Problema esențială în industria software este că, spre deosebire de sport sau muzică, un dezvoltator îsi petrece o proporție prea mare din timp "pe scenă" și prea puțin timp într-un mediu de învățare. Iar aceasta se întâmplă într-un domeniu foarte dinamic, unde schimbarea și noutatea este la ordinea zilei. Atunci un aspiring software craftsman trebuie să își aloce timp pentru a se perfecționa. Acesta poate face o investiție, iar în loc să lucreze efectiv 40 de ore pe săptămână, lucrează doar 30, iar restul de timp și-l dedică practicii. Altă opțiune este să aloce timp seara și/sau dimineața în fiecare zi precum și zilele de sâmbată și/sau duminică pentru a învăța lucruri noi.
Dar cum să practicăm? Ei, bine, există un număr de formate consacrate de deliberate practice, dar în cele ce urmează ne vom concentra pe următoarele: Coding Kata, Performing Coding Kata, Coding Dojo, Cyber Dojo, Testing Dojo, Coderetreat, Test Automation Retreat, Pair-programming, Pet projects, Coaching.
Conceptul acestui tip de de practică este foarte simplu: aflu unde vreau să mă perfecționez și vreau să practic într-un interval scurt de 10 minute - o oră o activitate care mă va ajuta să fiu mai bun. Această idee vine tot din artele marțiale, unde un învățăcel trebuie să repete anumite mișcări până este mulțumit de progres și poate să îi arate sensei-ului cum a progresat. Pentru dezvoltatori se aplică același model: acesta repetă rezolvarea aceleiași probleme, în același mod, pentru aceeași perioadă de timp până când consideră că rezolvarea, dar și etapele ei, sunt unele corecte într-un timp foarte scurt.
Un artizan software dorește să practice minim 10 ore pe săptămână, pentru că acesta este singura modalitate prin care poate să fie mai rapid și mai eficient.
Tu cât de mult exersezi pe săptămână?
Un prezentator scrie cod în fața unei audiențe pe o tematică prestabilită și într-un interval de timp prestabilit. Acesta trebuie să explice audienței ce face în timp ce progresează. Audiența este rugată să nu intervină decât în cazul în care chiar nu înțeleg ce se întâmplă. Acest gen de exercițiu este foarte intens pentru prezentator și poate fi foarte educativ pentru audiență, pentru că cei din audiență pot să învețe lucruri noi văzând cum un coleg de breaslă rezolvă o problemă.
Știu că ai vrea să faci un coding kata. Când il faci?Este un format ce provine din artele marțiale și este adaptat pentru dezvoltatori. Coding dojo este un exercițiu de grup cu scopul de a transmite cunoștințe între participanți. Este propusă o tematica și o perioadă de timp în care grupul va încerca să rezolve o problemă, exersând anumite practici.
O caracteristică esențială a acestui format este ca el să aiba un timp prestabilit de desfășurare și o tematică foarte specifică. O persoană experimentată facilitează această întâlnire, concentrându-se ca regulile să fie aplicate, timpul să fie respectat și scopul convenit al exercițiului să fie păstrat.
Coding dojo randori. Este forma cea mai răspândită, în care doi programatori scriu cod folosind un proiector pentru ca toată lumea să poată vedea. Ei folosesc pair-programming, iar primul care a început sesiunea este înlocuit la un interval de timp (în jur de 5-7 minute), de următorul programator din sală. Perechea celui care pleacă începe să scrie cod, iar cel nou-venit doar observă. După același interval de timp cel care scrie cod se retrage și este înlocuit din nou cu cineva din sală. Se poate face o listă în avans, pentru ca să se știe de fiecare dată cine va fi la rând. Astfel, prin rotație, toată lumea va scrie cod și va vedea cum scriu cod ceilalți.
O variație este ca atunci când cineva din sală are ceva de spus trebuie să meargă la tastatură și să vorbeasca. Astfel nimeni din sală nu are voie să vorbească, decât atunci când scrie cod pe proiector.
Coding dojo mai are o variație: o persoană foarte experimentată face un coding kata cu un scop bine nefinit și cu o durată de timp prestabilită (20-30 minute). Apoi audiența este rugată să repete pașii realizați de prezentator. În etapa a doua, în care audiența repetă pașii inițiali, prezentatorul se transformă în facilitator, asigurându-se că scopul exercițiului este păstrat și că regulile sunt respectate. Acest format este mult mai aproape de ceea ce se întâmplă când un sensei vrea să arate clasei cum trebuie să realizeze anumite mișcări și apoi îi pune să repete dându-le sugestii continue de îmbunătățire.
Ai aflat unde și când e următorul coding dojo la tine în oraș?Cyber dojo este o aplicație online creată de Jon Jagger pe principiile coding dojo. Aceasta permite conectarea în paralel a mai multor persoane sau grupuri, sau accesarea individuală a unui server. În aplicația online se poate scrie cod în majoritatea limbajelor curente. Aceasta conține un număr destul de mare de probleme care pot să fie rezolvate. Avantajul cyber dojo este ușurința și rapiditatea utilizării. Nu este nevoie de nicio setare pentru un mediu de dezvoltare.
După ce termini de citit acest articol începi să-l folosești, nu? Iată link-ul: www.cyber-dojo.com.După ce coding dojo a devenit foarte popular între programatori, aceleași principii au fost aplicate pentru ca și testerii să poată învăța unii de la ceilalți. Pentru mai multe detalii accesați http://www.testingdojo.org.
Ce mai aștepți să participi la un testing dojo?În anul 2009 un grup de programatori s-au întâlnit la conferința Code Mash în SUA și s-au gândit că ar vrea să aibă un format de o zi întreagă pentru a exersa, spre deosebire de formatul uzual al coding dojo de câteva ore.
Ideea unui code retreat este de a combina mai multe din elementele dintr-un coding dojo sau coding kata într-o singură zi de exersare. Code retreat-urile au loc de obicei sâmbăta și durează toată ziua. Evenimentul este structurat în 6 sesiuni de 45 de minute, separate de retrospective scurte. Regulile sunt simple: în cadrul fiecărei sesiuni, programatorii lucrează în pereche cu scopul de a scrie cod cu anumite constrângeri impuse de facilitator și care facilitează învățarea. După fiecare sesiune, codul scris este șters complet, perechile și constrângerile se schimbă și scrisul de cod reîncepe.
România a fost de la bun început foarte activă în acest domeniu, Alexandru Bolboacă și Maria Diaconu fiind doi dintre cei care au ajutat la cristalizarea formatului actual. De asemenea coderetreat-uri sunt organizate în mod uzual în comunitățile AgileWorks din România.
În fiecare an este organizată "Global Day of Coderetreat", când orașe din întreaga lume sunt invitate să participe la un eveniment cu același format. Timp de 32 de ore programatori de pe toate continentele învață să devină mai buni prin practică. Multe dintre orașe comunică prin video conferințe pentru a se cunoaște și pentru a împărtăși învățăturile din acea zi.
Când este următorul coderetreat? Răspunsul este aici: http://coderetreat.org!
Urmând formatul unui coderetreat, Makus Gärtner a creat această variație unde testerii sunt invitați să participe la 6 sesiuni de 45 de minute pentru a automatiza teste pentru o aplicație web. Formatul este încă nou și proaspăt, dar foarte valoros. (Ref http://www.shino.de/2012/04/28/coderetreat-goes-testautomation)
Când participi la următorul test automation retreat?Aceasta este o formă foarte simplă de practică. Vrei să faci ceva și chemi pe altcineva să te ajute pentru că încă un punct de vedere este binevenit.
Din experiență putem spune că pair-programming este cea mai rapidă modalitate de învățare. Ai nevoie doar de un alt profesionist care să aiba același interes ca tine. Apoi lucrând împreună amandoi veți învăța foarte multe unul de la celălalt. Este de asemenea și obositor, deci încercați să nu exagerați, dar devine mai ușor de acceptat pe măsură ce crește exeperiența cu această practică.
Pair-programming poate fi făcut chiar și remote.
Tu când ai făcut pair-programming ultima dată?O modalitate foarte bună de a exersa este un proiect personal. Orice tehnologie și orice tematică este bienvenită cu o singură condiție: să fii foarte pasionat de ceea ce faci. Un proiect personal ajută pentru că este un mediu real de dezvoltare, dar deciziile nu sunt luate de un client sau de un șef, ci chiar de tine. Astfel poți să înveți să iei decizii de arhitectură, de design. Cât de bine este să ai codul curat și alte practici uzuale din lumea artizanilor software.
A începe un proiect personal este foarte simplu. Oricare dintre noi are o idee pe care ar vrea s-o exploreze scriind un program. Așa că trebuie doar să ne alocăm puțin timp pentru a o pune în operă. Adesea se întamplă ca un proiect personal să se transforme într-un produs vandabil.
Tu cât timp lucrezi pe luna la proiectul tău personal?Orice formă de deliberate practice poate fi realizată de unul singur, sau sprijinit de un coach tehnic. Când este implicat și un coach tehnic procesul de învățare este accelerat puternic, pentru că feedback-ul continuu și sugestiile concrete, chiar lucrul în sesiuni de pair-programming, sunt factorii determinanți pentru o învățare eficientă. Această relație se aseamănă cu relația dintre învățăcel și sensei în artele marțiale. Oricine poate învăța arte marțiale din cărți, sau de la practicanți puțin experimentați, dar un sensei ajută cu sfaturi pentru a avea un proces rapid și coerent de învățare.
Tu când ai lucrat cu un coach tehnic ultima dată?Participarea într-o comunitate de profesioniști din domeniul de activitate este un alt factor care ajută la îmbunătățirea continuă. Aici puteți cunoaște oameni cu aceleași pasiuni, cu nivele diverse de cunoștințe, dar care au un scop comun: să învețe unii de la ceilalți. Există comunități de programatori, testeri, arhitecți în toate orașele mari din România și din Europa. De asemenea există comunități care se ocupă de un limbaj specific sau o tehnologie specifică, în cazul în care scopul învățării este o tehnologie în sine.
Majoritatea evenimentelor din comunitățile locale sunt gratis, acesta fiind un factor în plus pentru a atrage cât mai mulți oameni pasionați din lumea IT și nu numai.
Comunitățile Software Craftsmanship (AgileWorks în România) se concentrează mai curând pe lucrurile fundamentale pe care profesioniștii din lumea software ar trebui să le stăpânească. Membrii acestora au specializări, vârstă sau experiență foarte diverse.
Dacă nu știi deja care sunt comunitățile din orașul tău, dă o căutare pe internet sau pe meetup.com!Un expert separă abilitățile care sunt necesare pentru a fi un expert și se concentrează pe îmbunătățirea acelor abilități în timpul practicii zilnice, adesea prin pairing și ajutat îndeaproape de feedback-ul unui coach. Un alt factor important al deliberate practice stă în practicarea continuă a unei abilități la niveluri tot mai provocatoare cu intenția de a o stăpâni. (Ref Mayer, R. E. (2008). Learning and Instruction. Upper Saddle River, New Jersey: Pearson Education, Inc)
Un lucru este clar, fără practică nu putem deveni experți într-un domeniu atât de vast și dinamic precum industria software. Astfel vă invităm să începeți să practicați acasă sau la serviciu. Iar apoi vă invităm să vă implicați în comunitatea locală prin activități de practică în group. Ce mai așteptați?