Kaks programmeerijat paarisprogrammeerimas
**Paarisprogrammeerimine** on tarkvaraarenduses agiilne meetod, kus kaks programmeerijat teevad koostööd programmi loomisel. Üks paarilisest kirjutab koodi ning sel ajal teine paariline (vaatleja/navigeerija) vaatab läbi iga sisestatud koodirea. Antud programmeerimistehnika juures on tavapärane, et paarilised vahetavad tihti omavahel rolle.

Läbivaataja rollis oleval paarilisel on strateegiline roll programmi valmimisel, tema ülesandeks on märgata võimalikke veakohti programmis, suunata tegevust ning soovitada ideid. Läbivaataja eesmärgiks on abistada või lihtsustada koodikirjutaja rollis oleva inimese tööd võimalikult palju, et tagada töö efektiivsus. Programmeerija peaks saama keskenduda vaid koodi kirjutamisele, kasutades läbivaatajat kontrollijana ja nõuandjana.[*viide?*]

Majanduslikud tegurid
---------------------

On leitud, et paarisprogrammeerimisega suureneb inimtöö tundide arv ligikaudu 15–100% võrreldes üksi töötamisega. Seevastu on aga täheldatud, et paaristööna valminud koodijupid sisaldavad keskmiselt 15% vähem vigu. Majandusliku tasuvust vaadeldes tuleb lisaks koodi valmimiseks kulunud ajale arvestada erinevaid tegureid, näiteks programmi töökindlus. Paarisprogrammeerimine vähendab koodis tehtavate vigade arvu, mis omakorda vähendab kvaliteedi tagamisele mõeldud kulutusi.

Töö kvaliteet
-------------

Paarisprogrammeerimine võimaldab mitmekesisemaid lahendusi:

* Enamasti on kummalgil programmeerijal erinevad eelteadmised;
* Mõlemad programmeerijad mõistavad antud juhiseid natukene teisiti;
* Kumbki programmeerija läheneb probleemile erinevalt, sest tööjaotus nõuab seda.

Kuna paarisprogrammeerimisel jagavad kolleegid oma tööülesande eesmärke ja plaane, siis peavad nad arusaamatuste korral jõudma omavahel kokkuleppele. Probleeme ja lahenduskäike arutades võetakse läbi oluliselt rohkem võimalike lahenduskäike, kui oleks suutnud üksik programmeerija. Antud teguviis suurendab oluliselt valmiva koodilõigu kompaktsust ning välistab kehvemaid lahendusviise.

Rahulolu
--------

Paarisprogrammeerijate veebiküsitluses (aastal 2000) selgus, et 96% vastajatest leidis, et nad nautisid töötegemist rohkem kui üksi tehes. 95% küsitletavatest nentisid, et nad olid oma lahenduskäikudes kindlamad, kui nad töötasid paaris.

Teadmised
---------

Ei ole vahet, kas paarisprogrammeerimine leiab aset klassiruumis või kontoris, teadmisi jagatakse omavahel pidevalt. Paljud allikad viitavad sellele, et õpilased on oluliselt enesekindlamad paarisprogrammeerimisel ning õpivad programmeerimiskeele reeglitele lisaks ka visuaalselt paremini oma programme vormistama. Meeskonnasisene paariliste vahetamine aitab jagada iga programmeerija teadmisi terves meeskonnas ning kasulike töövõtete levimine kiirem ning efektiivsem terves meeskonnas. Paarisprogrammeerimine võimaldab programmeerijatel uurida oma partneri koodi ja anda tagasisidet, mis arendab oskust anda kohest tagasisidet tööle, mis valmib kellegi teise eestvedamisel.

Meeskonnasisene koostöö
-----------------------

Paarisprogrammeerimine nõuab paarilistelt probleemide ja lahenduskäikude jagamist, mis läbi on vähem tõenäoline, et head ideed ja mõtted jääksid peitu. Pidev suhtlus üksteisega õpetab suhtlema vabamalt ning arusaadavamalt. Eeltoodud teguviis parandab koostöövõimet projektiga tegelejate (meeskonna liikmete) vahel ning parandab üldist meeskonnasisest infovoogu.

Märgid kehvast koostööst
------------------------

Järgnevad märgid iseloomustavad kehva koostööd:

