There’s a mind-expanding post at Coding Horror from 2006. Hey, can’t a guy have a nine-year backlog? The title: “Separating Programming Sheep from Non-Programming Goats”. The first link in that article does not work; use this link instead. This discusses work on incoming computer science students, finding that there is a bimodal distribution of performance that can be ascertained before instruction and which remains largely stable despite instruction. And the thing that almost completely defines this gap is the concept of assignment. They use an example:
int a = 10;
int b = 20;
a = b;
and then ask the question, what values do a and b have after those lines of code do their thing? One group of students (less than half) had a consistent mental model of what assignment did from the outset, and the rest did not.
As the Coding Horror author says,
Everyone should know how to use a computer, but not everyone needs to be a programmer. But it’s still a little disturbing that the act of programming seems literally unteachable to a sizable subset of incoming computer science students. Evidently not everyone is as fascinated by meaningless rules and meaningless conclusions as we are; I can’t imagine why not.
I didn’t get to that blog post directly. First, I saw Mike Hadlow’s blog post about efforts to encourage people to take up computer programming. This one is only from Dec. 4th of this year, so I’m not nearly as behind the curve on the reading list there. I’ll just take a quotation bracket from the beginning and end of the post:
TL;DR: All the evidence shows that programming requires a high level of aptitude that only a small percentage of the population possess. The current fad for short learn-to-code courses is selling people a lie and will do nothing to help the skills shortage for professional programmers.
This post is written from a UK perspective. I recognise that things may be very different elsewhere, especially concerning the social standing of software developers.
In the meantime we should stop selling people a lie. Programming is not easy, it is hard. You can’t learn to code, certainly not to a standard to get a well-paid-job-of-the-future, in just a few weeks. The majority of the population can not learn to code at all, no matter how much training they receive. I doubt very much if the plethora of quick learn-to-code courses will have any impact at all on the skills shortage, or the problem of unskilled low pay and unemployment. Let’s stop pretending that there are artificial barriers to entry and accept that the main barrier to anyone taking it up is their natural aptitude for it. Instead let’s work on improving the social status of the software industry – I think this is in any case happening slowly – and also work on encouraging talented young people to consider it as a viable alternative to some of the other top professions.
I think that there is a distinction to be made between the “it’s easy to code; here, take my course” approach and the approach that the Raspberry Pi Foundation is taking. Part of the demographic problem would have to be that if programming aptitude is some innate thing that is only found in a fraction of the population, and we want to locate more people out of that fraction to do the work, making it possible to 1) easily and 2) cheaply try out whether that aptitude exists seems the only way forward. And I think that the Raspberry Pi approach does exactly that. The financial and logistical barriers to getting a handle on introductory programming have been pretty high in the past, or at least high enough that whole swaths of the population were essentially excluded just on financial grounds. Getting to where one can get a computer for about $35 eliminates much of the financial barrier, and makes it easier to take risks with it. The Foundation has also made it easy to set up with software that both runs familiar things like browsers, but also supports the unfamiliar world of programming, and provides examples of fun and interesting things that others have done with the system. Yeah, by Hadlow and Denahdi’s reckoning, a substantial fraction of people trying out Raspberry Pi will not show any aptitude for doing programming, and likely give up on it shortly. On the other hand, they did not know before trying, and it doesn’t involve a major life investment for most of them to have given it a try. It seems a good way to extend the search for programming talent. It would be interesting to see whether self-selection correlates with programming aptitude for Raspberry Pi’s opt-in method of checking on computer science savvy.
Oh, the Presbyterianism… there is the theological concept of the elect and predestination in the Presbyterian Church, that only some are capable of salvation. If programming is like predestination, a matter of some innate property, then in order to reach those with that property you are going to have to reach out to a larger part of the whole population, even if most of them aren’t going to be among those you are seeking. Or, somehow, send out a message that is preferentially received by those you seek.