Monthly Archive for February, 2008

On the Need for a Good Computer Science History Course

Software developers spend most of our time re-inventing the wheel. Everyone who works with computer types has run into the “not invented here” and “I can do it better” mentalities, or fallen victim to them themselves. But I think this goes beyond that. Software developers seem, to me, to be wilfully ignorant of past work. Not only do we not know about it, we don’t want to know about it!

Mark Dominus demonstrates one example of this while examining the whole “Design Patterns” mess. The “Design Pattern” movement seems to be unconsciously based on this ignorance of history, through an assumption that modern programming languages are the be-all and end-all of programming languages, and always have been. As Dominus puts it:

If these problems recurred in every language, we might conclude that they were endemic to programming itself. We might not, but it’s hard to say, since if there are any such problems, they have not yet been brought to my attention. Every pattern discovered so far seems to be specific to only a small subset of the world’s languages.

Some awareness of the history of programming languages might produce a slightly greater awareness of the trends Dominus identifies in the history of programming language development. It might help us avoid re-treading the same ground over and over while claiming that we’re exploring new territory. Perhaps we could even focus our attentions on the areas of language development that actually need work?

Another excellent example is this recent article on Internet software patents by Philip Greenspun, who correctly identifies that most modern software “innovation” is rehashing the work of early pioneers. We’re just scaling that work in obvious ways to take advantage of increased system capacity, or making half-cooked implementations of ideas that these pioneers devised in a much more robust form but were unable to follow through with.

Looking back on my computer science degrees, I’m honestly confused about why there wasn’t more history taught. We got a lot of algorithms, mathematics, and mainstream languages (C, C++, Java) thrown at us, but very little history of or context for the things we were learning. Except for Dr. Grundke’s second-year assembly language course and Dr. Cox’s third-year programming languages course, it wasn’t until fourth year courses or graduate work that historical matters were mentioned at all. And even then, no consideration was given to the implications of the history or its influence. It was written off as obsolete, interesting but largely irrelevant. Even in graduate courses, my experience shows a near-exclusive focus on recent history.

Yet Engelbart’s NLS did things that modern computer systems still can’t manage. Modern programming language and environment development seems to put a lot of sweat into developing poor copies of Smalltalk and LISP. Years of time are put into recreating things that our Internet protocols can already do, because the existing programs that implement these protocols don’t. I’m not saying these older solutions didn’t have their flaws, or that there haven’t been original new developments. But the history of these older technologies at least merits study, so we can focus on improving the things they did wrong and take advantage of the things they did right. Unfortunately, many of the students graduating from computer science programs (possibly the vast majority, including many graduate students!) are as completely unaware of this rich history as they are of modern developments.

This is particularly strange to me, because one of the big motivators for my interest in computers was Steven Levy’s Hackers. Levy’s examination of the early days of the computer movement was inspiring and educational. While non-technical, it provided some good examples of what does work (openness) and what doesn’t work (secrecy), which almost certainly shaped my interest in the Free Software movement. Towards the end of the book, he also inadvertently demonstrates the importance of historical awareness by following people who were sure that history was irrelevant. This lack of awareness doomed them to repeat their predecessors’ mistakes, eventually leading to the collapse of their movements, companies, and technology.

I also have to wonder how much influence the proprietary software movement’s had on this mentality. When your ideal model of software development is behind closed doors, you have to pretend that there’s no need for awareness of other technologies, much less awareness of how they work. If you recognize that reading, working with, and building on notable programs and technology written by othersĀ  is valuable, the claim that software innovation requires absolute secrecy starts to look a little shaky.

TLDR: what I want to see is a required course - possibly even a full-year course! - on the history of computing. A proper history course, one that critically examines the causes and effects of events, their influence, and forces the students to become aware of these historical pioneers and the technology they developed. Teach them what it did and what it didn’t do. Heck, if it’s feasible, make them use it a little.

The Long Tail and Sharing

