Algorithms and Data Structures in the 21st century
Leonardo Teteo Sep 13
On his "Ask me Anything", I asked Nick Karnik what was his initial path to have such successful career, you can see his full answer here, but the part I found most interesting and the one that made me do this post was this part (the bold is mine):
Although it appeared like I was all over the place, everything I did, enhanced my resume and helped hone my skills around problem-solving. This is the basis for being successful in the long-run. You have to keep learning all the time and get to a point where you can do just-in-time learning. Once you know a programming language like C++ very well, you can pretty much learn anything. Other than that you want to focus on Data-Structures, Algorithms, and Design Patterns.
The best advice I can give is to worry about yourself and forget about what everyone else is doing. Forget about the frameworks of the day and libraries of the year. Come up with a plan and stick to it. Learn programming like it's the 90's and focus on the basics and practice on real-world projects.
The parts in bold are the most important for the theme of this post: algorithms and data structures. He gave the advice to learn them and, in the end, to learn programming like it is the 90's. That's exactly my impression about learning and deeply knowing algorithms and data structures these days, is not a thing from the 90's and are already more than solved? Why worry learn them?
I have the feeling that many people reading this will pick the torches and start to hunt me for this heresy, but let me explain better. While I was at college I learned the majority of the data structures and some basic algorithms, but the classes always gave me the impression that it was something just to the students have a strong basis, learn how to think logically, among other things, but not to know by heart how to implement them, just understand was enough. Despite forgetting the complete explanation and some other details, I know what is a queue, a stack, trees, graphs... For example I do remember about call stacks and its importance in programming, since I have to deal with it daily, I remember about trees and its good use for searches, the famous binary search, graphs and the problem to find the shortest path, these kind of stuff.
However, after an experience with how Google selection process works, I found that it was not enough just understand empirically, but you had to understand deeply, including implementation of all of them. For those who are not familiar, Google makes a phone interview with a Google Docs viewed by you and the interviewer where they test just that, all these algorithms and data structures, according to the process description. It was a big list of algorithms and data structures and although I saw many familiar names, I was sure that I wouldn't be able to prepare well enough in 2~3 weeks, the time between the first contact and the interview, so I asked to withdraw from the process before any appointment was established. I could have done the interview anyway despite not being ready, but I decided not to, I don't think it would be beneficial, instead I made the purpose to get better and try again afterwards. Wait for me!
I'm about to put some effort on this end because after that I found that not only Google requires such knowledge, but also many other companies. It may sound strange to many people, but it was new to me since I was focusing on web development, where many of the positions don't require this knowledge explicitly.
Despite having this purpose though, to get better at the basics, the question still remains... Why is still so important to know such algorithms and data structures when they are already more than solved for the most part, with ready implementations just waiting to be used? Why big companies seek for this kind of knowledge at this day and age?
PS: The more I read articles here from more experienced developers more I conclude that the hole is deeper than it looks now, learning a lot. Thanks for that! :D
PS²: The part where Nick says "Forget about the frameworks of the day and libraries of the year." is food for another post, really.