How to Learn Computer Science
Table of Contents
Math
- Utah MATH 1210 - Differential Calculus
- Utah MATH 1220 - Integral Calculus
- Utah MATH 2210 - Multivariable Calculus
- Utah CS 3130 - Probability and Statistics for Computer Science
- TrevTutor Discrete Math
- MIT 18.06 Linear Algebra
- 3Blue1Brown
nand2Tetris
Nand2Tetris is a pioneering online course taught by Shimon Shocken and Noam Nisan that teaches how to build a computer from the ground up. Though the materials seem easy upon first glance, they are quite challenging even for the experienced programmer. People who have finished the course have gone on to complete projects including physically implementing the Hack Computer and building new games beyond Tetris. I wish I had reviewed this course before taking computer systems in my undergrad because I would have had a more systematic way of debugging low-level bugs.
Materials
- Nand2Tetris Course Page
- Nand2Tetris Part 1 - Projects 1-6
- Nand2Tetris Part 2 - Projects 6-12
- Software Tools
Projects
- Project 1: Boolean Logic
- Project 2: Boolean Arithmetic
- Project 3: Memory
- Project 4: Machine Programming Language
- Project 5: Computer Architecture
- Project 6: The Assembler
- Project 7: Virtual Machine I - Stack Arithmetic
- Project 8: Virtual Machine II - Program Control
- Project 9: High-Level Programming
- Project 10: Compiler I - Syntax Analysis
- Project 11: Compiler II - Code Generation
- Project 12: The Operating System
Visual Computing
Creative Coding
- Coding Train
- Harvard CS 73
- UChicago Creative Coding
- Happy Coding
Graphics
- Utah CS 4600 - Introduction to Computer Graphics
- Utah CS 6610 - Interactive Computer Graphics
Visualization
- Utah CS 6630 - Visualization for Data Science
- MIT 6/11.C85 - Interactive Data Visualization & Society
- UBC Visualization Analysis And Design
- UW Future of Scholarly Communication
- Flowing Data
- Better Data Visualizations with Svelte
- Fullstack D3
Systems Programming
Computer Architecture
- Utah CS 3810 - Computer Organization
- Utah CS 6810 - Graduate Computer Architecture
Operating Systems, Distributed Systems, Cloud Computing
- Utah CS 4400 - Computer Systems
- MIT 6.584 Distributed Systems
Programming Languages
- Utah CS 3520/6520 - Programming Languages