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