[net.cse] What CS programs ought to be like vs. a good SE program

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 :-)