Home> Blog> Computer Science Curricula 2013

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 ComplexityBasic Analysis4 hours1/2 hour
Architecture and OrganizationMachine-Level Representation of Data3 hours1/2 hour for both
Memory System Organization and Architecture3 hours
Computational ScienceData, Information, and Knowledgeelective1/2 hour
Information Assurance and SecurityFundamental Concepts3 hoursnothing yet, but working on it
Network Security5 hours15 minutes (SSH and keys)
Information ManagementQuery Languageselective (really??)1.5 hours (SQL)
Information Storage and Retrievalelective10 minutes (character encoding)
Networking and CommunicationIntroduction1.5 hours10 minutes (TCP and DNS)
Networked Applications1.5 hours
Operating SystemsFile Systemselective (really??)15 minutes
Programming LanguagesFunctional Programming7 hours1/2 hour (first-class functions)
Basic Type Systems5 hours10 minutes
Software Development FundamentalsAlgorithms and Design11 hours1/2 hour [A]
Fundamental Programming Concepts10 hours1 hour [B]
Fundamental Data Structures12 hours1 hour [C]
Software EngineeringSoftware Processes3 hours15 minutes (mostly about agile, mostly as asides)
Tools and Environments2 hours1.5 hours (version control and testing tools)
Software Design8 hours15-30 minutes (mostly by example while teaching "Fundamental Programming Concepts")
Software Construction2 hours15-30 minutes (as above)
Software Verification and Validation3 hours1/2 hour (overlapped with "Tools nad Environments")
Social Issues and Professional PracticeIntellectual Property2 hoursnone, 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...