Cuvântul Kata provine din artele marţiale: este traducerea japoneză a cuvântului formă. Kata e folosit pentru a descrie şabloane de mişcare detaliate, de o anumită coreografie, care pot fi practicate fie singur, fie în perechi.
Poate să descrie şi alte acţiuni din artele marţiale cum ar fi training-ul, lupte simulate detaliate şi altele.
Kata-urile erau metode de învăţare si de training prin care tehnicile de luptă de succes erau conservate şi transmise mai departe. Practicarea Kata permitea unui grup de persoane să activeze într-o luptă folosind o tehnică sistematică, spre deosebire de o mulţime de indivizi într-o manieră haotică.
Principalul avantaj al folosirii Kata-urilor în arte marţiale este transmiterea de tehnici dovedite şi practicarea lor într-o manieră repetitivă. Aceasta ajută novicele să-şi dezvolte abilităţile de executare a acestor tehnici şi mişcări într-un mod natural ca şi un reflex. Pentru a atinge acest nivel, ideea nu este acţionarea sistematică, ci mai degrabă internalizarea acestor mişcări şi tehnici, astfel încât persoana să le poată adapta diferitor nevoi.
Exersarea ca o metodă de învăţare este ubicuă. Se poate vedea în toate domeniile, nu doar în arte marţiale:
Incontestabil este o metodă fundamentală de învăţare. Desigur, depinde de mai mulţi factori, dar cu dedicarea şi ghidarea corectă, o persoană poate să exceleze la multe lucruri doar prin exersare.
Memoria procedurală este un tip de memorie de termen lung, mai specific, dovedindu-se eficient în învăţarea bazată pe tehnici. Acest lucru e realizat prin repetarea unui task complex, rezultând astfel într-o îmbunătățire a sistemului neuronal utilizat pentru a realiza acel task. Psihologii au început să scrie despre memoria procedurală de peste un deceniu. După multe cercetări, a fost dovedit faptul că doar simpla repetare a unui task nu asigură achiziţia unei noi abilităţi. Comportamentul trebuie să se schimbe într-un un rezultat al acelei repetiţii. Dacă schimbarea comportamentală se poate observa, atunci se poate spune că s-a dobândit şi abilitatea nouă.
Dave Thomas a fost primul care a introdus ideea de Kata-uri ca tehnică de învăţare în programare. Abordarea este destul de simplă: un Code Kata este o simplă problemă de programare, intenţia fiind să fie uşor rezolvată iar şi iar, tinzând spre perfecţiune. Ideea este să ajute programatorul să rezolve problema oferită într-un mod mai bun de fiecare dată când se încearcă, în timp ce subconştientul învaţă perechi de probleme/soluţii detaliate care pot să vină în ajutor în rezolvarea de alte probleme. Kata-ul se poate face şi prin adaugarea de alte provocări, cum ar fi anumite limitări: de exemplu, folosirea unui limbaj de programare diferit faţă de cel obişnuit zilnic. Se poate realiza fie individual, fie într-un grup organizat.
Serviciul poate aduce prea multă presiune asupra programatorilor neexperimentaţi: presiunea nevoii de a livra cod de calitate folosind tehnici nefamiliare, care poate duce la frustrări, greşeli, sau lipsa aplicării de "best practices". Ajutorul din partea mentorilor nu este o permanență: programatorii experimentaţi sunt ocupaţi cu terminarea task-urilor asignate şi nu găsesc timpul necesar de alocat pentru ajutarea creşterii celorlalţi.
Pentru a deveni un programator mai bun este nevoie de exersare. Cât de bună ar fi o trupă de muzică dacă şi-ar exersa cântecele doar când ar fi pe scenă? Ce fel de calitate ar aduce o piesă de teatru dacă actorii ar primi scenariul doar cu o oră înainte de spectacol?
Multă lume e de părere că sesiunile de Code Kata se referă la rezolvarea aceleaşi probleme în acelaşi fel. Acest lucru va avea ca efect probabil învăţarea doar unor scurtături în IDE-ul folosit. Cum menţionam anterior despre memoria procedurală: doar simpla repetare a unui task nu asigură dobândirea unei noi abilităţi. Comportamentul trebuie să se schimbe devenind un rezultat al acelei repetiţii.
Ca şi cum mersul pe jos în fiecare zi nu te face un maestru al mersului pe jos, şi condusul maşinii zilnic nu te face un şofer superior, la fel nici rezolvarea aceluiaşi set de probleme de programare iar şi iar nu te va face un maestru al programării. Repetarea aceluiaşi lucru iar şi iar fără creşterea nivelului de provocare rezultă doar în complacerea minţii cu activitatea respectivă.
Dacă vrei să faci Code Kata-uri, ele trebuie să fie provocatoare. Repetarea nu va ajuta dacă creierul nu este captivat.
Creierul trebuie provocat pentru a stimula şi a crea noi căi neuronale.
Pair-programming: munca în echipă este un factor important în sesiunile de Code Kata. Acesta trebuie să încurajeze ca învăţarea să se producă în timpul implementării pentru că programatorul care nu este la tastatură observă, comentează şi întreabă, furnizând un feedback continuu (dar fără dictare, critică sau control).
Finalizarea unui task nu trebuie forţată. Dacă se pune prea mult accent pe terminarea task-ului, programatorii vor începe să compromită calitatea codului pe care îl scriu. Acest lucru se întâmplă în mediile de producţie în care se aplică prea multă presiune pe viteză în schimbul calităţii. Dacă ţinta sesiunilor de Code Kata este ca programatorii să fie mai rapizi, ei trebuie lăsaţi să exerseze fără sentimentul de presiune al completării task-ului într-un anumit timp setat. În timp se va observa că tehnicile de programare devin din ce în ce mai naturale şi rezultatul final va consta în programare mai rapidă şi calitatea codului mai ridicată.
Asigurarea faptului că la sfârşitul sesiunii codul se şterge. Se porneşte cu ideea că există întotdeauna mai multe metode în rezolvarea unei probleme şi acest lucru e adevărat mai cu seamă în programare. Dacă vei ruga zece programatori să rezolve o anumită problemă, de cele mai multe ori vei obţine zece implementări diferite. Dar care e cea mai bună soluţie dintre ele? Probabil nici una, cea mai bună soluţie fiind adeseori o combinaţie dintre câteva sau toate implementările sau poate chiar o soluţie cu totul diferită. Scopul ar fi ca programatorii să înţeleagă că există mai mult decât o modalitate de a face un anumit lucru şi ştergerea codului existent şi începerea task-ului din nou este câteodată cea mai bună opţiune.
Ajutarea perechilor de programatori să contribuie în mod egal. Perechile de programatori care participă la sesiunea de Code Kata trebuie observate şi ajutate să se trateze între ei ca membri egali. Este de obicei dificil când există o pereche ce conţine un senior şi un junior, dar e important ca acele contribuţii rezultate să fie egale. Această sesiune nu este una de mentoring.
Stricteţea legată de timp. Din când în când, tendinţa este să se mai lase puţin timp pentru dezvoltare. Aceasta este din cauză că se pune prea mult accent pe terminarea task-ului, ceea ce nu trebuie să constituie o prioritate. Programatorii trebuie să fie reasiguraţi de faptul că nu este vorba de finalizarea task-urilor; odată ce acest lucru este înţeles, ei nu vor mai cere timp în plus.
Menţinerea sesiunii distractivă, dar intensă. Niciodată nu strică puţină muzică de fundal (dar să nu distragă atenţia), iniţierea de discuţii, recompense, orice este nevoie pentru a scoate programatorii din monotonie. E importantă concentrarea asupra eliminării anxietăţilor şi reasigurarea faptului că greşelile şi eşecul reprezintă un lucru bun.
Încurajarea comunicării. Camera în care se susţine sesiunea de Code Kata trebuie să fie tot timpul zgomotoasă, plină de discuţii, schimb de idei, dar toată această activitate timpul trebuie orientată spre task-ul de rezolvat. Dacă în cameră e linişte şi programatorii sunt decuplaţi de la proces, atunci ceva nu merge bine.
Găsirea de Code Kata-uri provocatoare, dar nu inaccesibile: A nu se face greşeala de a se selecta un task prea complex pentru sesiune fiindcă atunci entuziasmul va cădea şi programatorii se vor decupla de la întregul proces.
Ideea de pornire atunci când doreşti să iniţiezi sau să participi la o astfel de sesiune de Code Kata este faptul că scopul unei Kata nu este acela de a ajunge la un răspuns corect. Tot ce contează sunt cunoştiinţele acumulate pe parcurs. Scopul este exersarea, nu soluţia.
"Code Katas", Bart Bakker, 2014
"Code Kata", Joao M. D. Moura, 2014
"Using Code Kata practice sessions to become a better developer", Kirsten, UVd, 2013
"Performing Code Katas", Micah Martin, Kelly Steensma, 2013
"Why I Don"t Do Code Katas" John Sonmez, 2013
"Code Katas: Practicing Your Craft", 2011
"Code Kata - Improve your skills thrugh deliberate practice", 2013