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.

This question already has an answer here:

From my experience in the current working environment, one's professional development is definitely in the hands of the individual.

As I see it there are several routes to the same objective based on cost, time and availability

  1. External Offsite training Online
  2. Training providers (itunes U,Pluralsight etc)
  3. Books
  4. Specialist /user groups
  5. Specialist web sites (Channel9, stackoverflow,dnrtv,codeplex etc)

What would you consider to be the best approach (blend) to continued learning and maintaining a professional standard of work?

share|improve this question

marked as duplicate by gnat, Yusubov, Dan Pichelman, mattnz, MichaelT Aug 27 '13 at 1:43

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
your list seems to miss the route that is probably most reliable: attending job interviews at other companies. Besides guiding through what's hot and what's not, it has an additional advantage of giving a chance to get a better job. programmers.stackexchange.com/questions/105280/… –  gnat Oct 14 '11 at 7:29
add comment

6 Answers 6

up vote 12 down vote accepted

However you learn, you should always think about works for you. What works for me may not work for you, and vice versa. Here's what works for me:

  1. Always learn from more than one source.
  2. Always put into practice what you're learning whilst you're learning (if that isn't possible then as soon as you can afterwards).
  3. Try not to learn about something in isolation. Sometimes you can't avoid it, but try to understand the context in which things are done and alternative approaches. In particular try to understand the consequences (good and bad) of doing something a certain way.

Here are the sources of information that I find valuable in order of usefulness to me.

  1. Books. For me these work really well, you're presented with a coherent (hopefully!) block of knowledge. They're easy to use, cross-reference and if you're not intending to read it cover to cover you can often pick up extra knowledge by page flicking (something I find missing from electronic resources where I find that sometimes I fall into the trap of going looking for the answer I'm expecting).
  2. Colleagues. Probably the best way to learn about something is to work with someone who knows the topic well and is willing to share that knowledge. It can also be useful to learn with someone else who also doesn't know much - but beware of jointly coming to the wrong conclusions and developing bad practices.
  3. Online Resources. Books can never keep up with the speed of development and discussion in the world of software development. If you want to keep up to date you need to read blogs, mailing lists and so on. You'll also got detail on topics that either aren't mainstream enough or are too narrow to have had a book out yet.
  4. Real-world Meetups. These are things like conferences and user groups. I think these are often nice introductions to new topics and good for confirming what you already think/know about - but don't expect really in depth coverage unless the event is extremely focussed. Where the real value for me is that you often get a lot more honesty than you get from books and blogs, especially during the Q&A part.
  5. Formal Courses. A lot of people sneer at formal courses - I suspect that's because they've not been to really good ones. Formal courses are really good when you need to get up to speed with something really new really quickly. Providing the person delivering the course knows their stuff you will also get a good feel for the thinking behind something not just the technical part.

    Self-taught people (and all good programmers will be mostly self taught as soon as they're more than a couple of years out of the last course they did) tend to pick up bad habits without realising it because what they're doing has worked in the context that they're in. That knowledge tends to not hold up when put into a different context. Sometimes it doesn't matter, you just recalibrate what you've learnt, but sometimes it does.

    Sadly good courses are rarely cheap and often aren't associated with any sort of certification - so picking a good course is both hard and (financially) dangerous so you could end up doing a rubbish course and having paid through the nose for it. Still, I recommend that people do a formal course every now and then to supplement self development.

share|improve this answer
add comment
  • Read! Mainly blogs in my case
  • Chat! Make time to discuss and validate with your peers
  • Seminars and workshops, instead of (rather dry and formulaic) classroom training
share|improve this answer
add comment

In addition to what Martin wrote, I will add the following:

The most effective way to learn is practice. Unless you are Raymond Babbitt of course.

So try to ask for tasks that you don't master completely. It will forces you to learn the appropriate technologies to complete it.

Example: You don't know anything about WCF? Take that task that state "build a WCF service for the customer object".

EDIT: Just noticed that I already answer the same question here.

I hear, I know. I see, I remember. I do, I understand. [Confucius]

share|improve this answer
add comment

If you are on a team, I'd say the best way for learning is to work together with your peers and learn from each other.

share|improve this answer
1  
I think this is the best single way, but it's not always possible. You can always learn from other people, even if they're more junior that you, but your team may not be involved in the topic you're interested in. –  FinnNk Oct 30 '10 at 12:43
add comment

The best approach would be to get books and update you knowledge on tools you wish to learn.

Specialist websites should help you to answer some of your main questions.

Of course we have to consider that you should have, something like:

  1. Willingness to experiment: try different commands until he got the software to do what you want. Try a few fixes on your own software before asking for help!

  2. Ability to learn independently: never wait for an explanation, go for it! Hard-earned knowledge never fades and provides motivation when the next challenge appears!

  3. Great sense of curiosity: ask your self how does this work? what does this code do? what about if you try a particular sequence of commands? Master your programs.

share|improve this answer
add comment

Within the work environment always volunteer.

Whenever someone asks for help installing new software, is looking for someone to join a new project, needs someone to look at some unmaintained software -- stick up your hand.

You will learn a lot even if the software is outmoded and unsupported! After a while people will come looking for you when a new project comes up or some new software needs evaluating.

share|improve this answer
add comment

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