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