loading...

CS Level Up Series Introduction

jjb profile image JB Updated on ・3 min read

What is this series about? What are the goals?

Leveling up my knowledge of algorithms, data structures, and system design. The goal is to become a badass.

What is the format? How will you achieve this?

Right now the plan is as follows:

  1. Do some prep work to learn basic algorithms and data structures. I will be mostly following Heapclub's (a now closed interview prep company) curriculum (curriculum here). The goal is to know all of this like the back of my hand. If I have time I will also do the maths section

  2. After the prep work I am going to follow a similar approach to the one outlined here. I will use Leetcode.

  3. To understand more about Operating Systems, Networking, & Systems in general I will use the following resources:

  4. At the same time, or perhaps at the conclusion of the above steps, I will be watching all the system design videos from the following YouTube channels: Tech Dummies - Narendra L, Success in Tech, Tushar Roy's System Design Playlist, & Gaurav Sen's System Design Playlist

  5. To get even more System Design knowledge, I will be reading the book Designing Data-Intensive Applications. I will try to read this book twice.

  6. To solidify design patterns knowledge, I will use the content from Source Making's Design Patterns.

  7. (Optional) There is the possibility I will read + complete all the relevant sections of CTCI. Specifically, these sections are: Math & Logic Puzzles, Object-Oriented Design, System Design & Scalability, Testing, Java, Databases, Threads & Locks.

  8. (Also optional) SQL resources:

  9. Other resources I will be consulting:

Curriculum that might not exist on Heapclub, but that I have come across in forums/articles/books that could be useful to learn (if time permits). Here is list of topics that seem important (in perceived order of priority):

  • Know common problems: Fibonacci, Valid/balanced parenthesis, palindrome/anagrams of strings, Traveling Sales Person, Knapsack Problem, Longest Common Subsequence (using dynamic programming, bottom-up with a matrix).
  • Disjoint-Set/Union-Find
  • Sliding Window
  • Rabin-Karp
  • Binary Indexed Tree (Fenwick Tree)
  • Bipartite graphs (Checking if a graph is bipartite)
  • Iterators and associated problems (Flatten a nested list iterator, design a skip iterator, merge K sorted iterators)
  • Minimum Spanning Trees
  • Fibonacci Heap and it's guarantees
  • Either KMP or Z Algorithm (choose one)
  • Segment Tree
  • Suffix Tree (without worrying about compression + understand what Ukkonen's algorithm is) &/or Suffix Array
  • Line Sweep (geometry related, problems: Rectangle Intersection & The Skyline problem)

Allotted time for this project: 12-18 months.

Who are you?

Bootcamp grad with 5.5 years Software Engineering experience. I have done some basic algo/ds stuff in the past, but not much - and I've forgotten almost all of it. I'm terrible at maths, and I suck at recursion.

(Please note that I previously linked to this blog post & this other post - which appears to have taken the content directly from Heapclub whilst removing vital information.)

Discussion

pic
Editor guide