Slashdot Mirror


The Programmers Go Coding Two-by-Two — Hurrah?

theodp writes "The Wall Street Journal reports that pair programming is all the rage at tech darlings Facebook and Square. Its advocates speak in glowing terms of the power of pair programming, saying paired coders can catch costly software errors and are less likely to waste time surfing the Web. 'The communication becomes so deep that you don't even use words anymore,' says Facebook programmer Kent Beck. 'You just grunt and point.' Such reverent tones prompted Atlassian to poke a little fun at the practice with Spooning, an instructional video in which a burly engineer sits on a colleague's lap, wraps his arms around his partner's waist and types along with him hand over hand."

20 of 318 comments (clear)

  1. Suck it and see, it's not for everyone by Peter+Cooper · · Score: 5, Insightful

    Like many workplace practices, it's something worth trying, but not something to be trumpeted as "the way" to do things. Some people get on with pairing, some don't. And it's OK either way. Likewise, there are writers who work in pairs, but many who do great work alone. There are architects who work in groups and alone. So it goes for software developers.

    Where it goes sour, however, is when people who find pair programming valuable start tarring anyone who doesn't do it as being error-prone slackers.

    1. Re:Suck it and see, it's not for everyone by O('_')O_Bush · · Score: 5, Insightful

      It also works better for inexperienced programmers than it does for seasoned vets. Partly because of egos, partly because problems don't end up being as difficult to solve.

      Also, there is the problem of getting tired, where programming ends up being handed off between partners while the other partner zones out, and at each handoff, one has to come back up to speed. Surfing the web is bad for some, but for many programmers it is an opportunity for one to collect and organize their thoughts, and attack problems from new angles.

      I've heard pair programming increases productivity by 150% over a single programmer, but two programmers independent are still more efficient than a pair. I believe this to be accurate, after a few months experience.

      --
      while(1) attack(People.Sandy);
    2. Re:Suck it and see, it's not for everyone by man_of_mr_e · · Score: 5, Insightful

      I agree. Not everyone can work in pairs. And certainly there are many people who cannot work in pairs with certain other people. It really requires a good friendship to make it work.

      I actually stumbled across this myself in 1994 when I was forced due to time constraints to work with another programmer to finish a project... we sort of accidentally did pair programming and it was very effective.

      But i'm not sure I could recreate that kind of synergy again.. I've tried and it didn't work.

    3. Re:Suck it and see, it's not for everyone by mooingyak · · Score: 4, Insightful

      It also works better for inexperienced programmers than it does for seasoned vets.

      My understanding of the process is that it's ideally a pair with one seasoned vet who is supposed to have the large view and one junior programmer who is supposed to be handling the details while learning from the seasoned vet.

      --
      William of Ockham had no beard. The most likely explanation is that it was chewed off by squirrels every morning.
    4. Re:Suck it and see, it's not for everyone by Jane+Q.+Public · · Score: 2, Insightful

      "Some people get on with pairing, some don't."

      And if they're just getting into it now, they're only about 6 years behind the curve.

      But why should I be surprised? Considering that Facebook was based on PHP?

    5. Re:Suck it and see, it's not for everyone by jellomizer · · Score: 5, Insightful

      I found paring inexperienced with experienced developers actually work a lot better.

      1. Ego - Developers need to keep their ego's aside. There Egos is what keeps them doing the wrong thing over and over again. A fresh young mind to challenge his decision really helps him rethink what he is doing.

      2. Experience - The new guy doesn't have experience, experience isn't how fast you code, but to know what gatcha will get you, unless you account for them early. New developers tend to code themselves in a box. More experienced developers keep a hook open to add changes in particular areas where they know there will be a change (even though non of the specs say it will change), Experience workers can teach them why they break the rules when they do.

      3. Trading Skills - Having one code owner is dangerous, having a few developers knowing what is going on is very handy. The idea of coding yourself a job, is often short sited because you have coded yourself in a position where you cannot advanced. Plus giving young developers skills to work and advance in the project is a good thing too.

      4. It restricts getting tired - Coders will pass off the boring stuff back and forth so when you are at the 80% complete mark, you have energy to fill in the 20%
       

      --
      If something is so important that you feel the need to post it on the internet... It probably isn't that important.
    6. Re:Suck it and see, it's not for everyone by jythie · · Score: 3, Insightful

      Sadly there seems to often be an attitude of 'I selected programmers who are ideal for X, X worked, therefor X is the way to program!'... which if you follow the mantra too closely can really limit your pool of talent since not only do you have to find someone who is good at the job, but someone who enjoys working in that very specific environment..... it decreases workplace flexibility.

      Then again, with the rise of brogammer culture, I gather a lot of place are not concerned with flexibility or diversity in the first place and actively encourage mono-cultures. And of course it is another way to push out all those pesky introverts who keep thinking they are people.....

    7. Re:Suck it and see, it's not for everyone by CodeHxr · · Score: 3, Insightful

      I currently work in this scenario with myself being the more knowledgeable programmer. While there is a bit of dictation from time to time, I always take the time afterwards to make sure my pair understands what was done and, more importantly, why. As time goes on, these dictations become fewer and farther between. If a pair is working primarily and continually from dictation, then they're doing it wrong.

    8. Re:Suck it and see, it's not for everyone by Fallingcow · · Score: 3, Insightful

      Shit, I spend more time reading docs, googling, staring in to space thinking about problems, and doodling ideas and flows on paper than I do actually coding. I'd think it would be hard for two programers' true coding time to line up well enough for pair programming to work, and you'd have to allow time for them to share any breakthroughs they'd had between sessions, unless you tried to pair-think too, which sounds annoying at best. Bouncing ideas off co-workers as necessary is one thing, but beyond that it seems counterproductive.

      Maybe this works if you have a very top-down structure with an engineer/analyst up the chain handing you every single thing you need and defining in extremely precise terms how everything last detail should be implemented so there's nothing left to do but type, and maybe decide which kind of loop to use or whether to use switch/case versus if/else or whatever.

    9. Re:Suck it and see, it's not for everyone by Anonymous Coward · · Score: 3, Insightful

      Yeah, if you want the seasoned vet to commit seppuku...

    10. Re:Suck it and see, it's not for everyone by Anonymous Coward · · Score: 2, Insightful

      No thanks.

      I believe as an experienced coder that I will end up spending all my time explaining my code to someone with less experience and/or justifying my code to someone who wants to do things a different way. Since I'm "old" the collected experience of my life, and all the generations before me that I studied, will be deemed "outdated" because it doesn't jive with something someone read in a book.

      A continual flame war, with continuous interruptions, with another ego maniac really sounds like a great technique for getting things done to me.

      I worked on a project with another programmer where we were told to record our time conscientiously. It was going to be billed back to a consulting firm who delivered the original unworkable code. At the end we found we had spent 55% of our time explaining what was done to the other programmer. The inescapable
      conclusion is that the project would have been done faster by one programmer.

      For gods sakes, just say no to the madness.

  2. Facebook Mobile Apps by Kadagan+AU · · Score: 3, Insightful

    If the Facebook team is using pair programming for their mobile apps (on all platforms!), maybe they should try something more traditional because it's not working! They have so many bugs and glitches in the IOS, Android (tablet), and Blackberry apps that they definitely need to try a new approach! Maybe if they TESTED them before releasing, they'd have better results?

    --
    This space for rent, inquire within.
  3. Kent Beck, Facebook programmer by Barandis · · Score: 5, Insightful

    I know it's just a summary and all, but it makes me feel vaguely sad that out of all of the things you can say about him, Kent Beck is tagged as a "Facebook programmer."

  4. less pair-programming chain gangs by Anonymous Coward · · Score: 4, Insightful
  5. Re:Maybe this is a generational thing... by O('_')O_Bush · · Score: 5, Insightful

    That is because new programmers don't have experience solving problems, and end up getting stuck spinning their wheels. For them, programming is the challenge. For more experienced people, the programming is trivial, it is the design that is a challenge.

    --
    while(1) attack(People.Sandy);
  6. Re:Maybe this is a generational thing... by vlm · · Score: 5, Insightful

    I wonder if this has something to do with the nature of the people who went into programming 20 years ago (compared to today), or what...?

    After you live and work through 10 or so silver bullet fads you'll get a bit jaded at "oh god not yet another silver bullet that'll magically fix everything if we just change everything and hire some expensive consultants".

    http://en.wikipedia.org/wiki/No_Silver_Bullet

    My main whine about pair programming is its a bastardization of ye olde master/apprentice. Oh so close to being correct, yet still miss the target. That's worked in about a zillion other fields for only about a zillion centuries. I learned a lot as an apprentice from some good masters and taught a few apprentices as a master, hopefully well. Pair programming claims master/apprentice inevitably leads to "watch the master" where the apprentice sits around and learns nothing. That's wrong; its not an inherent effect of master/apprentice, it's an inherent effect of shittymaster/apprentice. It does correctly show that having a con man or moron as master doesn't work, or maybe the older the programmer is the more important it is that he not be an idiot. Also its the apprentice's job not to be passive... ask why, ask how it works, ask what other options exist, etc.

    I suppose you can't charge $xxx/hr as a consultant or book author merely by telling the boss to set up something like a medieval blacksmithing guild, gotta come up with some new twist on the old story.

    --
    "Science flies us to the moon. Religion flies us into buildings." - Victor Stenger
  7. Re:Maybe this is a generational thing... by pixelpusher220 · · Score: 5, Insightful

    Or drive the few women in tech far far away....

    --
    People in cars cause accidents....accidents in cars cause people :-D
  8. Ok in small doses by composer777 · · Score: 4, Insightful

    I've had experience with pair programming. In my mind here are the pro's:
    1. It keeps you engaged and prevents your mind from wandering.
    2. It is a great way to teach junior level programmers, many of whom suffer from a lack of training and are thrown to the wolves in the beginning of their careers. I would have LOVED pair programming (in small doses) when I was starting out. It's a great way to learn things about a complex system that are not obvious.
    3. Different people tend to approach problems differently, and this difference in perspective can make it easier to catch bugs that are not obvious to a single programmer.

    The Cons:
    1. When abused, it can reduce productivity by distracting coders and not allowing them the space they need to think.
    2. It can create a hostile environment where the employee feels that they have no privacy, room to think, and where they are constantly being watched. This is part of why I think management loves it so much, they are outsourcing micro-management to their underlings.
    3. It can reduce motivation of individual developers since the buck no longer stops with them, but instead is the group's (or pair's) responsibility. While diffusing some responsibility across the team is not a horrible idea, people tend not to be as motivated. I observed motivation take a big nose dive when the shop moved to XP, since people were no longer as accountable for finishing anything, they just had to come up with a BS explanation for what they did the past day during the scrum, and really, it's a lot easier to BS one day at a time than it is to explain just what the hell you've been doing the past two months.
    4. Many poorly designed XP programming environments are inherently disrespectful, and are merely an attempt to turn a programming shop into a factory floor with no privacy. As a skilled programmer, I won't go along with this, and I actually refused to move into this kind of space at my last job, and instead left, along with the majority of seasoned developers.

    Overall, I can get some of the benefits of pair programming by walking down the hall, grabbing another team member and saying, "Hey, could you take a look at this?", when I'm having trouble finding a bug. It shouldn't require them to sit there all day.

  9. Methodology Talent/Skill/Experience. by Shoten · · Score: 5, Insightful

    Let's face it...this is yet another iteration of the dance we've seen before. Extreme Programming, Agile Programming, and so on. Companies keep hoping that there's a methodology that can be applied to the process of coding and development that will homogenize their workforce, allowing them to look at coders more like cookie-cutter individuals. There are multiple drivers behind this: the difficulty of assessing a programmer's talent during the recruiting process, the desire to use cheaper resources, especially in outsourced business models, and the challenges that result from coders who turn out not to be a good fit with their role. But at the end of the day, coding is a creative process, and creativity fares poorly under standardized, one-size-fits-all models.

    --

    For your security, this post has been encrypted with ROT-13, twice.
  10. 1999 by nitehawk214 · · Score: 4, Insightful

    1999 called, they want their useless waste of resources techniques back. Nice try Kent trying to jam Extreme Programming on us again.

    --
    I'm a good cook. I'm a fantastic eater. - Steven Brust