Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!mhuxr!mhuxn!ihnp4!cuae2!ltuxa!we53!wucs!conrad From: conrad@wucs.UUCP Newsgroups: net.cse Subject: Computer Science Degree Discussion Message-ID: <1487@wucs.UUCP> Date: Thu, 6-Mar-86 16:25:40 EST Article-I.D.: wucs.1487 Posted: Thu Mar 6 16:25:40 1986 Date-Received: Sat, 8-Mar-86 04:58:29 EST Distribution: na Organization: Washington U. in St. Louis, CS Dept. Lines: 68 There has been a considerable discussion about the "value of a computer science degree" in recent weeks. Now that I have a few minutes I'll throw in a few comments that I have. I'm not sure that the terms "field" or "discipline" should be applied to the "computer science" programs taught by many colleges in the U.S. The programs of study are often a mishmash of topics drawn from the "proto-fields" that I list below. 1) _computing science_, the study of the principles underlying computation, is really a branch of applied mathematics (or perhaps the various subfields of mathematics could be viewed as branches of computing science :-) ). Teaching computing science should primarily involve guiding students to learn to THINK clearly and formally about problems and to devise desirable, correct, and efficient solutions. The computing science program should present intellectual tools that (are/may be) helpful in this THOUGHT process. 2) _computation engineering_ (i.e., "software engineering"), on the other hand, is the engineering discipline build upon the "computing science" foundation. To the intellectual techniques of computing science it should add a methodological framework and professional culture. It emphasizes building computations to a greater extent than computing science and also has to take into account more of the "real-world" environment of the computation, e.g., economic, legal, and social issues. 3) _computer engineering_ is probably better defined than the above "proto-fields". This term seems to be applied to the subfield of electrical engineering that deals with the engineering of computational devices. (Perhaps in a more general setting this should be viewed as a subfield of computation engineering. For example, design of computational devices based on biological/organic technology rather than electronic technologies would still be computer engineering.) 4) _computer technology and applications_ is study of "current" technologies and how to apply them to particular application areas. I believe that categories 1 thru 3 are valid foci for programs of study at the college level. I'm not sure that category 4 is a valid basis for a "four-year" college program. If so, then perhaps at a "engineering technology" level. It would probably be a valid focus for junior-college programs or an applied minors. Unfortunately many "computer science" programs indiscriminantly mix topics from the areas and end up focusing excessively on computer technology. Don't get me wrong here, I am not opposed to the study of current technology and applications at the college level. Computing scientists can benefit from the concreteness of "real-world" applications. To completely ignore the "job training" aspects of college degrees would be unrealistic and unnecessarily elitist. However, I do believe that the best career or life (if not job) training is to to concentrate on broad and long-lived principles instead of specific job training. Our computer science programs probably concentrate too much on the PRODUCTS and not enough on the PROCESSES. For example, teaching a programming language instead of the analysis, reasoning, and specification techniques needed to solve problems--or building courses around topics such as operating systems and compilers instead of around general concepts such as concurrent/distributed computation and language processing. Conrad Cunningham Washington University in St. Louis