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