3 ms·
This is bullshit. Let me explain why. The author posits that the best way to interview is to simulate an actual work environment for the candidate as if he was
by Richard_Kayala 5y ago
This is bullshit. Let me explain why.
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.
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).
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.
In the author'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.
Which is effectively what onboarding is: getting a person used to the tools, nuances, and implicit culture of a company.
And different companies have different needs. When you'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're writing.
In each of the cases, the dimensions you'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't matter: they have so many people coming through the door that they couldn'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're dismissing all the people who can actually thinking like a proper engineer.
I mean, if a startup wants to hire someone who says "I don't know why the code works, I copied it from stack overflow and moved on with my day" then by all means, have him write the Robinhood options platform.
Ceter paribus, I would take the former candidate: someone who'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's the opposite, it would take me at least 5 years for him to even begin to understand to not be a code monkey.
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'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.
Example: if an infrastructure engineer is judging a product engineer, there'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.
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's resources (again, think startups. Only so many engineers to go around.)
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/wrong filter simply because a bunch of newgrad Reddit idiots who can't pass a coding interview are crying their collective heads off about it being unfair.
But if a bunch of smart and successful engineers can consistently land offers, then why can'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.
TL;DR: Author is full of shit about Leetcode interviews and his thesis would actually screw over smaller companies.
- thedracle 5y ago> This is bullshit. Let me explain why. Hi, Jason here, CTO of CoScreen, and author of this article. Thanks for your candid opinion Richard. > The reality is that the Leetcode style coding interview, as we know it today... I'd love a guide, or other details about how to best pose a "Leetcode" style interview, and refine it. It sounds like a lot of work, but I'm sharing my personal experience interviewing engineers over the last 20+ years. I don't pose just hackerrank like challenges as the only method, but also whiteboard/and ad-hoc in person interviews. I'm willing to believe there are ways to get better results using these async type methods. But, for my last several companies, including being in management/hiring positions for several startups, I have found them to be very poor at predicting on the job performance. > In the author's eyes, he thinks that more weight should be given to the soft skills. I never stated this. I'm not sure where you are getting this from. Being able to read code isn't a soft skill, nor is being able to navigate large code bases, debug, read documentation, and research. Absolutely these are skills that you can learn on the job, but not by any means easily. > And different companies have different needs. When you're a startup, you need to code fast and quick, ship the product, and iterate. I definitely agree with this. > That's what allows companies to be efficient with their hiring: people are interchangeable. Have you been working for software companies where you found engineers immediately fungible and replaceable? This is really different than my own personal experience. > And how could you do this effectively at scale without screwing over your own company's resources (again, think startups. Only so many engineers to go around.) My experience hiring has primarily been for startups, and in both Director/CTO, and other positions, have had to spend an inordinate amount of time hiring developers. Scaling to three, or four engineering hires isn't difficult for a startup. The cost on the other hand, to the point I made in this article, of making those two or three hires bad hires, is extremely high. > without going into Leetcode would be the company to put a probationary period on new-hires. Most good programmers are gainfully employed, and won't agree to a probationary period when being hired... Why would they leave a stable role for one that is tentative --- I wouldn't... I think the onboarding project (could be paid/contracted) like I suggested in the article, as well as a pair-programming session, is what I am suggesting here. You could think of it as a commitment free probationary period on both sides, without requiring the engineer leave their current position. > But if a bunch of smart and successful engineers can consistently land offers, then why can't other smart and successful engineers? I'm not sure, really, I'm just offering advice for startups, like mine, that is earnest and based on my own experience. >Leetcode interviews and his thesis would actually screw over smaller companies. I don't really mention leetcode once in my article, and mention other forms of traditional interviews--- like in person whiteboard interviews... I call out doing hackerrank challenges. I'm not sure why you're so focused on leetcode. If I would have based my hiring on hackerrank alone, I wouldn't have hired one of the best engineers I have worked with in my career. These coding challenges really don't prove competency in software engineering, again in my personal opinion, based on a large amount of experience in this area. It's fine for you to disagree with that, but as the Dude would say: that's your opinion man.