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:
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
After the prep work I am going to follow a similar approach to the one outlined here. I will use Leetcode.

To understand more about Operating Systems, Networking, & Systems in general I will use the following resources:
 A gentle introduction to multithreading
 Process, Threads and Synchronization
 Threading in C#
 Operating Systems notes
 Web Systems
 Concurrency: Mutual Exclusion and Synchronization
 Networking notes
 TCP vs UDP
 Networking Zine
 What every developer should know about TCP
 SYN cookies ate my dog  breaking TCP on Linux
 How a SQL database works
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
To get even more System Design knowledge, I will be reading the book Designing DataIntensive Applications. I will try to read this book twice.
To solidify design patterns knowledge, I will use the content from Source Making's Design Patterns.
(Optional) There is the possibility I will read + complete all the relevant sections of CTCI. Specifically, these sections are: Math & Logic Puzzles, ObjectOriented Design, System Design & Scalability, Testing, Java, Databases, Threads & Locks.

(Also optional) SQL resources:

Other resources I will be consulting:
 Alorithms (Sedgewick)
 The Algorithm Design Manual (Skiena)
 The internets
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, bottomup with a matrix).
 DisjointSet/UnionFind
 Sliding Window
 RabinKarp
 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: 1218 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.)
Top comments (0)