• Viorel Bota

Coding Katas

Perfecționarea prin practică

Kata este un cuvânt japonez care înseamnă “formă”. Termenul face referire la o secvență de exerciții practicate în mod repetat de cei care se antrenează pentru concursuri de karate. Prin practicarea Kata, sportivul reușește să își îmbunătățească tehnica dar și timpii de reacție.

Ideea de a crește performanța prin exercițiu apare și în alte sporturi. De exemplu jucătorii de tenis au serii de exerciții pe care le fac pentru a își îmbunătăți un anumit tip de lovitură. Iar jucătorii de șah se antrenează prin analiza unor exerciții extrase din jocuri celebre.

Aceste practici au în comun ideea că pentru a deveni buni într-un anumit domeniu oamenii au nevoie să se angajeze în mod intenționat în procese de exersare a abilităților. Trebuie să definească o listă a abilităților pe care doresc să le dezvolte și trebuie să căute sau să creeze medii controlate în cadrul cărora pot exersa acele abilității.

K. Anders Ericsson notează în articolul “Deliberate Practice and Acquisition of ExpertPerformance: A General Overview” faptul că oamenii au tendința să își îmbunătățească o abilitate necesară până la nivelul la care ei pot pune în aplicare acea abilitate în mod automat și cu foarte puțin efort. Iar pentru a trece de acel nivel și pentru a ajunge experți într-un anumit domeniu, este nevoie de practicarea intenționată a unor exerciții special create pentru antrenament.

Un lucru important de menționat este că nu se pot obține aceleași efecte prin repetarea unor acțiuni care nu sunt special gândite pentru a dezvolta o abilitate. De exemplu sunt mulți oameni care conduc autoturismul propriu în fiecare zi. Totuși asta nu înseamnă că pot concura cot la cot cu piloții de curse.

Același lucru este valabil și pentru programatori. Faptul că lucrează în fiecare zi la dezvoltarea unor aplicații, ajută până la un anumit punct. Iar pentru a deveni experți în domeniul lor, ei au nevoie să rezolve exerciții clar definite care au ca obiectiv antrenarea unor abilități.


Coding Kata

Coding Kata reprezintă un exercițiu special creat pentru a ajuta la asimilarea de noi abilități sau cunoștințe.

Conceptul este menționat de Dave Thomas în “The Pragmatic Programmer” și de Robert C. Martin în cartea “The Clean Coder”. Robert C. Martin explică cum programatorii pot învăța să pună în aplicare bune practici de programare prin practicarea unor exerciții construite cu scopul de a dezvolta anumite abilități.

Exercițiile de tip coding kata pot fi gândite și pentru a acomoda doi sau mai mulți programatori. De exemplu unul sau mai mulți programatori pot scrie testele iar alt programator poate implementa soluția. Rolurile se pot schimba la fiecare rundă, pentru ca toți participanții să aibă ocazia de a vedea lucrurile din diferite puncte de vedere.

Un alt mod de a aplica coding kata în pereche este prin utilizarea tehnicii de pair programming. Unul din programatori scrie soluția la tastatură, în timp ce alt programator contribuie cu indicații, în timp real, asupra soluției implementate. Asta ajută mult procesul de învățare deoarece analiza deciziilor de implementare este importantă pentru a învăța cât mai mult din practicarea kata.


Condiții pentru un exercițiu de calitate

Pentru a maximiza eficiența exercițiilor de programare sunt câteva lucruri esențiale de luat în considerare:

  • Motivația care duce la practicarea exercițiului trebuie să vină din interiorul celor care o practică. K. Anders Ericsson prezintă, în articolul menționat mai sus, mai multe studii care arată că dezvoltarea apare doar atunci când participanții caută în mod intenționat să își îmbunătățească abilitățile. Atunci când participanții la exercițiu nu își doresc să facă acel exercițiu concentrarea lor este redusă și în consecință avantajele obținute din practicarea exercițiului sunt reduse.

  • Cadrul în care sunt efectuate exercițiile trebuie să elimine sau să reducă eventualele întreruperi, pentru a permite participanților să se concentreze pe rezolvarea exercițiului.

  • Obiectivul exercițiului trebuie să fie clar definit de la bun început. Lipsa clarității obiectivului poate reduce eficiența exercițiului deoarece practicantul poate să piardă din vedere abilitățile pe care trebuie să și le dezvolte.

  • Gradul de complexitate a exercițiului trebuie ales ținând cont de cunoștințele și abilitățile celui care practică exercițiul. Un exercițiu prea ușor nu va aduce beneficii reale practicantului, în timp ce un exercițiu prea greu poate crea frustrare și în final poate duce la abandonare exercițiului.

  • Felul în care este gândit exercițiul trebuie să permită practicantului verificarea și corectarea la fiecare decizie luată. De exemplu după fiecare decizie de implementare practicantul ar trebui să poată consulta soluția recomandată pentru a reflecta asupra calității deciziei.

  • Exercițiul ar trebui să fie gândit astfel încât permită practicantului îmbunătățirea graduală a performanțelor prin repetarea exercițiului, poate chiar în contexte sau forme diferite.

  • Durata exercițiului trebuie să fie limitată astfel încât practicantul să își poată menține concentrarea pe toată durata exercițiului. Exercițiile mai lungi sau mai complexe ar trebui împărțite în pași de durată mai scurtă. Dacă sunteți interesați despre cum puteți să vă mențineți puterea de concentrare pe durate lungi de timp vă recomand să urmăriți înregistrarea cursului ținut de Marty Lobdell la colegiul Pierce.

Colecții de coding kata

Cu o simplă căutare pe google sau github puteți găsi o mulțime de exerciții intitulate coding kata. Eu voi lista aici unele despre care știu eu:

Un alt lucru demn de menționat este că sunt anumite pagini care mențin și pun la dispoziție colecții de exerciții:

Exceptând unit test și TDD, exercițiile de tip kata construite pentru a dezvolta abilitățile celor care fac software testing sunt mai greu de găsit. Până în momentul de față am găsit o singură colecție publicată pe soapui.org: https://www.soapui.org/testing-dojo/testing-katas/what-are-testing-katas/


Referințe