Some Theory Crafting Optimization for the CS Major 3
EECS EECS SHIRT MASTER RACE
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:
- Declared CS first semester of college year. Could have also declared Cog Sci before Freshman Year (wow).
- Intense intro to Algorithms and Data Structures (Discrete Math) helps with programming interviews.
- Headstart into College/CS. Admiration of peers. BIG EGO ENERGY.
Cons of this:
- Made less friends in class. It’s intense, and would have been easier if I went the normal route and took classes with friends.
- Intense. 2/3/3.5 (ECON idk) techs a semester blows. I kind of want to chill, socialize, enjoy college, work on my own projects like this blog 😊.
- CS 70 Before EE 16A and EE 16B. Real Kickstart into college math instead of easing in.
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
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:
- UW CSE. This is well organized, and a quarter school with a variety to learn from.
- Stanford CS. You can also change years. Stanford seems to be very up to date, new technologies, startup/industry focused. Lots of good niche topics.
- Berkeley EECS. Berkeley is more mature fundamentals in EECS and semester classes that go more in-depth.
- MIT Open Courseware. I don’t know much about this, but I have heard good things and tons of resources here.
(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.
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