The Academic Board of the National Centre for Computing Education in England has released a white paper: Practical programming in computing education. The goal of the paper is one that I strongly support:
This white paper argues for the fundamental importance of practical programming as a central element of our young people’s computing education.
They are concerned that the implementation of the 2014 English computing curriculum might swing too far towards being a theoretical discipline, and be divorced from programming, the stuff that makes computing magical. I share their concerns. For example, I fear that teaching computational thinking without a computer leads to a boring mathematics or philosophy class, without the automation that Alan Perlis described in 1961 gives us new tools for thought.
The white paper may swing too far into programming for making, blurring the lines between computer science and software engineering. They write:
The whole purpose of computer science is to help us build things. As Fred Brooks put it: "the natural scientist builds in order to study; but the engineer studies in order to build." He goes on: "I submit that by any reasonable criterion the discipline we call ‘computer science’ is in fact not a science but a synthetic, an engineering, discipline. We are concerned with making things, be they computers, algorithms, or software systems." In reality, computer science is both (and much more too). However, studying in order to build is a fundamental part.
So building things (programming) is not an optional add-on to the subject: it is a key raison d’etre of the subject itself.
The authors of this white paper are arguing against a purely theoretical framing of computer science. To achieve that goal, they push hard on the pendulum in the opposite direction, towards building, making, and engineering. I won’t quote more of the white paper here, but I reacted to how they saw computer science connecting to social science, e.g., that social science teaches how to study people and that can result in making better software—as opposed to programming being a tool to further social science education.
The challenge that the authors of the white paper face is an old one in computing—it’s a hard field to categorize. Peter Denning and Peter Freeman wrote in 2009 that categorizing computer science as engineering alone is fruitless. Computer science has aspects that are engineering, science, and mathematics, but is really a new paradigm entirely.
During the pandemic, I worked with colleagues at the University of Michigan’s College of Literature, Science, and the Arts (LSA) to answer the question: What is computing within liberal arts and sciences? What do LSA students need to know about computing? With my co-chair Gus Evrard and a task force from across campus (see our final report here), we came up with three themes that describe how computing appears within LSA:
There are aspects of "making" in these three themes, but not always from an engineering perspective. Computational scientists and artists often write brief snippets of code to try out an idea or generate a piece of a bigger solution, then they throw that code away. Their use is more "bricoleur" than "planner" (Turkle & Papert). Critical computing scholars at the University of Michigan tell me they want their students to be "conversational programmers"—they need to be able to talk to technology developers, but not become engineers themselves. Our best approaches to teaching conversational programmers include programming, but they’re not the same approaches as when we teach computing as engineering.
I strongly agree with the authors that programming is a critical aspect of computing education. Setting an agenda for a curriculum that effects millions of students requires a broad perspective—we want the theoretical/analytical and the engineering/making, as well as many purposes in between. Let’s define computing education to support students in all the ways they will be using computing in their lives and careers.
Mark Guzdial is professor of electrical engineering and computer science in the College of Engineering, and professor of information in the School of Information, of the University of Michigan.
No entries found