I feel uncomfortable admitting that when I got my job at Microsoft in 2005, I didn't know how to implement BFS (Breadth First Search). At that time, I was six years into my professional software engineering career and held a master’s degree in Computer Science.
I still didn't know this a few years later when, one day, during lunch, someone mentioned that the candidate they had interviewed earlier "didn't even know how to find the shortest path in a graph." This made me feel horrible - I knew I couldn't do it, too. In a few seconds, I turned from a seemingly successful Software Engineer at Microsoft into an impostor. This incident prompted me to improve my Computer Science fundamentals.
While I eventually learned BFS, my example shows that making solid progress in the software development career does not require knowing Introduction to Algorithms (a.k.a. CLRS) by heart. This is even more true today than it was twenty years ago because we are working at a much higher level of abstraction. Most common algorithms, like binary search, are included in standard libraries, and implementing them is a waste of time.
Despite this, I urge every developer to learn the basics of Computer Science.
Why learn Computer Science fundamentals?
The answer is simple: learning Computer Science fundamentals can boost your career. Here is how:
You will understand unfamiliar systems quickly.
Once you learn the basic algorithms and data structures, you will see them everywhere. You will realize that HTML and XML documents are trees, key-value stores can be conceptually thought of as HashTables, and that from a single consumer perspective, Kafka topics are queues. This is powerful as it allows you to understand the behaviors and limitations of these systems even if you don't know them deeply.
When I first started using git, I felt overwhelmed. I couldn't understand how it worked, and the commands didn't make much sense. One day, I watched yet another git explainer on YouTube, and it mentioned that git is a DAG (Directed Acyclic Graph). Overnight, I became a git guru fixing team members' repos.
You will be able to solve challenging problems.
Most of the problems software developers deal with day-to-day don't require advanced computer science knowledge. Once in a while, however, a challenging problem pops up. This is when knowing algorithms and data structures can be very handy. I remember struggling for a couple of days on a dependency graph problem when my co-worker pointed out that I could solve it quickly if I applied topological sorting.
You will do better at coding interviews.
Many interviews, especially in Big Tech companies, include coding questions. Usually, these problems can be solved with one of the standard algorithms. If you are familiar with them, you have a better chance to do well during these interviews.
How to keep skills up to date.
Most skills degrade over time. Algorithmic skills are not different. Even if you remember the idea behind an algorithm or a data structure, the details can get hazy with time. This is why it is good to refresh your skills periodically. There are many ways to do it. My favorite is participating in Advent of Code. Advent of Code is an online event in December where you are presented with two problems every day until Christmas. Solving these problems is a lot of fun and allows me to brush up my programming skills. But the best part is Solution megathreads - dedicated subreddits where others post their solutions. I check these threads once I solve the problems for the given day. They are a trove of startling insights, unconventional approaches, and programming tricks I would never think of, and I learn a lot from them.
If you found this helpful, please share it with a friend and consider subscribing if you haven’t already.
Thanks for reading!
-Pawel