Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!watmath!clyde!burl!ulysses!bellcore!decvax!decwrl!glacier!kestrel!ladkin From: ladkin@kestrel.ARPA (Peter Ladkin) Newsgroups: net.cse Subject: Re: Value of Computer Science degree Message-ID: <5284@kestrel.ARPA> Date: Fri, 28-Feb-86 19:08:47 EST Article-I.D.: kestrel.5284 Posted: Fri Feb 28 19:08:47 1986 Date-Received: Sat, 1-Mar-86 23:34:25 EST References: <1404@ames.UUCP> <3367@umcp-cs.UUCP> Organization: Kestrel Institute, Palo Alto, CA Lines: 61 In article <3367@umcp-cs.UUCP>, mangoe@umcp-cs.UUCP (Charley Wingate) writes: > [...] it seems clear to me that > courses in software engineering ought to be part of CS curricula, and they > should include group projects. Agreed, and they are all too rarely. Group programming is possible without a special course. Students in my compiler and OS courses are encouraged to work in groups. The projects are stiff enough that they have to. I have long been puzzled as to what should be in a software engineering course. It shouldn't just be Programming Methods N (for large N) else it will bore teacher and student alike. My favorite current candidate is Specification. There is much more to this than I had realised before I worked with (and designed) specification languages. Many of the problems are general enough to attract anyone's attention. A sample: Is first order logic an adequate specification language? (Traditional verification vs Gordon's HOL hardware verification examples). Are algebraic specifications adequate for Abstract Data Types? Does one need some set theory? Pick a problem - what is the most abstract specification of this problem? Is there one? Does it generalise? Pick an area (e.g. time modelling). How does one model temporal information in a given setting? (Temporal Logic, Interval Calculi, First order axiomatisations). These issues are not at all theoretical. I am currently working in an environment which allows me to define functions assertionally (with a fragment of first order logic and set theory) or procedurally. I have designed a time calculus, and can implement it using transformations from intervals to sets, defined assertionally. I would also claim (with theorems to back it up) that in a precise sense the time calculus is most general for countable time modelling (and who cares about higher infinities for applications). I am an experienced logician, therefore I have been used to specifying in first order logic. I nevertheless found that finding good specifications of problems in computer science was a subtle art that could be as difficult as you could wish for. I also know that most of my students, even the good ones, lack the ability and training in specification that I wished they had. I used to think a training in logic was adequate, but now I believe the problem is more general. I would appreciate suggestions for extending my sample list above. I would prefer a curriculum oriented to mental problem-solving, since I believe that in ten years our software engineering environments will be much more sophisticated, and somewhat similar to the one in which I currently work. In such an environment, training in *abstract* specification is likely to be much more important than having programmed a large editor in Pascal 10 years before. Peter Ladkin