Cover image
Brian T. Liao
Nov 17, 2018 • 5 min read

Some Theory Crafting Optimization for the CS Major 3


Continuing my writing before (see part 2). Maybe this comes useful to somebody.

3. When to take courses

I took CS 61A in the summer before Freshman Year, then CS 61B and CS 70 Fall Freshman Year. Freshman Spring I took CS 170, CS 188, and EE 16A. Sophomore Fall I took CS 161, CS 61C, EE 16B, and ECON 100A. Sophomore Spring hasn’t happened yet but I’d like to take CS 162, CS 169, and ECON 100B.

Pros of this:

Cons of this:

How could you make this better? Depends on your style. High stress to get into CS and get it over with? Then yeah, do what I do.

Low burn stress, but get to enjoy the times and learning, do the normal path, CS 61A and EE 16A, CS 61B and EE 16B, CS 61C and CS 70, then CS 170 and CS 162 sometime. I think I would prefer this, but I’m fine, I had a plan and I’m following through.

Upper-divs: Honestly take what you enjoy, explore! Some people like software, some systems, some machine learning, some EE, circuits, systems, signals, all up to you!

4. Self Teaching

In tone with my previous post of CS Theory crafting, I talked about taking the easy classes. Then you have more time to self-study/self-practice what you are interested in. Although, I think most people still want jobs and programming interviews are a gatekeeper to it.

4.1 Data Structures and Algorithms

Data Structures and Algorithms are the dominant thing. CS 61B and CS 170, if you want to take the classes. CS 170 is overkill, you would never have to prove your algorithm, but the thinking and mentality helps a lot. For interviews, I say take CS 61B, Cracking The Coding Interview, Read the Algorithms Textbook, watch the lectures online. Practice LeetCode/HackerRank, try implementing the algorithms I say in Python/Java and C/C++.

When I interviewed at Google, I wish I did more Dynamic Programming, Greedy Algorithms, Graph Traversals, and Prefix Trees (Tries). Know the classics though, data structures like arrays, dynamic arrays (ArrayLists), linked lists (double-linked and circuluar), maps and sets (hash and tree implementation), stacks, queues, priority queues, heaps, prefix trees, disjoint sets, abstract data types.

Algorithm paradigms include divide and conquer, dynamic programming, hashing, sorting, searching (trees graphs, DFS, BFS, Dijkstra, A*), greedy. Many problems can be formulated as another one. Practice is key tbh.

4.2 CS at other universities

Fun Rivalry

So interviews are taken care of, let’s do the fun stuff. Study what you want! One good resource is looking at the material of classes as they are pretty well formalized in the subject you want to learn more about. College CS courses to look at:

(Side note: Scott Young MIT in 1 Year is a fascinating example of how you can self study these courses. I’m not going to lie, it’s hard, motivation is hard, but you can do it and he’s done it so it’s totally possible with diligence.)

4.3 YouTube and Google

So there’s this cool thing called the Internet! Learn to use Google and YouTube to learn about what you want. They might not be as structured but simple problems and niche or actually software technology like REACT or ANGULAR, or the CLOUD can be learned this way. Tutorials if need, even YouTube playlists of lectures are great.

4.4 Motivation

The hardest part is motivation. If you do this, either do it casual or be motivated, create a schedule and a plan, learn stuff and build cool tech. As a Berkeley student, a lot of my work is fundamental CS and programming and I wish I had more time to learn software technology and build cool tech, be Facebook and move fast and break things. That’s honestly a great way to learn.

Post by: Brian T. Liao