Code what you don’t know

“Write what you know” is advice often given to new writers and authors. On the whole, it seems like good advice (though some would beg to differ). But when it comes to programming I would suggest doing just the opposite. To become a better programmer (or even a good one) it is essential that you constantly program what you don’t know.

The thing about programming (and to some extent writing too) is that it’s very easy to fall into a rut. It’s very easy to get into a habit of just building the same few things over and over again without doing anything really different. And down that path lies madness, or at least boredom. Most programmers I know (myself included) have low tolerances for boredom and boring things. And yet doing things that you are already familiar with is so very comfortable. You don’t need to expend much energy and can just keep ticking things off a checklist. Unfortunately, stagnation (and by extension, mediocrity) is probably one of the worst things that can happen to you as a programmer.

The world of software changes all the time. And that pace seems only to have gotten faster in recent years. Learning new things on a daily basis is part of the job description now. However, just keeping up with the times isn’t the only reason to keep doing new things.

It turns out that there is a small region of things that we can do to actually improve ourselves. It’s sort of a Goldilocks zone of performance — not too hard, but no too easy. Too hard and we simply get frustrated and give up. Too easy and we get bored and never learn anything useful. To become better as a programmer we must find that zone of things that are just slightly out of reach. That’s why we should continually be building what we don’t know — picking topics and projects that are slightly out of our current domain of knowledge, learning what we need to get the job done. Not only do we get to keep improving as programmers, we keep increasing our skill set and build an increasing repertoire of projects that are each different from the other. We don’t tie ourselves down as being just blub programmers but have a wide range of skills and tools that we can pull from at a moment’s notice.

Of course there is always the argument — “What if I don’t want to constantly get better?”. While I would like to say that’s a personal choice and one you’re free to make, the truth is even you’re not moving forward, you’re moving backward. There’s a growing amount of evidence to suggest that even if you keep doing the same job at a competent level over years, your abilities will keep getting worse over years. When it comes to skilled work (like programming and writing) you have to keep moving just to stay in the same place.

While that can sound depressing and seem like too much work, I like to look on the bright side — we don’t have to go looking for external motivations and reasons for doing new, interesting things. It’s a free pass to keep doing work that’s always a little bit different and never boring or repetitive. It’s an excuse to be on the bleeding edge (and we all know how we programmers love the bleeding edge).

That’s enough pep talk for one day. Time to get back to hacking.

One thought on “Code what you don’t know

  1. I think the “write what you know” advice is not very good, even by the standards of writing. While the spirit of the suggestion is to avoid having folks write text where they have to make everything up, and thus produce unrealistic settings/characters/dialog/etc. the truth is that if all writing were derived strictly from only what we know about, we’d have no way of really growing or learning from the ongoing discussions in our various fields. So imagine well, and write what you’re interested in, and learn what you can, but don’t limit yourself to what you know.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s