Dr. David Brin complains (first and second blog posts) that kids today can’t learn the basics of programming in a way that is fun and, above, all, trivially accessible to every computer-owner. There’s no lingua franca of modern programming – a language that is both ubiquitous (comes with every PC) and accessible (very simple and suitable to learning basic imperative programming).
A storm of comments was generated by the Salon article. Most respondents didn’t seem to understand Brin’s real points. To be fair, the article itself was rather misleading. In any event, I’m responding here to what Brin wrote in his later replies, the first of which is here, starting with the words “your letter is cogent and intelligent”. (Permalinks to individual comments on Blogger don’t seem to be working.)
Brin correctly says:
Let there be no mistake. Only one institution [Microsoft] is to blame for this situation. And the same one could fix it, overnight.
I fully support Brin’s call for change, but there are two problems with it. First, Microsoft is extremely unlikely to make the change, because it goes against their interest. Second, he doesn’t address the things all the world apart from Microsoft are doing to fix the situation, and the things they’re not doing but should be.
Why we shouldn’t look to Microsoft for help
Brin has called my very condensed comment to the same effect cynical, so I’ll expand on it.
If there are more programmers around, the market is bigger and more active and everyone benefits, including Microsoft. So therefore, Brin’s argument goes, they should help raise a new generation of programmers who – as a bonus – would be used to Microsoft tools and languages and would eventually upgrade to (non-free) Microsoft SDKs.
There are several reasons why MS might not be so eager to do this. First of all, MS has a almost-complete monopoly on desktop OSs. And the problem a monopoly faces is that it can only lose market share, not gain it. (It can also expand the market, but that’s a separate matter.) So MS will prefer not to do anything new at all. It’ll stay where it is and move only to mitigate actual risks to its market share. Encouraging people to program doesn’t include any assurance that those people won’t switch to a non-MS OS or language later. There’s no obvious benefit, so MS won’t take the risks. This is comparable to the complete stagnation of Internet Explorer between the First and Second Browser Wars.
Second, MS has a history of antitrust problems due to bundling non-essential programs with their OSs. There was IE, nowadays there’s Media Player. If they include a new application with Windows – a compiler – in a market segment where they are far from having a monopoly (but where they are commonly accused of using the portable, standardized base of .Net to entice people to use their nonstandard Windows-specific extensions), they will very probably be sued by antitrust regulators again. They won’t risk it without a very good reason – a way to directly benefit from the move.
Third, MS is evil. Brin has called this a conspiracy theory, but it’s not; MS is openly and up-front evil. It’s a company known for its anticompetitive and illegal behavior; for spreading FUD; for soul-bargain EULAs (which noone reads); for embracing-and-extending protocols and formats; for making their own protocols and formats so hard to reverse engineer (and consequently use) that of the projects trying to do so (OpenOffice.org, WINE, ReactOS, Samba) not one has achieved full compatibility with the latest MS versions.
Sure, none of that precludes them making a simple beginners’ programming language, but what can you expect from a company whose “serious” APIs are so complicated and under-documented that the WINE project hasn’t been able to create a second implementation, even though the basic Win32 API has changed little over the last few years? After all, APIs are the second step a fledgling programmer takes, right after basic syntax and playing with algorithms and console-only apps. It’s just as important as the first step. MS have notoriously failed to provide simple APIs, and to me that indicates they are either really bad at designing APIs or think obfuscation-to-hurt-competition is more important than encouraging people to learn to program. They’re not the people I’d want to design my son’s first programming language. They’d probably get it so wrong he’d be turned off from programming for life. (Full disclosure: I don’t have a child.)
Just like, in fact, many people I meet are turned off from the idea of programming even though they’ve never tried it, just from using Windows. Computers are so complicated, they say, we have no chance of learning to actually program. And the command line is so ugly that we could never switch to an OS that relies on the command-line interface. (Two pieces of MS FUD in one: that non-MS command lines are ugly, and that modern Linux or OSX requires regular command-line usage. Both are unfortunately quite widespread.)
This is a pity, because if they had experience with the Mac tradition they might not be so scared. And if they had experience with the Unix tradition, they wouldn’t separate programming so sharply from “ordinary” usage. In fact, a Unix (or Linux, or (I expect) OSX) shell is probably just as powerful as BASIC, albeit with an uglier syntax. And many other languages are available on just about any Unix-like machine. In fact, the Unix tradition provides a smooth transition path from user, to shell-user, to scripting, to programming which seems to answer most of Brin’s requirements. This smooth gamut is important, because when users write their first for loop in shell script, they probably aren’t thinking of it as programming. Microsoft users are used to thinking that way, though, because scripting isn’t integrated with their normal usage patterns.
Too bad Unix-like systems aren’t ubiquitous, because they are certainly accessible once you have one.
MS doesn’t want to empower its users
Finally, MS has to work against its users some of the time, and so is afraid of them. Some of the biggest new “features” in Vista (and Media Player 11) have to do with DRM, Trusted Computing, and similar matters (there are many more examples). These are things no users benefit from, so MS are rightly afraid of some people switching to another OS (or just not upgrading). There are two things MS does to prevent this. One is user lock-in (e.g. to Office file formats). The other is preventing the empowerment of users.
When the OS fights against the user, it takes an empowered, computer-savvy user to notice and fight back. If DVDs include region-restricting DRM, an enlightened user can use a software player that uses DeCSS. If his Media Player music can’t be copied to another computer, he can use a tool that strips the DRM. If he doesn’t want to buy MS-advertised software, he can find a free alternative. And if he’s really annoyed, enough to overcome the lock-in of his data, he might one day switch to a different OS altogether.
But all of this takes an enlightened user. Big organizations often cite the necessity to retrain users as an impediment to switching e.g. from MS Office to OpenOffice.org. And there’s no user more enlightened than the one who has gained mastery and understanding of his computer through programming. By understanding Windows, and so some of the common underpinnings of computing in general, he’s halfway to understanding the other OS he’ll want to switch to one day.
Therefore, it is not in MS’s interest to encourage widespread programming. Not because all those kids will grow up to write applications for Linux, but because this would create a large middle class of power-users who, in their turn, will be able to provide grassroots support to their lower-class neighbors when they decide to switch to Linux. That must be one of Microsoft’s nightmare scenarios, because no truly big switch away from Windows can succeed without a large community of people to provide support to their family, friends, neighbors and workplaces.
This is an allegory that I hope will catch Dr. Brin’s eye if he reads this post, since it borrows something from his own writing. The average Windows user already has power, in that he has enough money to afford a computer and an Internet connection. What he lacks is the knowledge necessary to exercise this power, and MS are committed to keeping that knowledge from him. That knowledge would let a huge middle class of the information-manufacture and -distribution world wake to its power.
This is merely a different front of a familiar battle. Other fronts include the battle between traditional (i.e., pre-Internet) media suppliers/distributors and indies. Between mass-media news (including politics) and social software such as blogs. Between teaching kids that “copying is wrong” and Creative Commons. In a very real way, this is a battle between centralized authority and control and between people who defy or circumvent it using modern technology. And just as I wouldn’t expect MS to develop or support technology that would strictly benefit The People – say, something like PGP or Tor – so I don’t expect them to come all out in support of teaching the masses programming so they can develop this technology for themselves.
Obviously, this is only one out of many motivations that influence this situation. And I don’t suppose that all or even most people at MS are consciously acting like this. But some of them definitely are, possibly the higher levels of management which perhaps don’t feel about purely technological issues as strongly. After all, that’s what format lock-in, DRM and Trusted Computing are in a nutshell: preventing people from programming their own computers and using their own data.
Don’t get me wrong. MS can and do provide tolerably good programming tools, documentation and support – to people who already have some programming experience. Or to those who are determined to become programmers one day, and are actively going out to seek those tools. They have to do this, because if they don’t then these people will switch to other vendors now. But they won’t provide them to people who aren’t asking for them, because that would only encourage them to switch to other vendors in the future. After all, it’s natural for a programmer to want to explore other languages and OSs!
When he does, MS will find themselves judged on programmer-oriented features. And that’s one contest they could never win.
So what can we do?
A great many people are already at work. To build free OSs (and desktop environments and all other kinds of software) to free people from their dependency on MS, which isn’t primarily interested in their welfare. To help people to move to these platforms, and explain to them why they should do so. To force government agencies to provide their online services in a browser-neutral format and stop them from paying the MS tax and teaching children to use MS products in public schools. To discourage use of proprietary protocols and of undocumented hardware. And so on. Encouraging and enabling kids (and adults!) to program is an integral part of promoting free software, and is recognized as such.
Encouraging Windows users to switch to OSX (which Brin apparently uses) is also good. Anything is better than staying with Windows.
Of course, it would be very nice to see more activity in some of these areas, such as public schools. Here in Israel the Ministry of Education has an agreement with Microsoft that supplies MS software at reduced or free prices in exchange for making the kids attending these schools use said software at home. Want to hand in a composition? MS Word format, please. It’s crucial to fight things like that.
Which brings me to the matter of textbook publishers. Brin would like textbooks to include code snippets just as they once used to. Well, I’d like that too, and I don’t know anyone who doesn’t. The people who told him “don’t worry, the newer textbooks won’t have any of those little BASIC passages in them” are misguided.
Presumably the “senior Microsoft officials” who said that have the power to influence textbooks. I and other programmers like me don’t. I’d like textbooks to encourage children to program, but can’t do anything about it. Incidentally, I also think it’s more urgent to train or recruit schoolteachers who would encourage their students to try out these exercises ad help them to do so. Right now, the programming ability of an average highschool student is probably higher than that of an average highschool teacher, at least where I live.
If Dr. Brin has any further suggestions for what programmers who don’t work for Microsoft can do, I’ll be glad to hear them.
The next battle
The Microsoft monopoly on desktop OSs among non-technical people is an unfortunate fact, and we’re going to have to work hard to change it. But we should also remember that most people in the world still don’t have access to a computer or the Internet. If, a few decades from now, that situation is reversed, the majority OS will be whatever these people use. And if they use Linux and consequently produce a higher percentage of programmers than the Western world – or even the same percentage (resulting in a much bigger number) – the preferences and policies of Silicon Valley-based programmers might come to count for very little. After all, Microsoft isn’t known for its brilliant Unicode support and interface localization.
That’s why I think projects like OLPC (One Laptop Per Child, a.k.a. the 100$ laptop) are very important. It’s unfortunate that Brin confuses them, in his Salon article, with “Microsoft and Apple and all the big-time education-computerizing reformers of the MIT Media Lab”. Microsoft are the ones who disparaged the OLPC, which incidentally is is committed to Free Software and to enabling development and includes Python with the explicit objective of encouraging kids to program. The real sponsors of the OLPC are listed here. Microsoft sponsors some other things at the MIT Media Lab and possibly the Lab in general but, as far as I can make out, they don’t provide funds dedicated to the OLPC, which isn’t a project of the Lab but does have people from the Lab working on it.