First, pick a favorite language to focus on and stick with it. Try to learn the core concepts of data structures because they are fundamentally almost the same from one language to another.
- Basic data structures: Array, String, Boolean, LinkedList, Stack, Queue, 2-dimensional Array, Set, Binary Trees, etc.
- Conditional logic (
- Control flow statement (
- Sorting Algorithms: Insertion Sort, Bubble Sort, Selection Sort, Merge Sort, Quick Sort, Radix Sort. From here you will pick up different approaches Brute Force, Divide and Conquer
- Understanding Big O Notation, runtime complexity, and space complexity help you write efficient algorithms.
Grasping these concepts are so important because they serve as the building blocks to understanding advanced concepts and solving complex problems.
Here are a few relevant resources
Udemy's class: JS Algorithms and Data Structures Masterclass
You may skip Step 1 if you are already familiar with most of the concepts and start learning more advanced topics:
- Heap, HashTable, Variations of Tree, Graph (DFS, BFS)
- Dynamic Programming
- Backtracking (for example, solving the N-Queen problem, sudoku)
- Bit Manipulation
- Object-oriented programming
- System design
- Medium to hard coding problems on Leetcode
Free System Design Primer on Github
Udemy's Advanced algorithm in Java
Practice makes perfect. While we are learning all the data structures and algorithms, it is important to do a lot of practicing in the meantime to reinforce what we learned.
LeetCode is a free platform to practice coding
PRAMP is a great platform to practice mock interview. It is a two-way learning process for being both interviewer and interviewee.
I subscribe to Daily Coding Problem to receive daily hand-picked coding problems.
I subscribe to Interview Cake to receive weekly coding problems. I find their explanation is detailed and easy to understand.
Reading a receptive skill from which we (inactively) learn from others' through their writing. We can gain a lot of knowledge by reading textbooks, blog articles, others' code, readme files, etc.
I occasionally write blog articles. Writing requires more time than reading as I need put some efforts into researching, formatting, spell checking, proofreading, etc. However, (I think) it forces me to use a different part of the brain and to be more articulative so that our readers could understand.
- Cracking the coding interview
- Elements of Programming interviews
Find your favorite open-source project and make some contribution. It is a great way to learn using real-world projects. Dev has weekly open-source thread discussion.
Last but not least, don't forget to take a break from your connected computer and phone. Reward yourself for accomplishing a milestone you set out to do. Finally, I want to leave with a favorite quote below.
Enjoying the journey, not just the destination.