After work, the question got asked. It came up in the context of another discussion about the relevance of Free/Open Source Software. Availability of the source code is probably only relevant to computer programmers. After all, if you aren’t a programmer, what would you do with source code? In which case, a freely copyable binary would be equivalent to freely copyable source code. The ability to do something with the source code (i.e. to create a derivative work), is something only a programmer could do. Strikes me as the definition of a programmer. Yes, I know that benefits might accrue to the non-programmer indirectly, but conceding that there are no direct benefits to most people doesn’t seem like a great debating point.
We know that only 2.4% of the population are employed in “computer and mathematical occupations”. Which would seem to put an upper bound on the number of people to whom Free and Open Source Software would be relevant. And any movement which can only possibly be relevant to such a small fraction of the population is going to have difficulty garnering widespread support, or even interest. Assuming, of course, that we restrict ourselves to professional programmers. There might be amateur programmers.
And so, we come to the real questions: who should be a programmer? Who should be considered a programmer? Is the correct analogy that the skill of programming is like the skill of reading and writing? An esoteric skill for most of the world’s history — practiced only by specialists — professional scribes — until, in the last few hundred years, we came to expect that everybody ought to be a scribe, or at least literate. Even if only a relatively small number of people read or write for a living?
Or, is the correct analogy that being a programmer is more like being a radio technician and learning Morse code? An esoteric skill which remains esoteric.
Is it more like being a driver (chauffeur)? Or a pilot?
This idea of universal computer literacy has deep roots. The work that led to the desktop computing environments we use today was motivated by that vision. Alan Kay talks about it at length here. An excerpt:
It started to hit home in the Spring of ’74 after I taught Smalltalk to 20 PARC nonprogrammer adults. They were able to get through the initial material faster than the children, but just as it looked like an overwhelming success was at hand, they started to crash on problems that didn’t look to me to be much harder than the ones they had just been doing well on. One of them was a project thought up by one of the adults, which was to make a little database system that could act like a card file or rolodex. They couldn’t even come close to programming it. I was very surprised because I “klnew” that such a project was well below the mythical “two pages” for end-users we were working within. That night I worote it out, and the next day I showed all of them how to do it. Still, none of them were able to do it by themsleves. Later, I sat in the room poindering the board from my talk. Finally, I counted the number of nonobvious ideas in this little program. They came to 17. And some of them were like the concept of the arch in building design: very hard to discover, if you don’t already know them.
The connection to literacy was painfully clear. It isn’t enough to just learn to read and write. There is also a literature that renders ideas. Language is used to read and write about them, but at some point the organization of ideas starts to dominate mre language abilities. And it help greatly to have some powerful ideas under one’s belt to better acquire more powerful ideas [Papert 70s]. So, we decided we should teach design….
In a more contemporary vein, this post talks about the importance of having designers and programmers working on the same text and the author asserts that
Designers are perfectly capable of understanding and manipulating constructs like
<% for person in @post.whos_talking %>or
< if @person.administrator? % >. While they will rarely be the originator for these fragments, they’ll surely be the manipulators of them.
Doesn’t manipulating code fragments make you a programmer? Of a sort?
So, even if we aren’t there yet, shouldn’t the Free/Open Source Software movements, aspire to universal programming literacy?