Coding Interviews Are BS (largely)
This is bullshit. Let me explain why.<p>The author posits that the best way to interview is to simulate an actual work environment for the candidate as if he was working in an actual code environment. In theory, this would be good. After all, the best way to understand a candidate is to see how he actually works.<p>The reality is that the Leetcode style coding interview, as we know it today, is best approached the same way you would approach the engineering process in general: prototype, refine the idea, test the idea, revise based on inefficiencies, code it. Any semi-competent moron can do this if he gives a damn about his career because this is actually what people should be doing day to day: thinking about how and why the approach to code would be effective. This is logical thinking that can take years to perfect and adjust, especially when your career progression means tackling increasingly difficult problem areas (from deterministic products to nondeterministic infrastructure issues).<p>Which is why most of the internet thinks the interview is BS: because they think like code monkies, not engineers. Most people believe software engineering is copy-pasting stuff from Github and then moving on when its using software and code to solve a problem.<p>In the author&#x27;s eyes, he thinks that more weight should be given to the soft skills. Soft skills that can easily be learned on the job. I mean, how long does it take for someone to dive into the code? Just follow the history of changes of that line. A day or 2 of practice. How long does it take for someone to learn new tools like ripgrep? 2 days. These are things that can easily be picked up with less than a year of industrial programming.<p>Which is effectively what onboarding is: getting a person used to the tools, nuances, and implicit culture of a company.<p>And different companies have different needs. When you&#x27;re a startup, you need to code fast and quick, ship the product, and itterate. In a larger corporate environment, you need to code intelligently, be careful of the leverage you are given, and truly understand what you&#x27;re writing.<p>In each of the cases, the dimensions you&#x27;re judged against are going to be different. You artificially restrict your own candidate pool to culture fits instead of people who can think like actual engineers. For big tech companies, it doesn&#x27;t matter: they have so many people coming through the door that they couldn&#x27;t care less. If anything, this hurts startups (ironically) because now they have a smaller group of people to work with. Or a larger one if you&#x27;re dismissing all the people who can actually thinking like a proper engineer.<p>I mean, if a startup wants to hire someone who says &quot;I don&#x27;t know why the code works, I copied it from stack overflow and moved on with my day&quot; then by all means, have him write the Robinhood options platform.<p>Ceter paribus, I would take the former candidate: someone who&#x27;s clear in logical thinking, then ram him into reality and the company until he learns. At least he would learn quicker. On the other hand, it would take someone who&#x27;s the opposite, it would take me at least 5 years for him to even begin to understand to not be a code monkey.<p>Secondly, the Leetcode style interview is actually scalable. Any engineer can give it and can evaluate the problem solving strategies that the candidate uses. That&#x27;s what allows companies to be efficient with their hiring: people are interchangeable. On the other hand, doing something as nebulous as judging the soft skills of engineering is going to be way too subjective and give more noise-to-signal.<p>Example: if an infrastructure engineer is judging a product engineer, there&#x27;s going to be a big disconnect considering that the problem space of infra engineers is more nebulous and the solution is more unknown. A product engineer would shit his pants if he was asked how to migrate a codebase at scale.<p>Of course, you could get around this by standardizing the test and pairing engineers with engineers of similar backgrounds. But along what dimensions would you standardize? What if the candidate can solve the issue without tracing the code history? How can you create a test where a candidate has to go through the code history without the answer being blatantly telegraphed (ie. when did this bug occur?)? And how could you do this effectively at scale without screwing over your own company&#x27;s resources (again, think startups. Only so many engineers to go around.)<p>A more honest way to achieve the same thing (if the author truly wanted to see if the candidate was well suited for the company) without going into Leetcode would be the company to put a probationary period on new-hires. It may cost more but you might as well filter hard and fast instead of using a easy&#x2F;wrong filter simply because a bunch of newgrad Reddit idiots who can&#x27;t pass a coding interview are crying their collective heads off about it being unfair.<p>But if a bunch of smart and successful engineers can consistently land offers, then why can&#x27;t other smart and successful engineers? Even Max Howell, creator of homebrew, who flamed the coding interview for being shit (his tweet about Homebrew and inverting a binary tree), still got an Senior Apple offer. So the fact of the matter is that it works. It might not be efficient, yes. But you cannot deny it works.<p>TL;DR: Author is full of shit about Leetcode interviews and his thesis would actually screw over smaller companies.