djm408@tijc02.UUCP (David Marks ) (10/01/86)
I have been giving thought to all the debate over what a good CS program ought to include and have come to the conclusion that CS ought to be split into CS (computer science - theoretical) and SE (software engineering) with CS under the school that has the math and science departments, and SE under engineering schools. Both depts. would work together on courses that are basic to both, but would separate at the higher levels. These are the courses I think would be necessary for both curricula: Introduction to Programming Programming Concepts Data Structures Computer Architecture and Assembly Language Concepts Calculus I & II Technical Writing These are the courses primarily in the SE curriculum (some required, and some not): Introduction to Software Engineering Structured Analysis and Design Software Testing Methodologies Statistics for Software Engineering Project Management User Interfaces Graphics Real Time Systems Database Design Operating System Concepts Mangement Information Systems Cobol C Pascal Knowledge Based Systems Computer Software Security (Applications oriented) Fortran Mathematical And Scientific Programming Numerical Methods Computer Systems Management Data Communications Ada These are courses primarily in the CS curriculum (some required, some not): Computability and Automata Theory Symbolic Logic Mathematical Analysis of Algorithms Mathematics of Databases and Data Storage Statistics Prolog Lisp Smalltalk A Object Oriented Programming Discrete Mathematics Linear Algebra and Matrices Mathematics of Searching and Sorting Artificial Intelligence Graph Theory Topology Parsing Computer Language Design Computer/Software Security (Mathematical orientation) Symbolic Mathematics on a Computer Parallel Processing Algorithms Numerical Methods and Aproximation Theory The above is by no means rigorous, and does not disallow SE students from taking CS courses and vice versa. However, it does separate the theoretical scientist from the application engineer as has been done in virtually all other sciences. As you can see, I have heavily weighted the theoretical curriculum towards the mathematical. I would expect that if the above were followed, CS graduates would be the sort of people who would contribute to the JOURNAL OF THE ACM and the SE people would contribute to the COMMUNICATIONS OF THE ACM, although these two groups would by no means be mutually exclusive. I would enjoy reading comments on this proposal. Dave Marks Tailorable Products Department Industrial Systems Division Texas Instruments Johnson City, TN All the usual disclaimers apply! :-) L'argent n'est pas le bonheur, mais il l'achete a ceux qui le font!
conrad@wucs.UUCP (Conrad Cunningham) (10/07/86)
In article <114@tijc02.UUCP> djm408@tijc02.UUCP (David Marks ) writes: > These are the courses I think would be necessary for both curricula: > ... Calculus I & II ... I think one or two courses in discrete mathematics is as important as the traditional continuous mathematics. Perhaps a two-year sequence that integrates aspects of both continuous math (Calculus) and discrete math would be better. > > These are the courses primarily in the SE curriculum > (some required, and some not): > ... > Structured Analysis and Design > Cobol, Fortran, Pascal, Ada > .... Two comments here. "Structured Analysis and Design" are specific techniques. Specific techniques probably need to be taught, but I wouldn't limit a curriculum to these specific techniques. Also you list several languages--all imperative in structure. The SE (and the CS) should be familiar with programming techniques in several styles--sequential imperative (e.g., Fortran, Cobol, C, C++, Pascal, Icon), concurrent imperative (e.g., Ada, Modula II), functional (e.g., Lisp, FP), logic (e.g., Prolog, Equational Logic), and actor(?) (e.g, Smalltalk). SE's should not just be programming language jockeys. Who knows what styles, techniques, and languages are going to be important in the medium to long term? (Except Cobol and Fortran which will probably be with us as long as death and taxes. :-) > > These are courses primarily in the CS curriculum The programming courses in the CS curriculum (and probably the SE too) should emphasize program derivation/proof, not just hacking. In both curricula I would prefer to see courses build around the concepts rather than the technology, e.g., "Concurrent Programming Concepts" instead of "Operating Systems", "Language Processing" instead of "Compilers", or "Functional Programming" instead of "Lisp". Conrad Cunningham Washington University in St. Louis
g-rh@cca.UUCP (Richard Harter) (10/10/86)
Conrad Cunningham writes: > Two comments here. "Structured Analysis and Design" are specific >techniques. Specific techniques probably need to be taught, but I wouldn't >limit a curriculum to these specific techniques. Also you list several >languages--all imperative in structure. The SE (and the CS) should be >familiar with programming techniques in several styles--sequential imperative >(e.g., Fortran, Cobol, C, C++, Pascal, Icon), concurrent imperative (e.g., Ada, >Modula II), functional (e.g., Lisp, FP), logic (e.g., Prolog, Equational >Logic), and actor(?) (e.g, Smalltalk). SE's should not just be programming >language jockeys. Who knows what styles, techniques, and languages >are going to be important in the medium to long term? (Except Cobol >and Fortran which will probably be with us as long as death and taxes. :-) I feel that Conrad's comments here are particularly astute. It is an old rule of thumb that once you've learned one language well adding another is simple. Well that old rule of thumb only holds for languages in the same style as the one you learned originally. If you know, for example, Fortran PL/I, C, and Pascal, you still only really know different dialects of the sequential imperative programming. Learning Lisp or Prolog is going to bend your mind a bit because you are changing paradigms. Any one who expects to build a career around computers (either SE or CS) had better have a flexible mind; one thing even surer than the longevity of Cobol is that the intellectual technology is going to change rapidly. > The programming courses in the CS curriculum (and probably the SE too) >should emphasize program derivation/proof, not just hacking. In both curricula >I would prefer to see courses build around the concepts rather than the >technology, e.g., "Concurrent Programming Concepts" instead of "Operating >Systems", "Language Processing" instead of "Compilers", or "Functional >Programming" instead of "Lisp". > Again, this is an astute point. Interestingly enough, students (particularly engineering students) often want "practical" information rather than concepts under the erroneous belief that "practical" knowledge will make them more employable. The truth is that concepts go a lot farther. -- Richard Harter, SMDS Inc. [Disclaimers not permitted by company policy.] For Cheryl :-)