In today's world of rapidly changing software technology, engineers must deal with new methods, tools, platforms, user expectations, and software markets. This changing environment underscores the need for software engineering education that not only teaches current technologies, but also trains engineers to adapt quickly to new technologies and trends, allowing them to anticipate and exploit emerging opportunities to improve their products and processes.The typical engineering education keeps engineers abreast of technological advances by offering courses in new techniques and tools. This is fine while the engineers are in school, but it doesn't necessarily prepare them for future challenges. A better approach would be to provide the engineers with models, skills, and analytical techniques that they can use throughout their career to evaluate emerging technologies and then successfully adapt appropriate ones to their organization's needs. These engineers, then, would act as agents of change.Over the past nine years, Carnegie Mellon University has been developing and refining such a curriculum in its master of software engineering (MSE) program. In the process, the university has had to determine how the curriculum would differ from traditional ones, what kinds of hands-on experience would be offered, and how much specialization to require. The result is a novel approach that aims to cultivate future leaders in software engineering. It combines a long-term, mentored software development project with an unusual core curriculum that stresses broad-based models and problem-solving skills.
KEY ISSUESThree critical issues must be addressed in the design of any professional software engineering program:1. Core curriculum: Programs typically have a set of required courses that cover the basic knowledge and skills that students need. Traditional programs usually follow the software life-cycle model, with courses in requirements specification, specific design methods (such as object-oriented design), testing, and verification. Courses are usually independent of each other and can be taken in almost any order. 2. Practical system development: Most programs give students hands-on experience developing a software system, allowing them to apply material learned in class. The usual approach is to include a semesterlong project course in the core curriculum. 3. Degree of specialization: Programs offer varying opportunities for students to develop a specialization in specific areas of software engineering. Most provide a selection of elective courses, but offer little guidance on how to package these courses into a coherent advanced program. Typically these courses are already offered in the department.The traditional approach to these issues has its advantages:1. It allows easy entry by practicing software engineers seeking part-time supplementary education. Courses can usually be taken in any order, and the curriculum can be spread over long periods of time. 2. The courses mirror established software development stages, so it...