Some of the courseworks I have completed at Northwestern.
EECS 111: Fundamentals of Computer Programming 1
Topics: Fundamentals of computing, taught in Scheme
EECS 211: Fundamentals of Computer Programming 2
Topics: Object-Oriented Programming, taught in C++.
Class project: MATLAB interpreter
EECS 212: Mathematics for Computer Science
Topics: Discrete mathematics (combinatorics, graph theory, logic)
EECS 213: Introduction to Computer Systems
Topics: x86 assembly, memory hierarchy, parallel programming using pthread
EECS 214: Data Structures and Management
Topics: basic data structures and algorithms
EECS 295 (Now 301): Introductory Robotics Laboratory
Topics: basic robotics and locomotive algorithms.
Class project: Line-following robot using reinforcement learning
EECS 303: Advanced Digital Logic Design
Topics: logic design, VHDL, FPGA
EECS 321: Programming Languages
Topics: Implementing an interpreter, taught in Racket
EECS 322: Compiler Construction
Topics: Implementing a compiler.
Class project: A compiler for the “L5” programming language: basic core of Racket/Scheme language
EECS 336: Design and Analysis of Algorithms
Topics: Dynamic programming, greedy algorithm, P vs NP, etc.
EECS 340: Computer Networks
Topics: Network protocols in Application, Network, Transport layer.
Class project: Implementation of web client/server using sockets, Implementation of the TCP stack, Implementation of routing algorithms
EECS 343: Operating Systems
Topics: Processes, threads, virtual memory system, file system, kernel/user stack, etc.
Class project: The Tiny Shell, Kernel Memory Allocator, Multithreaded Web Server, File System
EECS 345: Distributed Systems
Topics: Networking in Distributed Systems, Overlay Networks, Synchronization and coordination, Consensus, Replication and Fault Tolerance.
Class project: Implementation of the Kademlia Distributed Hash Table in Go, Vanish: a self-destructing message
EECS 349: Machine Learning
Topics: Decision Tree, KNN, ANN, Bayes Net, Regression, SVM, etc.
Class Project: The Nobel Prize Predictor
EECS 368: Programming Massively Parallel Processors with CUDA
Topics: GPU Architecture, CUDA, parallel programming
Class project: Matrix Multiplication in CUDA
EECS 395: Code Analysis and Transformation
Topics: Optimizing compilers through data flow analysis, constant propagation, etc.
EECS 441: Resource Virtualization
Topics: Virtual Machine Monitors, Kernel development
Class project: TCCLK, The Tiny C Compiler in Linux Kernel