blog.mikro2nd.net

To a Young Programmer Who is Having a Hard Time Learning the Craft

Did the AMA thing with some of our students yesterday. It was fun. It's usually fun, interacting with students, trying to answer their questions without ego running wild.

But I was bothered by my answers to one woman's question: "How do you team effectively if you're a weaker programmer?"

My answer was along lines of "pair with stronger programmers, ask for help early and as often as you need to", and it's not a terrible answer, particularly as it was followed up with an exhortation to stronger programmers that it's their responsiblity to help, to coach and lift up their less-able colleagues, preferably by pairing/mobbing (with the "weaker" programmer driving the keyboard for a good bit of the time!) My definition of a "Senior Developer" is one who spends a greater proportion of their day enabling and supporting their team-mates than actually coding.

But my answer missed a whole bunch.

If you're recognising that you are a "weaker" programmer, well... that's good. No, that's great! You display the self-awareness needed to improve, you're expressing a wish to become better. And that means you have what's needed to learn the skills of the craft. I think that's a better place to be than a stronger programmer who is so arrogant that they're resistant to learning anything, assuming that they can work it out all by themselves. (To be clear, I'm not saying that every "strong" programmer has those negative traits. But arrogance is not uncommon in this trade.)

The trick — the very, very hard trick — for the "weaker" programmer — is: don't get discouraged.

There are many, many reasons why some of us might start out finding programming more challenging, from social and economic circumstances to health challenges to family issues. Any or all of these can demand a great deal of time and energy to cope with, and mean that we have less of ourselves to give to a difficult and demanding endeavour. Those reasons don't reflect on us as people.

If there is a "trick", I think it's in persisting.

Keep practising the craft.

Keep writing code, seeing what it does, making it do something different.

Keep breaking the code and fixing it again.

Keep doing all this in different programming languages and different applications.

You're not less capable or less smart in finding some of those things more challenging than other programmers appear to (and it's appear to more often than you suspect!) so you'll pretty soon see the common patterns between these different things — a process of abstraction and pattern matching — something the human brain naturally excels at — and, I believe, you'll become the stronger programmer. Persist. Practise.

And, if you want to talk about it with an old fart who is, to this day, not a very "strong" programmer (whatever that is!) but who's managed to grok a few of the deeper patterns over the years... I see you trying. And I'm listening.