acm-header
Sign In

Communications of the ACM

Inside risks

Software and Higher Education


With software playing an undeniably critical role in our lives, one would expect that the best engineering techniques, such as rigorous specification and systematic inspections, would be applied routinely in its development. But in our experience, the opposite is often the case. Many large and important software development projects are conducted with poor choices of engineering techniques and technologies—resulting in increased risks, costs, and delivery delays.

The reason this situation has arisen is that those making technical decisions often do not have the necessary engineering training needed to make good decisions. The blame for this limitation lies mainly on deficiencies in the computer science and computer engineering degree programs to which many people turn for their professional education. Deficiencies we have noted include:

• There is too little emphasis in these degree programs on the principles of software development; the emphasis at present is on popular detail and not principles. Important topics such as specification and testing techniques tend to be taught rarely and superficially if at all. Graduates know the syntax of the language du jour and details of the associated libraries, but not how to work with other engineers to specify, design, or test a system. Coverage of all the major elements of software development (including requirements, specification, design, and verification) must be included in degree programs in such a way that graduates understand what choices are available and how to use them.

• Education about the role of computers in systems is frequently limited to Web applications and simple "isolated computer" assignments. It is essential that students get training in working with other engineering disciplines. This should take the form of examining significant example systems (both good and bad), as well as multidisciplinary projects. Students might also be encouraged to take courses in other disciplines so as to see examples of how computer systems are used.

• Many topics are taught from too narrow a perspective. Student exposure to software design, for example, is often limited to a shallow treatment of object-oriented design; graduates are often unaware of the myriad details of object-oriented design or that there are other approaches such as event-driven systems, table-structured designs, and functional decomposition. A carefully selected set of techniques in each area must be presented to the student, and then the student must use at least one or two of the techniques to gain insight. It is also important for students to be exposed to appropriate comparative analysis of the techniques, and to have opportunities to discuss and evaluate the material in various engineering contexts.

• There are important areas of the discipline, such as real-time and embedded systems, that are seldom taught and almost never in depth. There is a perception that such topics are somehow specialized and rarely required. In practice, many computer systems are embedded, and many operate in real time. Degree programs must be broad enough to ensure graduates understand the spectrum of systems being built and the techniques they require. This could be achieved relatively easily if topics such as real-time systems were introduced as part of a more established topic such as design by showing how real-time issues impact design decisions.

• Finally, graduates have a professional responsibility to know their limitations as the developers of crucial artifacts upon which our future depends, but the details of this responsibility are not taught extensively or as a priority. In addition to being taught the correct principles in degree programs, graduates must also be taught what they do not know, what their professional limits are, and when to seek help from others.

Faculty involved in these degree programs should ascertain where their graduates go, and, if many go into software development, they should ask whether these graduates are receiving the appropriate education from the courses the faculty teach. If they are not, then either the degree programs must be improved or it must be made clear that the degree programs are not designed to prepare people for a career in software development. A better alternative might be for more institutions to do what a few have done already: develop degrees in software engineering.

Back to Top

Authors

John C. Knight ([email protected]) is a professor of computer science at the University of Virginia.

Nancy G. Leveson ([email protected]) is a professor of aeronautics and astronautics at MIT.

Back to Top

Footnotes

Editor's note: The November "Inside Risks" column contained an incorrect sentence. The second sentence of the penultimate paragraph should have read: "Not imposing CALEA on VoIP does not mean that law enforcement will be helpless to wiretap VoIP."


©2006 ACM  0001-0782/06/0100  $5.00

Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee.

The Digital Library is published by the Association for Computing Machinery. Copyright © 2006 ACM, Inc.