The Four Layers of Programming Skills
When learning how to code for the first time, there’s a common misconception that learning how to code is primarily about learning the syntax of a programming language. That is, learning how the special symbols, keywords, and characters must be written in the right order for the language to run without errors.
However, focusing only on knowledge of syntax is a bit like practicing to write a novel by only studying grammar and spelling. Grammar and spelling are needed to write a novel, but there are many other layers of skills that are needed in order to write an original, creative novel.
Similarly, to be developer and write original, creative code we need other layers of skills in addition to syntax. Here is one way to organize these skills into what I call the four layers of programming skills:
This is the layer that is most often focused on in the early learning phase. Syntax skills essentially means how to read and write a programming language using the rules for how different characters must be used for the code to actually work.
Programmatic thinking skills and programming concepts
Programmatic thinking means how to think like a computer and translate a process into a specific set of instructions that a computer can understand. It also means understanding programming concepts like data, variables, functions, objects, etc. This isn’t about writing the correct symbols in the right order, it’s about how to communicate a specific series of steps to the computer that it’s capable of completing.
Humans are capable of both intuitive and visual thinking and logical and verbal thinking. If you were asked to identify the tallest person in a room, and it was a small room with just a few people, you could scan the room visually and quickly pick out who is the tallest. Computers can’t do that (yet). So, for a computer to do the same thing, we’d need to come up with a more specific and logical process for identifying the tallest person.
Let’s imagine a room with a thousand people instead of a few people. Some people would be too far away to accurately assess their height, and there would be too many comparisons to make at once to be certain that you’ve found the tallest person. In this case, you’d need a logical process just like the computer would, and there are many ways to approach it. You could ask everyone to write down their name and height, and then you could sort through the thousand slips of paper to put them in order. You could ask everyone to line up, and then compare the height of the first and second person in line. Take whoever is taller from that comparison and compare their height to the third person in line. Whoever is taller in that comparison, compare their height to the fourth person in line, and so on until the end.
To write code, you need to be able to define this type of logical process, and then understand how that translates into the way a computer processes information. The syntax is then simply the standard used to communicate the process to the computer.
If you know the syntax for a language, and you have a clear understanding of programmatic thinking, you still might not be able to write code. When you’re faced with a programming problem, you still need to answer the question, “how exactly do we get from point A to point B?” Even with a mastery of syntax and concepts, you’ll still be faced with a blank page when you sit down to write code.
Just like with the tallest person problem, there is typically more than one way to do something, and the more complex the problem is, the more ways there are to solve it. Syntax has one right answer—it either works or it doesn’t. Programmatic thinking has many possible answers. There often isn’t an answer you can simply copy and drop into your code, and even the problems that do have common solutions with examples you find online may have even better solutions that haven’t been created yet.
At some point in the process, in order to write original and unique code, you’re going to need creative skills. There’s a myth that creativity is something you’re born with and that it can’t be taught, practiced, or learned. The truth is that creativity is a skill just like any other skill, and it can be practiced and improved. Creative skills include things like:
- Rough drafting/sketching code
- Taking breaks
These creative skills are necessary to figure out an answer when it’s not obvious what it should be—to navigate going from a rough draft to a final draft with all the bumps and detours in between.
The best thing about these skills is that they don’t just apply to programming—they can apply to anything you’re doing from cooking to writing to playing a sport, and if you have other areas where you practice creativity, that can help you apply more creative skills to programming.
Writing code is never just about writing code—writing code is always connected to something else. Maybe you’re making a website about tea, or a fitness app, or a website for a local car maintenance shop—code always exists in a way that’s connected to other topics, not in a vacuum by itself. Having skills and knowledge in lots of other areas besides programming not only helps you make projects related to those areas in a more thoughtful way, skills borrowed from other fields can influence the way you write code and help you come up with solutions you wouldn’t have considered otherwise. Balancing programming with curiosity and exploration of other topics makes programming even better!
As learners and teachers, it’s important to identify all of the skills we need to learn in order to be a developer. Different students find different layers easier or more challenging than others. Many people who have no problem remembering syntax struggle with programmatic thinking. Many people who have no problem with programmatic thinking have a very difficult time remembering syntax. As learners, recognizing this makes it easier to get unstuck when things are difficult because we can identify the area that is most challenging at the moment. As teachers, when we recognize the whole spectrum of skills that need to be developed, we can make sure we create exercises that cover the entire range.