Consensus on a Core Body Knowledge Is Crucial
In spite of the millions of software professionals worldwide and the ubiquitous presence of software in our society, software engineering has relatively recently reached the status of a legitimate engineering discipline and a recognized profession.
In engineering, the accreditation of university curricula and the licensing and certification of practicing professionals are taken very seriously. These activities are seen as critical to the constant upgrading of professionals and, hence, the improvement of the level of professional practice. Recognizing a core body of knowledge is pivotal to the development and accreditation of university curricula and the licensing and certification of professionals.
Achieving consensus by the profession on a core body of knowledge is a key milestone in all disciplines and has been identified by the IEEE Computer Society as crucial for the evolution of software engineering towards professional status. The 2004 Guide, written under the auspices of the Professional Activities Board, is part of a multiyear project designed to reach such a consensus. The ongoing SWEBOK project and its next milestone—the SWEBOK Version 3—will continue to redefine "accepted knowledge" and add new areas to the Guide.
Focus on Generally Accepted Knowledge
The software engineering body of knowledge is an all-inclusive term that describes the sum of knowledge within the profession of software engineering. Since it is usually not possible to put the full body of knowledge of even an emerging discipline, such as software engineering, into a single document, there is a need for a Guide to the Software Engineering Body of Knowledge. This Guide will seek to identify and describe that subset of the body of knowledge that is generally accepted, even though software engineers must be knowledgeable not only in software engineering, but also, of course, in other related disciplines.
What do we mean by "generally accepted knowledge"?
To better illustrate what "generally accepted knowledge" is relative to other types of knowledge, the figure below proposes a draft three-category schema for classifying knowledge.
The Project Management Institute in its Guide to the Project Management Body of Knowledge defines "generally accepted" knowledge for project management in the following manner:
' "Generally accepted" means that the knowledge and practices described are applicable to most projects most of the time, and that there is widespread consensus about their value and usefulness. "Generally accepted" does not mean that the knowledge and practices described are or should be applied uniformly on all projects; the project management team is always responsible for determining what is appropriate for any given project. '
The Guide to the Project Management Body of Knowledge is now an IEEE Standard, IEEE 1490-2003.
The Industrial Advisory Board of the SWEBOK Guide better defines "generally accepted" as knowledge to be included in the study material of a software engineering licensing exam that a graduate would pass after completing four years of work experience. These two definitions should be seen as complementary.
Knowledge Area Editors are also expected to be somewhat forward-looking in their interpretation by taking into consideration not only what is "generally accepted" today, but what they expect will be "generally accepted" in a 3 to 5 year timeframe.
Software engineering body of knowledge and curriculum are not the same
Software engineers must not only be knowledgeable in what is specific to their discipline, but they also, of course, have to know a lot more. The goal of this initiative is not, however, to inventory everything that software engineers should know, but to identify what forms the core of software engineering. It is the responsibility of other organizations and initiatives involved in the licensing and certification of professionals and the development of accreditation criteria and curricula to define what a software engineer must know outside software engineering. We believe that a very clear distinction must be made between the software engineering body of knowledge and the contents of software engineering curricula.