University Computer Science — Year 2

The second year is where the machine comes into focus. You meet the advanced algorithms and the first hints of complexity theory, the operating system and the concurrency it manages, the architecture underneath it, the databases and networks that connect real systems, the discipline of software engineering, and the formal theory of what can be computed at all.

Every module below is grouped by its lecture course. Some lessons are already written; the rest are shown as placeholders so you can see the shape of the whole year.

Algorithms & Complexity

  1. Divide and Conquer
  2. Greedy Algorithms
  3. Dynamic Programming
  4. Tree Traversals
  5. Graph Traversal: BFS and DFS
  6. Dijkstra's Shortest Path
  7. The Bellman–Ford Algorithm
  8. A* Search
  9. Complexity Classes: P, NP, PSPACE

Operating Systems

  1. Processes and the Process Model
  2. Threads and the Thread Model
  3. CPU Scheduling
  4. Memory Management
  5. Virtual Memory and Paging
  6. File Systems
  7. I/O and Interrupts
  8. Synchronization Primitives
  9. Deadlock

Concurrency

  1. Threads vs Processes
  2. Race Conditions
  3. Locks and Mutexes
  4. Semaphores
  5. Monitors and Condition Variables
  6. Deadlock and Livelock
  7. Parallel Programming Models

Computer Architecture

  1. What a Computer Is
  2. Von Neumann Architecture
  3. The CPU
  4. Registers, the ALU and the Control Unit
  5. The Fetch-Decode-Execute Cycle
  6. Buses
  7. Addressing Modes
  8. Assembly Language and Instruction Sets
  9. Pipelining
  10. CPU Performance
  11. RAM vs ROM
  12. Secondary Storage

Databases

  1. Data vs Information
  2. Tables, Records and Fields
  3. Primary and Foreign Keys
  4. Flat-File vs Relational Databases
  5. Entity-Relationship Modelling
  6. Database Normalisation
  7. SQL SELECT Queries
  8. SQL INSERT, UPDATE, DELETE
  9. SQL Joins and Aggregate Queries
  10. Transactions and ACID
  11. NoSQL Databases

Computer Networks

  1. What is a Network?
  2. The Internet vs the Web
  3. LANs and WANs
  4. Wired vs Wireless
  5. Network Topologies
  6. Client-Server and the Web
  7. Packet Switching
  8. Protocols and the TCP/IP Model
  9. Protocol Stacks and the OSI Model
  10. IP, MAC and DNS
  11. Routing
  12. Network Security in Depth
  13. The Internet of Things

Software Engineering

  1. The Software Development Lifecycle
  2. Requirements Engineering
  3. UML and Modelling
  4. Design Principles: SOLID
  5. Design Patterns
  6. Software Architecture
  7. Testing and Defensive Design
  8. Continuous Integration and Delivery
  9. Version Control
  10. Agile and Scrum
  11. Refactoring and Technical Debt

Theory of Computation

  1. Finite State Machines
  2. Regular Expressions and Languages
  3. The Pumping Lemma
  4. Pushdown Automata
  5. Turing Machines
  6. Computability and the Halting Problem
  7. Tractable vs Intractable: P vs NP

Functional Programming

  1. Pure Functions and Immutability
  2. Higher-Order Functions
  3. Closures
  4. Recursion and Folds
  5. Algebraic Data Types
  6. Lazy Evaluation
  7. Monads