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.