When people talk informally about "Computer Science Education" they tend
to commingle very different topics:
- how to educate computer scientists
  - those who teach "computer science"
  - those who advance the state of the art in tools such as
    - compilers
    - machine intelligence
- how to educate engineers building equipment with embedded computers
  (such as trains, telephone switches, airplanes ...)
- how to educate business programmers
- what should the general public (and politicians!) know about
  computers and their use

A single curriculum cannot serve all of these constituencies well,
but it is possible that there is enough overlap that some introductory
course could be part of all of these.

It would be a good thing, if some very elementary programming
course were part of general education requirements. Just about
everything above operating a cash register at McDonalds requires
an ability to plan ahead, and to think about consequences of
one's actions. We see politicians repeatedly enact legislation
that has unintended consequences, essentially similar to the
consequences of simple programming errors. From a certain
point of view, a law is just another kind of code, intended
to be executed by people. For this kind of class, however,
I think Basic may be the most appropriate language. In any
case, something that has a very low threshold before being
able to write a working program that screws up.

On the other hand, a computer scientist should be trained to
work at a high level of abstraction. The description of a
textbook for a course in "The Structure and Interpretation of
Computer Programs" that does not get to the assignment operator
until page 400 is clearly a very different entry into the
profession. Philosophers must be encouraged to think about
what computers can and cannot do in principle, separately
from any specific current implementation and its limitations.
Engineers need to understand the physical mechanisms on which
the circuitry is constructed.

That said, I think it would be good and useful for most types
of programmers-to-be to follow a curriculum that walks them
through the fundamental abstraction of what the mechanism of a
computer is (storage words, with addresses, that can be
manipulated by an arithmetic/logical unit which executes
instructions) and then shown different types of programming
languages that allows one to accomplish useful things by
programming at an appropriate abstraction level. With
such a foundation, one can then build a modular superstructure
of operating systems, data structures, algorithms etc.

In fact, I personally find it hard to imagine how one can
get a proper grasp of anything in the field without such a
foundation. And indeed it seems like this is a major problem
in the field of programming today.

/ Lars Poulsen

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [EMAIL PROTECTED] with the message: GET IBM-MAIN INFO
Search the archives at http://bama.ua.edu/archives/ibm-main.html

Reply via email to