views:

69

answers:

5

College is the first step for many professional software developers and while a Bachelor's degree in Computer Science will get you a good foundation it is heavily biased towards theory. You get a good understanding of how computers and programming languages work but it barely scratches the surface of professional software engineering.

Books, articles and research papers can be a good, inexpensive supplement. I've learned quite a bit from self study but this requires a good deal of self-discipline as well. Something that can take years of practice in its own right to develop.

Many of the best author's in the field are also involved in consulting and training workshops. Trade shows are another place to find training. The problem with both of these is cost. Most, if not all, of these workshops and tradeshows range from $400 up to $2000+ to attend. This is fine if you work for a company that has the resources and interest in improving the skills of its developers but the high price tag places these kinds of events out of reach for the average programmer (or maybe just out of my reach).

I've been fortunate to find some recorded training hosted online for free and these have been excellent but they are scarce.

By the way, before anyone says it, I know there is no substitute for experience, which can only be gained through hard work but I also know that training can give you skills you may never pick up through job experience.

A: 

Do some code katas on your own to start with.

Kelly French
A: 

Read - and then DO!! thats it.

(and to elaborate - try to join a team / experience programmer, and help him... for free... best training you'll ever get).

Dani
+3  A: 

Phew, this is going to be a busy one.

  • Buy and read "The pragmatic programmer" it has all your answers.
  • Find a mentor and leach experience from them, sit next to them if you can and watch them work, ask them why they do stuff one way or another. If you can't sit next to them send them your code to look through and comment back.
  • Get a pet project and play with it, extending and push it. Learn by doing.
  • Try your hand at some open source if you can, look at how others are coding and learn from it, ask questions and try to feedback.
  • Read a whole lot more!
  • Question every line of code you write, how could it be better, faster, easier to read/maintain
  • Learn a new language, it opens your eyes to all sorts of different ways to do stuff

Now, if you have to choose do point one and take it from there.

Pete Duncanson
So far I believe you are the only person to answer that read beyond the title. I've not read *The Pragmatic Programmer* although I've read others with the same focus. With the exception of finding a mentor I'm already doing your other suggestions. Perhaps that is what I'm lacking. Software is as much art as science. Most other art forms rely on guided instruction until the artist has developed enough to experiment on his own. Its a shame software development doesn't follow this pattern.
codeelegance
It can be hard to find a mentor as most developers are busy enough developing and growning themselves but you need someone to shepard you through if you want to get better. Chad Fowler has a nice quote "Be the worst member of the band" ie find a group of guys better than you and work with them, they will push you to get better. Seriously, go order Prag Prog you won't regret it. Following that this one is on my next to read list http://www.pragprog.com/titles/cfcar2/the-passionate-programmer cannot praise the PragProg set of books highly enough, they made me the coder I am.
Pete Duncanson
A: 

It depends on what languages(s)/technology you want to learn.

For .Net, you can't beat the following: http://www.microsoft.com/express/interest/

Once you choose the path you want to follow, there are beginners articles, free tools, and it opens up the entire world of .Net development. You can learn more advanced topics at the MSDN web site as well.

.Net development isn't a bad career choice, either.

David Stratton
A: 

Just start writing a program for yourself. You can read all you want but without ever doing anything you will never get any better. By writing a sizable program on your own you will face problems that you must then figure out. Thus learning...

corymathews