Pair programming: advantages and lacks
Alister Koubern, Lori Williams
" Only in that case when various elements - names, definitions, hints and sensations - are carefully checked and adjusted to each other, and it is benevolent, without hostility during discussion, only then vossiyayut understanding and judiciousness - the highest purpose which the person can put before itself... " - Platon
" As a rule, the knowledge is created by the general(common) efforts, owing to the harmonious actions of group of the people, directed on achievement of an overall aim, or owing to those problems and dialogues which are generated by distinction of their points of view. " - Gabriel Salomon
The summary
Pair, or joint, programming is process of creation of the software by two programmers working side by side behind one computer. By means of interrogations and special experiments authors of this clause(article) investigated(researched) the positive and negative parties(sides) of such style of work. They have found out, that at pair programming time of development increases for 15 %, but thus the design of system improves, the quantity(amount) of defects decreases, the risk connected with employment in the project of certain employees decreases, the technological level of a command(team) grows, interaction and the communications improves, but also, process of work as a whole delivers much more pleasures.
-
Introduction
At pair programming developers solve all problems(tasks) joint efforts, working side by side behind one computer. Some tens years such practice already repeatedly received the most flatter responses as with its(her) help it was possible to improve considerably process of development ON for the last.
However there is an opinion which is bringing to nothing any reasons in favour of pair programming - many believe what to plant(put) two programmers for one computer, means to charge to two developers work of one.
- From the point of view of the head, the programmer - too valuable resource, therefore it(he) does not wish to trifle it(him), doubling quantity(amount) of the people necessary for development of this or that problem(task).
- Programmers have got used to consider(count) the work individual, instead of collective work (this belief is based(founded,established) as on skills which they received during training, and on an operational experience).
- Many skilled programmers refuse to work in pair. The some people motivate it with that their code "is too individual", others approve(confirm), that the partner will brake their work, the third speak, that will be in that case very difficult to coordinate working hours or versions of a code.
And at the same time:
- Very much known and dear programmers prefer pair programming to any other style of work.
- Those programmers who have already got used to "pair" style of work, speak, that so is worked " at least, is twice faster ".
- As to quality of the program experience shows, that at pair programming the system has the best design and more simple code which in the future can be expanded and modified easily.
- According to interrogations, even the beginners-programmers working in pair with the skilled expert, bring in its(his) code many useful additions.
All this lifts a little bit enough provocative questions. Whether really pair programming is more effective single? What does it represent in the economic plan? And whether, at last, it is pleasant to people to work in pair? Whether they lose pleasure from work?
Being based on growing interest to pair programming, authors of given clause(article) have lead some interrogations and experiments to collect a material on which it would be possible to judge costs and benefits which are born(carried) with itself with this practice. In this clause(article) we result(bring) results of this research. In former publications it was already spoken, that pair programming positively affects process of development ON. The purpose of our clause(article) - to recheck results of former researches in this area and in more detail to explain, than favourably pair programming.
-
Example of use of pair programming in one of projects
Below we cite the story of the skilled programmer how its(his) company for the first time has tried to use pair programming. In this example the basic features of pair programming which we shall consider(examine) in this clause(article) in more detail are mentioned many.
" In the beginning of December my command(team) has borrowed(occupied) enough in risky activity. This activity included modification practically in each file and merge of fragments of a code. At all thus it was necessary to nothing to break. It is more Further - it was required to make essential enough changes to architecture of one of subsystems. So, on the one hand, this work represented the most boring routine, and with another - demanded constant attention and hard work of an idea.
Developers have agreed with me that pair programming:
- Should reduce essentially risk of occurrence of the latent mistakes(errors) so to make debugging the program by less painful process;
- Will enable us to lead much fuller check of a code, than we ever did(made); but also
- Will give to programmers an opportunity to exchange knowledge.
The first some weeks work went at all how we expected that. Instead of pair programming people have started to work in a mode which I name " partner programming ". Everyone wrote the code, and then checked it(him) together with the partner before modification in the general(common) repository. As they said, owing to it(this) they began to find mistakes(errors) at early stages of work. Sounded hopefully, but I have been all the same disappointed by that they do not work all time together.
Approximately in four months I began to notice some changes. One pair developers all the day long worked vsmeste is there was a present(true) pair programming. Other two pairs too were close to this ideal. During discussion it became clear, why changes during all the same have occured(happened). So it was more convenient to work!
Programmers have found out what to work independently, and then to check a code borrows(occupies) more time as during check it is necessary to train the partner in all volume that has learned(has found out) itself while made changes. Training took away it almost as much time, how many left on modification. When programmers worked together, they did not need to do(make) " double work ", process of coding went more quickly owing to a known principle " one head well, and two it is better ", and developers have been considerably more assured as an end result.
At last, we have prepared the intermediate version of system and have given(remote) it(her) to a department of quality assurance (QA). To our surprise, process of testing has passed(has taken place) without a knot without zadorinki. It was especially surprising, that one of subsystems some time back the whole six (!) weeks muchili in department QA. Was abundantly clear, that pair programming has radically reduced quantity(amount) of defects in system.
Eventually cooperation of programmers became more and more close.
... When work above each of subsystems came to an end, pairs rearranged, depending on the skills demanded for the decision of a following problem(task). It slowed down work a little, as new pairs needed time to work well together before they started to work on former efficiency. By August of pair have worked well together already so, that one of partners could express without ceremony their general(common) opinion at the assemblies which are passed(are taken place) at us two times a week.
The subsequent releases, both internal, and external, passed(took place) smoothly enough. Critical mistakes(errors) obnaruzhilivalis in system it is exclusively rare. Owing to continuous check of a code we have revealed the most part of serious problems, including the essential defects not noticed earlier in design of system.
I have started to work in pair only by the end of the project. As soon as my partner and me managed to synchronize our ideas, I have understood, how is remarkable to work together.
And though it(he) did not have not enough experience, it(he) was able so to formulate a question, that looking for the answer, we, as a rule, found the optimum decision for each problem.
... After that developers have decided to use practice of pair programming and in the further. No instructions(indications) from above will be compared to personal experience. "
-
Directions of research
We shall consider(examine) here eight directions of the research, connected with programming and organizational efficiency. Surprisingly, but all of them testify in favour of pair programming. So, we conducted(order) ours investigated(researched) in following directions:
Economic validity. Recent experiments have shown, that cost of development at addition of the second programmer increases very little. However in this case the program code will have much less defects. Thus, primary expenses are with interest compensated by economy on correction of mistakes(errors).
Satisfaction from work. Those developers who tried to program together, consider(count), that so to work much more pleasantly, than alone.
Quality of design of system. The programmers worked in pairs have shown researches, that, let out(released) shorter programs, rather than their colleagues who worked alone (and as is known, the more shortly the program, the better its(her) design). About same personal impressions of developers testify also.
Continuity of check of a code. At pair programming there is a constant check as code, and design of system that conducts to essential decrease(reduction) in factor of mistakes(errors).
The decision of problems. The programmers interrogated by us emphasized all, that at pair programming ability of a command(team) quickly increases to find a way out in "desperate" situations.
Training. Programmers working in pairs approve(confirm), that in much study each other.
Formation of a command(team) and the communications. The programmers interrogated by us speak, that by means of pair programming developers in their commands(teams) study to discuss problems and to solve their joint efforts. It improves also quality of dialogue of people, and efficiency of their work.
The personnel and management of the project. When each fragment of a code is well familiar not to one developer, and at once to much, it reduces the risk connected with changes in the personnel of the company.
Further we shall consider(examine) each of eight items(points) in more detail, with attraction of statistical data and the information received as a result of numerous interrogations and interview. All this will allow to define(determine) more precisely expenses which pair programming demands, and benefits which it brings.
-
Economic validity
The key question arising at discussion of expediency of transition to pair programming are expenses which it will demand. If the technique demands too greater(big) charges any head of the company it becomes simple not it(her) to enter. Sceptics believe, that transition to pair programming entails doubling charges on development of the program and the personnel. However, besides these expenses there are also other kinds of charges which too are necessary for considering: quality assurance and support of product already being operation. So, IBM informs, that they have spent about 250 million dollars only for elimination of 30 000 problems which their clients have declared. Total, on 8 000 dollars for each mistake(error)!
Per 1999 the second author of this article (Lori Williams) has lead at university Utah experiment on finding-out of economic aspects of pair programming. Students of the senior rates trained on a speciality participated in it(him) " Software Engineering ". Third of group wrote programs in the usual way - that is, alone. The others worked above the project in pair with the partner. In figure 1 you see, the first and second groups of students have what is the time spent for performance of tasks. After an initial stage of "grinding in" of partners which passed(took place) during work above the first program, pairs programmers individuals spent all for 15 % of more time, than. As you can see, pair programming at all does not double cost of development!
It is important to note, that the code which has turned out as a result of pair programming contained on 15 % of less mistakes(errors), than a code of individuals. (these results are confirmed by statistics.) in figure 2 it is shown, with what success passed(took place) testing the programs written by students of both groups (differently, percent(interest) of successfully passed(of successfully taken place) tests which were written by the instructor).
Primary 15 % the increase in cost of development pays off due to reduction of quantity(amount) of mistakes(errors). We shall illustrate this position by a bright example. We shall assume, that the program in 50 000 lines of a code (50 000 LOC) is developed by group programmistov-"singles" and group of the programmers working in pairs. At typical speed of development 50 LOC at an o'clock of "single" will write this program for 1000 hours. "Pairs" will spend for the same problem(task) on 15 % more, that is 1150 hours. Thus, cost of development grows at 150 o'clock. Being based on statistical data, the programmer makes 100 mistakes(errors) for 1000 lines of a code. Correctly put process of development allows to reveal about 70 % of these mistakes(errors). Hence, at "singles" in the program remains the order of 1500 mistakes(errors), while at their "pairs" will be on 15 % (on 225) less - 1275 mistakes(errors).
In some companies the program code is transferred(transmitted) in a department of testing or quality assurance which finds and corrects an essential part of the mistakes(errors) which have remained in the program. Usually at carrying out of system tests for one mistake(error) leaves from four till sixteen o'clock. We shall take something an average - 10 hours then it will turn out, that the department of testing will spend for correction of these "superfluous" 225 mistakes(errors) about 2250 hours. And it in 15 times more, than primary increase in expenses at pair programming - 150 hours!
If on the termination(ending) of works the program sends directly to the customer pair programming appears even more favourable. According to statistics, after an output(exit) of the program in operation on correction of one mistake(error) leaves from 33 till 88 o'clock. We shall take an optimistical variant - for 40 hours on a mistake(an error) then if kliet will find out 225 additional mistakes(errors), it will cost the companies-developers of 9 000 hours - in 60 times more, than those expenses which were required at use of pair programming!
Thus, even if to judge only from the economic point of view, pair programming quite justifies itself. However, there are also other aspects to which it is necessary to pay attention.
-
Satisfaction from work
If pair programming will not give pleasure, programmers will not use it(him).
Initially many developers are adjusted(set up) in relation to pair programming skeptically, even is hostile. The matter is that work with the partner changes operating conditions of the programmer-single to which it(he) so has got used. One programmer has written:
" To be reconstructed from single programming on pair - all the same, what to accustom itself to a spicy food. When you for the first time try(taste) it(her), it(she) seems absolutely disgusting because you it is simple to it(her) have not got used. But the more you will eat sharp, the it is more tasty to you will seem. "
According to statistics, programmers who earlier worked alone, and now work in pairs, consider(count), that they like new mode of work more. They name one of the reasons the increased confidence as the code (koeffitsent mistakes(errors) in that and other case confirms last remark). In figure 3 you see results of the anonymous research lead at university Utah among professional programmers and students. As you can see, joint style of work is pleasant to the majority of programmers more.
As one of programmers has noticed,
" From the psychological point of view, it is very pleasant to realize, that in your program there are no serious mistakes(errors)... I feel much more confidently when my partner looks through all code which I write. In this case, I can be assured(confident), that I do(make) the work well, in fact it(her) checks and the person with whom I work also to whom approves trust. "
On this theme there is one more remarkable comment:
" So it is healthy to be pleased together when something works. "
Students prefer to have 15 %-s' costs // to work more, but with the partner
We already told, that for the previous experiment have divided all group of students on two parts: group of "individuals" in which everyone wrote a code alone, and group of "collectivists" where all programmers worked in pairs. Each task consisted of one program for "individuals" and two - for "collectivists".
After performance of several tasks the two programmers worked in pair, began to complain, that say, tasks are appointed(nominated) unfairly: "pairs" should work more, than to "singles". The instructor has there and then suggested these students to pass in group of "individuals" and to work on one, but both even to hear about it(this) did not want. More than any complaints to "injustice" from them did not act.
It seems to us, that such behaviour testifies that to developers is pleasant to work together.
-
Quality of design of system
Below we give of a word of the head of one of commands(teams) of developers which and slykhom has not heard about pair programming. Here it(he) explains, why all its(his) designers-programmers work together behind one terminal.
" During work above the project I have noticed, that one of our commands(teams) always develops design of higher quality. I have asked children(guys) as it is possible to them.
They have told, that it occurs(happens) because they began to work together - both above design of the program, and above its(his) realization in a code. As a result, both the design, and a code become better. I have agreed with them and have translated(transferred) all other commands(teams) on the same style of work. Now quality of design became much better. "
[From archives Alistera Kouberna]
In 1991 Nik of Florae (Nick Flor), engaged at that time kognitologiej (Cognitive Science), has drawn an interesting conclusion on distribution of knowledge at the programmers worked in pair whom it(he) studied(investigated). The distributed(allocated) knowledge is one of sections kognitologii into which substantive provision it is possible to put words: " Everyone who had to study(investigate) process of judgement, have been amazed(struck) by that fact, that " the reason " very seldom works alone. All data whom the person lifts during this process, appear distributed(allocated) - on various minds(wits), people, and also a symbolical and physical environment in which this person is. "
By means of video and audio of the equipment of Florae fixed all kinds of an exchange of opinions between two programmers who worked above one problem(task). In this research of Florae has established(installed) parities(ratio) between verbal and nonverbal behaviour of programmers. For this purpose it(he) used known kognitologicheskie the theories, concerning(touching) the distributed(allocated) knowledge. One of such theories - " Search in more extensive space of opportunities " (" Searching Through Larger Spaces of Alternatives. ")
" From the point of view of generation of various plans, the system with many characters possesses a more potential. It is possible to name, at least, three reasons: first, all characters introduce the unique personal experience in development; secondly, each of them possesses the approach to the information, a concerning(touching) carried out problem(task); thirdly, all of them are in different attitudes(relations) to a problem as carry out different functional roles... The Main consequence(investigation) of attempt to reduce together all available purposes and plans that in such disputed, as a matter of fact, situations programmers should agree openly is, what sequence of actions will be necessary for undertaking. Developing(producing), thus, the uniform common decision, they touch much a lot of alternative variants, than the programmer-single could in such situation. This circumstance also conducts to decrease(reduction) in risk of a choice of a bad plan of action. "
Look, that the programmer working in pair with the partner and as it coincides that we prochli at Flora speaks:
" Often all we had different ideas how the design of system should look(appear). As a rule, while we argued, what of variants is better, we really came to the best decision which was a hybrid of all offered in the beginning. "
During the quantitative researches lead at university Utah, programmers working in pairs not only developed programs of high quality, but also programmers-singles realized necessary functionality in smaller quantity(amount) of lines of a code, than. In more detail these data are presented in figure 4. It seems to us, that the brevity of a program code testifies to better design of all system.
-
Continuity of check of a code
Already twenty years ago it has been established(installed), that visual check of a code is effective, from the point of view of cost, a method of correction of defects in software products. It confirm also with empirical researches, however despite of it, the majority of programmers do not love checks and do not consider(count) this employment(occupation) neither pleasant, nor costing(standing). As a result about checks, as a rule, forget (unless their performance is required officially). Frequently check of a code is carried out by unprepared programmers to this problem(task).
" Despite of positive results of researches within more than 20 years, procedure of check of a code very badly gets accustomed in the industry of manufacture of software products. Exact data at us are not present, however according to the informal review of USENET-groups, 72 from 90 interrogated programmers practise check of a code extremely seldom, or in general to it(her) are not engaged. "
The idea of check of a code is based on a known postulate: the earlier defect is found out, the to correct it(him) easier and more cheaply. There are many researches on this theme, in the some people even affirms, that correction of defect will cost ten times more dearly(expensively) at each subsequent step of development of the project.
eksponentsialnyj it is easy(light) to explain growth of cost of defects. During check, the programmer speaks: " the operator " if ", that on 450 line of a code, should have an operator " else "." After that some minutes are required to it(him) quickly to correct this mistake(error) on the computer. If the software product already is in operation in one fine day the call of the furious client is distributed: " New year on a nose, and at me any cash department does not work! I-че-th cannot sell! You ruin me! "
So, in the first case the programmer deals with a mistake(an error) which to it(him) have just specified. In the second case, the group of technical support should waste time on diagnostics of a problem (all cash registers do not work), then to address to the system and to define(determine), where it is necessary to make corrections (in what line of a code there is no operator "else"). On this example everyone can be convinced - work of group of support to which should analyse a problem and to reveal defect, there are much more dearly(expensively), than those some minutes which the programmer on correction of a mistake(an error) in an own code should spend. If programmers work as pairs such checks of a code occur(happen) continuously. And neprerynaya check of a code not only advances sporadic "inspections" both on quality, and on speed of a finding of mistakes(errors), but also does not cause in programmers of negative emotions.
Look, as sardonicheski describes the experience of programming in pair with the beginner the skilled programmer who in the beginning has been adjusted(has been set up) to idea of teamwork rather skeptically. To the surprise, this expert suddenly finds out, what even the beginner can essentially improve quality of a code which it(he) writes.
Somehow I worked with one of the least skilled developers above enough simple problem(task). To tell the truth, I always considered(counted) myself as the remarkable expert on language Smalltalk, therefore have been assured(confident), that I shall simply learn(teach) youth as it is necessary to work.
Has not passed(Has not taken place) also several minutes as this malets asks to me a question - why, say, I do(make) that I do(make). And it is exact, it has appeared, that I have already made a mistake(an error)! I was corrected. Then this brisk boy has reminded me the correct name of a method or something there still, that I wrote to that moment incorrectly. Soon it(he) already with might and main specified to me, that I should do(make) further, and itself had time to notice also all mistakes(errors) in syntax and formatting.
[According to Rhone Dzheffriza]
And at last, one more advantage of constant checks of a code that with their help developers learn(find out) new ways and styles of coding, feature of language
is
and is better imagine all system.
Continuous check of a code at joint programming creates unique conditions for training as both of the programmer constantly study each other. " Check of a code is a unique opportunity for training: process of the analysis and criticism of program artefacts which someone has created another, represents remarkable by efficiency a way of studying of languages, technics(technical equipment) of designing, a subject domain, etc. "
In the same key other statements of the programmers, engaged are sustained by check of a code also:
- Mistakes(Errors) are found out at once, at the moment of occurrence that allows to save even on compilation, let alone other economic gains of early detection and correction of defects.
- Gorazo it is easier to observe standards of coding if it(this) watches(keeps up) at once two pairs eyes.
- The command(team) of developers studies in dialogue and teamwork.
-
The decision of problems
There was time when we felt, that available already all to throw, everything, except for work " in a sheaf ". When I was leader, I tried to describe a problem so that my partner could as it is possible to penetrate into its(her) essence is better. Then fight was entered by it(him) and struggled, until reached a dead point... Then I had any good idea... And so on. Probably, many will name this method " brain storm ", but I still has after it(him) absolutely other sensation.
[-David Uagstaff (David Wagstaff), Salt Lake City]
We name the effect described by David Uagstaffom pair relay race (pair relaying). Programmers working in the pairs often inform that owing to this method problems can solve much more quickly, and also that this method differs from such processes as improvement of quality of design of system, detection of mistakes(errors) at a set or carrying out of " brain storm ". " The decision of problems " we understand that situation when both of the programmer are puzzled by failures in work of the program As words or cannot simply solve, as they should develop it(her) further.
In all and informal conversations programmers marked(celebrated) interview, that in a difficult situation apply on the decision of problems a maximum of the opportunities therefore find new knowledge. They share with the partner the knowledge and energy (and also arrange " brain storm "), and thus, step by step come nearer to the decision of a problem.
Very effectively to combine technics(technical equipment) of " brain storm " and pair relay race. One of skilled programmers has noticed:
When I should work again alone after has worked in pair, it seems to me, that at me the part of a brain has given up. I feel, that I start to lose confidence that I do(make).
-
Training
Partners constantly exchange knowledge: from skills of work with tools (down to a mousy) before studying rules of the programming language, the certain ways of designing and programming, the general(common) skill of construction of design of system.
Training proceeds in a mode "uchenichestva". Partners-programmers alternately carry out roles of the pupil and the teacher. Thus they exchange even skills and habits which cannot be transferred(transmitted) in words.
Training on visual examples and its(his) role in uchenichestve
In this book researches of process uchenichestva in different areas - from tailor's business(affairs) up to a trade of the signaller in fleet and the butcher in modern a supermarket are discussed.
The book has a subtitle - " peripheral participation in work at a serious level ", which podchervkivaet three basic aspects uchenichestva: the beginner participates in work of the master actively; to the beginner charge serious, responsible(crucial) work and, at last, that the beginner works on periphery, constantly coming nearer to higher level of professionalism. Firstly it is entrusted to beginners simple (and not the most important) a part of work. Eventually its(his) work gets more and more responsible(crucial) character.
One of the most interesting remarks in occasion of uchenichestva which are done(made) by authors of this book, consists that for successful training the pupil should be constantly in sight teachers as the knowledge is transferred(transmitted) partially visually, partially on hearing. Authors of the book give two examples of fast training - at tailors and signallers (in both cases of the teacher are in sight pupils so that one could observe of work of others). Thus the beginner can see and hear the teacher and receive from it(him) direct instructions.
The greatest interest for our theme represents an example of training of butchers in a supermarket. The beginning(starting) butcher works separately from professionals; to it(him) charge only the most simple cabin of meat. Thus it(he) cannot learn at the senior cutters to how it is necessary to do(make) more complex(difficult) and thin work because experts are in other premise(room). Authors specify, that this situation - an example of impossibility of transfer of knowledge from the teacher to the pupil.
It is necessary to realize clearly, that in most cases, operating conditions of programmers are more similar to operating conditions of butchers, instead of tailors or signallers. It is very difficult to construct work of programmers so that beginners worked in immediate proximity from high quality experts. As a rule, beginners sit in an own premise(room) and write only a simple code. "Spetsy" are in other room where they solve challenges and are engaged in designing. Pair programming allows to get rid of these lacks and to create the environment(Wednesday) favorable training.
The expert within the limits of audibility (Expert In Earshot)
As a result of work at seminars in which 10 heads of the projects participated, the first author of this clause(article) has formulated one more pattern for a management(manual) of the project. Completely (including examples and explanatories) you will find it(him) in the appendix to this clause(article). In brief its(his) essence can be described so:
To use a pattern the Expert within the limits of audibility (Expert In Earshot) it is necessary when you notice, that the programmers-beginners working in your command(team), acquire new skills not so well as it would be desirable. Thus you do not want, that the expert in the given question spent all working hours for their training. In this case it is necessary to place the expert or the head of a command(team) in that premise(room) where beginners work. Thus, the youth will be evidently trained in how the professional works. Observing and listening, beginners will get a manner (we shall hope, correct) works of the expert. (it is clear, that this expert will often distract, therefore it is necessary to take care in advance of that it(he) had time and for the quiet, concentrated work).
Pay attention, how this approach corresponds with researches in the field of uchenichestva (see above). It is important to note, that this pattern has liked all to 10 heads, and they were going to introduce immediately it(him) in the companies.
Pair programming represents a combination of a pattern the Expert within the limits of audibility (Expert In Earshot) and a principle of peripheral participation of the pupil in serious and responsible(crucial) work (when it(he) hears and sees the teacher). Hence, in case of with pair programming we have the right to expect more significant results, training to possession of new toolkit or the programming language is rather than simple. These expectations prove to be true messages of programmers which have already taken advantage of this practice.
Data of statistics
The second author of this clause(article) used pair programming during teaching a rate of web-programming at university Utah. The group of students consisted from 20 person, had different experience of programming. However anybody from them did not know neither languages of web-programming, nor toolkit which for this purpose is used. Experience of a greater part of students in this area consisted only in application WYSIWYG of editors of web-pages. In current of 11 weeks of employment(occupations) students at a good level have studied(investigated) language HTML, JavaScript, VBScript, Active Server Page Scripting, Microsoft Access/SQL and some commands(teams) ActiveX. At times they had to combine operators of all these languages in one program.
During training these students set marvellously few questions to the teachers. When, last day employment(occupations), them have asked about the reasons of such independence, opinions were distributed(allocated) as follows:
- 74 % have written, that found out all questions during dialogue with each other.
- 84 % have agreed with the statement: " I could study(investigate) Active Server Pages more quickly and better as all time worked together with the partner ".
It seems to us, that we are obliged by such results, on the one hand, to more successful decision of problems at pair programming (as it was discussed above), and with another - a greater opportunity for training which arises at this style of work.
-
Formation ¬«¼á¡ñÙ*¬«¼¼Ò¡¿¬áµ¿n
After the arrival I have found out depressing picture: Bill did not have any command(team) of developers. At it(him) was six talented, well prepared employees who could not work together. They even sat at some distance from each other. It was clear, that special sympathies between them have not arisen yet.
" Let's talk about pair programming. (all its(his) advantages) further are listed(transferred). <пауза> Pair programming is entered now without fail. All program code should be written at participation of the second partner ".
<Неловкое молчание. Люди обмениваются неприязненными взглядами>
" I do not think, that it will work. Here, for example, that will be, if I need to write a code, and the partner is not present beside? "
" Then find somebody(somebody else). The Overall objective - to work together to transfer(transmit) each other knowledge ".
" And if beside nobody will appear? "
" Then call me, I with pleasure with you shall work. If you and really cannot find any partner to write a code together then postpone the keyboard and have a rest. "
<Все удивленно смотрят на меня. Гробовая тишина. >
Some times pair programming has passed(has taken place) smoothly enough. Sometimes, the truth, something was impossible. Developers languidly and seldom communicated. I very much tried to help(assist) children(guys) - tried to accustom to think them aloud (that Ward Kanningem named reflektivnoj an articulation). And it has solved business! Programmers really began work together, instead of easier(simply) to write a code for one system.
In a week I have started to notice essential changes in behaviour of developers. They have started to talk with each other. Absolutely normally, as usual people speak among themselves. It was necessary to see them in the beginning of the project to understand, how their attitude(relation) to each other has strongly changed. They talked, joked, laughed. Already they have started to understand, that such to trust each other and to take pleasure in teamwork.
In some days these developers have turned to the excellent(different) harmonious command(team). "
[From archives Alistera Kouberna]
In spite of the fact that books " Psychology of programming " (" The Psychology of Computer Programming ") and " Personnel maintenance " ("Peopleware") have been written, accordingly, 20 and 30 years ago, anybody till now has not written anything the best about command work. Already today to formation of a command(team) and communications began to pay attention new to methodology - eXtreme Programming , family Crystal [15] and Adaptive Software Engineering [16]. In clause(article) " Characterizing People as Non-Linear, First-Order Components in Software Development " (Russian translation(transfer): " People as nonlinear and most important components in creation of the software "), Alister Koubern the human factor in business of development ON on the first place, approving(confirming), that in general puts it at all a minor question as it is considered to be.
Thus, pair programming is favourable on we rub to principal causes.
As you have already understood from resulted(brought) above the story, people study to work together. During experiment at university Utah any of 14 pairs programmers has not collided(faced) with absolute obstacles of psychological sense. However, according to those who tries to practise pair programming during real work above the project, such problems nevertheless happen (probably, weak influence on programmers or lack of motivation to teamwork) affects. Interrogations of those developers which have managed to overcome difficulties, show, that the script stated above works often enough (can be unless not in so strongly pronounced form). Frequently people can learn to work together only after will start it to do(make).
To learn to work together - means to learn to solve more quickly together with the colleagues various problems, instead of to hide from each other the ideas and ideas. In this case command style of work is noticeably improved.
If the pair programmers will manage to work well together, it will be much easier to them to communicate. Besides this dialogue will proceed much more often. At increase in volume and frequency of communications the general(common) stream of the information circulating inside of a command(team) increases also. To strengthen and accelerate this process, it is necessary to not forget to change partners in pairs.
Similar, all this essentially improves productivity of a command(team). Unfortunately, these conclusions are based only on stories of programmers. No statistical data on this account(invoice) at us while are present.
-
The personnel and Management of the project
The management(manual) of the project only wins from improvement of quality of work of the personnel and reduction of risks which are connected with it(him).
Both the companies, and a command(team) of developers the atmosphere of constant training and an exchange of knowledge is favourable. During work above the project professional skills of developers - both in the field of programming languages, and in the field of designing essentially increase.
The risk of loss of key developers as their many colleagues well know each of parts of system decreases. The some people name it " a principle of lorries ": " How many the lorry that the project could not come to the end normally should bring down developers? " Worst of possible(probable) answers: "One". If knowledge of system are dispersed on all command(team) of developers, it essentially raises(increases) demanded quantity(amount) of lorries, and together with it(him) and a level of safety of the project.
-
The conclusion
The basic advantages of pair programming consist in the following:
- The majority of mistakes(errors) can be found out during coding, instead of during testing quality (QA) or during work of the client with system (see continuous check of a code);
- Noticeably the general(common) factor of mistakes(errors) that proves to be true statistical data (see continuous check of a code) decreases;
- The ready product has the best design and smaller volume of a program code (see " brain storm " and a principle of " pair relay race ");
- The command(team) copes with arising problems (see a principle of " pair relay race ") more quickly;
- Developers learn(find out) as about system, and the process of development ON (see training in sight the teacher) much more;
- By the moment of the termination(ending) of the project the set of people possesses a profound knowledge about each of its(his) parts;
- People study in teamwork and dialogue that leads to increase in a stream of the information inside of a command(team) and positively influences its(her) dynamics(changes);
- People test more pleasures from the work.
Thus the increase in cost of development at pair programming makes at all 100 % as it would be possible to expect, and approximately 15 %, that easily pays off due to higher quality of a program code (so, smaller expenses for testing and support).
The literature
1. Salomon, G., Distributed Cognitions: Psychological and educational considerations. Learning in doing: Social, cognitive, and computational perspectives, ed. R. Pea and J.S. Brown. 1993, Cambridge: Cambridge University Press.
2. Constantine, L.L., Constantine on Peopleware. Yourdon Press Computing Series, ed. E. Yourdon. 1995, Englewood Cliffs, NJ: Yourdon Press.
3. Beck, K., Extreme Programming Explained: Embrace Change. 2000, Reading, Massachusetts: Addison-Wesley.
4. Williams, L., et al., Strengthening the Case for Pair-Programming, in IEEE Software. submitted to IEEE Software. Online at www.cs.edu / ~ lwilliam/Papers/ieeeSoftware. PDF
5. Williams, L.A. and R.R. Kessler. The Collaborative Software Process. in International Conference on Software Engineering 2000. submitted for consideration. Limerick, Ireland. Online at www.cs.edu / ~ lwilliam/Papers/ICSE.pdf
6. Nosek, J.T., The Case for Collaborative Programming, in Communications of the ACM. 1998. p. 105-108.
7. Humphrey, W.S., A Discipline for Software Engineering. SEI Series in Software Engineering, ed. P. Freeman, Musa, John. 1995: Addison Wesley Longman, Inc.
8. Humphrey, W.S., Introduction to the Personal Software Process. 1997: Addison-Wesley.
9. Flor, N.V. and E.L. Hutchins. Analyzing Distributed Cognition in Software Teams: A Case Study of Team Programming During Perfective Software Maintenance. in Empirical Studies of Programmers: Fourth Workshop. 1991: Ablex Publishing Corporation.
10. Fagan, M.E., Advances in software inspections to reduce errors in program development. IBM Systems Journal, 1976.15: p. 182-211.
11. Johnson, P.M., Reengineering Inspection: The Future of Formal Technical Review, in Communications of the ACM. 1998. p. 49-52.
12. Lave, J. and E. Wenger, Situated Learning: Legitimate peripheral participation. 1991, New York, NY: Cambridge University Press.
13. Weinberg, G.M., The Psychology of Computer Programming Silver Anniversary Edition. 1998, New York: Dorset House Publishing.
14. DeMarco, T. and T. Lister, Peopleware. 1977, New York: Dorset House Publishers.
15. Cockburn, A., Crystal "Clear": A human-powered software development methodology for small teams, Addison-Wesley, 2001, in preparation. Online at http: // members.aol.com/humansandt/crystal/clear
16. Highsmith, J., Adaptive Software Development, Dorset House, 1999.
17. Cockburn, A., Characterizing People as Non-Linear, First-Order Components in Software Development, in International Conference on Software Engineering 2000. submitted for consideration. Limerick, Ireland.. Online as Humans and Technology Technical Report, TR 99.05, http: // members.aol.com/humansandt/papers/nonlinear/nonlinear.htm. (In Russian: " People as nonlinear and most important components in creation of the software ");
The appendix:
" The expert within the limits of audibility " (Expert In Earshot) the Pattern of management of the project
(The full version look on http: // c2.com/cgi/wiki? ExpertInEarshot)
| Essence |
To not skilled programmers difficultly enough independently to learn to work well, therefore...
About them (within the limits of audibility) there should be a high quality expert in the given area. |
| Indications |
(1) Beginners are badly trained and slowly master new technological working methods.
(2) Everyone work above one project, but despite of it, experts sit in a separate premise(room), and beginners are collected in the general(common) room. |
| Contra-indications |
(1) According to rules, accommodation of experts and beginners in one room is forbidden.
(2) Expert is uncommunicative or has some features and habits which you categorically do not wish to see at anybody another.
(3) Expert spends the most part of time for activity which will prevent to work of beginners (for example, speaks by phone on the abstract themes, etc.) |
| The purposes and problems(tasks) |
It is necessary (1) you, that all did(made) the work - both beginners, and skilled experts.
(2) you want, that beginners were trained, and consider(count), that at your experts is to that to learn.
(3) you presume to allocate to yourselves a part of time of experts for that they paid attention to beginners (if certainly, those thus study to work).
But thus...
(1) you do not want, that experts devoted all working hours to teaching.
(2) People always hesitate to disturb the chief (or the expert) phone call or knock at a door. |
| Make the following |
Let the expert (or the chief) works in one room with beginners then they can adopt its(his) experience simply observing and listening to that it(he) does(makes). The expert will continue to be engaged in the usual work. |
| Thus |
(1) Beginners will adopt at the expert experience and technology (we shall hope, correct)
(2) Expert will feel less comfortably as it(him) will distract is more often from work. Therefore you need to take care in advance that it(he) had personal time when it(he) can easy concentrate on the work.
(3) you and the expert will need to watch(keep up) that beginners have not started to shift simply the problems on another's shoulders.
(4) At you will be more people in one room. |
| Effect of overdose |
(1) Excessive abundance of questions will essentially lower productivity of the expert.
(2) If in one room to collect too many people exchanging words among themselves, in such conditions it will be difficult to concentrate. |
| See also |
Pattern " Обучение:Дневная the nurse " (Training:Day Care) offers the following: " If your experts spend too much time behind training of beginners .... Every day appoint(nominate) one "responsible(crucial)" for all beginners, and the others spetsy will work easy at this time. [CoSOOP]. It can be also the decision in a situation when the expert tries to train beginners during designing system. In a pattern " the Expert within the limits of audibility " (Expert In Earshot), professionals are not responsible for training beginners. In this situation the environment allows the beginner to receive necessary knowledge, observing how the expert works.
The pattern " Pair programming " (Pair Programming) does not contradict principles of a pattern " the Expert within the limits of audibility ". Thus, the expert appears within the limits of audibility only the partner-beginner (if they work in one pair), or all other colleagues who work with it(him) in one premise(room). |
Examples |
(1) When Thomas Dzh. Watson Mladshy, the former chief manager of company IBM, has replaced a life of the pilot and the playboy with career in serious business, its(his) father executed then duties of the chief manager in this company, has disposed, that that has lead half a year, sitting sideways at a table of one of the senior heads. The whole six months unique employment(occupation) of the young man was to look and listen, as this high quality professional performed the daily work as it(he) communicated with people, etc. It is a little bit unusual, but very much a vivid example of a pattern " the Expert within the limits of audibility ".
(2 One skilled programmer have charged a command(team) from four beginners that they have developed a graphic workstation. Thus for the head of a command(team) have allocated separate office. In some weeks it(he) has felt what to work separately from the command(team) to it(him) inconveniently, therefore it(he) has transferred(carried) the table to a room where four its(his) younger programmers worked. In spite of the fact that they constantly distracted it(him) (though it(he) did not gather to become at all for them the regular teacher), work has gone more successfully as it(he) could discuss with the developers any question at any moment. Gradually they have got necessary skill and any more so strongly stirred(prevented) to it(him) the inquiries. To the following project this command(team) already possessed all necessary skills and skills.
(3) Senior programmer worked in one room with six beginners. This expert had two not so good habits: first, it(he) did not take seriously idea of correct and accurate design of system and, secondly, instead of explaining to the not skilled colleagues, that such good design or the program, it(he) simply at night copied their code. In the morning, coming for work, these six never knew, whether there was a program in a former kind or has changed, and how much(as far as). In some months beginners began to create all not only bad, but also careless design. Their ideal became the haughty attitude(relation) to designing the senior programmer.
When this person has ceased to work above the project, on its(his) place other adviser has come. Now design decisions were comprehensively discussed, so that all could at desire hear about what there is a speech. In some months of three beginners have started to argue on designing and to build diagrams, and have soon seized(have soon taken possession) this art as well, as well as programming. |
|