Code Rust? My Curated list to renew the coding mojo.
Prelude
My motivation behind this post is to have a quick lookup anytime I feel code-rust. As I turn my rough work into a blog, I’m structuring this into incremental sections — Data Structures, Algorithms, Object oriented design, Software Design patterns, Concurrency.
TLDR / No time for basics? Jump straight to https://neetcode.io/ if you are interviewing.
Data Structures
Incrementally revisit these based on least recent usage at work
- Fundamentals — Array | Linked List | Doubly Linked List | Stack | Queue | Hash Map | Heap | Binary Tree | Graph | Bit Operations
- Review couple of stable sort algorithms — classic example : MergeSort
- Recursion | Dynamic programming | Graph Algorithms
- Review Time & Space Complexity in all the reviews.
Good resources to start
- LinkedList — https://www.youtube.com/watch?v=Hj_rA0dhr2I&ab_channel=freeCodeCamp.org
- BinaryTree — https://www.youtube.com/watch?v=fAAZixBzIAI&ab_channel=freeCodeCamp.org
- Complexity Analysis : Time|Space— https://www.youtube.com/watch?v=Mo4vesaut8g&ab_channel=freeCodeCamp.org
- Graphs — https://www.youtube.com/watch?v=tWVWeAqZ0WU&ab_channel=freeCodeCamp.org
- Recursion — https://www.youtube.com/watch?v=IJDJ0kBx2LM&ab_channel=freeCodeCamp.org
- Dynamic Programming — https://www.youtube.com/watch?v=oBt53YbR9Kk&ab_channel=freeCodeCamp.org
- Bit Operations — https://youtu.be/NLKQEOgBAnw
Additional resource to strengthen the foundation
These are paid resources. Most of the concepts are covered in above mentioned resources.
- Data Structures in Python : https://www.educative.io/courses/data-structures-coding-interviews-python
- Acing the Java coding interview : https://www.educative.io/path/ace-java-coding-interview
Algorithms
A good starting point after familiarizing Data Structures
- 14 essential patterns for coding interviews
- Great Crash Course for various techniques — Binary Search, BFS, DFS, Pointers, Heap, BackTracking, Memoization, Window, Intervals, etc.
- These Blind 75 leetcode problems are great start for breadth first approach on different patterns of algorithms. Google Docs has the list of problems with youtube video.
- More Dynamic Programming solutions shared by Neetcode.
Composite implementations
Practicing concrete implementations of practical structures help bend the mind. Implementing these requires foundational knowledge on basic above data structures and algorithms listed earlier.
- LRU Cache
- Bloom Filter
- Rate Limiter
- Load Balancer
- Implementing a Merkle Tree
- Quad Tree is my favorite: I loved the way this video visualized and coded a Quad Tree. (do check the comments in the video for some corrections on the complexity analysis)
Software Design patterns
What we’ve seen thus far are fundamentals. Moving on, these are the most useful constructs for designing software libraries and systems.
Unfortunately, I do not see any free resources that are tuned for practical applications.
Software design pattern
What pattern would you use to create a logging library, an experimentation SDK or a Data API?
- Crash Course (10 min video) : https://youtu.be/tv-_1er1mWI
- Learn with visuals : https://refactoring.guru/design-patterns
- Yet another detailed course : https://www.educative.io/courses/software-design-patterns-best-practices
- The book : https://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional-ebook/dp/B000SEIBB8
Object oriented design
If you are building a system — where would you start? what kind of approach can we take towards designing the system; taking it from abstract to concrete?
- Although the name of the course is geared towards interview, the details are very relevant to designing systems at work. https://www.educative.io/courses/grokking-the-object-oriented-design-interview