Team programming: Difference between revisions

Content deleted Content added
Merge from Mob programming following unopposed 2022 proposal; short text and context; see Talk:Team programming
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
 
(7 intermediate revisions by 6 users not shown)
Line 1:
{{UnreferencedMore citations needed|date=OctoberAugust 20072023}}
{{merge from|Mob programming|discuss=Talk:Team programming#Merger proposal|date=November 2022}}
 
In [[software engineering]], '''team programming''' is a [[project management]] strategy for coordinating task distribution in [[computer software]] [[Software development|development]] projects, which involves the assignment of two or more [[computer programmer]]s to work collaboratively on an individual sub-task within a larger programming project. In general, the manner in which this term is used today refers to methods currently in vogue within the software development industry where multiple individuals work simultaneously on the same activity; in these systems, programmers are often grouped in pairs at the same [[computer workstation]], one observing the other working on the software and alternating roles at time intervals.
Line 14 ⟶ 13:
Difficulties were experienced with these older methods, such as costs spiralling out of control as systems grew, and schedules failing to meet time-to-market targets. These issues gave rise to techniques such as [[pair programming]], [[mob programming]] (aka. [[ensemble programming]]), along with new systems lifecycle structures such as the [[Boehm spiral]]. Specification of these new approaches began in the mid-1980s and continues today. Many of these strategies involve multiple programmers working collaboratively on the ''same'' piece of [[source code]] as opposed to being ''individually'' responsible for individual tasks. For example, in "pair programming", responsibility for the resulting product is equally shared between two programmers who work on their assigned sub-task together. Benefits of this approach include the deficiencies in knowledge of one programmer to be compensated for by the ability in specific areas by the other programmer; in addition, the shared responsibility is thought to increase incentives for meeting project deadlines and quality targets.
 
This technique is frequently used in newer programming methodologies that are focused around [[Object-oriented programming|object-oriented]] programming techniques, such as the [[Rational Unified Process]] and [[Extreme Programming]] (acronym "XP"), often in combination with design documentation methods such as the [[Unified Modelling Language]] (UML). In object-oriented programming languages, software functionality forms modular, discrete units (termed [[class (computer science)|class]]es for the functional elements, and [[Modular programming|packages]] for constellations of interlinked classes that carry out a particular function); the two most well-known of these are [[C++]] and [[Java (programming language)|Java]]. This lends itself well towards the division of programming projects into sub-teams, although issues are still often encountered in integrating the resulting product following completion of each sub-task.
 
===Mob programming===
[[File:Mob prog.jpg|thumb|French mob programming session]]
'''Mob programming''' (sometimes informally called '''mobbing''', '''ensemble programming''' or '''posse programming'''<ref>{{cite journal|author1=Edward Sykes (Heretsch) |author2=Rajpal Singh|year=2012|title=ACCU 2012 Lightening Talks: Posse Programming|url=https://accu.org/conf-docs/PDFs_2012/Lightning_Talks_Fri_Ed.pdf|journal=Accu2012 LighteningLightning Talks}}</ref>) is a software development approach where the whole team works on the same thing, at the same time, in the same space, and at the same computer. This is similar to [[pair programming]] where two people sit at the same computer and collaborate on the same code at the same time. With mob programming, the collaboration is extended to everyone on the team, while still using a single computer for writing the code and inputting it into the code base.<ref>{{cite journal|last=Zuill|first=Woody|year=2014|title=Mob Programming: A Whole Team Approach|url=https://www.agilealliance.org/resources/sessionsexperience-reports/mob-programming-a-whole-team-approach-aatc2017agile2014/|journal=Agile2014 Conference Experience Reports|pages=11}}</ref>
 
{{Blockquote
{{Quote
|text=The basic concept of mob programming is simple: the entire team works as a team together on one task at the time. That is: one team – one (active) keyboard – one screen (projector of course).
<ref>{{cite web|last1=Hammarberg|first1=Marcus|title=Mob programming – Full Team, Full Throttle|url=http://codebetter.com/marcushammarberg/2013/08/06/mob-programming/|website=CodeBetter|publisher=CodeBetter|access-date=9 September 2014|archive-date=615 AugustNovember 2014|archive-url=https://web.archive.org/web/20141115035554/http://codebetter.com/marcushammarberg/2013/08/06/mob-programming/|url-status=dead}}</ref>
|author=Marcus Hammarberg
|title=Mob programming – Full Team, Full Throttle}}It builds on principles of [[lean manufacturing]], [[extreme programming]], and [[lean software development]]. Early use of the phrase "mob programming" was made in ''Extreme Programming Perspectives''.<ref>{{cite book |author1=Moses Hohman |author2=Andrew Slocum |chapter=Chapter 28. Mob Programming and the Transition to XP |title=Extreme Programming Perspectives |date=2002 |publisher=Addison-Wesley}}</ref>