[comp.edu] Suggested Course Layout for Undergraduate CSC program

lmurray@wdl1.UUCP (Lance Murray) (10/12/87)

>We are currently redoing our UG curricula.  This is what we're trying:
>	Frosh: discrete structures/first sem. calc.
>	       2 semester intro CS
>	Soph:  Data structures/Machine language
>	       second semester calc.
>	Jun:   Architecture/Intro to Soft. Eng./Foundations of CS
>	Senior:Languages and OS/CS Electives
>	       Math courses

	It has been my experience, limited that it is, that there is a very
important need for Software Engineering courses early in the education of
"programmers". If the concepts are not presented early, a solid foundation
of knowledge is not established. The S/W E. course should be taught at the 
beginning of the sophmore year (this may be a very broad class covering 
topics such as infomation hiding, abstraction, inductive reasoning, etc.) so 
that classes, such as Data Structures and Theoretical Computer Science, may 
make use of the foundation built by required discussion of S/W E. prinicples.
	It may be necessary to teach a more detailed class in S/W E. near
the end of the Junior year as a lead in to the advaced topics of the senior
year. All senior level classes (Operating Systems, Data Base Management,
Compilers, AI) require the ability to apply advanced topics, like abstraction,
to solving problems. If these advanced concepts are not presented early in the 
students curriculum they will not be comfortable enough with the principles
to apply them in new situations.
	A secondary discussion could be started on whether the scope of the 
C.S. curriculum is targeted towards a scientific' or 'engineering' profession.
By providing a definite goal, or set of goals for the UG courses, the list
of classes and their order of attendance could change radically. It depends
upon whether you want to develop theoriticians, compiler writers, programmers,
or software engineers.
	Well, off my soap box now. I hope this has helped in some way.
	
	-lance murray-

/* All the usual disclaimers, plus a few new ones.	*/
 

beth@brillig (Beth Katz) (10/13/87)

Lance Murray says:
> 	It has been my experience, limited that it is, that there is a very
> important need for Software Engineering courses early in the education of
> "programmers". If the concepts are not presented early, a solid foundation
> of knowledge is not established. The S/W E. course should be taught at the 
> beginning of the sophomore year (this may be a very broad class covering 
> topics such as information hiding, abstraction, inductive reasoning, etc.) so 
> that classes, such as Data Structures and Theoretical Computer Science, may 
> make use of the foundation built by required discussion of S/W E. principles.

It is my opinion that those topics should be incorporated into the intro
classes as if they were law.  Abstraction and inductive reasoning are basic
concepts that transcend software engineering or even computer science.

A software engineering course in the junior year would consider the practical
aspects of thinking about programming formally.  Without some programming
experience, students have difficulty understanding why the software engineering
techniques are necessary.  This does not mean that they have been encouraged
to develop programs haphazardly.  But they haven't needed to design larger
systems, document their work at various stages to communicate with others,
concern themselves with reliability, provable correctness, or modifiability,
or show that they can develop a test suite.  Some courses in the first couple
of years may address these concepts, but the software engineering course
pulls these and other concepts together in one place at a time when one would
hope that the students understand their importance.

				Beth Katz
				beth@brillig.umd.edu

reggie@pdn.UUCP (George W. Leach) (10/16/87)

In article <8993@mimsy.UUCP>, beth@brillig.UUCP writes:
> Lance Murray says:
> > 	It has been my experience, limited that it is, that there is a very
> > important need for Software Engineering courses early in the education of
> > "programmers".

         [Stuff Deleted.....]


> It is my opinion that those topics should be incorporated into the intro
> classes as if they were law.  Abstraction and inductive reasoning are basic
> concepts that transcend software engineering or even computer science.
> 
> A software engineering course in the junior year would consider the practical
> aspects of thinking about programming formally.  Without some programming
> experience, students have difficulty understanding why the software engineering
  ^^^^^^^^^^
> techniques are necessary.  This does not mean that they have been encouraged
> to develop programs haphazardly.  But they haven't needed to design larger
                                                                      ^^^^^^
> systems, document their work at various stages to communicate with others,
  ^^^^^^^                                           ^^^^^^^^^^^^^^^^^^^^^^^
> concern themselves with reliability, provable correctness, or modifiability,
> or show that they can develop a test suite.  Some courses in the first couple
> of years may address these concepts, but the software engineering course
> pulls these and other concepts together in one place at a time when one would
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> hope that the students understand their importance.
> 
> 				Beth Katz
> 				beth@brillig.umd.edu


           I have the same views as Beth concerning when to introduce SE into
the curriculum.  I have taught the into course for a couple of years now and
I am always tempted to give larger assignments and team projects to give the
students a "feel" for programming in the large.  However, after giving the
matter much thought I opted against this because one must learn to crawl 
before one can walk.  The basic foundation must first be put down in order
to build upon it.


            An informal method that can be introduced into a later course
where the student has some basic programming skills is to break the class
up into teams of three or four people, ask them to come up with a system
requirements of their own for a programming project of their choice, then 
collect and redistribute the requirements to other groups for evaluation, 
this group may then come up with a software design based upon the requirements,
and finally the same group who did the design (or a third group!) may take
on the task of implementing the design.  


            This project does not have to be a very formal procedure.  In
fact, the less formal the better.  It will teach the students a valuable
lesson without you even getting up on a soap box to preach about software
engineering.  Let them experience, first hand, how to do it wrong in the
classroom.


-- 
George W. Leach					Paradyne Corporation
{gatech,codas,ucf-cs}!usfvax2!pdn!reggie	Mail stop LF-207
Phone: (813) 530-2376				P.O. Box 2826
						Largo, FL  34649-2826

fpst@hubcap.UUCP (Steve Stevenson) (10/22/87)

in article <3620001@wdl1.UUCP>, lmurray@wdl1.UUCP (Lance Murray) says:
>>We are currently redoing our UG curricula.  This is what we're trying:
>>	Frosh: discrete structures/first sem. calc.
>>	       2 semester intro CS
>>	Jun:   Architecture/Intro to Soft. Eng./Foundations of CS
> 
> 	It has been my experience, limited that it is, that there is a very
> important need for Software Engineering courses early in the education of
> "programmers". ....

The intro course is highly "software engineering oriented," if by that
you mean program development oriented.
-- 
Steve Stevenson                            fpst@hubcap.clemson.edu
(aka D. E. Stevenson),                     fpst@clemson.csnet
Department of Computer Science,            comp.hypercube
Clemson University, Clemson, SC 29634-1906 (803)656-5880.mabell