Over the holidays, I was talking about the Amazon Kindle with a friend of mine who’s working on a graduate program in writing and publishing. She and I are both avid readers, but our tastes tend towards things that are fairly obscure, even within the already-obscure genres of science fiction and fantasy. The books we’re interested in are pretty far down what has come to be known as the Long Tail.

The benefits of Internet distribution and exposure to products in the long tail are fairly well-known. A little while back, TorrentFreak had an article about Paulo Coelho, who’s managed to boost sales of foreign translations of his book spectacularly by providing free access online. The Baen Free Library is another great example, as are Girl Genius and Nothing Better. Tor has recently started offering weekly free un-DRM’d PDF downloads of books from their catalogue.

I’m going to focus on something else specifically: sharing. I like talking with friends about entertainment I’ve enjoyed, particularly books. Going over the plot, appreciating pivotal moments, examining our favourite characters, and nerding out over technique is a lot of fun. This is pretty hard to do if they haven’t read the books in question. One can always try to meet people who’ve read the same books, and online discussion groups are great for that, but it’s still not quite the same. So for a while now, I’ve been sharing books with my friends. Obscure stuff, stuff that they wouldn’t normally have read, or would’ve had a hard time finding in a bookstore even if they had wanted to.

Of course, most of them just read the book and go “Yeah, that was nifty”, and we talk about it a bit and that’s that. But for some of them - usually others with “long tail” interests, particularly others that also share - it translates into purchases. Either they buy a copy of the book that they’ve just read, or they buy the author’s next book, or they track down other books from that author and buy them.

I think this is interesting for three reasons:

  1. It’s the same kind of action as “normal” Long Tail Internet-enabled activity - making a product available to a potential customer for free, and seeing an eventual sale as a result. This isn’t anything new. What is new and different, and worthy of note, is that it isn’t the “owner”, the person who’s “allowed” to “give it away” by copyright law, doing the free redistribution. In practice, this is allowed either implicitly or explicitly by most (but not all) Long Tail creators, but I haven’t seen it get a lot of coverage, much less the kind of “front page” coverage “free official downloads” get. Yet I think it’s more important than “free official downloads”.
  2. A lot of digital content devices and services - the Amazon Kindle, Apple’s iPods and iTMS, Nintendo’s Wii, even Microsoft’s supposedly share-friendly Zune - go out of their way to prohibit or restrict user-to-user sharing. This is an unfortunately common attitude, even in places where the creators should know better (IE, webcomics), and I think it misses the entire point of the Long Tail. These creators are trying to give away power and keep it simultaneously, which, as any follower of the adventures of Miles Vorkosigan knows, you can’t do unless you’re dead.
  3. I think it’s a powerful sales driver, for the same reason word of mouth marketing is: the personal element. It’s not some random talking head or distant web site that’s recommending the book, it’s one of your friends.
  4. Discussing and analysing culture is an important cultural activity, particularly for creators. If a couple of creators (or aspiring creators, or even interested amateurs) can’t get together and pick apart a work, it’s going to be a lot harder for them to learn from that work. While this might be in the interest of control-obsessed publishers and distributors, it’s most certainly not in the best interests of creators or the public. With a culture that’s moving farther and farther down the Long Tail, sharing becomes an important prerequisite to this discussion and analysis.
  5. It’s not even fair use. Sharing of a book falls under the Doctrine of First Sale. I’ve paid for your book, I have a right to lend it to friends. More often than not, modern digital content technology tries to take away this right. I wouldn’t be surprised if most people were even aware that it is a right. But it is, and we should be doing our best to defend it.

So, in closing, sharing is good for creators, good for audiences, and even good for publishers (more sales!) and should be promoted and encouraged. Most digital content methods are doing their best to prevent it and eliminate it, which is exactly the wrong approach. The people developing these devices, applications, and services that handle digital content should be making sharing content easier, making paying for shared content easier, and do their best to find and promote creators that recognize the strength of sharing.