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:
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:
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...
Originally posted 2012-12-23 by Greg Wilson in Education.
comments powered by Disqus