Algorithms for learning algorithms
Tags: learning, algorithms, programming, career
Published: 2018-12-03 22:02:58

---
title: Algorithms for learning algorithms
published: true
description: how to learn algorithms effectively
tags: learning, algorithms, programming, career


---

## 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

[Top 8 Data Structures](https://dev.to/fahimulhaq/top-8-data-structures-for-coding-interviews-and-practice-interview-questions-2pb)

[Sorting Algorithms beginners guide](https://dev.to/saigowthamr/sorting-algorithms-beginners-guide-3ah4)

Udemy's class: [JS Algorithms and Data Structures Masterclass](https://www.udemy.com/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](https://github.com/donnemartin/system-design-primer) on Github

[Python's interactive coding challenges](https://github.com/donnemartin/interactive-coding-challenges)

Udemy's [Advanced algorithm in Java](https://www.udemy.com/advanced-algorithms-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](https://www.pramp.com/) 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](https://www.dailycodingproblem.com/) to receive daily hand-picked coding problems.

- I subscribe to [Interview Cake](https://www.interviewcake.com) 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**

- [Dev.to](https://dev.to)
- Medium
- [Hashnode](https://hashnode.com/)



## 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.