Step 1: Learn the fundamental data structures and algorithms
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 (
If
) - Control flow statement (
for
,while
,do
loops, etc...) - 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.
Resources
Here are a few relevant resources
Sorting Algorithms beginners guide
Udemy's class: JS Algorithms and Data Structures Masterclass
Step 2: Learn advanced concepts, data structures, and algorithms
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)
- Recursions
- 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
Resources
Free System Design Primer on Github
Python's interactive coding challenges
Udemy's Advanced algorithm in Java
Step 1+2: Practice
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
Mock Interview
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.
Step 3: Lots of reading + writing
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.
Books
- Cracking the coding interview
- Elements of Programming interviews
Blog
Step 4: Contribute to open-source projects
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.
Step 5: Take a break
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.
Happy learning.
Top comments (3)
I love this short article of yours. It is brief but can take years to completely absorb its content.
Thank you for reading
it's very good