I think we really need to face a reckoning in our profession. And the reckoning is this: requiring an overload of stuff that's simply not-important on-the-job just to get through the interviewing process and land a position.
Some of it is mildly useful for the actual job. But the rest of it is a bunch of hurdles that we don't need to put in the way of people.
And we need to do a much better job of building bridges into the profession that actually build people up into valuable devs.
The current approach of "leetcode" gatekeeping to the industry is a failure.
I think many developers and engineers hold this same sentiment. Most of us study really hard to figure out how to reverse a binary tree into a linked list blah blah blah(I hope you get thats a joke)....and then we get the job and....
We are just calling APIs of libraries developed by people before us. So what was the point. So yes, there are many of us that agree. But, since this is still the current way, I hope this list can be useful but would also like to see it deprecated :).
It's hard to demand change when you're interviewing for a new job. However, once you have the job, I think it's a lot easier to demand change. Be that person who asks, "Why are we doing interviewing like this?" Be that person who says, "This interview question provides no useful signal." Be that person who says, "We shouldn't use Leetcode / Hackerrank / etc. as a filtering step."
Very true! Still thanks for the great list of 'todo\'s'
I'm very glad to see that this is the top comment on the article. Honestly, these hiring processes that start with some algorithm challenges straight out of that controversial "Cracking The Coding Interview" book benefit nobody, but hurt everyone.
It reinforces the "imposter syndrome" experienced by many perfectly competent candidates and companies basically rob themselves of valuable prospective employees by insisting on taking this approach to interviewing.
As someone looking for their first frontend job... Can I solve a bunch of advanced algorithm challenges? Nope, I don't have the computer science background for that. But can I build a reusable component library, consume REST/GraphQL API's to communicate with the server and display data in a sensible way on the client-side? I sure can.
Yet, people like me are being glossed over, even though we are perfectly able of solving real-world problems.
I suppose another way to look at it each time this happens is "the trash took itself out". As in, if this is their hiring practice and they see nothing wrong with it, would I like working for that company anyway? Though, that doesn't help me get my foot in the door.
But they need to know your skills are above average as to effectively Google search the simple solution to their "super project" needs.
This is all well and good...brings back a lot of memories from undergrad school.
But after enduring such an interview from a company, PLEASE PLEASE PLEASE don't forget to then ask your interviewer how they've used/applied said "algorithms, data structures, design, optimization and honestly just an ever growing basket of subjects" in their CURRENT work.
If you get a blank stare back, you'll know that you were just put through an "interview" that was essentially algorithm hazing and nothing more. I'd seriously question whether or not I'd want to work for this company.
This x 1000. I interviewed with a Big Name Company once, early in my career, and was asked some question about implementing a AVL tree or some such. I asked the guy ( and it was a guy because they all were at Big Name Company, but that's a diff issue ) if he had ever, in his entire working life at that place, ever implemented an AVL tree, or any other primitive data structure from scratch. When he said "no", I asked why they were asking me how to do it. He said because they always asked that question. I said I'd answer when I had my data structures book handy. I got the gig anyway.
These questions are pointless. I'm a hiring manager now. I never ask interviewees questions about how to implement basic structures or algorithms. If someone is rolling their own now, they need to have a damn good reason for it. However, I will ask questions to tease out if they understand WHEN AND HOW TO USE different algorithms, structures, design patterns, etc, and the tradeoffs associates with those choices. I think that is fair game, and also a better indicator of what kind of software engineer you will be.
If you can code up a quick sort, but I don't ask you that kind of sort to use in a given situation , and then don't find out until after I hire you that you use bubble sorts for everything, me knowing you can code a quick sort is not terribly helpful.
100% this! Same with not allowing you to use Google as you attempt to formulate a solution. I assume you would be allowed to use Google day-to-day as you perform your job, right?
Exactly! I'm disappointed by how many people accept these whiteboarding rituals as a necessary or unavoidable evil. They aren't. There are plenty of companies out there that offer more sane alternatives that mirror day-to-day work.
Seems like I will never be ready :)
In first interview. I was asked to sum up all integers in an array. I used reduced method.interviewer asked me to use for loop instead. I completely froze. They laughed at me an sent me out. That was a push in the right direction for me.
I was asked:
OOP & all related concepts on Java. It was very detailed. (answered 85%)
Data Structures & Algorithms (BST, RB Tree, Sets, Maps, Hashing, Graphs, BFS, DFS, MSP, etc..) (answered 90%)
SQL: they nearly asked every single keyword on SQL. (answered 99%)
Implemented a LinkedList on a blackboard. Then they made me do couple of sorting algorithms on that.
HTML & CSS live-coding.
And they rejected me yesterday because I don't know JS Which was already very clear on my resume. This was a junior FE position :)
Welcome to interviewing....
I just kep working harder. Months after that I got a dream offer. I am glad I missed that opportunity.I would have had to start form an intern. But I got another offer as solid mid-level Engineer. Just keep pushing. Itäs a matter of time. I was rejected around 300times , some after 6 rounds.
Don't let this stress you out. You don't need to do every problem to be ready. I just recommend doing a few of each. Doing an interview or two, seeing where you need to study and then do more :).
I did my first interview today. It was bad. Not that bad as I imagined. I could answer what I learned since from the start. I was already aware but rediscovered that I need to learn a lot.
Thanks for the boost!
We have all had that first interview. I remember my first interview at Amazon. The very first question shut me down and I froze and just couldn't think of a good answer. Luckily the interviewer allowed me to move on so I could get some answers in. But those first interviews show you what you don't know...it's painful but good :);
Haha exactly. Happened to me either. I asked to "move on" and get back to that question "later".
You know something's going to be a great resource when it already has a whole bunch of "saved for later" tags 😃
Great list! Love that you included more than just algorithms (like system design, etc too). Even if you're not interviewing right now, it's a great idea to just pick a few videos off the list and watch them :)
Thanks for your kind words! Yes almost 1k saves as of right now. I really tried to make it comprehensive. Also, that isn't meant to intimidate anyone. The reason I add a checklist is so you can do a few in each section and go for an interview. Figure out where you need to work on things and focus on that area.
Took only 3 days for that number to jump up to 2000. Just goes to show how awesome this checklist is. Thanks for creating this!
It's crazy how fast it got liked o.O
Questions like these do not prove that the candidate has knowledge or experience, it only proves that the candidate has academic experience.
The test that I give to all my candidates is simple and direct to the point. It expects that the candidate knows engineering and coding and test those aspects with non-standard questions and problems that could have more than one solution where you could verify how the candidate responded the question and follow up with him/her about it.
This is my opinion off course but it does seem foolish applying tests like this.
I would mention about application security.
Let's start with OWASP: blog.sucuri.net/2018/10/owasp-top-...
Thanks! This is perfect!
I had some trouble figuring out what I should tackle first. The warm up and pre-study problems are a great idea.
After the warm-ups I think I would personally just hit a few of each subject at a time and then check them off the checklist.
The "warm ups" made me sit back down and reevaluate my career entirely. Is it too late to change my major to Underwater Basket-Weaving?
Awesome List. It really helps. Thank you so much for contributing to the community.
I love being part of the community!
Wow, that ‘12 minute read’ is really misleading here lol
Like, 12 minute read...100 hours of practice
Let's say we want to sort in C# and we want to hire a seasoned developer:
Bubble sort = The candidate is a novice, he or she doesn't have real experience.
Sort in the database = Now the candidate knows how to do his job.
Sort without a database (LINQ) = Again, the candidate knows how to do his job.
It's pretty easy to weed out bad candidates, especially candidates that remember some questions by memory (such as sort, merge sort and to obtain a Fibonacci sequence), they are cheaters.
Also, the goal to do an interview is to find (and hire) the best one, or at least, somebody acceptable.
Our goal (as the interviewer) is not to kick out candidates but to find a good one. And no, it is not the same.
For example, I spend a whole week trying to find a good candidate and I was unable to find a good one. It is the nightmare of the interviewer.
I am not a guy from computer science, will learning from this guide change the way I approach programming problems? Just asking as an outsider.
Yes. Mastering the list above might even turn you into a guy from computer science. At minimum, it will change the way you approach programming problems to the computer science way.
In many ways you are very correct! If you can really get a handle on all this stuff. You could land a job as a software engineer.
I'm still rather new myself, but I think so! Especially with regards to performance (think 100k users or records), and maintainability (how organized your entire code base is e.g. 200 java files)
Thanks a lot!
Congratulation, you just won the internet 👏👏
I don't know if that is true! But I hope this helps :)
Indeed, Developers are lazy by nature. They may know/be aware about these topics in general but having all of them curated this way is a great help. It may also saves time when refer it for new comer to the field in your circle. So thanks man ^
Having checklists :) just help make things easy!
Thanks for sharing great resources.
Happy to help!
Many thanks! Saved "for later" as it is a very dense post, but it seems to be massive gold!
Such kind words!!
Amazing work, thanks!!
Awesome. Circulated the URL to all my colleagues
That's really great references to have a look and to test your preparation.
Thanks for sharing.
Me last week: I would learn software development and get a job within 6 months.
Me after reading this post: 404
That's pretty awesome, huge thanks for share!
This is definitely a unicorn, going through this post as a study guide to my interviews
Thank you for your kind words!
Thanks CS DoJo.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.