“Collaborative programming is an emerging methodology for team software development, which allows a group of programmers to work together on the same source coed for design, implementation, and integration.” [Shen]
One known method in XP is pair programming, in which two developers sit side-by-side in front of one PC.
One technical core component is collaborative editing: in real-time collaborative editing the entered code by one developer simultaneously changes the code all other developers work with.
Shen describes the challenges as group awareness, access control, and currency control.
In a Copy-modify-merge approach the developer can work independently, however there is additional effort and complexity caused by the required merge. Merging tools can be classified as textual merging, syntactic merging and semantic merging. (Shen explains the algorithms for merging techniques)
A quite interesting emergent approach is a Programmable Website:
Adam Cheyer and Joshua Levy created a prototype of a Wiki like environment inspired by WubHub:
The environment’s main elements are
- Shared storage for pages holding pieces of content or code
- An execution environment, with a programming language and type system
- A user interface, with support for invoking commands and wiki-like editing of pages
A page in the environment is like a function in a programming language.
Developers can work simultaneously on the different pages of the application.
- Internet-Based Collaborative Programming Techniques and Environments, Haifeng Shen, 2003, http://www4.gu.edu.au:8080/adt-root/uploads/approved/adt-QGU20031015.143156/public/02Whole.pdf
- Saros Eclipse plugin for collaborative editing: http://www.saros-project.org/
- A Collaborative Programming Environment for Web Interoperability, Adam Cheyer and Joshua Levy, 2006, http://www.ai.sri.com/pubs/files/1272.pdf
- WubHub collaborative, programmable Web tool, http://www.wubhub.com