Being a software engineer and not being good with algorithms and data structures is a real struggle. Honestly, it's a nightmare for me. Especially when you're surrounded by really competent engineers who just seem to have a knack for these topics (trust me, it's not my imposter syndrome talking, I swear).
Whenever my fellow engineer friends would start talking about efficiency, and complexities and trees I would just feel so out of place. As if not knowing what a bubble sort is, as a software engineer, makes you a pony in a land of majestic unicorns and elegant horses.
Something changed
Now that I’m in a stage in life where I have to interview again, not being good with algorithms and data structures cannot be my reality.
It all comes down to the fact that I need to become comfortable with the problem-solving process, learn these topics and become more aware of how I build my code so that I can stop flunking technical interviews.
The plan
I’ve crafted this 3 months plan where I’ll be re-learning a few concepts from college on a deeper level. These are the topics and the order in which I will work with them:
- Arrays
- Strings
- Linked Lists
- Stacks and Queues
- Hash Tables
- Dictionaries
- Trees
- Heaps
- Priority Queues
- Sorting Algorithms
- Time Complexities(1)
(1) The reason I'm reviewing time complexities as the last topic it's because I've already reviewed them and I will be consolidating my understanding of algorithmic analysis while working with the rest of the topics first.
Resources
For resources, I will use a combination of books and online websites.
Books:
- Cracking the Coding Interview
- Introduction to Algorithms (Third Edition)
- The Algorithm Design Manual (Second Edition)
Websites:
- https://www.geeksforgeeks.org
- www.interviewcake.com
- https://brilliant.org
- https://algorithmtutor.com
Consolidation days
To consolidate my learnings I will pick a day, after reviewing, to attempt implementing data structures and solve as many problems as I can using a simple problem-solving approach (at least for the first stage of the challenge).
The simple approach is basically to focus on solving the problem before coding, my mindset should be: "writing the code is the easy part".
Language chosen:
- C++
Final words
My end goal is to improve my problem-solving skills and CS knowledge of algorithms and data structures.
If you have any suggestions, words of encouragement or tips please let me know!
Top comments (1)
I really like how you started the this series lol I'll be looking fo the next posts!!