Computer programmers are a weird bunch. They go around telling the rest of the world who can and can’t be a programmer. There are even studies on the subject to prove that there are ‘two kinds of people, those that can program and those that can never learn it no matter how much effort they put into it’.
But that’s total nonsense. It’s like saying that there are only two kinds of people when it comes to swimming, those that can learn how to swim and those that can’t. It aggravates me because I spend quite a bit of time passing on my skills to those that wish to learn how to program. Sure, it’s not equally easy for everybody and it’s not going to turn someone into a virtuoso programmer overnight any more than that you can learn how to play the piano overnight. And when it comes to the piano there are plenty of people that are able to play piano even though they’re not the next Arthur Rubinstein or Ivan Ilic.
Of course there are exceptions, and I’m sure there are a couple of people in the world that could not learn how to program if their life depended on it, just like there are people that really can’t learn how to swim. But that really is a very tiny minority, the majority of the people out there can learn how to program to some degree. For one, this all revolves around what it actually means to program a computer. After all if we’re going to decide to be inclusive or exclusive we should really concentrate on what it is that we’re trying to achieve here, for me it’s simple: if you know how to tell a computer how to do something to create a result that it would not come up by itself then you’re a programmer in my book. Computers are brain amplifiers, and knowing how to use them gives you a leg up on those that don’t which is why it pays off for those that have the skill to pretend that it is something special that you can’t simply go out and learn.
If you say someone isn’t a real programmer then you’re falling right into the No True Scotsman fallacy, where say making a spreadsheet is ‘not true programming’ because ‘No True Programmer’ would use a spreadsheet to solve a problem. But in my eyes being able to use a spreadsheet is already one step up the ladder and it does make you a programmer. Now you can choose whether to get better at it or not but you’re already off the ground and flying. Plenty of businesses use spreadsheets for business critical stuff, and it’s not rare at all to hear from the users of these that it’s the only way they can get through their day, they’d much rather have ‘a real programmer’ do the work for them but the IT department is too busy to attend to their needs. And so they fixed it, all by themselves.
The IT world is rife with this ‘no true programmer’ nonsense, the ‘real’ programmers are the ones that have mastered ‘x’ (insert name of arcane and difficult to use programming language here), the rest is still stuck on ‘y’ (insert accessible and easy to use language here). The latter of course aren’t real programmers, if they were then they would get it.
Programming is not a binary skill, not something that you either have or you have no hope of achieving it. Being able to program ‘just a little bit’ is better than nothing at all, just like being able to swim ‘just a little bit’ might be enough to save your life one day. Making a spreadsheet or a mathematica notebook is very closely related to the branch of computer programming we call ‘functional programming’, the fact that there is some magic under the hood is no different from someone writing a program in say ‘python’ or ‘perl’ or some other interpreted language where a ‘real’ programmer uses some other program to let better programmers translate their wishes and desires into a stream of instructions the computer is better able to comprehend. And let’s not kid ourselves, very very few people are programmers at the level of a Linus Torvalds, Peter Norvig or Fabrice Bellard. Imagine them telling you that you’re hopeless and you’ll never really get it so you might as well give up now.
And it’s not as if programmers themselves aren’t really aware of the fact that ‘programming’ is not a binary ability, there are plenty of contests for programmers to show off their art and by whatever objective measures they use they seem to underscore that not everybody is equally talented. So why cut off those at the bottom entirely? That’s just an attempt at creating an ivory tower, a way to say ‘hey, I’m better than you because I can do ‘x’ and you can’t’. Imagine athletes getting together and saying: there’s nothing I can do for these wanna-be runners, they either can run or they can’t and if they can’t they can never learn it. Imagine piano teachers telling the majority of their customers ‘you’re hopeless, you’ll never get it’.
When it comes to programming the biggest differentiator in whether or not someone will be able to learn it at a level where they can hold down a job seems to be more rooted in passion than in anything else. When teaching someone how to program if there is an interest and a will then more likely than not they’ll get to some degree of proficiency, very few people get stuck at rock bottom and are unable to grasp any of the concepts. At some level even writing instructions for others is a way to learn how to program and usually the fact that a person says ‘x can’t learn how to program’ says more about the teacher than about ‘x’.
So, programmers: get off your high horse. Our skill is not very special and almost everybody can learn how to do it to some degree. I’m willing to take a bet on this: anybody that wants to program but for some reason has been told they can’t is welcome to start a correspondence course with me for $0 and I’ll do my very best to help you along the way to the point where the coin drops and gravity takes over. After all it’s mostly a problem of insight rather than one of inborn native ability and if you can write a shopping list, write instructions on how to make coffee in your house when you’re not there yourself or if you can make a (simple!) spreadsheet then you already know a little bit about how to program. The most important factors in whether or not someone will end up being a bad, good or great programmer are experience, passion and dedication. Combined those can overcome quite a bit of lack in the talent department.
For the record: I took three ‘cracks’ at learning how to program, and only the third time did that coin drop, this was in total over a three year period in bloody ‘BASIC’ and all that time I really wanted to learn how to program but I just simply didn’t get it. I definitely wasn’t a ‘real programmer’ by the definition of some and for sure they would have given up on teaching me if it had been a face-to-face affair. They might even have been able to make me give up. But then one day it clicked, I recall vividly how suddenly I understood what a variable was and then an array. And from there it went quickly but the initial learning for some reason was extremely hard for me. We’re quick to forget how hard our initial mastery of a subject is and of course it is nice to belong to some elite group. But talking people down and telling them what they can’t do is really bad form, instead we should be lifting those that wish to acquire the skill up.