Slashdot Mirror


Experiences with Pair Programming?

gmletzkojr queries: "I recently was able to engage in some Pair Programming for a couple of days. However, my experience was less than rewarding. I have read books regarding the subject, and all of the case studies show praise for the effort. I found my pair programmer a bit difficult to work with. Has anyone been in this situation, and what things can be done to work around the personality conflicts?"

33 of 125 comments (clear)

  1. Personality Problems... by lesv · · Score: 2, Interesting

    I've always tried to deal with personality issues when I hire.

    I've also had significant success when using pair programming. It's a great way to make sure process is followed, it improves quality, and it spreads knowledge around.

  2. I too find my coworkers difficult to deal with by Cecil · · Score: 4, Insightful

    What is to be done about this? Ask for a different partner, maybe? Pair programming is useless if you can't work with your partner. This should be obvious. Not everyone is compatible, not with each other, and some people probably aren't even compatible with pair programming at all. That's fine, everyone's different.

    Nothing will ever be a magic bullet. Pair programming, agile methods, and all that other crazy marketing-speak, it's just a procedure. If it works for you, use it, if not, try a different approach.

    1. Re:I too find my coworkers difficult to deal with by Tye_Informer · · Score: 3, Interesting

      I have found that along with Pair Programming, all code needs to be "group owned". Anyone can modify any code they think they need to. Having Pair Programming in this situation helps because you have a second set of eyes to keep your code as clean as possible.

      Since all code is group owned you don't always have to have the same partner all the time, you just end up with whoever is available when you are ready to code. I can't imagine how Pair Programming is much of a benefit if the pair is always the same two people.

      Of course, most of the time I have had a personality problem with a partner in Pair Programming was because I was being hard-headed and not willing to learn from my partner. If you are truly the expert, you will not feel threatened and will be willing to help your partner learn. If you aren't then the personality problem is probably caused by both.
      As for what to do, let it go. Do your job and leave the problems out of it. If they are that bad, others will notice in time and the Pair Programming practice will work.

    2. Re:I too find my coworkers difficult to deal with by Javagator · · Score: 2, Insightful
      some people probably aren't even compatible with pair programming at all

      I think I fall into this category. I would probably fall asleep when my partner was programming, and when it was my turn at the keyboard, I would erase everything he had done and do it the way I wanted it done.

    3. Re:I too find my coworkers difficult to deal with by dubl-u · · Score: 2, Insightful

      What is to be done about this? Ask for a different partner, maybe?

      It's good to change pairing parters every 2-4 hours. That's short enough that you should be able to deal with anybody on your team, and long enough to get something done and checked in.

      Also, learning to pair is exhausting. When people are first getting used to it, I encourage them to work into it slowly. E.g., 1 short session the first day, 2 the second, and so on.

  3. perhaps this is relevant? by Shaleh · · Score: 2, Funny

    When I first looked at the comments this was my fortune:

    It's hard to be humble when you're perfect.

    Think that may relate to this issue, as others have commented on personality conflicts.

  4. My Experience by Apreche · · Score: 4, Insightful

    Scenarios and results from my experience.

    1) If your partner is more experienced it is usually annoyance for them and great fun learning for you.

    2) Vice versa of 1.

    3) Neither partner is experience or knowledgable enough to do the work on their own then productivity increases only slightly because you have two people trying to figure out new things at once. Also makes the job programming less painful for both since you share suffering.

    4) Both partners are knowledgeable and experience enough for the work. It depends on the personalities of the people

    4a) personalities are conducive to teamwork, super productivity! Project gets done fast, bugs are caught during implementation, everyone is happy.

    4b) personalities not conducive to teamwork, super bad! Both programmers are knowledgeable and could therefore be doing more work if they each coded separately.

    As long as neither partner lacks basic social skills and is not a complete loner then teamwork is usually good experience because you can enjoy the company and conversation of another programmer while you work.

    --
    The GeekNights podcast is going strong. Listen!
    1. Re:My Experience by Anonymous+Brave+Guy · · Score: 4, Insightful
      The more experienced partner needs to just put up with the "annoyance" of explaining things to other people. It's called teamwork, and he/she needs to get used to it.

      I've seen this mistake in numerous contexts, from programming to pairs sports. If you put two people together of very different abilities, there really is very little for the more senior partner to gain. Sure, they can pick up the odd thing occasionally, but not enough to keep them motivated and justify the time they "waste". Likewise, teaching can be a useful way to solidify knowledge, but that only works if the abilities are different but not too different. Getting a world champion to coach an absolute beginner will be frustrating for both. Getting a 20-year veteran to teach programming 101 to a newbie by drip-feeding on the job will be frustrating for both.

      The art of good management/coaching in these situations is to pair up appropriate people, and only appropriate people. If you do, it can be a rewarding experience for both parties. If you don't, the senior guys will simply decide it's not worth it and walk away, leaving you with only the junior guys left. Good management consists of making the best use of all your resources, not dumping half the guys with things they really don't want to do and calling it "teamwork".

      FWIW, I don't rate full-time pair programming in most places. IME, a culture where junior developers feel able to ask for help as often as required and senior developers are happy to give it whenever they can, and where training and review are taken seriously, gains you most or all of the benefits without anyone getting claustrophobic and feeling under permanent pressure. This has been the case in pretty much every good dev team I've ever worked on.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    2. Re:My Experience by Anonymous+Brave+Guy · · Score: 2, Interesting
      It is necessary to transfer knowledge from more experienced people to less experienced people. Senior level people cannot expect to work in a vacuum.

      Both of those things may be true, but there is a big difference between "not working in a vacuum" and "never having time to work on something alone and uninterrupted". A strong dislike of the latter situation does not imply that you are "not a team player".

      As is often the case, the best programmers don't necessarily make the best programming teachers, nor vice versa. Sometimes junior guys will benefit more from a training course. Sometimes they'll get more out of working on something with a mentor available when they need one. Working full-time with a much stronger developer would just intimidate the hell out of a lot of people and cause their productivity to plummet.

      As I said before, the art of good management is to make the best use of all your people. The first step to that is acknowledging their respective strengths and weaknesses. The second step is figuring out how to take best advantage of the former while avoiding the latter as much as possible. If that means taking a guy who can write excellent, highly maintainable code and leaving him to get on with it most of the time, so be it.

      Slashdotters love what you're saying, though, because it supports their ideas that they should be able to ignore everyone else and work alone on a project. Enjoy the mod points.

      That would be an overly naive and/or arrogant attitude, unbecoming of a senior developer. However, the alternative explanation is that some of slashdot's moderators appreciate the point that this is a management issue, which needs to account for individuality. And while it's nice to know some people found my post insightful, I didn't make it for the karma, and have plenty of that already, thanks.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  5. Just get off the keyboard retard! by QuantumG · · Score: 4, Funny

    "Type foo"
    "What?"
    "There, foo"
    "Oh yeah, ok"

    "No, foo"
    "Oh right"

    "Oh for fuck sake.. FOO, the keyword is FOO"
    "Oh sorry, was thinking about something else"

    Pair programming is like watching a woman change channels. "You know what's on this channel, it's shit, keep going."

    --
    How we know is more important than what we know.
    1. Re:Just get off the keyboard retard! by dubl-u · · Score: 2, Interesting

      Pair programming is like watching a woman change channels. "You know what's on this channel, it's shit, keep going."

      If it's like that, you're doing it wrong.

      For me, it's like the driver/navigator combination on a road trip through an unfamiliar city. Except it's better. If I notice my partner glazing over, I just shove the keyboard over to him. That's harder to do in a car.

  6. I gave up by sfjoe · · Score: 4, Interesting

    I was assigned to do pair programming with a more senior person. I got so tired of my suggestions being ignored (not disagreed with, ignored), that I just gave up and sat and watched him. The project had long since morphed into a Death March so this was just one more reason to loathe going into work each day.
    If I ever get forced into another pair programming situation, I'll use my spare time to apply for other jobs.

    --
    It's simple: I demand prosecution for torture.
    1. Re:I gave up by pyrrhonist · · Score: 4, Informative
      I was assigned to do pair programming with a more senior person. I got so tired of my suggestions being ignored (not disagreed with, ignored), that I just gave up and sat and watched him.

      Your experience was done completely wrong. Part of pairing a senior developer with a junior is to teach the junior developer things they didn't learn in school However, the junior developer constantly questioning the senior developer's judgement is equally as bad as the senior developer ignoring the junior developer. Neither developer is there for the other's amusement, and it's good to keep in mind that there should be no criticism; sometimes neither developer's idea is very good.

      These are the problems as I see them:

      • You should have been the one typing. You will learn more this way, the other person should express things as ideas, and not code. Then, as a senior, he can point out optimizations, if you go astray while coding. Telling someone how to type printf is not pair programming, noting that the error needs to be logged is.
      • The senior programmer should have told you why he thought your ideas wouldn't work, and not be such an asshole. It's not helping you any if you don't understand why the senior is choosing not to implement your idea, and he probably has a good reason.
      • Likewise, you need to learn when to shut up and not be such and asshole. The senior has more experience than you, and stating the obvious on every line is not going to accomplish anything. He already knows what to do, so either ask constructive questions or add to the design; don't just spout idioms and cliches.
      Pair programming is a two way street!
      --
      Show me on the doll where his noodly appendage touched you.
    2. Re:I gave up by pyrrhonist · · Score: 3, Interesting
      That was one of my ignored suggestions.

      You were on the right track! Your pair was improperly trained.

      Possibly. Actually, I don't think he was even hearing me.

      That's completely unprofessional. All I can say is that the developers that I have worked with would never do anything like this. In fact, in the last place I worked where pair programming was not policy, we sometimes ended up initiating a pair programming session on our own when we had a particularly hard problem to solve. This happened regardless of the seniority of the engineer.

      I did shut up. I thought that was made clear in my OP.

      Ack, that's not really what I mean; see this earlier explanation. In your particular case, being quiet wouldn't have helped you. Unfortunately, your partner is an antipattern, and probably no amount of diplomacy would have helped.

      Let me try to illustrate this better with an example: Back when I was a junior developer, I was put on a project I had no experience with (I didn't even know how to program in the language they used), and told to add a particular feature in a very complicated section of the code. Of course, I had questions, and it so happened that the main developer (and the person I was told to work with) was located right across the hall from me. So, I would pop in from time to time to ask questions about what certain undocumented variables meant, or which part of the state machine I could safely change. I thought everything was fine until my annual review where I got lambasted for, "asking too many questions". Of course, my first thought was, "That greasy bastard!"

      However, you have to look at it from his point of view. The code that I was working on was not critical (it was going to be heavily reviewed and documented before it was passed off on). The code he was working on was critical, more complicated, and on a tighter deadline. He was the more critical resource, and even though he was told to help me, his time was more important. What I should have done was prepare a list of all the questions and sample code that I had, and scheduled an early meeting with him. In other words, working with him instead of pissing him off.

      This is a skill that has to be learned, and unfortuately the way it's usually learned is that the junior developer gets pinged. Over the years, I have found myself in the same situation as the senior developer in my story, but I have, at least, been better about telling junior developers what I expect and scheduling time with them.

      --
      Show me on the doll where his noodly appendage touched you.
    3. Re:I gave up by ZorroXXX · · Score: 2
      As others have pointed out, it's all about working toghether.

      We have bought the book "Pair Programming Illuminated", ISBN 0-201-74576-3, which talks about the practical things related to pair programming.

      I have not read it yet, but I noticed that one of the chapters has the following title: My Partner Is a Total Loser and Other Excess Ego Problems :)

      --
      When you are sure of something, you probably are wrong (search for "Unskilled and Unaware of It").
  7. you were no rose either by greywar · · Score: 2, Funny

    Hey! You were no rose either. And that whole printing routine was a farce. And its YOUR FAULT. I suggested something different but you had the keyboard. And speaking of which-you hogged the keyboard the whole freakin time too!

  8. Missing the point? by Anonymous Coward · · Score: 4, Insightful

    I found my pair programmer a bit difficult to work with.

    That's actually the whole point of pair programming. It's supposed to slow you down so you make fewer mistakes.

  9. 4 years of xp and all i got was this lousy t-shirt by dwatling · · Score: 5, Interesting

    Things I would recommend:

    - Communication. This is by far the most important quality to have as a pair.
    - Patience. Sometimes your pair might not be at the same level you are, in this case, it is your job to help get them there.
    - Assertiveness. If you have no clue what your pair is doing, ASK!

    Other recommendations I have are to force your partner to drive if they are more inexperienced than you. This will help you both learn. If you don't have any idea what's going on then tell your partner you'd like to drive for awhile. I find this helps get you focused and allows you pick things up faster.

    Of course, if your partner just isn't willing to cooperate, then I think there are other issues that need to be dealt with. But, for the most part, I think people are more than willing to teach others, you just have to ask and communicate.

    Another thing to keep in mind, too, is to give it time. You aren't going to be a master pair after a few days or weeks.

  10. I get a lot done by Paradise+Pete · · Score: 3, Insightful

    The main thing it does for me is keep me focused on working. It's also good when there's a hairy problem to figure out. But sometimes when it's time to just crank out some straightforward code without getting distracted it's better for one person to go take a break for a while.

  11. Nothing different by The-Bus · · Score: 4, Insightful

    Not really anything different than working with any other person. Programming doesn't introduce some new kind of situation to deal with that teams of two haven't been dealing with for centuries.

    So, my tips, just coming off about a year's worth of pair work:

    1. The most important thing is that you have to be complementary. That is, their strengths have to fix your weaknesses, your strengths have to fix their weaknesses. If they don't have any strengths, it will be more like training for them, a mentor/student situation as opposed to a true team.
    2. Think of it as a product. If "average" or "baseline" is 1, it helps if you're a 2.1 and they are a 1.4. If you're very good and they're not, the total suffers. Only work with someone that is as good as you or better, and only do it if you're very good to begin with.
    3. Define exactly who is going to do what! This is not terribly succesful when managers do it because they're not you two -- they can't see you in action and suggest anything. It's up to you to figure out what works best --- split up all the different tasks so that each of you are doing what you do best. As you go along you will find out whether it's better to write these down and adhere to them or (better yet) have them be somewhat fluid so that some responsibilities cross over.
    4. One system should keep track of what's going on. Whether that's a calendar you both use, a checklist pinned on the wall, an eraseboard, or just one of you two.
    5. (Regarding the previous). Think in term of goals, not minutiae. You both should be good enough that if you're, for example, auto mechanics, one of you says, "Find out where the noise on the Pontiac is coming from" rather than saying "From 10:30 to 11:00 I want you to inspect the following parts and pieces of the Pontiac: A, B, C, D..."
    6. Keep everyone else out of it! Once a system is established and you've learned to rely on each other it's going to be really obtrusive to have others meddle in.
    7. Meet together with management whenever possible.
    8. It helps if both of you have similar goals as to the level of your performance. Even if both of you are skilled gurus and one of you is checking job sites because they need to leave in the next six months, that's not going to work out.

    This is, as I said before, from about a year's experience working day-to-day with only one other person. I hate paperwork, don't really like a lot of "busy" work and, in both cases, the other person just wasn't very good at some of the major intricacies of the position. The first time, we were more succesful than either of us was alone (generally being 2.5x times as productive as any individual). The second time, we were doing about as much as eihter of us were doing individually.

    The good thing is that now I'm back by myself and have become a lot better thanks to the teamwork environment. I wasted a couple of months, but that's behind us now.

    --

    Small potatoes make the steak look bigger.

    1. Re:Nothing different by Tony-A · · Score: 4, Interesting

      Programming doesn't introduce some new kind of situation to deal with that teams of two haven't been dealing with for centuries.

      1. "their strengths have to fix your weaknesses, your strengths have to fix their weaknesses"
      By far the most important. An old rule of thumb (before the Mythical Man Month) was that "if one programmer can do it in one year, two programmers can do it in two years." When and if the "two heads are better than one" comes enough into play, the answer can be two months!

      3. "who is going to do what". Bad place for management to meddle. People tend to hide their weaknesses, even from management. When a team works, individual weaknesses are very well hidden from all onlookers.

      4. "One system should keep track of what's going on."
      Absolutely. In fact one bad system will beat two good systems.
      You can tolerate different goals or directions. You cannot tolerate different positions of where you are now.

      6. "Keep everyone else out of it!" Effective teams become very suspicious of all "foreigners", not excluding management.

  12. Who's in charge? by GCP · · Score: 4, Insightful

    I think the best approach is to pair an experienced person with a less experienced person, and make it clear to both that the more experienced person had two votes and the less experienced had one in any disagreements.

    I wouldn't mind being partnered with someone with a lot more experience. I would consider it an opportunity to turbocharge my own learning, and though I would ask lots of questions and might even gently challenge some decisions, I would make it clear that they were HIS decisions to make, even if the boss didn't manage it that way.

    I also wouldn't mind being the senior partner as long as the junior understood that, though I would appreciate his input, the decisions were mine.

    Two inexperienced people shouldn't be paired. All of their arguments will end up being over who is able to make who back down. Complete waste.

    I would also be willing to be paired with another experienced person, with my (senior) level of experience, if it were the right person. It would be harder to make this work with two arbitrary people than the case with unequal pairings and one guy in charge. In the case of two experienced people, if you had to specify which one was in charge, it probably wouldn't be a good pairing.

    I had a discussion with another senior architect (like me) the other day, and both of us agreed that it would be fun for us to try pair programming together some time because both of us have concluded that the other has expertise that we wish we had. ;-) He's the only one in his group I'd be willing to work that way with, though.

    --
    "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
    1. Re:Who's in charge? by dubl-u · · Score: 4, Interesting
      I had a discussion with another senior architect (like me) the other day, and both of us agreed that it would be fun for us to try pair programming together some time because both of us have concluded that the other has expertise that we wish we had. ;-) He's the only one in his group I'd be willing to work that way with, though.

      That's one good reason for pair programming, but it's far from the only one. Here are reasons I like promiscuous pair programming:
      • instant code review
      • instant design review
      • keeps me from making stupid mistakes
      • keeps me from gold-plating
      • I spend less time debugging
      • I know more about the system
      • handing off work is easier
      • code is more consistent throughout system
      • when we get tired, we notice and take breaks
      • improves truck factor massively


      That last one is probably my favorite. When I'm on an XP team, taking a vacation is never a big deal, because I'm never the only person who knows how to do something.
  13. Quasi_pair by cookiepus · · Score: 3, Insightful

    First of all, I think the problem is with you. Here you are asking us for feedback on pair-programming, but you barely tell us what problems you encountered. Do you just sit with your pair and say "all this shit is fucked up?" You should probably tell us the specifics of the issues, at the very least for our education, and maybe someone can address them more specifically.

    Anyway, just kidding. Didn't mean to attack you personally, just consider what I said.

    I find sitting and developing with someone very useful, especially if this person is new-ish and I want to bring them up to speed. Basically I watch them do their thing and comment on what they're doing, especially if it could be done better. This is certainly very effective at keeping them from putting in silly errors, because I spot those right away. But the real advantage is that from short sessions like this I can ascertain the person's grasp of the task. If I can see that he's basically looking at the right things and going about it the right way, I feel OK with going back to my desk and doing my stuff. If the guy makes a lot of errors and is generally approaching things the wrong way, good thing I am there to keep him from getting too deep.

    I would guess that mandating 2 programmers per computer at all times is too much, but there certainly are times when doing this for short periods of time is extremely productive.

  14. Well said. by BrokenHalo · · Score: 2, Insightful
    In other words:

    Grow up and get on with your job.

  15. The key is communication by Zarf · · Score: 2, Interesting

    ... if you are not both effective communicators then pair programming will only be painful. You must be able to handle criticism, give criticism, and do so in a constructive way. If you can't do that then you're too old skool programmer for the new skool programmer ways.

    --
    [signature]
  16. Actually I'm doing this right now... by BeatdownGeek · · Score: 2, Informative
    And I think it may help if you and your partner have different strengths and weaknesses so that you compliment each other somewhat.

    Right now I'm taking a real-time and embedded systems course at RIT. The idea is that it's inter-disciplinary: CE, EE, CS and SE students are taking the course.

    So for the projects, they pair a CS or SE student with a CE or EE student. This makes for teams with one person who's strong in lower level (assembly/ hardware) work, and another who's more familiar with higher- level programming concepts.

    I've found that while my teammate knows the assembly much better than I do (I'm SE) I can more easily grasp the overall design and algorithms involved to complete the task. This actually made for very productive work since it's like having two different perspectives working on the same puzzle.

    I imagine that if both of the ppl involved were at the same level knowledge-wise, it could get frustrating. In that case I would just look for peer review. But in my case it's been working great.

  17. that should be a lot of fun by jdkane · · Score: 2, Funny
    From the article: "The other programmer, the observer, continuously observes the work of the driver to identify tactical (syntactic, spelling, etc.) defects"

    Driver: click, click, click, tappety-tap tap tap, click.

    Observer: Dude, Intelli-sense just underlined that word in red. It's some kind of syntax error -- just hover your mouse over it to see it.

    Driver: Ya, I saw it ... I just want to finish up what I'm typing and ...

    Observer: It just underlined something else in your code. I don't think it's gonna' compile.

    Driver: Of course it won't compile. Just wait until I finish this thought .... tap, tap, clickety click, tap-tap

    Observer: I would fix those errors before continuing.

    Driver: WHY? clackety-clack, slam, bang

    Observer: Why not?

    Driver: ARGH!

    Observer: I'm bored. I'm just gonna' go grab another coffee.

    Driver: GO AHEAD. AND WHILE YOU'RE AT IT, HAVE A SMOKE, AN EXTRA LONG LUNCH, AND THEN TAKE THE REST OF THE DAY OFF BECAUSE YOU'RE NOT LOOKING SO GOOD RIGHT ABOUT NOW.

    1. Re:that should be a lot of fun by clintp · · Score: 2, Insightful

      When we were pairing around here (gave it up, not appropriate for this business model, etc...) we got over this in the first day.

      Our Driver could type all of the mistakes he wanted to, but since the Navigator was doing the big picture stuff too (in addition to being an observer) he could indicate just before the driver switched functions/files/pages that there were problems. So your conversation would have gone more like:

      Navigator: Modify that bit in Foo.bar() to do such-and-so.
      Driver: clickety-clickety
      Navigator: (Quetly noting mistakes.)
      Driver: clickety-clickety, fixing some mistakes he's noticed, making others Okay, now where?
      Navigator: Before we pop over to Class.method(), that variable should have an uppercase Z and you want to pass obj1 to method bar() not tmp1.
      Driver: Okay. clickety-clickety Going over to Class.method now.... mousey-mousey

      The Navigator isn't backseat driving and the driver can type things any way he wants too as long as he doesn't leave a mess somewhere.

      --
      Get off my lawn.
  18. I peer program every day... by heistgonewrong · · Score: 2, Interesting

    me and my partner run a web development firm, after getting to know eachothers styles, it's a breeze now! we can colaborate together, or finish up eachothers work, it's a great experience. i guess not so much if you're just starting out with someone, but give it time and you'll love the benifits.!

  19. Working in pairs requires two focuses by Peter+Cooper · · Score: 2, Interesting

    Working in pairs can only work if each member of the pair has their own responsibilities, and not, like in most pair programming, the same responsibilities. For example, pilots can work in pairs since while one 'has the stick' or is talking to the tower, the other can be dealing with navigational and environment issues.

    Sitting watching someone program is not the same, whether you're making input or not. Put it into the pilot's position. Pair programming is like the co-pilot constantly saying to the pilot.. 'er, nudge to the left a bit', 'hey, watch out for that cloud there', 'it's time to call the tower', instead of actually doing something productive.

    Mechanics can work in pairs, but generally they'll be working on different areas of the car.

    Surgeons can work in pairs, but each will have a specialty, or more hands are just required to do that particular op.

    Musicians can work in pairs, trios, and so on. But they don't all gather around a piano and give suggestions to the person at the keys! They all have their own instrument and play at the same time.

    If you want to code in groups, code in groups.. but make sure at least everyone has a keyboard!

  20. Re:Pair Programming with two keyboards by firefarter · · Score: 2, Informative

    If you're lucky and work on OSX you might want to try out SubEthaEdit.

    You can browse other user's open documents via Rendezvous - errr... OpenTalk, grant them access to your open docs. And nice colors so you can see who is breaking what.

  21. I hate it I hate it I hate it I hate it. by Anonymous Coward · · Score: 2, Insightful

    Pair programming is a crutch to prop up people who have no clue what they're doing. Take one smart person, one thumb twiddler, and they just might be a quarter as productive as the smart person alone. But we don't mind, because Mr. Thumb Twiddler isn't twiddling his/her thumbs anymore. And getting things done isn't nearly as important as making sure everyone looks busy.

    The only way to program is on your own. Learn stuff from more experienced people at code/design reviews. If you need someone staring over your shoulder all the time, your either very lonely outside of work or just incompetitent on your own. Sometimes there's something tricky enough to warrant talking it through with someone, but doing it all the time is just being chatty.