노스웨스턴대학에서 수강한 과목들입니다.

EECS 111: Fundamentals of Computer Programming 1 [컴퓨터 프로그래밍의 기초 1]

스킴 (Scheme) 언어로 프로그래밍의 기초를 익혔습니다

EECS 211: Fundamentals of Computer Programming 2 [컴퓨터 프로그래밍의 기초 2]

C++을 사용했고 객체지향 프로그래밍의 기초를 익혔습니다. 프로젝트로 매트랩 인터프리터를 구현했습니다.

EECS 212: Mathematics for Computer Science [이산수학]

논리, 그래프 이론, 조합론 등 이산수학의 기초를 배웠습니다.

EECS 213: Introduction to Computer Systems [컴퓨터 시스템 개론]

어셈블리어, 메모리 구조, 병렬 프로그래밍 등 컴퓨터 시스템 분야의 여러가지 분야를 배웠습니다.

EECS 214: Data Structures and Management [자료구조론]

기초적인 자료구조와 알고리즘 등을 배웠습니다.

EECS 295 (Now 301): Introductory Robotics Laboratory [로봇 랩 개론]

로봇 공학 랩 과목으로 Reinforcement Learning에 기반한 길을 따라가는 로봇을 제작했습니다.

EECS 303: Advanced Digital Logic Design [디지털 로직 디자인]

논리 회로 및 기초적인 VHDL, FPGA 등을 배웠습니다.

EECS 321: Programming Languages [프로그래밍 언어론]

프로그래밍 언어론의 기초를 배우고 Racket언어를 사용해 인터프리터를 구현했습니다.

EECS 322: Compiler Construction [컴파일러 제작]

스킴/라켓 언어의 기초가 되며 람다식 표현등을 지원하는 매우 작은 언어인 “L5” 언어의 컴파일러를 구현했습니다.

EECS 340: Computer Networks [컴퓨터 네트워크]

컴퓨터 네트워크 및 관련 프로토콜 등을 배우고 프로젝트로 웹서버/클라이언트, TCP, 그리고 여러 라우팅 알고리즘들를 구현했습니다.

EECS 343: Operating Systems [운영체제]

프로세스, 스레드, 가상메모리 시스템, 파일시스템, 커널 등을 공부했습니다. 프로젝트로 쉘, 커널 메모리 할당기, 멀티쓰레드 웹 서버, 파일 시스템 등을 구현했습니다.

EECS 345: Distributed Systems [분산 시스템]

분산 시스템 내의 네트워킹, 오버레이 네트워크, 싱크로나이제이션, 컨센서스 등에 대한 논문들을 읽고 공부했고, 프로젝트로 카뎀리아 분산 해시테이블 및 일정 시간이 지났을 때 스스로 메시지를 지우는 시스템인 Vanish를 고 언어로 구현했습니다.

EECS 349: Machine Learning [머신러닝]

디시젼 트리, 베이지안 네트워크, kNN, SVM, 리그레션 등 여러가지 머신러닝에 대한 알고리즘을 공부하고 구현했고, 프로젝트로 노벨상 예측기를 만들었습니다.

EECS 368: Programming Massively Parallel Processors with CUDA [CUDA를 사용한 병렬 프로세서 프로그래밍하기]

GPU 아키텍쳐, CUDA 언어, 더 나아가 병렬 컴퓨팅의 여러 토픽에 대해서 공부했고 프로젝트로 CUDA를 사용해 20만 x 20만의 행렬을 곱하는 프로그램을 만들었습니다.

EECS 441: Resource Virtualization [가상화]

미국 뿐만 아니라 전세계에서 몇 개 없는 가상머신에 대한 수업으로 가상머신에 대해서 배웠습니다. 노스웨스턴 대학교에서 독자적으로 개발한 Palacios 가상머신에 여러 기능을 추가하는 프로젝트들이 진행됐고 제 개인 프로젝트는 리눅스 커널 모듈로 C 언어 컴파일러를 포팅하는 프로젝트였습니다.