Recently New York City's Mayor Bloomburg announced that he was planning to learn how to code. A very smart blog post has drawn some fun attention the announcement. Over on "Coding Horror", Jeff has asserted that it is just plain silly to think that everyone should learn how to code, and that, in fact, more people learning to code might cause more harm than good. I thought this was particularly interesting, because I had recently been impressed by a very smart back-page article in The Chronicle of Higher Education, by Professor Krebs, proposing that humanities students should learn to be more like computer science students.
While I agree with Coding Horror it is silly to have a blanket judgement that everyone should learn how to code, I also agree with Krebs that many students would benefit tremendously from the experience. In addition to Krebs makes a good argument, I think there are several other reasons why we might want to consider treating computer programming as a core part of the liberal arts education.
Krebs's ArguementKrebs argues that computer programing builds a toleration for failure that most of her students in the humanities lack. I can attest that most social science and hard science students that I have taught are similarly lacking. Her point is that writing bad code is how you start writing good code---not just in your trajectory going from novice to expert coder, but pretty much every time you sit down to write code, ever. Trial and error, including the need to rewrite large parts of a program are a normal and acceptable part of the coding process, even for experts. But an English student working on a paper is typically unwilling to consider rewriting most of a paper, and is even less willing to accept that several massive rewrites might be the norm for achieving success.
Krebs arguement strikes me as one good reason to consider learning-to-coding as an important a part of the educational process. Surely there are others.
Other Reasons to ConsiderI can think of several benefits that learning to code provides. Note that, in agreement with Jeff (Coding Horror), I am not saying that absolutely everyone should learn how to code, and I am not claiming that coding abilities are desirable in and of themselves. Considering Krebs's argument to be 'Reason 1', here they are in no particular order:
2) Coding requires a particular attention to detail that you cannot weasel your way out of. While spending hours hunting for a missing close parentheses or semicolon can be tedious, it teaches an attention to detail that most students lack. There is no room to say "oh, I thought the compiler would know what I meant", "please teacher, I need the program to work at a B level or I can't get into my nursing program", or "do you really have to be that picky about everything?"
3) It teaches about arbitrariness and specificity, and the (sometimes) arbitrary relationship between them. As often as I, in the process of facilitating class discussions or grading essays, tell students that the words they use matter, most do not believe me. In programming there is no way around it. Certain words in each programming language must be exactly what they are, and others can mean anything you want them to mean. One of the key skills of learning any programming language is learning which parts are arbitrary and which are determined by the rules of the programing universe you are working in.
4) It teaches about logic. I'm not sure this needs much elaboration. A course in Logic used to be a standard part of any liberal arts education, and a proper course or course sequence in computer programing could provide much of the benefit that logic courses used to provide. I'm not talking about a philosophy of logic, but rather a concern for thinking things through in the proper order, and being concerned with whether the desired results flow from your initial conditions.
5) It teaches a new way of thinking. Of the graduate programs in the US that still require foreign language mastery, many allow the learning of a computer language to partially or completely fulfill the requirement. This makes sense, as part of the role of a foreign language requirement is to provide students with different ways of phrasing and thinking through problems.
ConclusionI think there are compelling reasons to consider computer programming for inclusion as part of the basic educational curriculum. Perhaps as basic as reading, writing, and math. While we like to think our college students can read at a very high level, we certainly do not require them to write and do math at a very high level (by the standards of a professional writer or professional mathematician). There might be major improvements in our students if they were required to master computer programming above a "high school level", whatever that turned out to be.
What other benefits might computer programming bring? What drawbacks? Is it crazy to think that programming could be treated as a basic skill? If you comment, please note if you are in a job where you regularly have to deal with students.