Senior Engineer

Blog

My DS/Algo studying story

Three years ago when I was moving to the Netherlands, the Facebook recruiter contacted me suggesting an opportunity in an engineering team in London, and as I've just moved countries, I didn't take a chance back then.

Two years ago I got interviews in multiple Big N (Big 4 are Microsoft, Facebook, Amazon, Google, while N is a bit an expanded circle) companies. Interviews went in two batches - one in spring, one in autumn. I miserably failed the spring batch for a very famous reason - as my main specialization was a Front End Developer, I wasn't putting much of an effort studying Algorithms or Data Structures as I didn't think those were needed for my specialization much (and if I felt like code is really slow, I'd go and StackOverflow a solution).

After the spring batch, I've started studying DS/Algo absorbing online courses, Cracking the Coding Interview and on a LeetCode (switching to CodeFights/HackerRank when the problem seemed to be impossible).

Notably, I've started applying DS/Algo every day at my work. I could've written some code, and then I would have asked myself "wait, what is a runtime complexity of this? what if a user has thousands of entries like this?" If I would answer myself "well, you can do better" - I'd improve that piece of software.

I've learned that the more powerful computers are and the more complex systems are - the slower and unscalable naive algorithms will be - if your system becomes 100x faster by throwing hardware into the problem and your data became 100x larger, your algorithm wouldn't keep up (this critical piece was mentioned by Robert Sedgewick during the Coursera Algorithms Part I course https://www.coursera.org/learn/algorithms-part1, who also wrote a book with the same name).

In autumn, DS/Algo helped me land my current job and position - I was just able to recognize patterns immediately, which allowed me to come up and talk about optimized versions of algorithms, their trade-offs, and bottlenecks, as that's exactly what required in a huge-scale system (see paragraph above). Also, it has helped to reason about distributed algorithms (e. g. which wouldn't fit in a memory of a single machine and what could we do about those), which are usually a part of systems design interview (not always).

Today, I've finally reached 4 stars on a LeetCode, which means I've solved more problems than 80% percent of LeetCoders, but I still feel like I'm missing knowledge on some crucial aspects. Yesterday, just before getting the 4th star, I had trained myself to write Union-Find non-optimized/optimized and got familiar with a Flood-Fill type of algorithms. :)

I'm still learning and maybe one day I'll be able to reach the 5th one. But one thing I know for sure - DS/Algo studying helped me a lot in my career and my day-to-day programmer's work.