Becoming a Programmer

I came across an article posted a while ago by Rob Walling (http://www.softwarebyrob.com/articles/Software_Training_Sucks_Roll_it_Back.aspx) proposing that the best way to learn how to program is via an apprenticeship with a more experienced programmer.

I love the idea, it just sounds right to have someone shortcut you through a lot of the unnecessary pain. It is something that I have seen that could have been incredibly beneficial – especially when you consider just how many people there are working in the industry who are not up to scratch because of the "Here’s a piece of work. Now do it." mentality, which provides fresh developers with no guidance and assumes that people will simply pick up information as they need it. The problem is the lack of a feedback mechanism. No one to point out mistakes, challenge the existing design, discuss which parts are right, or point you to a shortcut.

There are two areas of the programming profession where working with someone senior could be beneficial:
– good practices. Not everyone out there knows about Code Complete, The Pragmatic Programmer et al. and the good stuff within. Having someone even point out the texts to you and help you to work through the ideas within makes a big difference. There’s good stuff there, and you can spot those who know versus those who don’t.

– conceptual versus practical real-world programming. Make a duck quack in different ways versus implement a web service that back-ends onto a 20 year old COBOL program with dubious documentation. It is the practical side of programming where an apprentice-journeyman relationship would make a huge difference. There is no substitute for experience, and learning from other people’s mistakes is a lot smarter than making them yourself.

It is not a substitute for higher education, which provides an important foundation in the field, but there is a gap between the goal of a degree which is to teach you concepts versus the practice of programming in industry. Rightly so. I would rather work with someone who understands concepts rather than someone who simply knows how to use technology X. You want people to be flexible and pick up new technologies as needed. The two should be combined in much the way that a medical student does an internship.

The natural question to ask is how you go about doing this in a deadline-driven environment, but I think this question is wrong one to be asking. Rather, how does the environment need to change to allow for this type of interaction to develop? You need an acknowledgement that the time of the both developers needs to be accounted for and set it aside. You cannot book 100% of a senior developer’s time on billable work and expect them to also coach a junior member of the team. Some companies do this type of thing incredibly well, but I would like to see this approach adopted more widely.


Posted

in

by

Tags:

Comments

One response to “Becoming a Programmer”

  1. The Lal Avatar
    The Lal

    I think the apprenticeship idea is worth reviewing. It worked for centuries as a tried and trusted way of ggtting workers ‘trained’.

    That T word gets a lot of talk/fluff but its nearly always on your own. sure u do a class but once u’re back 2 work u can now go spread all that magic dust u just learnt! – yeah – right.

    Mentorship is needed no matter what the job/skill.

    BCS have been pushing apprentice type stuff 4 years. Don’t think they’ve had much success.

    Lal