Electives
Timeline: varies per student
After completing every required course in Core CS, students should choose a subset of courses from Advanced CS based on interest. Not every course from a subcategory needs to be taken. But students should take every course that is relevant to the field they intend to go into.
Advanced programming
Topics covered:
debugging theory and practice
goal-oriented programming
parallel computing
object-oriented analysis and design
UML
large-scale software architecture and design
and more
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Parallel Programming | 4 weeks | 6-8 hours/week | Scala programming |
| Compilers | 9 weeks | 6-8 hours/week | none |
| Introduction to Haskell | 14 weeks | - | - |
| Learn Prolog Now! (alternative)* | 12 weeks | - | - |
| Software Debugging | 8 weeks | 6 hours/week | Python, object-oriented programming |
| Software Testing | 4 weeks | 6 hours/week | Python, programming experience |
(*) book by Blackburn, Bos, Striegnitz (compiled from source, redistributed under CC license)
Advanced systems
Topics covered:
digital signaling
combinational logic
CMOS technologies
sequential logic
finite state machines
processor instruction sets
caches
pipelining
virtualization
parallel processing
virtual memory
synchronization primitives
system call interface
and more
| Courses | Duration | Effort | Prerequisites | Notes |
|---|---|---|---|---|
| Computation Structures 1: Digital Circuits alternative 1 alternative 2 | 10 weeks | 6 hours/week | Nand2Tetris II | Alternate links contain all 3 courses. |
| Computation Structures 2: Computer Architecture | 10 weeks | 6 hours/week | Computation Structures 1 | - |
| Computation Structures 3: Computer Organization | 10 weeks | 6 hours/week | Computation Structures 2 | - |
Advanced theory
Topics covered:
formal languages
Turing machines
computability
event-driven concurrency
automata
distributed shared memory
consensus algorithms
state machine replication
computational geometry theory
propositional logic
relational logic
Herbrand logic
game trees
and more
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Theory of Computation (alternative) | 13 weeks | 10 hours/week | Mathematics for Computer Science, logic, algorithms |
| Computational Geometry | 16 weeks | 8 hours/week | algorithms, C++ |
| Game Theory | 8 weeks | 3 hours/week | mathematical thinking, probability, calculus |
Advanced Information Security
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Web Security Fundamentals | 5 weeks | 4-6 hours/week | understanding basic web technologies |
| Security Governance & Compliance | 3 weeks | 3 hours/week | - |
| Digital Forensics Concepts | 3 weeks | 2-3 hours/week | Core Security |
| Secure Software Development: Requirements, Design, and Reuse (Alternative) | 7 weeks | 1-2 hours/week | Core Programming and Core Security |
| Secure Software Development: Implementation | 7 weeks | 1-2 hours/week | Secure Software Development: Requirements, Design, and Reuse |
| Secure Software Development: Verification and More Specialized Topics | 7 weeks | 1-2 hours/week | Secure Software Development: Implementation |
Advanced math
| Courses | Duration | Effort | Prerequisites |
|---|---|---|---|
| Essence of Linear Algebra | - | - | high school math |
| Linear Algebra | 14 weeks | 12 hours/week | corequisite: Essence of Linear Algebra |
| Introduction to Numerical Methods | 14 weeks | 12 hours/week | Linear Algebra |
| Introduction to Formal Logic | 10 weeks | 4-8 hours/week | Set Theory |
| Probability | 15 weeks | 5-10 hours/week | Differentiation and Integration |