Tuesday, March 19, 2013

Why coding isn't like working a printing press

Yesterday I was in a meeting with other STEM faculty discussing the proposed new curriculum for Trinity. Toward the end of the meeting I turned the discussion toward the Digital Literacy Competency aspect of the proposal. I was on the committee that created the original version of that proposal, and I felt that it had been watered down a bit. In particular, the term "algorithm" had been removed. The goal that I have for that part of the curriculum is to make it so that every student graduating from Trinity has written a little code to solve a problem. There are lots of places where people have argued for the importance of this. Some of my favorites are the blog post "Should you learn to code?" and the videos at Code.org. (If you haven't seen these PLEASE take a minute to look at them. Technically it will be 5 minutes for the normal version of the Code.org video.)

What really surprised me at this meeting was how many of the STEM faculty were opposed to this idea. I used the analogy of code being a new form of literacy and a few people commented how they didn't know how to use a printing press. Later that night I realized what I should have said in response to that to illustrate that coding is nothing like being the person who runs a printing press. Here are some reasons. First, you aren't surrounded by printing presses. You are surrounded by computing devices, just like you are surrounded by books. Second, running a program someone else wrote is, at best, like reading a book. You are consuming what someone else produced. I don't think any of my peers would argue that we would be happy having students who can only read and consume written information, but are incapable of writing their own. The goal of this capacity is to give students the first glimpses of how they produce in the digital world. If you have never seen programming, you are stuck as a consumer. You can't produce anything on the devices that surround you every day.

Note that I'm not asking that every student can write the equivalent of a novel. We don't do that in English either. In fact, I'm not even asking that they be able to write the equivalent of a five page essay. I'm asking that they have the experience of writing a little script to solve some problem. I would argue that is similar to asking that they know how to compose a few sentences like what kids do in early elementary school. In fact, there is a movement growing to have students doing this at the elementary school level, and the US is behind the curve in this area (see Code.org and http://neil.fraser.name/news/2013/03/16/).

Why do I think this is so important? There are several reasons. We are supposed to be preparing students to live in the 21st century. Most of our students already carry a computing device, in the form of a smart phone, with them more than they do books, yet they are completely incapable of creating any level of content on that device. They are literally marginalized by that inability.

In addition, programming is all about problem solving. Honestly, I think that the formalized thinking of programming is more important for students to learn today than even a foreign language. Both have cognitive advantages to those who learn them, but the way the world is moving, I believe that the thinking skills that go into programming are the more significant of the two.

Going further with the topic of problem solving, the reality is that more and more problems are becoming solvable only with the use of a computer. For the most part this is happening because the data sets involved in solving these problems have gotten to the point where you simply can't manipulate them by hand. This isn't just true in the sciences, big data sets are now the norm for social sciences and many humanities as well. The argument was raised that students can just use existing programs to solve those problems. To my mind, that's like saying that students don't need to know how to write because they can just copy and paste the ideas that other people have written. Also, just like the writing, I would argue that we want our students solving novel problems so eventually they want to say something that hasn't been said before. If that happens and they don't know how to write, they are stuck. Same thing applies to code. If you need to solve something and can't find existing programs for it, you either write it yourself or you are stuck. Knowing how to code gives you the advantage of at least being able to consider writing it yourself.

Once again, I'm definitely not arguing that everyone be a CS major. In fact, I don't even want these courses taught in CS. I think that CS will have to help other faculty with them, especially early on, but I think that this will be most effective if it is done in the context of students using computers to solve problems in other domains that they are truly interested in. I made the analogy to reading and writing above, but an analogy to math works just as well. We want every one of our students to know algebra. Why? Because there are many problems that are easy to solve if you know algebra and much harder if you don't. We don't want to teach algebra so that every student will be a math major. Math majors do many things that aren't even touched upon in algebra courses. In this situation, the algebra is a tool that is useful to people. As computing devices become more widespread and the data sets that are significant for problems in all fields grow, the significance of programming increases as well. Writing a script becomes just as essential a capability as writing a short letter or solving a little equation. At least that I how it seems to me. Comment with your own thoughts.

Addendum: Aaron Delwich pointed out how important it is that the computer is a universal machine. A printing press prints books, nothing else. It is specialized. One of my colleagues at the meeting also mentioned a car, saying he could argue that we should teach all students about internal combustion engines, but cars are also very special purpose. The computer is universal. It can do any operation you want with information. That is why they are used in every field to solve all kinds of problems and why learning about them is not the same as learning to operate a printing press or how an engine works.


  1. The algebra argument seems the strongest one to me. But I think we'll need to start them off in secondary, or even earlier.

    I live out in Kenmare now, but I went to a private school in Los Angeles where we had a classroom full of Apple Mac Classic II's, and I remember two very fun games we played when I was 9.

    The first, was simple enough, there was a little turtle on the screen, and you typed in commands to it and it drew a line as it walked. So, to draw a purple line, you typed in change color to purple, start drawing, and walk straight ahead for 50 steps. And then you hit Run. Very basic, early scripting, and we loved it.

    The second was again, simple enough, and I remember it was called Hypercards. Essentially, we were told to make up stories, draw them out on the computer, add in buttons, and have the buttons do different things. We were really just building websites, though we didn't have a clue. It was just a lot of fun.

    Two years later, I remember asking the new computer teacher in the PC lab, if i could learn to program. He sat me down and gave me an hour long lecture on the history of the computer, punch cards, i/o, the lot. And by the end of it I was so bored that I never asked again. But I did hack my TI-82 calculator so I could play drug wars, and I figured out how to edit the code to change the drug names to silly things like bananas and billiards.

    And you know what? Coding is actually fun, at times even more so than any logic puzzle or math problem, and you're absolutely right, its absurd that the school system is leaving it up to the kids themselves to figure these things out. I'm also worried at the lack of formal media education in the Irish school system, again, leaving the kids to piece together for themselves the vocabulary they're communicating with on a daily basis.

    I don't know what its like at Trinity, but going to the Pobalscoil here, I was fed the standard line. They just don't have the budget to cover that, and they don't have the time with all the Cert. Prep.

  2. I think the US is slowly coming around on this and I completely agree that it needs to start way before college. Unfortunately, it doesn't right now. For that reason I think it is even worse if we let people get through college without ever having learned this.

    Once these courses are standard in primary and secondary school, the college courses can really take much better advantage of that knowledge to get students to solve significant problems using computers and writing their own code.

  3. Hmm; Maybe position it as:

    "Alright, let's list all the majors at Trinity where we're sure our graduates won't ever have a good reason to solve problems, make decisions based on data, or work with people who do.

    The Chairs of those departments can decide to remove the 'understand what an algorithm is' part of the Common Curriculum for those students."

    I'm actually surprised students could get through whatever pre-1320 CS courses satisfy that technology requirement without writing some kind of script.

    1. The Skills requirement, 1300, hasn't included scripting int he past. That is now changing. Even then, only 50% of Trinity students take that class. The others exempt using a test that doesn't include any scripting.