Computer Science Curricula 2013
This post originally appeared on the Software Carpentry website.
Following a roughly 10 year cycle, the ACM and IEEE Computer Society jointly sponsor the development of a Computing Curricula volume on Computer Science. These volumes have helped to set international curricular guidelines for undergraduate programs in computing. Planning for the next volume in the series began in the summer of 2010, and the Version 0.8 (Ironman) draft was published a couple of months ago. It divides topics into:
- Tier 1 Core: every Computer Science curriculum should include all of this material, and every student should have to cover it.
- Tier 2 Core: curricula should include all or almost all of these topics, and the vast majority of students should cover them.
- Elective: every cirriculum should also include significant elective material.
The material is also divided into "knowledge areas". Most, like "Algorithms and Complexity", are coherent and well-defined, but others, like "Platform-Based Development", are grab bags filled with odds and ends. So how does our material stack up against these recommendations? Overall, not badly:
Algorithms and Complexity | Basic Analysis | 4 hours | 1/2 hour |
Architecture and Organization | Machine-Level Representation of Data | 3 hours | 1/2 hour for both |
Memory System Organization and Architecture | 3 hours | ||
Computational Science | Data, Information, and Knowledge | elective | 1/2 hour |
Information Assurance and Security | Fundamental Concepts | 3 hours | nothing yet, but working on it |
Network Security | 5 hours | 15 minutes (SSH and keys) | |
Information Management | Query Languages | elective (really??) | 1.5 hours (SQL) |
Information Storage and Retrieval | elective | 10 minutes (character encoding) | |
Networking and Communication | Introduction | 1.5 hours | 10 minutes (TCP and DNS) |
Networked Applications | 1.5 hours | ||
Operating Systems | File Systems | elective (really??) | 15 minutes |
Programming Languages | Functional Programming | 7 hours | 1/2 hour (first-class functions) |
Basic Type Systems | 5 hours | 10 minutes | |
Software Development Fundamentals | Algorithms and Design | 11 hours | 1/2 hour [A] |
Fundamental Programming Concepts | 10 hours | 1 hour [B] | |
Fundamental Data Structures | 12 hours | 1 hour [C] | |
Software Engineering | Software Processes | 3 hours | 15 minutes (mostly about agile, mostly as asides) |
Tools and Environments | 2 hours | 1.5 hours (version control and testing tools) | |
Software Design | 8 hours | 15-30 minutes (mostly by example while teaching "Fundamental Programming Concepts") | |
Software Construction | 2 hours | 15-30 minutes (as above) | |
Software Verification and Validation | 3 hours | 1/2 hour (overlapped with "Tools nad Environments") | |
Social Issues and Professional Practice | Intellectual Property | 2 hours | none, but we need to add something |
[A] The ACM/IEEE curriculum focuses on problem-solving strategies like divide-and-conquer, which aren't part of what we teach. It also includes abstraction, program decomposition, encapsulation, and interface/implementation separation, which we definitely do. | |||
[B] This heading includes the basics of imperative programming: loops, conditionals, file I/O, functions, and so on. It's the only place where there's pretty much a one-to-one alignment between our material and the curriculum's. | |||
[C] Arrays, strings, sets, and maps (dictionaries): check. Stacks and queues: we don't do that (although we would if there was time). References and aliasing: definitely, though I always wonder how much our learners actually understand. |
The biggest discrepancy is actually between our material and what appears under their "Computational Science" heading. It is an odd beast, including:
- "Modeling and Simulation" (no problem there);
- "Processing", which is mostly about the practical implications of computer architecture;
- "Interactive Visualization", which rehashes the larger "Graphics and Visualization" knowledge area; and
- "Data, Information, and Knowledge", which does the same for the "Information Management" knowledge area.
It's very revealing that version control, testing tools, and modular program design aren't included. The standard's authors would probably say that's because they're covered elsewhere, but the same is true of processing, visualization, and data management, all of which get special mention. It seems we have our work cut out for us...