Amazon has been in the news a lot recently. If you have not heard, the New York Times released an article last week that shed some light on what it is like to work at the giant tech enterprise, and (spoiler alert) it didn’t make Amazon look all too great. On the contrary, some of the stories that the employees told were borderline shocking with one employee quoted saying
Nearly every person I worked with, I saw cry at their desk.
Now I don’t work at Amazon, so I can’t contest to the truth of this statement, and many people that do work there have spoken out against the article stating that it did not reflect their own experiences they have had while working there.
However, around the same time last week (before I read the article), my good friend and fellow software developer was contacted by Amazon for a SDE (Software Development Engineer) role they had open. To give you a little history on my buddy, he has about six years of professional development experience at both a start-up (for four years) and a Fortune 500 company (2 years) as a software engineer, with a small amount of software consulting work on the side.
Now I know this is not a ton of experience, but it is also not just a little either (many developers are being hired straight out of college these days). I believe he saw and learned a lot from his previous working experiences and has progressed as a pretty good engineer. Knowing these things, I wasn’t that surprised that Amazon contacted him and wanted to see if he would be a good fit for the company. I also believed that he would most likely get a job offer if Amazon valued the qualities that everyone seems to say is most important in a “great developer and leader”. He most definitely was familiar with many of my books that I have publicly stated are “The Most Influential Books That Every Software Engineer Needs to Read“. In fact, his favorite book on software development was the same as mine (Code Complete 2), and he knew software architecture, design, and construction inside and out. Amazon, I thought, was going to get a great employee.
However, I was surprised to find out that the company had eliminated him after the first interview.
“What went wrong?” I asked him. I knew he could create great software and that he was a pretty good interviewer as well, so this didn’t make sense to me that he could be dismissed so quickly.
He went on to explain exactly what had happened.
The first interview that the recruiter had set up with him was not an interview in the traditional sense. It was a data structures and algorithms implementation exam. He explained that he was required to log on to a remote server and solve problems in an editor without text completion (much like doing a white boarding coding session in other interviews). He told me that he had 90 minutes to complete three implementations of algorithms that would pass the 50 or so automated tests that Amazon ran on his solution.
This was the kind of stuff you had drilled into your brain in college. Algorithms and data structures and all the mathematical theories that go with them (graph theory, number theory, and greedy algorithms were among the knowledge pool that you would need to possess to successfully complete the problems).
Most languages have all of these algorithms and data structures implemented for you now, so very rarely (if ever) will you have to do this under a time constraint and no resources to help you. However, none of this mattered to my buddy, or Amazon for that matter, when it came down to it. My friend (being out of college for over five years now) could not remember how to implement these in the most efficient way possible (yes, getting the right answer will only get you about half the points, full points only come from algorithms that have the lowest asymptotic time and space complexity possible).
I felt sorry for him. He seemed like he wanted the job, but was quickly ruled out because of a lack of mastery over what computer science is based upon.
That being said, I have to agree fully with Amazon’s decision (and I think my buddy does too after the initial hurt from rejection). They found a weak link in his chain. He may have been the best architect, designer, leader, and teacher that they would ever have employed, but we will never know because he forgot to remember to practice and keep fresh the fundamentals.
I’ve written about this phenomenon before (here), and received a lot of criticism for it, but a lack of the fundamentals, once again, cost a great developer a great job (well “great job” is debatable if you read the Times article…). In my article, I talked about being able to do something as simple as reversing a singly linked list (something everyone in computer science 101 should know how to do) and everyone was upset and said that “there is no reason to know how to have to do these elementary things anymore” because they are already handled for you by the framework and libraries that come with the development platform.
While it is nice to have these, YOU STILL HAVE TO UNDERSTAND HOW THEY WORK!
It’s obvious that companies like Amazon, Google, Apple, and Microsoft have realized this judging by their interviewing habits. Regardless on your beliefs if this is “right” or not, it can be said that if you want to work at the world’s most prestigious software companies, then this type of understanding is a MUST. If you don’t, then maybe you can get by being a great developer after mastering the teachings of books such as “Code Complete”. However, you will not be completely well-rounded. My buddy was familiar and read many of my “12 Books Every Developer Needs To Read”, but he did not, however, read my #4th Ranked book on the list, “Introduction to Algorithms“. If he had read and understood this, I can confidently say that he would be flying to Seattle right now getting ready to start his first day at Amazon.
I hope you enjoyed this article, and if you did, please subscribe to my blog at jasonroell.com. If you don’t feel like doing that (darn you!) then I would appreciate it if you liked or shared the article to other developers that you think would benefit from it! Thanks for reading!
I love to code and build new innovating solutions to people's problems!