On Learning Programming


There are three reasons that an individual may wish to learn programming:

  1. To build something
  2. To make money
  3. Because it seems interesting

Those who wish to build something are probably not reading this, because they are off learning it themselves in whatever fashion allows them to start building as fast as possible.

For those who wish to use programming as a skill to make themselves money - power to you. I hope you find some benefit from these thoughts.

However, these thoughts are really for number three - those who think programming might be interesting. I don't plan on giving you a prescription of what it means to become a programmer, but instead hope to give some "starting points" so that you can find out for yourself whether it is interesting or not.

Sidenote: Of course it is likely that there will be a mix of the three, and one reason doesn't preclude you from another.

Programming is easy

Well kind of. I think one mistake that a lot of new programmers make is by trying to take the easiest path.

In the case of bootcamps, you are shown how to to make an application from beginning to end, where the ending point is a url on the wider world web. This is awesome. It is so cool that you are able to do something that twenty years ago would have taken a team of experts - all within the space of 12 weeks.

I think this can give off the impression that programming is easy. We are standing on the backs of giants. But if the giants move in a way that we don't expect - we will fall off. Perhaps less metaphorically - it ignores the past 80 odd years of modern computing and the lessons learned along the way. Especially considering how many of those lessons are still relevant today.

The way I see it - learning to program should be done in two parts:

  1. Learning how cool it is - focusing on the basics and what you can do with them
  2. Exposing yourself to the vastness of the field of computers - which will teach you what you don't know and maybe entice you into a pasture


Here are some resources which I think cover some ground:

  • The Learn Enough Series focuses on "learning enough to be dangerous" and the idea that there is only a small subset of knowledge needed to get started
  • Destroy All Software covers all sorts of different computing topic - take your pick between things that seem interesting and things that you know nothing about. [Don't miss the compendium.](https://www.destroyallsoftware.com/compendium)
  • Others have compiled long lists of long lists of resources here. Take a flick through to get a sense of what there is to know - for every new topic you find in your programming career, you will likely be able to find a list of related resources from here.
  • [The C Programming Language](https://en.wikipedia.org/wiki/The_C_Programming_Language) - this is the classic book teaching the C programming language, and the gold standard on technical writing.
  • If you are interested in seeing what they teach in "real" schools - MIT hosts a lot of content for free here