* Tööst taganemine, üks paarilisest tegeleb pidevalt projektiväliste tegevustega, näiteks telefonist Facebooki või e-posti sirvimine.
* "Jälgi töötegijat" nähtus esineb, kui üks paarilisest on oluliselt targem või kindlam kui teine paariline. Tihti jääb nõrgem paariline pealtvaataja rolli ning kogenum teeb töö põhiliselt üksi.[*viide?*]

Paariliste kombinatsioone
-------------------------

Tegija tegijaga
Kahte head oskajat üksteisega paari panna tundub väga ilmselge valik, et saavutada parim tulemus. Antud paarilised suudavad tihti tagada professionaalsed tulemused, kuid enamasti antud metoodikaga ei võta kasutusele uudseid lahenduskäike. Kogenud programmeerijad on vähem tõenäolisemad küsima abi millegi lahendamisel, kuna on välja kujunenud rutiin, kuidas teatud tüüpi probleeme lahendada.
Tegija algajaga
Oskajat algajaga paari pannes annab oskajale võimaluse oma teadmisi ning kogemusi jagada algajale. Moodustatud paar võib tihti juhtida tee uutele lahendustele, sest algaja on entusiastlik küsima erinevaid küsimusi, miks nii ja miks mitte nõnda. Antud paar lahendab probleeme tõenäoliselt oluliselt aeglasemalt kui kaks oskajat, kuid antud paaris on tõenäolisem, et uudsed ideed saavad kajastatud. Võib ka tekkida olukord, kus algaja tunneb ennast ebamugavalt, ning ei julge näidata üles huvi tehtava vastu, kartes jätta endast lolli muljet. Samuti võib ka juhtuda, et oskajal ei ole kannatust kommenteerida kirjutatut entusiastlikule algajale, ning sel juhul ei ole tehtav töö tõhus.
Algaja algajaga
Algajate paari panemine võib anda palju paremad tulemused, kui kaks algajat individuaalselt tööd tehes, kuid antud variant on kõige ebapopulaarsem. Algaja koostöötamine oskajaga on oluliselt efektiivsem ja kiirem moodus algaja õpetamiseks ning seetõttu eelistatakse paari panna oskajat algajaga kui et lasta kaks algajat omavahel kokku.

Vaata ka
--------

* Ekstreemprogrammeerimine

Viited
------

1. ↑  Williams, Laurie. *Integrating pair programming into a software development process*. 14th Conference on Software Engineering Education and Training. Charlotte. Lk-d 27–36. DOI:10.1109/CSEE.2001.913816. ISBN 0-7695-1059-0. One of the programmers, the driver, has control of the keyboard/mouse and actively implements the program. The other programmer, the observer, continuously observes the work of the driver to identify tactical (syntactic, spelling, etc.) defects, and also thinks strategically about the direction of the work.
2. 1 2  Lui, Kim Man (september 2006). "Pair programming productivity: Novice–novice vs. expert–expert" (PDF). *International Journal of Human–Computer Studies*. **64** (9): 915–925. DOI:10.1016/j.ijhcs.2006.04.010. Vaadatud 18.11.2012.
3. 1 2 3 4 5  Cockburn, Alistair; Williams, Laurie (2000). "The Costs and Benefits of Pair Programming" (PDF). *Proceedings of the First International Conference on Extreme Programming and Flexible Processes in Software Engineering (XP2000)*.
4. ↑  Flor, Nick V.; Hutchins, Edwin L. (1991). [[[:Mall:Google books]] "Analyzing Distributed Cognition in Software Teams: A Case Study of Team Programming During Perfective Software Maintenance"]. Koenemann-Belliveau, Jürgen; Moher, Thomas G.; Robertson, Scott P. (toim-d). *Empirical Studies of Programmers: Fourth Workshop*. Ablex. Lk-d 36–64. ISBN 978-0-89391-856-9. `{{cite book}}`: kontrolli parameetri `|chapter-url=` väärtust (juhend)
5. 1 2  Williams, Laurie; Kessler, Robert R.; Cunningham, Ward; Jeffries, Ron (2000). "Strengthening the case for pair programming" (PDF). *IEEE Software*. **17** (4): 19–25. DOI:10.1109/52.854064.
6. 1 2  Williams, Laurie; Upchurch, Richard L. (2001). "In support of student pair-programming". *ACM SIGCSE Bulletin*. **33** (1): 327–31. DOI:10.1145/366413.364614.
7. ↑  Williams, L. & Kessler, R. (2003). *Pair Programming Illuminated*. Boston: Addison-Wesley Professional.

Tõlgitud ingliskeelsest Wikipediast Pair programming (16.01.2019)