Courseworks

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