Chapter 5: Guidelines for SE Curriculum Design and Delivery
5.2 Guidelines for Constructing the Curriculum
Curriculum Guideline 2: Curriculum designers and instructors must think in terms of outcomes.
Both entire programs and individual courses should include attention to outcomes or learning objectives. Furthermore, as courses are taught, these outcomes should be regularly kept in mind. Thinking in terms of outcomes helps ensure that the material included in the curriculum is relevant and is taught in an appropriate manner and at an appropriate level of depth.
The SE2004 graduate outcomes (see Chapter 2) should be used as a basis for designing and assessing software engineering curricula in general. These can be further specialized for the design of individual courses.
In addition, particular institutions may develop more specialized outcomes (e.g. particular abilities in specialized applications areas, or deeper abilities in certain SEEK knowledge areas).
Curriculum Guideline 3: Curriculum designers must strike an appropriate balance between coverage of material, and flexibility to allow for innovation.
There is a tendency among those involved in curriculum design to fill up a program or course with extensive lists of things that “absolutely must” be covered, leaving relatively little time for flexibility, or deeper (but less broad) coverage.
However, there is also a strong body of opinion that students who are given a foundation in the ‘basics’ and an awareness of advanced material should be able to fill in many kinds of ‘gaps’ in their education later on, perhaps in the workforce, and perhaps on an as-needed basis. This suggests that certain kinds of advanced process-oriented SEEK material, although marked at an ‘a’ (application) level of coverage, could be covered at a ‘k’ level if absolutely necessary to allow for various sorts of curriculum innovation. However, material with deeper technical or mathematical content marked ‘a’ should not be reduced to ‘k’ coverage, since it is tends to be much harder to learn on the job.
Curriculum Guideline 4: Many SE concepts, principles, and issues should be taught as recurring themes throughout the curriculum to help students develop a software engineering mindset.
Material defined in many SEEK units should be taught in a manner that is distributed throughout many courses in the curriculum. Generally, early courses should introduce the material, with subsequent courses reinforcing and expanding upon the material. In most cases, there should also be courses, or parts of courses, that treat the material in depth.
In addition to ethics and tool use, which will be highlighted specifically in other guidelines, the following are types of material that should be presented, at least in part, as recurring themes: • Measurement, quantification, and formal or mathematical approaches
• Modeling, representation, and abstraction.
• Human factors and usability: Students need to repeatedly see how software engineering is not just about technology.
• The fact that many software engineering principles are in fact core engineering principles: Students may learn SE principles better if they are shown examples of the same principle in action elsewhere: e.g. the fact that all engineers use models, measure, solve problems, use ‘black boxes’, etc.
• The importance of scale: Students can practice only on relatively small problems, yet they need to appreciate that the power of many techniques is most obvious in large systems. They need to be able to practice tasks as if they were working on very large systems, and to practice reading and understanding large systems.
• The importance of reuse.
• Much of the material in the Process, Quality, Evolution, and Management knowledge areas.
Curriculum Guideline 5: Learning certain software engineering topics requires maturity, so these topics should be taught towards the end of the curriculum, while other material should be taught earlier to facilitate gaining that maturity.
It is important to structure the material that has to be taught so that students fully appreciate the underlying principles and the motivation. Thus if taught too early in the curriculum, many topics from SEEK’s Process, Quality, Evolution, and Management knowledge areas are likely to be poorly understood and poorly appreciated by students. This should be taken into account when designing the sequence in which material is to be taught and how real-world experiences are introduced to the students. It is suggested that introductory material on these topics can be taught in early years, but that the bulk of the material be left to the latter part of the curriculum.
On the other hand, students also need very practical material to be taught early so they can begin to gain maturity by participating in real-world development experiences (in the work force or in student projects). Examples of topics whose teaching should start early include programming, human factors, aspects of requirements and design, as well as verification and validation. This does not mean to imply that programming has to be taught first, as in a traditional CS1 course, but that at least a reasonable amount should be taught in a student’s first year.
Students should also be exposed to “difficult” software engineering situations relatively early in their program. Examples of these might be dealing with rapidly changing requirements, having to understand and change a large existing system, having to work in a large team, etc. The concept behind such experiences is to raise awareness in students that process, quality, evolution and management are important things to study, before they start studying them.
Curriculum Guideline 6: Students must learn some application domain (or domains) outside of software engineering.
Almost all software engineering activity will involve solving problems for customers in domains outside software engineering. Therefore, somewhere in their curriculum, students should be able to study one or more outside domains in reasonable depth.
Studying such material will not only give the student direct domain knowledge they can apply to software engineering problems, but will also teach them the language and thought processes of the domain, enabling more in-depth study later on.
By ‘in reasonable depth’ we mean one or more courses that are at more than the introductory level (at least heavy second year courses and beyond). The choice of domain (or domains) is a local consideration, and in many cases can be at least partly left up to the student. Domains can include other branches of engineering or the natural sciences; they can also include social sciences, business and the humanities. No one domain should be considered ‘more important’ to software engineering programs than another.
The study of certain domains may necessitate additional supporting courses, such as particular areas of mathematics and computer science as well as deeper areas of software engineering. The reader should consult the Systems and Application Specialties area at the end of SEEK (Chapter 4) to see recommendations for such supporting courses.
This guideline does not preclude the possibility of designing courses or programs that deeply integrate the teaching of domain knowledge with the teaching of software engineering. In fact, such an approach would be innovative and commendable. For example an institution could have courses called ‘Telecommunications Software Engineering’, ‘Aerospace Software Engineering’, ‘Information Systems, Software Engineering’, or ‘Software Engineering of Sound and Music Systems’. However, in such cases great care must be taken to ensure that the depth is not
sacrificed in either SE or the domain. The risk is that the instructor, the instructional material, or the presentation may not have adequate depth in one or the other area.