Content deleted Content added
rm redundant image |
Link suggestions feature: 3 links added. |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 1:
{{short description|Collaborative technique for software development}}
[[File:Wocintech (microsoft) - 61 (25926639341).jpg|thumb|Pair programming]]
'''Pair programming''' is a [[software development]] technique in which two [[computer programmer|programmers]] work together at one [[workstation]]. One, the ''driver'', writes [[Source code|code]] while the other, the ''observer'' or ''navigator'',<ref>{{cite conference |last1=Williams |first1=Laurie|author1-link=Laurie Williams (software engineer) |title=Integrating pair programming into a software development process |pages=27–36 |doi=10.1109/CSEE.2001.913816 |conference=14th Conference on Software Engineering Education and Training |date=February 19–20, 2001 |___location=Charlotte |isbn=0-7695-1059-0 |quote=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.}}</ref> [[code review|reviews]] each line of code as it is typed in. The two programmers switch roles frequently.
While reviewing, the observer also considers the "strategic" direction of the work, coming up with ideas for improvements and likely future problems to address. This is intended to free the driver to focus all of their attention on the "tactical" aspects of completing the current task, using the observer as a safety net and guide.
==Economics==
Pair programming increases the [[man-hour]]s required to deliver code compared to programmers working individually.<ref name="ijhcs"/> However, the resulting code has fewer defects.<ref name="costs-benefits"/> Along with code development time, other factors like field support costs and quality assurance also figure into the return on investment. Pair programming might theoretically offset these expenses by reducing defects in the programs.<ref name="costs-benefits">{{Cite journal|last1=Cockburn|first1=Alistair|last2=Williams|first2=Laurie|author2-link=Laurie Williams (software engineer)|title=The Costs and Benefits of Pair Programming|journal=Proceedings of the First International Conference on Extreme Programming and Flexible Processes in Software Engineering (XP2000)|author-link=Alistair Cockburn|year=2000|url=http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF|archive-date=2016-12-17|access-date=2007-11-05|archive-url=https://web.archive.org/web/20161217103943/http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF|url-status=dead}}</ref>
In addition to preventing mistakes as they are made, other intangible benefits may exist. For example, the courtesy of rejecting phone calls or other distractions while working together, taking fewer breaks at agreed-upon intervals or sharing breaks to return phone calls (but returning to work quickly since someone is waiting). One member of the team might have more focus and help drive or awaken the other if they lose focus, and that role might periodically change. One member might know about a topic or technique that the other does not, which might eliminate delays to finding or testing a solution, or allow for a better solution, thus effectively expanding the skill set, knowledge, and experience of a programmer as compared to working alone. Each of these intangible benefits, and many more, may be challenging to accurately measure but can contribute to more efficient working hours.{{citation needed|date=April 2022}}
Line 23:
==Learning==
Knowledge is constantly shared between pair programmers, whether in the industry or in a classroom. Many sources suggest that students show higher confidence when programming in pairs,<ref name="strengthening"/> and many learn whether it be from tips on [[programming language]] rules to overall design skills.<ref name="support">{{cite journal |last1=Williams |first1=Laurie|author1-link=Laurie Williams (software engineer) |last2=Upchurch |first2=Richard L. |title=In support of student pair programming |journal=ACM SIGCSE Bulletin |volume=33 |issue=1 |year=2001 |pages=327–31 |doi=10.1145/366413.364614 |doi-access=free }}</ref> In "promiscuous pairing", each programmer communicates and works with all the other programmers on the team rather than pairing only with one partner, which causes knowledge of the system to spread throughout the whole team.<ref name="costs-benefits"/> Pair programming allows programmers to examine their partner's code and provide feedback, which is necessary to increase their own ability to develop monitoring mechanisms for their own learning activities.<ref name="support"/>
==Team-building and communication==
Line 44:
| doi = 10.1016/j.infsof.2009.02.001}}</ref>
Although pair programmers may complete a task faster than a solo programmer, the total number of [[man-hour]]s increases.<ref name="ijhcs"/> A manager would have to balance faster completion of the work and reduced testing and [[debugging]] time against the higher cost of coding. The relative weight of these factors can vary by project and task.
The benefit of pairing is greatest on tasks that the programmers do not fully understand before they begin: that is, challenging tasks that call for creativity and sophistication, and for novices as compared to experts.<ref name='ijhcs'>{{cite journal
Line 123:
* [[Joint attention]]
* [[Team programming]] (also known as mob programming)
* [[Body Doubling]]
==References==
|