I’ve just read the interesting blog post Learn To Code, It’s Harder Than You Think.
This post outlines two mistakes the author thinks are made in the general thinking on where the difficulties lie in making more people become professional programmers. Firstly that it requires wealth or special privilege to be able to get the needed education, and secondly that most people are able to become programmers. While by and large I agree that both of these are incorrect, I have a bone to pick with the second one, at least with how it is worded.
Before I get to that I need to re-quote the following bizarre statement from a Guardian article:
It’s the must-have skill-set of the 21st century, yet unless you’re rich enough to afford the training, or fortunate enough to be attending the right school, the barriers to learning can be high.
What the actual fuck? Is the author of that from a different universe?
Few people have the aptitude to become programmers
The blog post makes a number of good points. Most programmers are self taught, so clearly formal education is not required. Furthermore, formal education sucks balls, especially when it comes to programming.
What I will also agree with is that programming is not the right job for most people, and most people will fail at becoming a good programmer if they are forced to try. What I most definitely disagree with is that few people have the intelligence required to become programmers. (Granted, aptitude is not just about intelligence. It includes skills, understanding and, particularly relevant here, attitude.)
I think it’s very important to have a “growth mindset”. While you have skills on a certain level, you can become better through practice. Hence aptitude at a given task is not a fixed thing. Most people can become programmers if they practice. Yes, a small number will simply be too dumb, but your averagely capable person is more then up to the task.
Why do so many people fail at becoming good programmers through formal education then, you might ask. Firstly, we need to differentiate between people who fail at something (using a specific approach within a specific context) and those who are simply unable to succeed. The shortcomings of the formal education system are easy to identify as being a contributing factor here. Another factor is presumably that many people do not actually enjoy programming and do not care enough to succeed in their computer science course. Enjoyment of programming is key. And I’m quite sure that only a small group of the people capable of programming if they wanted to actually enjoys doing so.
Learning programming is easy
While not a reply to anything in the linked blog post, I have some thoughts on this topic to share as well.
Learning a programming language is like learning addition and being able to write a working application is like solving a simple equation. The later does not make you a mathematician and the former does not make you a programmer (depending on how you define programmer). Learning a programming language is much much easier than becoming a good programmer.
Why? You just have to learn the grammar and what kind of things you can do with it. It’s pretty unambiguous, with everyone agreeing on how to define a field in Java. It’s not like there are hundreds of different ways of doing it, with some of them not working at all and only a small set not being problematic. This is in stark contrast to learning things such as software design and architecture and professionalism, both needed to become a good programmer. If you merely follow the examples set by the majority of the industry, you’ll end up writing terrible code and most likely not even realize you are doing it.
Unfortunately most people that manage to become a programmer never really get good guidance beyond the basics, and end up conforming to the norm of writing bad code and behaving unprofessionally. Once this happens it becomes quite hard to “correct the course” of most people. Hence it’s very important to teach and guide people through the hardest parts of the journey rather than just providing courses on how to do addition.
Take off every ‘ZIG’. For great Software Craftsmanship!