## Chemistry is to Biology as X is to Computing

What is the equivalent of molecular basis of life, how and why chemistry works, and why evolution should be plausible — that cannot be omitted from a first course?

I haven’t taken biology since 1978, so I admit at the start that I don’t really know what goes into Modern Biology classes.  I have been thinking some (mostly in my role on the APCS Commission to design the “Computer Science: Principles” class) about what the big/key/supporting (different adjectives get used at different times) ideas of Computer Science are.  Here’s a shot at the computing equivalent of the “molecular basis of life.”

1. We know of several equivalent models for what is computable, for what is possible to have a machine to calculate, for what mathematics is capable of describing.  One of these is particularly useful because it can be implemented in terms of electronics, i.e., lots and lots of transistors.
2. This model requires the use of a finite memory store that contains numbers — just integer numbers in a fixed range.  Everything that we would want to compute with, from real numbers to digital video, can be turned into these small, fixed integers.
3. We have a calculating unit that is capable of taking instructions from this store.  These instructions tell the calculating unit to read numbers, to do simple mathematics on these numbers, to store numbers into different parts of memory, to change which instruction is being used next (so that instructions might repeat), and to choose which instruction to use next based on a decision about two numbers (e.g., whether they’re equal, whether one is greater than another).
4. Everything that the computer is capable of, from Twitter and Facebook to making shiny bumpers in Pixar’s “Cars,” from describing how proteins might fold to predicting the weather or economy, is built up from this simple model of a calculating unit with a memory store, implemented on millions of transistors that get cheaper and cheaper.

That’s a strawman.  It did occur to me to suggest an object model, or a functional model, or even a rule-based model as the “molecular basis of computing.”  But as Yale Patt suggests, there is something compelling about the connection to the physical circuitry, to explaining all of computing in terms of light switches.

While I am making a pass at Alan’s challenge of a “molecular basis of computing,” I’m not at all addressing the other part of the challenge, “that cannot be omitted from a first course.”  In fact, very few intro computing approaches (other than the Patt and Patel book) start from the hardware first.  In Computer Science (and our Computational Media) classes, this is a Sophomore-level class that introduces this bottom-up view of computing.  Even Computer Engineering programs that use the Patt and Patel book use it at the Sophomore level.  The argument is that first year students want to do something meaningful with the computer, and then we can explain how the computer works.  I find that a compelling argument.

Perhaps the “molecular basis of computing” is something we sneak up on, in a spiral fashion (as we do in mathematics and as Ben Shneiderman suggested years ago for computing education).  In our Media Computation CS1, we do spend a lot of time on item #2 on this list — we talk about how each medium is digitized into bytes.  At the end of the class, we spend time on items #1 and #4 — how there are multiple models of computation (e.g., objects and functional), and that everything is built up from these fundamental units.  The molecular basis of computing may be something that we introduce where it makes sense to the student, we revisit often, and eventually focus on explaining it when the student understands the role of the model.

Entry filed under: Uncategorized. Tags: , .

• 1. Alfred Thompson  |  August 12, 2009 at 10:42 am

I am leery of starting too close to the hardware. Dijkstra’s statement that “Computer Science is no more about computers than astronomy is about telescopes.” keeps ringing in my head. You are stating a mostly abstract notion of computers which is somewhat different from a hard notion of hardware which I do appreciate. I wonder how many teacher can keep it that abstract – or have students who will let them. I’m not sure if that is a big problem, a little problem or no problem at all but it is something to think about.
Take transistors for example. That is already an implementation specific device. I hear that before transistors were invented there was other hardware for doing what we use transistors for today. (Tubes I think they were called. :-)) and perhaps in the future we will move to some other piece of hardware. So perhaps we want to talk about gates (AND, NAND, etc) as abstracts first? Either way we risk boring beginners to death. That is the risk of starting at too basic a level.
I like the idea of “sneaking up” on some of these concepts. The trick then is picking to higher level concepts that will encourage students to want to know more about (or at least see the value in knowing about) the deeper more basic things. I think we all know that the first course needs to be a gateWAY not a gateKEEPER.

• 2. Mark Guzdial  |  August 12, 2009 at 11:23 am

Dijkstra who also said, “The teaching of BASIC should be rated as a criminal offence: it mutilates the mind beyond recovery.”? From Microsoft’s perspective, you support his arguments?

What I was after here was a sense of “no magic.” That’s the role that I see chemistry playing in biology. The cell works because of chemical processes. The computer is an understandable machine — that’s a critical, and perhaps missing today, notion. We could swap out a different model. This one has the advantage as referencing the terms (memory, transistors, gates) that one can find in a local Radio Shack.

I definitely see the concern about the tension between boredom and gatekeeping vs. intriguing and being a gateway. That’s why I’m suggesting a spiral model.

• 3. Mark J. Nelson  |  August 12, 2009 at 11:32 am

I think there’s two sort of unreconciled bases of computing: hardware and math. In terms of low-level abstractions, is the Turing machine the fundamental one, or is the lambda calculus the fundamental one? I don’t think CS has ever really agreed on the answer to that question, or the broader questions it implies.

• 4. Alfred Thompson  |  August 12, 2009 at 11:33 am

From a personal perspective Dijkstra’s comment about BASIC always gives me pause. While I think I understand what he said about computers and can make sense from it I have never understood the comment about BASIC. BASIC was my second language and I wrote good FORTRAN programs in BASIC for years. 🙂 I tend to think that the teacher/curriculum makes more of a difference than the programming language for beginning students.

• 5. BillAtHRST  |  August 12, 2009 at 7:26 pm

Boolean algebra, anybody?

• 6. Mark Guzdial  |  August 12, 2009 at 8:50 pm

There are lots of folks who claim that discrete mathematics (in general) is the predecessor of computing. I’m really interested in seeing the study that shows transfer — do students who learn discrete mathematics recognize the relevant portions when they get to computing?

• 7. Erik Engbrecht  |  August 14, 2009 at 8:41 am

I can’t give you a study, but I personally found that I didn’t really see the practical application of discrete math and computational theory to software development until about a year out of school. My appreciation for the connection has increased every year since then. That being said, based on personal observation I would say that most software professionals who have a CS background (which I believe is a minority) never see the practical aspects of the connection.

I think a course that combines an introduction to discrete math with an introduction to programming (cram cram cram cram) would be really, really interesting. Teach a little discrete math, teach a little programming to solve the problems, build up a discrete math library as you go.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Join 9,014 other followers

## Blog Stats

• 1,936,531 hits