A tweet passed though my stream last night. Eugene Wallingford retweeted someone else’s statement “Teaching students how to operate software, but not produce software, is like teaching kids to read & not write. (via@KevlinHenney)” Apparently this caused some conversation among followers. I missed most of it the first time because of how Twitter handles replies but I was able to catch up on it later. One reply that Wallingford repeated several times was “@wallingf A computer is not just a tool; it is a medium of expression, and an increasingly important one.” Together there is an set of important ideas being expressed.
One of the reasons I tend to push computer science education so much is that I believe that students need to be creators and not just consumers. Computer programs are a medium of expression and a means of creation. I believe that understanding how to use computer applications is important. And of course many applications are tools of creation. Word is an outstanding writing tool. Excel is a great way to creatively deal with numbers and other data. The examples abound. But to me there is a step beyond using applications that other people create involved in creating ones own applications.
Turning consumers into creators is a huge part of the motivation behind programs like DreamSpark which puts professional software development tools into the hands of students. It’s why we have created curriculum resources like our web development course materials or our 5 week and full semester XNA based game development courses. It’s the reason behind Kodu for young students and Small Basic for middle school students. It’s also why we have the Beginner Developer Learning Center. It’s unfortunate that more schools don’t offer computer science courses though.
[Edit: Please see also Eugene Wallingford's post- Programming for Everyone -- Really?
Of course the big counter argument to this is that I drive a car but do not know how the data bus in it works. There are obviously a whole bunch of counter examples like this we could think of in a hurry so I think the argument regarding using and writing software is a very bad rational for teaching computer science and programming in particular. Should everyone who drives a car be required to take an auto shop class in high school? Personally I think that is a great idea, but the practicality is suspect. I do think there should be a drive to get students interested in producing software and perhaps have a general idea that it is not all just magic (whip in Arthur C. Clarke’s third law here “Any sufficiently advanced technology is indistinguishable from magic.”) but not because it is a required skill, but because there are some major opportunities for knowledgeable students in the field.