Author: Sanjay Goel, http://in.linkedin.com/in/sgoel
This is the seventh article in this 8 part series. The eighth part is
In 1977, Wassermann and Freeman  argued that computer science forms only a small portion of necessary education of a software engineer, and software engineering differed from other engineering that have their foundation in natural sciences. This was a novel observation that deserved more attention. This observation may have encouraged the subsequent committees to integrate more content about social and human sciences into mainstream computing courses, as was observed in some of the later recommendations. They considered a software engineer as a generalist, and drew an interesting analogy with a family physician who must have wide range of skills in addition to the core knowledge of medicines and diseases. They posited that a software engineering is an applied computer scientist, and the curriculum content must include problem solving, design, implementation, management, and communication skills. In addition to writing and speaking, the recommended communication skills included willingness to listen to others and sensitivity to the viewpoints and value systems of others. They also recommended the inclusion of accounting or economics or business administration, psychology, industrial engineering practices, and history or political science in the software engineering curriculum.
In his much debated talk called “On the cruelty of really teaching computing science,” Dijkastra emphasized on formalism . He declared software engineering as a self-contradictory doomed discipline. He called for banning the anthropomorphic metaphor in computer science, and insisted that programmer must also give formal proofs for the correctness of their programs. He advised that an introductory programming course should be taught as a formal mathematics course, and students should not be required to test their programs through implementation.
Certainly, mathematics education helps in developing some type of problem solving skills. However, by reducing computer science to formal mathematics, one of the founding fathers of computer science was under-estimating the huge growth of the software industry, and the important role software was to play in everyday life. In this debate, some supported him and others like Hamming, Parnas, Karp, Sherlis and Winograd criticized his ‘extremism’ and reminded that proofs are tedious and fallible, and engineering is not about optimality or perfection, it is reasonableness in terms of reliability, cost, time, and effort.
The serious shortfall of manpower and software crisis provided the necessary enabling conditions for the fast emergence of the ‘doomed discipline’ of software engineering as applied computer science that called for an engineering approach. The Software Engineering Institute (SEI) was founded in 1984 at the Carnegie Mellon University. This institute made significant contributions to the development of educational programs in software engineering. This was the start of some specialized programs in software engineering in USA, and also in Europe [4-6].
In 1990, SEI presented a model curriculum for undergraduate engineering program in software engineering. As compared to ABET’s accreditation criteria of engineering program, in this curriculum, the humanities and social sciences requirement was increased by reducing electives and mathematics and science components. Further, two ABET categories of engineering science and engineering design were merged into a single category of software engineering sciences and design. None of basic engineering science course was retained in this curriculum. In many ways, this curriculum was a reflection of a twelve year old proposal .
A new kind of engineering discipline was finally beginning to get its recognition, which claimed its foundations in the science of artificial constructs, mind, society, and engineering methods rather than material. This is a phenomenon that has been largely ignored by Indian engineering educators, even after so many decades. The curriculum recommendations categorized computing courses into four categories: (1) software analysis, (2) software architectures, (3) computer systems, and (4) software process. This indicated the signs of the beginning of integrated curriculum in computing.
In 1999, SEI-CMU published a report to define the discipline of Software Engineering . The mathematics requirements included mathematical logic and proof systems, discrete mathematical structures, formal systems, combinatorics, and probability and statistics. Topics in numerical methods or calculus were not included. This report also included the computing topics of data structures and algorithms, computer architecture, operating systems, and programming languages. The software product engineering related areas were identified as software requirement, design, coding, testing, and operation and maintenance. Software management areas encompassed management of process, risks, quality, configuration, process, and acquisition.
Based on a long industry-academia consultative process, SWEBOK  provided an excellent document that elaborates upon ten main knowledge areas under the categories of software requirements, software design, software construction, software testing, maintenance, software configuration management, software engineering management, software engineering process, software engineering tools and methods, and software quality. In a very sketchy manner, SWEBOK also elaborates upon the desirable topics of related disciplines of mathematics, computer science, computer engineering, management, project management, quality management, software ergonomics, and systems engineering.
For the first time in its history of nearly forty years, a computing curriculum recommendation made some reference to some education theories. SWEBOK elaborates upon technical competencies that software engineers with four years of experience should have. It identifies ten knowledge areas. Appendix D in their report suggest the desired level of competence as per Bloom’s taxonomy to classify various knowledge areas with reference to ten knowledge areas of software requirements, design, construction, testing, maintenance, configuration management, engineering management, engineering process, tools and methods, and quality. This report is currently undergoing a revision exercise, and some more knowledge areas like software engineering economics are being considered for inclusion.
 Anthony I. Wasserman and Peter Freeman, Software Engineering Concpets and Computer Science Curricula, Computer, IEEE, pp 85-91, June 1977.
 E.W. Dijkastra, David L. Parnas, W.L. Sherlis, M.H. van Emden, Jacques Cohen, R.W. Hamming, Richard M. Karp, and Terry Winnograd, Peter J. Denning (ed.), A Debate On Teaching Computing Science, Communications of the ACM, pp 1397-1414, December 1989.
 D.E. Conway, S.C. Dunn, and G.S. Hooper, BCS and IEE accreditation of software engineering courses, Software Engineering Journal, IEE, pp 245-248, July 1989.
 Gary Ford. The SEI Undergraduate Curriculum in Software Engineering, ACM SIGCSE Bulletin, March 1991, pp 375-385
 Gary Ford, The Progress of Undergraduate Software Engineering Education, ACM SIGCSE Bulletin, pp51-58, December 1994.
 Thomas B. Hilburn, Iraj Hirmanpour, Soheil Khajenoori, Richard Turner, Abir Qasem, A Software Engineering Body of Knowledge Version 1.0, SEI, CMU, April 1999.
 Alain Abran, James W. Moore, Guide to the Software Engineering Body of Knowledge, IEEE, 2004.