Teaching basic lab skills
for research computing

Computer Science Curricula 2013

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...