Introduction
The ACM and IEEE-Computer Society respectively appointed Steering Committee co-chairs, who in turn recruited the other members of the Steering Committee in the latter half of 2010. This initial focus was chosen because both the CS2008 report and the results of the survey of department chairs pointed to a need for the creation of new knowledge areas in the Body of Knowledge. Each of these subcommittees was chaired by a member of the Steering Committee and included at least two additional Steering Committee members as well as other experts in the area selected by the subcommittee chairs.
This two-year process ultimately converged with the version of the Body of Knowledge presented here. To lay the groundwork for CS2013, the Steering Committee conducted a study of the use of the CC2001 and CS2008 volumes. In response to questions about how they used the CC2001/CS2008 reports, survey respondents reported that the Body of Knowledge (ie, the outline of topics that should appear in the . undergraduate computer science curriculum) was the most used component of the reports.
Written and oral communication is also part of the core of the Knowledge Area Social Issues and Professional Practice (SP) under Professional Communication. The importance of lifelong learning and professional development is described in the preamble to the Knowledge area Social issues and professional practice as well as in both chapter 2 (Principles) and chapter 3 (Knowledge for candidates).
Principles
CS2013 should provide realistic, adaptable recommendations that provide guidance and flexibility, enabling curricular designs that are innovative and follow recent developments in the field. The guidelines are intended to provide clear, actionable goals while also providing the flexibility programs need to respond to a rapidly changing field. While the range of relevant subjects has expanded, the scope of undergraduate education has not increased.
Computer science curricula must be designed to prepare graduates to succeed in a rapidly changing field. Computer science students must learn to connect theory and practice, recognize the importance of abstraction, and appreciate the value of good engineering design. CS2013 should identify the core skills and knowledge that all computer science graduates should have, while providing maximum flexibility in choosing topics.
To this end, we have introduced three levels of knowledge description: Tier-1 Core, Tier-2 Core and Electives. The CS2013 effort will include participation from many different constituencies, including industry, government and the full range of higher education institutions involved in computer science education.
Characteristics of Graduates
A fundamental aspect of computer science is understanding the interplay between theory and practice and the essential connections between them. Graduates of a computer science program must understand how theory and practice influence each other. Graduates must be aware that the field of computer science is advancing rapidly and that graduates must have a solid foundation that enables and encourages them to maintain relevant skills.
To develop this skill, students must be exposed to multiple programming languages, tools, paradigms, and technologies, as well as the underlying fundamental principles throughout their education. Graduates should recognize the social, legal, ethical, and cultural issues inherent in the discipline of computer science. They must have knowledge of the interaction of ethical issues, technical problems and aesthetic values that play an important role in the development of computer systems.
Graduates should have the ability to make effective presentations to a variety of audiences about technical problems and their solutions. Graduates should be able to manage their own learning and development, including managing time, priorities and progress.
Introduction to the Body of Knowledge
The learning outcomes and number of hours in the Body of Knowledge provide a guide to the depth of coverage that curricula should focus on. Core Tier-1 contains the topics that are fundamental to the structure of any computer science program. On the meaning of Core Tier-1: A Core Tier-1 subject should be a required part of every computer science curriculum.
About the meaning of Core Level-2: Core Level-2 topics are generally essential in an undergraduate computer science degree. A computer science curriculum should aim to cover 90-100% of the Core Level 2 topics, with 80% considered a minimum. Essential experience with systems and applications can be gained in more diverse ways by using elective material in the Body of Knowledge.
As a result, CS2013 changed the organization of the Body of Knowledge in several ways, adding some new KAs and restructuring others. Below you will find an overview of the number of core hours (both Tier-1 and Tier-2) per KA in the CS2013 Body of Knowledge.
Introductory Courses
Introductory courses vary by institution, especially with regard to the nature and length of an introductory sequence (that is, the number of courses a student must take before branches are allowed). Some introductory courses move away from emphasizing programming and are designed to provide a broader introduction to concepts in computing without the constraints of learning the syntax of a programming language. A determining factor for many introductory courses is the choice of programming paradigm, which then determines the choice of programming language.
For example, the use of software development best practices such as unit testing, version control systems, industrial integrated development environments (IDEs), and programming patterns may be emphasized to varying degrees in different introductory courses. Care should be taken in introductory courses to balance the use of software development best practices from the start with making introductory courses accessible to a broad population. Trade-offs: The inclusion of software development practices in introductory courses can help students develop important aspects of real-world software development early on.
The extent to which such practices are included in introductory courses can influence the target audience of the course and the choice of programming language and development environment. As a result, some introductory courses emphasize parallel processing from the outset (treating traditional single-threaded execution models as a special case of the more general parallel paradigm).
Institutional Challenges
For example, cryptography appears in the new Information Assurance and Security (IAS) Knowledge Area, while parallel and distributed algorithms appear in the Parallel and Distributed Computing (PD) Knowledge Area. An instructor may choose to cover these algorithmic strategies in the context of the algorithms presented in "Fundamental Data Structures and Algorithms" below. Simulation techniques and tools, such as physical simulations, human-in-the-loop guided simulations and virtual reality.
Correctly use each proof technique (direct proof, proof by contradiction, and induction) in constructing a valid argument. Explain the relationship between weak and strong induction and give examples of the appropriate use of each. Calculate permutations and combinations of a set and interpret the meaning in the context of a specific application.
Explain why input validation and data remediation are necessary in case of adversarial input channel control. Describe the main concepts of the OO model, such as object identity, type constructors, encapsulation, inheritance, polymorphism, and versions. Summarize techniques for achieving synchronization in an operating system (eg describe how to implement a semaphore using OS primitives).
Explain why synchronization constructs such as simple locks are not useful in the presence of distributed errors. Fluency in the process of software development is a prerequisite for the study of most computer science. In general, students can best learn to use much of the material defined in the software.
Define software quality and describe the role of quality assurance activities in the software process. Explain how appropriate components may need to be modified for use in the design of a software product. Describe the basic building blocks of computers and their role in the historical development of computer architecture.
Describe the impact of underrepresentation of diverse populations in the computing profession (eg, industry culture, product diversity).