Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I've been programming for a while on different languages. I never really studied programming at school nor worked on a team of more than two people (me included). Still, I've been a professional developer for over three years.

Last year, I took over my first C# project and it ended up being fine. I can't help but think that because I learned and worked alone I must be missing some concepts/hints/edge.

For those who've been solo developers before being part of a team, can you share your experience? Did you realize you were missing something? Did you find it hard? Did you learn faster after?

share|improve this question
5  
Trust me,it a whole different ball game all together. The frustrating thing is at times it isnt all about programming at all. –  Simon Mar 3 '11 at 4:43

4 Answers 4

up vote 20 down vote accepted

I can guarantee to you that everyone who is working in isolation, especially when writing code, but with any and all kinds of work, believes, 100%, that they are doing much better than they actually are.

So, the first advantage you'll find (and I found) when starting to work with a team is actually a rather humbling one. Working with others, especially when they are talented, but even in the unusual circumstance where you are better than they are in every possible imaginable way, will, at first, highlight your own mistakes and weaknesses. If you are able and capable of taking criticisms well (even if they only come from your own observations of your work, as seen when working with others), the experience can be a good one.

This first benefit lasts - as you work more and more with teams, and with more and more people, you will continuously get more and better feedback about your mistakes - which you can then use to correct. You'll also receive positive feedback about successes, but, especially in the programming world, negative feedback prevails (no one opens up an "anti-bug" in the bug tracking system to tell they looked at your module and saw an especially nice algorithm implementation).

In the long term, there are other lessons you will learn, some of which are very difficult to learn in isolation:

  • Writing legible code is difficult, especially when you're writing for other programmers, at different skill levels, to understand
  • Writing code which others have to bug fix is difficult. Helping others to fix your bugs requires skills you may not have
  • Project management is more important in a team, and activities you may not know about, or find useful, in isolation, become crucial in a team. Such as properly maintaining a clean release branch in CVS. Or testing code before checking in
  • It's easier to learn new technologies when there's someone around to explain them to you, and answer your questions about them as you learn
  • Interruptions are more frequent in a team, which can be both fun and frustrating. You'll learn how to switch contexts better when working with more teammates
  • Working in a team often requires structure that's not existent when working solo - from activities such as code-reviews, to simple but not necessarily obvious things such as always being at work on time.
  • It's easier to specialize very deeply when in a team, with trusty team-mates. You'll find that learning something, then teaching it to others, and then answering detailed questions about it (and solving related problems), especially when the people you deal with are other programmers, will push you to levels of skill and knowledge you were not aware of
share|improve this answer
    
Thank you for that pretty complete answer. You offer a point of view that I never had and that's very nice of you. When I get my 15 points of reputation here, I'll vote it up –  Mathieu Mar 3 '11 at 4:41
2  
About the point "Writing code which others have to bug fix is difficult"; it's also difficult to look at and fix bugs in other peoples' code, and this (and the experience you get from doing it!) should not be overlooked! Fixing bugs in your own code and fixing bugs in other peoples' code are two rather different skills, but I would say that they are both essential skills to have. Many times, the only way to ever get to fixing other peoples' mistakes is by being on a team of some sort. –  Michael Kjörling Mar 3 '11 at 12:33
    
I have to disagree with your first sentence. My experience was quite the opposite. When I worked on my own, I frequently worried that my code was somehow flawed or in some other way "not good". But now that I'm on a team, it's clear that I wasn't giving myself enough credit. That said, I agree with all your other points. –  Nick Mar 3 '11 at 17:08

A lot of my greatest tools were acquired from other developers. I've always been very active in learning from the internet and from books, but I wouldn't be able to do the job I do presently had I spent those years learning from text and schools only. I've learned something from every developer I've worked with. Sometimes, you learned what not to do or how not to behave. It also gives you a chance to explain yourself. If you've never explained how or why your code works to another developer, and then listened to their recommendations or concerns, you're really missing out. In my opinion that's one of the most fundamental of developmental programmer exercises. Excluding the rare super-genius, I seriously doubt any developer could attain a very high level of skill if they work alone exclusively.

My first real programming gig went from being a solo programmer at a small shop to working with a team. My skills increased exponentially from that team and from my interaction with them. Every time I've changed teams, there's this initial period where an entire new area of thought is explored and I learn things at a rate that feels like Neo learning Kung Fu in the Matrix.

share|improve this answer

There a lot of benefits you gain almost immediately after joining a team. Some come after a while but they do come without a doubt.

  • You're not the smartest guy in the room anymore. It's a very humbling experience to know there is someone better than you at programming when working on a team. But, if you are one of the few programmers who love that (I do!), you will soak up whatever you can from them.

  • You suddenly need to learn how to read other peoples code. It's no longer a matter of it being recommended to extend your knowledge. Either you learn to do it, or you won't be working there for long.

  • You're exposed to different types of programming and as such, learn what works and what doesn't. What makes a good comment, what makes a bad one. What makes a method horrible to work with, and what makes you want to use that method every chance you get. Invaluable, and no books can teach you this. :)

  • Social skills. You slowly learn how to critique coworkers code, and how to listen when someone shows you a better way.

  • You walk on eggshells when writing code. This will make you think extra hard when naming a variable. Writing code for yourself is one thing, it's another thing entirely when you know other programmers will read it.

Joining a team was a major shift for me, and I'm sure everyone here will agree that nothing can replace that experience.

share|improve this answer

Ya, when working solo you kinda miss your own mistakes/pitfalls so it doesn't seem like as big of a deal, but once you start working with people and people start suggesting/pointing out things you'll be like "Oh ya....why didn't I think of that"

Trust me....an extra set of eyes is ALWAYS worth it when it comes to programmin.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.