Hints for Computer Science at Berkeley
Here is some collected wisdom for the undergraduate CS classes I took at Berkeley, delivered without context or explanation. (Note that some classes have changed since I took them.) Most likely, you won’t get it until you’ve already finished the class.
- CS61A: Structure and Interpretation of Computer Programs
- Everything is an abstraction. Almost everything is a closure (lambda).
- CS61B: Data Structures
- Every problem is a data structure problem.
- CS61C: Machine Structures
- Everything is data. Everything you do is a bitwise operation.
- Math 54: Linear Algebra & Differential Equations
- Everything is a matrix.
- CS70: Discrete Mathematics and Probability
- Everything is a bit string. Bayes’ Rule is almost always the solution.
- CS162: Operating Systems Programming
- Everything is a cache. Get concurrency right the first time.
- CS164: Programming Languages and Compilers
- Everything is a transformation. Almost everything is a tree transformation.
- CS169: Software Engineering
- Everything has a process. Write tests whenever possible.
- CS170: Efficient Algorithms and Intractable Problems
- Almost everything can be solved by dynamic programming. It’s called the Master theorem for a reason.
- CS184: Graphics
- Everything is an equation. It’s basically physics with efficiency hacks.
- CS188: Artificial Intelligence
- Maximize your expected utility.