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