One of the few things that developers can agree on is that the interview process is terribly broken. There are ideas about how to fix it but the industry has yet to come to a consensus on a better way forward.
Many developers are particularly aggravated by the way some organizations insist on “academic” interview problems that test developers skill with algorithms and (Big O) algorithmic analysis. The argument is that these types of problems are often irrelevant to the job, rewarding antiquated knowledge over practical skill, and are biased in favor of developers with more time and resources to spend on preparation.
Now, before we continue let me get this out of the way:
I agree with those arguments!
As a developer with social media accounts I am also inundated with jokes, memes, and tweets that essentially boil down to “Big O is dumb” and I worry that reductionist platitudes are unfairly tainting how new developers view important tools and techniques.
Maybe your dream job doesn’t require a lot of data and compute, but that doesn’t mean it’s not important for others. Algorithms, data structures, and Big O can certainly come in handy here, but so does system design, scalability, and having a good grasp on the numbers. I don’t know how to rank the importance of these subjects but I’ll wager that the developers working on things like databases, search engines, operating systems, and graphical rendering (and many other fields) are critically dependent on having a shared and unambiguous language for understanding how programs scale in terms of space and time complexity.
If you are interested in these types of subjects, then you are going to need to study up on the underlying principles. I agree that the developers who face these types of problems generally have more time than an interview takes to optimally solve them but it is important to show your interviewers that you share (or are capable of) the same basis for precise communication.
- LSM vs B-Trees for databases
- The Dynamo Paper
- The Big Table Paper
- Data Structures in Operating Systems
- 3D Rendering Techniques
Having a good understanding of algorithms and data structures is like a super power. I’ve seen (and probably written) lots of …uh…interesting…. solutions for dealing with dependency management when a simple “top sort” would have done the trick faster and more correctly. Being able to recognize and classify a problem can go a long way towards solving it. Additionally, perusing algorithms can lead to sparks of inspiration, letting you solve problems that you didn’t even realize you had.
Here’s a list of known algorithms to get your motor running:
Interviewing is difficult with many organizations cargo culting the FANG interview process. Despite that, the study of algorithms, data structures, and algorithmic analysis is still really useful for many programmers, and it’s also kinda awesome.
PS: Looking for some resources to get started? Check out these great articles on dev.to!
PPS: Like this kind of topic? Check out the podcast in your app of choice!