UNSW, SCSE, CompSci Curriculum (1997-)
Here's my proposal for a new curriculum for CS majors.
Aims and Objectives:
All the usual stuff about producing graduates with a broad range of
knowledge and skills in Computer Science, capable of applying that
knowledge to solving real-world problems.
Design Strategy:
This curriculum was designed under the following premises:
- evolutionary, rather than revolutionary, change
- there are a number of excellent textbooks available;
base subjects around these where possible
- all subjects have a substantial practical component
(except maybe Theory) which requires some sort of
system/language support
- where there are several choices for languages,
and where there is no pressing pedagogical reason to choose a
particular one, choose the language that's most industry-relevant
- follow, more or less, the ACM Computing Curriculum
A caveat: how we teach it is at least as important as what we teach,
and this isn't mentioned here.
A Quick Summary
- First Year
- COMP1001 Algorithmic Problem Solving - Miranda, C
- COMP1002 Foundations of Computer Science - C, Miranda
- COMP1020 Digital Systems - MIPS Assembler
- Second Year
- COMP2001 Data Structures and Algorithms - C, Miranda
- COMP2002 Object-oriented Design - Java
- COMP2003 Software Engineering & Specification
- COMP2020 Embedded Digital Systems - C, MIPS Assembler
- Third year
- COMP3001 Algorithms
- COMP3002 Software Design & Implementation
- COMP3003 Implementation Project
- COMP3011 Theory of Computation
- COMP3012 Programming Languages
- COMP3013 Concurrent Computing
- COMP3020 Computer Architecture
- COMP3021 Operating Systems
- COMP3022 Computer Networks
- COMP3023 Database Systems
- COMP3031 Artificial Intelligence
- COMP3032 Graphics and Image Processing
- COMP3033 Human-Computer Interaction
The Details
- First Year
- COMP1001 Algorithmic Problem Solving
(replaces COMP1011)
- Syllabus
- Introduction to problem-solving on computers (2 weeks);
functional programming (8 weeks);
procedural programming (4 weeks);
introduction to the Unix operating system (file system, editors, compilers, window managers, network exploration tools) (labs)
- Text
- Miranda - Craft of Functional Programming , Thompson (Uni Kent, Canterbury)
C: A Reference Book, Harbison and Steele (Tartan, Inc.)
- Language
- Miranda/Gofer/Hugs, C/Java, Unix shell
- COMP1002 Foundations of Computer Science
(replaces Modula-2 strand of COMP1021)
- Syllabus
- Abstraction;
data models (pointers, stacks, queues, tables, ...);
formal methods in CS (complexity, proofs, discrete maths?);
software engineering;
Unix and program development (make, prof, dbx)
- Text
- Foundations of Computer Science (C edition), Aho, Ullman (Stanford)
- Language
- C/Java, Miranda/Gofer/Hugs, Unix shell
- COMP1010 Digital Systems
(replaces XMA strand of COMP1021 and COMP2012)
- Syllabus
- Introduction to computer architecture;
transistors, gates, circuits;
machine code, assembly language.
- Text
- Computer organisation and design: the hardware/software interface,
Patterson and Hennessy
- Language
- MIPS Assembler
- Second year
- COMP2001 Data Structures and Algorithms
(replaces COMP2011)
- Syllabus
- Data models (trees, graphs, strings, ...);
file structures;
algorithm analysis (complexity, computability)
- Text
- Introduction to Algorithms, Cormen, Leiserson, Rivest
- Language
- C/Java, Miranda/Gofer/Hugs
- COMP2002 Object-oriented Design
(replaces 2031 Concurrent Computing)
- Syllabus
- Object-oriented concepts;
software system design;
object-oriented methods;
Unix tools for software engineering (rcs, sccs, ...)
- Text
- A decent book on Software Engineering/OO Design, ???
- Language
- Java/C/C++
- COMP2003 Software Engineering & Specification
(replaces COMP3111 Software Engineering)
- Syllabus
- Software engineering overview;
informal specification;
formal specification;
Unix tools for specifications.
- Text
- A decent book on Formal Specification, ???
- Language
- Z, Java/C
- COMP2010 Embedded Digital Systems
(replaces COMP3221 Microproessors and Interfacing)
- Syllabus
- More on computer architecture;
i/o subsystems;
device drivers;
mapping high-level procedural languages to assembler
- Text
- Computer organisation and design: the hardware/software interface,
Paterson and Hennessy
- Language
- C, MIPS Assembler
- Third Year
- Core
- Algorithms - more analysis and more complex algorithms
- Software Design & Implementation - including project management
- Implementation Project - write a large-ish piece of software
- Fundamentals
- Theory of Computation - computability, complexity, logic, formal languages, ...
- Programming Languages - PL linguistics, compilers
- Concurrent Computing - parallel program techniques and systems
- Systems
- Computer Architecture - organisation and design principles
- Operating Systems
- Computer Networks
- Database Systems
- Methodologies
- Artificial Intelligence
- Graphics and Image Processing
- Human-Computer Interaction
John Shepherd