Why aren’t computer scientists the best teachers?
(Or, why our students aren’t robots.)
“Science is knowledge which we understand so well that we can teach it to a computer; and if we don’t fully understand something, it is an art to deal with it. Since the notion of an algorithm or a computer program provides us with an extremely useful test for the depth of our knowledge about any given subject, the process of going from an art to a science means that we learn how to automate something.”
—Computer Programming as an Art, Donald Knuth, CACM, December 1974.
Why aren’t computer scientists better teachers? Or rather, why aren’t computer scientists the best teachers? We are very good — pros, in fact — at explaining things in absolute detail to things that know absolutely nothing. If we can explain quicksort to a RISC machine, we should surely be able to teach binary-search to teenagers, right?
But of course we don’t teach our computers. And we don’t program our students. Or do we?
While we might not speak exclusively to our students in C — or assembly by the cruelest among us or LISP by the most enlightened — the culture, expectations, and modes of thinking are indeed computational. The principles we use in designing programs leak into our homework descriptions. The aversion towards redundancy and obsession with modularity inform our course schedules. (maybe not for the information theorists.)
As computer programmers, we’re reminded by Abelson and Sussman in SICP, one of the greatest computer science textbooks ever written:
“…programs must be written for people to read, and only incidentally for machines to execute…”
The formalization of the algorithm is more important than the specifics of a particular instruction set. Programs are really about people, not machines. People debug programs. People maintain programs. People extend programs. These are the hard parts of software development. But when it comes to communication and education, at least stereotypically, programmers aren’t good with people. And moving beyond stereotypes, most would agree computing education is a hard, open problem.
Communicating computer science goes beyond programming, in all its facets. And beyond science, engineering and mathematics, but those aren’t so unique. Computing education isn’t a programming problem, and I’m not even sure it’s a computational thinking problem.
On Artificial Intelligence
Cognitive science asks us to explain intelligence using computation. Perhaps, the best prepared CS folks to teach, are those interested in getting computers to solve problems themselves. Or rather, to provide the ability to program rather than the program itself — the fabled fishing rod rather than the fish.
If we assume that minds are really just computers, then we (as computing educators) are in fact in the right business, because education would be the computer programming business.
On the other hand, if minds are not computers, then programming our machines to solve problems and instructing our students would be entirely different matters.
So, is the state of computer science education a better AI assessment apparatus than the Turing test?
One big difference between “explaining” something to a computer and explaining something to a teenager is that computers don’t have mistaken pre-existing notions about things to lead them astray. It seems that a fair amount of the art/technique in teaching comes in understanding what the misconceptions are, and gently prying them loose – and sometimes students keep a death grip on those misconceptions because they feel so at sea in this strange new world.
And if only we had a more precise, less ambiguous teaching language than English! But we must teach them those more precise, less ambiguous languages as we go.
CS education as a substitute for the Turing test? Maybe… It’s certainly an AI-hard problem.