Last month, my wife and I went on a fabulous cruise for our honeymoon. When meeting new people, eventually you get asked the inevitable question “so Simon, how do you earn a crust?” With the exception of the Cockney train driver who thought that a software engineer made sofas, pretty much everyone responded the same way - “I couldn’t do that, I’m not clever enough”.

I responded with variations along the lines of “no, you don’t need to be intelligent at all - I’ve worked with some right idiots”. Primarily, I said this to get laugh, but I’ve always been of the opinion that you don’t need to have any intelligence to be a developer and that it’s more training rather talent. On reflection I think I was wrong though and there is a minimum level of intelligence required to successfully write software.

There’s a very simple test to see if you’ve got the intelligence to be a developer. CAN YOU MAKE A CUP OF TEA?

Making a cup of tea (or coffee) is a good metaphor for software. Consider the steps that you have to go through when making a cuppa:

  1. Fill kettle with water
  2. Boil kettle
  3. Add teabag to mug
  4. Fill mug with boiling water
  5. If required, add sugar
  6. If required, add milk

Ok, that’s all very good but how does that work as an intelligence test to be a developer? Firstly, all software is, fundamentally, a process flow - you start with something (the input) and you want to get to a certain result (the output). Secondly, let’s consider how you might go about writing a piece of code that might achieve that:

// Get the kettle instance
const kettle = Kettle.getKettle();

// Check we have enough water
while (kettle.cupsOfWater() < 1) {
// No - add water until there's enough
kettle.addWater();
}

// Boil the kettle
kettle.boil()
.on('boiled', function () {
// Kettle boiled - now make the tea
const cuppa = new Tea();

// Is sugar required?
if (numberOfSugars > 0) {
cuppa.addSugar(numberOfSugars);
}

// Is milk required?
if (milkRequired) {
cuppa.addMilk();
}

// Finished making - drink your tea
cuppa.drink();
});

When you put it into code you can immediately see that, in making a cup of tea, you’ve covered concepts such as looping and conditional statements. You could even use it to explain the beginnings of object orientated programming too (although that might be a bit of a stretch from here). And, from a JavaScript specific point of view, waiting for the kettle to boil is a good example of asynchronous and event-driven programming.

Clearly there’s a lot more to being a developer than this really simple example of pseudo-coding. But it does show that the intelligence required to be a developer isn’t terribly high and that the skill is training and practice.