Inside the World of Extreme Programming 30
Webi writes ""XP[http://www.extremeprogramming.org/] works best for medium-sized teams where a product can be delivered in stages, and where there's freedom to experiment with some of the more controversial techniques," author Ron Jeffries said.
http://www.newsfactor.com/perl/story/20348.html"
Correct link.. (Score:2, Informative)
Re:Correct link.. (Score:4, Funny)
Buddy Programming kind of annoying (Score:5, Insightful)
Also, you're wasting a good programmer having them sit there and call things out.
Maybe it's just me and some people really like XP...
It is when you do it wrong (Score:5, Insightful)
Switching thinking modes is incredibly difficult to do by yourself but imagine your 'buddy' as 20/20 hindsight in advance. Remember: a stitch in time saves nine.
Oh and if the 'buddy' has something tactical to offer (i.e. code) then give him the keyboard and take a step back (mentally, of course).
Re:It is when you do it wrong (Score:2)
Hmm...but shouldn't that have been done when APIs and rough data structures were decided upon?
Re:It is when you do it wrong (Score:2)
In XP, that is exactly when the APIs and rough data structures are to be decided upon: when the need arises. That's why you have a pair: to help you design as you go. If programming consisted solely of typing, you wouldn't need a pair.
(And why do the design when you need it instead of at the beginning? Because design is too important to do at the beginning when you don't know exactly what you need or how it's going to fit with existing code.)
Re:It is when you do it wrong (Score:2)
From what I've seen, design-as-you-go is very very dangerous when average programmers are doing the work.
Even Extreme Programming does not remove the dependency of needing a super-star on the team. No design or programming philosophy does. This is why such philosophies are for informational purposes only--no real project should actually be based upon one of them.
Re:It is when you do it wrong (Score:1)
Even Extreme Programming does not remove the dependency of needing a super-star on the team.
I think you are right about XP depending on having a good team. The fundamental idea in XP is to make software more change friendly (automatic testing, refactoring, collective code ownership, pair programming), and this in turn allows design-as-you-go to be an efficient practice. The reason that up-front design is traditionally considered so valuable is that the cost of changing software seems to grow very fast during the project. If the cost of change is lower it might become feasible to design as you go instead.
Since I haven't tried XP in any real project, I can't claim I know it would work in practice but the idea is very interesting. Since XP might be a little too extreme (that's why it's called eXtreme Programming) there are other methodologies that are philosophically similar but less demanding (so called Agile methodologies) that one might try instead.
Pair programming (Score:4, Informative)
Pair programming [extremeprogramming.org] calls for two people working together. At any given instant, only one person has the keyboard and mouse; but they get passed back and forth, and the person who's not typing is doing a lot more than "watching." It's as natural as two people designing together on a blackboard, once you get the hang of it.
Does it work? There's lots of evidence it's worked for a lot of people who've tried it (including me).
Does it always work, for everyone, in every project? That's an open question. The only way it'll be answered is if more people try to program in pairs.
The definitive book on the subject is Pair Programming Illuminated by Laurie Williams and Robert Kessler (Amazon.com [amazon.com], BN.com [barnesandnoble.com]); recommended.
Pair programming is not the first XP practice a project should try. Could a project get a lot of value out of XP without doing pair programming? I think yes, and I'm an advocate of programming in pairs; the question is open to debate.
Re:Pair programming (Score:2)
I'd say no. I know many programmers who don't have the skills or desire to work in teams (pairs or larger teams). This is understandable, because a lot of people who got into computers as a hobby enjoy spending time by themselves.
I'm one of those people, but I realize that teamwork is essential to a project's success, so I do my best to be social and work well with others, though it's sometimes hard and drains my energy.
But there are some people who won't (or can't) work with others. These are the people who I think won't be good at pair programming (or working with a team in general).
Re:Pair programming (Score:1)
Re:Buddy Programming kind of annoying (Score:2)
It helped that he was already a good friend. I think more realistically, one person should get the keyboard and screen and another should get the whiteboard. Both should be chatting continuously. Looking over your buddy's shoulder is going overboard IMHO.
Overall, I think the main benefit to pair programming is that it puts the programmer in the position of having human contact through the day, which helps them articulate issues to managers and customers. Even if you're not a completel socially stunted nerd, going without talking to people day after day will really warp your thinking in ways that make you hard to deal with.
Re: (Score:2, Insightful)
the weakest link in XP (Score:5, Insightful)
To quote their site [extremeprogramming.org]:
"One of the few requirements of extreme programming (XP) is to have the customer
WTF? How many clients are willing to assign an employee to work with/at the software/website vendor full-time? None, in my experience.
Unless you're dealing with an utterly massive project for a heavily-staffed client, their IT guy leading this effort has more responsibilities than this one project.
Re:the weakest link in XP (Score:2)
Re:the weakest link in XP (Score:3, Insightful)
Re:the weakest link in XP (Score:3, Informative)
*A lot of XP gurus like open space plans for development teams. YMMV.
The most common alternative to Customer On Site [extremeprogramming.org] is Victorian Novel Requirements: the customers write hundreds (thousands) of pages of requirements (which can take as many staff hours as Customer On Site), throw the book "over the wall" to the development staff, and then complain when they didn't want what they originally asked for.
I agree Customer On Site may not always work. Lots of constant communications with the customer, in some form or another, is necessary for any successful software project, XP or otherwise.
Re:the weakest link in XP (Score:2)
I'm just saying it seems pie-in-the-sky unrealistic. Moreso than the much-maligned pair programming (which I also think is written off too soon), because you need *two* bosses to sign off on it: the developers' and the on-site customer's.
Re:the weakest link in XP (Score:1)
No probably not. Most are quite happy spending months trying to get so-called bespoke software doing what they want instead of what they asked for.
On the other hand, they are perfectly happy to pay for the privilege of beta test shrinkwrapped code. Go figure.
Driver's Seat (Score:2)
If somebody could tell me a way of optimizing this exchange, I'd love it. Simply getting big lab space isn't really an option -- in the one lab we do have the tables are so small that you can't even fit the keyboard in front of the monitor and often end up with it next to, or in your lap anyway.
Re:Driver's Seat (Score:1)
Re:Driver's Seat (Score:2)
How about having two keyboards and two mice? (I assume PCs can handle that; I've only ever tried it on a Mac.)
But I've never had much of a problem. The chairs have wheels; you each slide over so the other person is sitting in front of the computer. When you switch back, you both slide the other way.
Re:Driver's Seat (Score:4, Funny)
We put the computers on a wide table in the center with enough space for two people to sit. When someone wants to switch, the other person slides to the side.
The other key element is to provide breath mints at every station.My personal belief is that pair programming is best done when there's enough space and breath mints for everyone involved.
Re:Driver's Seat (Score:1)
at least under linux, VNC is quick enough to make it better than shoving the keyboard back and forth. You have to work out the signals within the pair so you don't 'stomp' on each other.
Under windoze... VNC is less useful.
As for getting the furniture you need... if you're lab isn't set up to do pair programming, then you cannot effectively do pair programming. Then again, I've done useful pair programming under windoze using VNC over a T1 with a headset phone... It's better than nothing.
Re:Driver's Seat (Score:1)
Re:Driver's Seat (Score:2)
Also another very very cool thing is if you use emacs you can open the same window on another machine. Then you can see each others changes in realtime, and both modify the file at the same time. What is even cooler is that you can view and edit different parts of the same file. This has the advantage of say vnc because one could be coding while the other fixes spelling mistakes, adds comments, and does the higher level thinking. (I tend to associate the commenting and higher level thinking together - correct me if I'm wrong)
Re:Driver's Seat (Score:1)
Dilbert? (Score:2, Funny)