I used to interview like this, until I hired the wrong person. They talked elequently about how to program, but just weren't very good at digging in to technical details of an existing codebase and understanding what was actually going on.
So I added an hour's pair programming on either toy problems or our existing codebase, depending what was suitable at the time. No leetcode, no months of prep for candidates, and our interview outcomes were much better.
There's a massive gulf between toxic leetcode hoop-jumping and a friendly chat.
I do a lot of interviewing and have never liked the Leetcode-style interviews favored by some of the big companies. I feel like they favor a certain type of person who can memorize a bunch of solutions where they should be looking at general problem solving and flexibility.
That said, some coding in an interview is pretty much a requirement for any sort of programmer job. If you ever start interviewing candidates yourself you will see why - a non-zero percentage of applicants are very poor programmers, even those that claim years of experience.
I was an interviewer at [FAANG]. I did 300+ interviews. At the beginning I asked tough questions since I didn't know better, but I quickly realized I was not getting the signal I wanted. So I changed and just asked simple questions that included writing some code. There was no gotcha, no need to know sophisticated data structures. Leetcode practice would not have helped much.
I've been interviewing people for Software Eng jobs for more than 10 years an I haven't used leetcode style problems for like 8 of those years.
Leetcode interviewing is lazy interviewing. It's for when you don't want to put an effort in your interviewing process to check if the candidates have the skills you need for the position you are filling.
For example. My interview process nowadays is one web API interaction challenge: Https://challenge.bax-dev.com (in Spanish, so you may have to do a Google translate. Use with curl)
In that untimed challenge the candidate submits their code and email. They arrive to my email and I check the code quality of submissions with my morning coffee.
Then in the ONLY 90 minutes Interview with me, we talk 30 mins about experience in their resume, 30 mins about our company and the position, and we code the "server" side to the web client they created .
We do it pair programming style. The questions I achieve to answer are: would I pair program with thus guy? (Like, is she cool to work with?) And does she know what she is doing?
I've had very good results with this method.
And, from the code exercises I am sure anyone can guess what skills am I looking for.
There was a great circlejerk on reddit in one of the outages where people asked whither Google engineers have inverted enough binary trees to bring their systems online. Basically saying that the skills they hire for are for Algirithm competitions, not for building enterprise software.
And I say this as a CompSci PhD who did his good share of data structure and algorithms during my time in academia.
Yup, leetcode at least is fairly easy to make interviewers competent enough at giving especially if you restrict the problems they can give. Although worst one me and my friends have gotten were system design. Friend got interrupted with questions every 30 seconds, told to just answer them directly and then failed for not elaborating deeply enough on things.
Don't get me wrong I hate LeetCode-style interviews as much as the next guy. In fact I really, really, really suck at them! Not sure if that says more about my ability then anything but c'est la vie
In the defence of LeetCode-style questions, I do think they work, and very well may I add - with the caveat you have the throughput of candidate to make it work well? Their ability to filter out 'those who can't code' in an efficient manor while sacrificing a small amount where it filters out 'those who can code' greatly out weighs the alternatives. The alternatives needing to fit into a 1 hour timebox, be objective while also favouring the positive cases (I think I got that the right way round).
My two cents would be more around the way in which they are conducted; in my experience I've found conflict with the interviewer more then the process itself - with interviewers in my past lacking.... empathy (may not be the right word) for the person on the other end of the screen/table feeling flustered, nervous or down right stupid that they're struggling to solve a simple fizz-buzz/reverse string problem, leads to a snowball effect and pilling onto that can effect the candidate in quite a spectacular way. Best interviewer I've had asked if I was alright and got me a glass of water, props to that guy!
I dunno - I've just come to terms with having to learn how to play the game, even if I find that part of the game really hard and to some parts unfair. Such is life
I think you’re overestimating most people’s ability to withstand the stress that quiz show style Leetcode interviews can put on people. I’ve literally blanked on an interview before when I was tasked with writing a simple parser and I’ve written entire compilers. The interview processes are broken in most companies. Pair programming sessions with debugging and incremental graduation of the problem scope are way better at assessing programming competency, because you also get a sense for how well the candidate can collaborate and communicate.
As an employer you can hire people who have past projects they delivered and who can show you code they wrote and talk you through it. You can hire them and fire quickly if they don't work out. Leetcode is useless and experienced people will not waste time with coding interviews. These type of coding interviews ask stupid "trick questions" which have no relationship to day to day software development and attract freshly graduated candidates or people more interested in proving how smart they are instead of people who can build things and deliver. The problem is that once your company is full of these type of people that you will attract more of these useless people (like is the case at google).
I agree. I don't think Leetcode is a good reflection of programming interviews. In programming interviews, you're supposed to have a sound thought process, write clean code, and don't need to pass hundreds of test cases. Leetcode is just a programming environment that, imo, is not the same as a programming interview.
I'd rather learn interview algorithms from books. And by getting feedback from trusted peers.
You said, “ Rather than encouraging them to leetcode and practice for interviews, I taught them software engineering practices...”.
How do you square that with the reality that many software jobs have leetcode as a gate to an offer? I find myself stuck at this juncture. I am comfortable with software practices, but the reality of these sorts of interviews has me basically trying to figure out how to “hack” the coding interview portions. It’s somewhat beneficial, in terms of pushing me to improve my solving skills and data structure/algorithmic understanding, but I obviously can’t help feeling that a lot of the time I’m spending is tail-chasing, as a lot of the problems I encounter seem to be very far removed from the reality of day-to-day web development.
The only thing that interviewing assess is how good at interviewing the candidate is.
I swear that for 90% of the typical software interview loops, someone with some minimal understanding of computer science that spent 2 month studying the typical Leetcode problems would probably have been fine and do way better than a software engineer coming out with 10 years of experience that didn't take the time to review his leetcode problems.
> So why not give a simple coding test? Talk through peoples thought processes
What do you mean? That's pretty much what leetcode-style problems are during interviews. You get a problem with some theme, like "here is a list of airplane flights in an array composed of tuples, with the first member being origin, and the second being destination. Write code that would create full-blown routes out of those flight entries."
You ask questions, clarify constraints, come up with a few approaches, discuss with the interviewer pros and cons of each, decide to go with one, implement it while walking the interviewer through your thought process. And then you discuss limitations and edge cases, scalability concerns, how you would test it if it was a problem you were solving at an actual workplace, etc.
Leetcode-style interviewing doesn't typically refer to "we just pulled a random problem from leetcode, go ahead and solve it while I am standing over your shoulder, and we will check how correct the solution is afterwards." In fact, interviewers care way more about the thought process and your approach, as opposed to caring about your solution matching theirs. In fact, there were many cases where people ended up not solving the problem and passed the interview anyway, as well as cases where people solved the problem and ended up not passing. Because the process of arriving at the solution and the reasoning you took to get there matters way more when hiring (even if you didn't get there all the way to the correct solution), as opposed to just getting the correct answer. The fastest way to fail a leetcode-style interview is to sit down and write down the correct solution as fast as possible, without explaining your reasoning process or even anything at all.
Hot take: I like leetcode-style interviews and I've spent a lot of time in them on both sides of the fence (tens of hours as a candidate, hundreds as an interviewer).
> But yet, these interviews quiz me on things that I can easily Google that I may not know off the top of my head. It’s absurd.
I don't work at Google so I'm lucky to have freedom in the way I interview engineers and usually I try to squeeze out the quiz aspect as much as possible.
If a candidate doesn't know the algorithm for a given problem and can't quickly come up with one, I usually proceed to give a detailed explanation for it. In the end the task is reduced to "write between 6 and 10 lines of code that do X in your favorite language" and yet a majority (80-90%) of inbound candidates for software engineering fail at it (for non-inbound sources a picture can be very different of course).
Contrary to a common view, I believe that this approach actually imitates my daily interactions with a developer quite well and the correlation between interview performance and job performance is very strong in my experience.
And interestingly I've seen many people who shine in oral interviews (tell me about your experience) and then fail to produce any code at all, both during the interview and at work. So even if I wanted a good alternative approach to engineers I haven't seen it so far.
I don't hate leetcode, but I'd really rather do interviews in one of these ways
1. Rely on referrals from people I trust. If somebody I've worked closely with and respect highly says that Person X is awesome, then just hire Person X. This obviously has massive problems with creating an insular culture and only works for people with a sufficient professional network, but it is incredibly high signal.
2. Have a long conversation with the candidate. Discuss their prior experience and war stories. This can be gamed, but I suspect is harder to game than leetcode.
Both of these options have a big problem as they scale, which is that interviews do not transfer. You need the hiring manager to do this interviewing. Making every hiring manager at a 100,000 person company do their own sourcing and interviewing is going to be a mess. Megacorps want to allow anybody to interview and then once somebody passes those interviews, they'd be able to join any team. I have mixed feelings about this approach.
So the best option IMO is two 2-3 hour pairing sessions. Refactor some code, develop a feature, and diagnose a bug. Have the person comment on the architecture of the code or system they used and describe large scale changes they'd make to improve it or prevent it from arriving at this state.
This requires more pre-work since you need to create an entirely working fake system and environment. And since there is a huge incentive to practice for these things, people would definitely sell knowledge about the fake system. It is also higher variance when there are new interviewers, since they represent a larger portion of the total interview panel.
My beef with the leetcode interviews is that, IMO, they're in no way reflective of what you're actually going to do, and yet the interviewer often acts like it's a perfect barometer. One misstep or quibble and you're out.
I remember when a former colleague wanted my input on his interview question which was basically, "Write the algorithm for product recommendations." (eg, like Netflix's movie recommender.) Despite repeated warnings, he went ahead with that question only to come back and admit, "Yeah, that wasn't at all good." Imagine what the poor guy or gal on the other side of the table had to go through.
I don't know what the right answer is to interviewing, but my take is that I would prefer to work with someone who I can get along with, have real human conversations, and become good collaborators -- even if they're not ace coders. That measurement seems glaringly missing from too many interviews.
From jobseeker point : We need better interview process. I don’t understand leetcode style of interviews when we have ChatGPT to generate code. Even OpenAI has tough coding rounds.
I can usually spot the candidates who are leetcode junkies. This is why I direct our interviews to be as pragmatic as possible. Most of our question bank comes from actual code one of our devs had to implement.
I'm fairly confident that if you've studied hard enough to solve these problems easier the studying just paid off by making you a better developer.
The problem (other than your casual insults) is that leetcode does not demonstrate the ability to conceive, plan, structure, or write code. The whole method behind it is nothing but rote memorization of trivia questions, almost all of which are pulled from one or two websites. There are piles of books made specifically to help people memorize the solutions to these puzzles. This has nothing to do with actual software engineering work which very rarely involves rote memorization.
A far better approach is to talk through the design of a system - conceptual or previously worked on and ask questions about it. Strike up a conversation with the person. I find it extremely easy to tell if a person knows what they're talking about and enjoys the subject _on subjects I am familiar with_, which is quite common in the situation where I am interviewing someone to join my team.
Interviews are only partially about testing your body of experience. They're also supposed to test your aptitude and ability to grow in the future.
If you were capable of studying Leetcode so hard that you mastered the interview process at one of the most selective software companies in the world in only a few months, it's not much of a stretch to imagine that you could apply that same aptitude, ambition, and ability to learn quickly toward picking up the basics of git, dev ops, and so on.
Arguably, this is one of the benefits of Leetcode-style interviews. They focus on core software engineering aptitude, while not arbitrarily excluding people because they didn't use the right VCS at their last job.
Leetcode interviews are more of a sadistic entrance ritual than anything approximating a fair gauge of skill or experience. I see no other reason to make proven developers study textbook problems during their free time (they sure aren't implementing knapsack algorithms from memory at work).
It often goes unmentioned that these interviews test the wrong skills for software development and even instill bad practices. To wit, those artificially handicapped online IDEs force you to memorize language APIs which any real IDE would handle for you -- forget that the JS lowercase string call is "toLowerCase"? Too bad. Also, since time is of the essence, and no debugging tools are provided, you better be using an interpreted language (read: JS and Python -- and really only the former unless you can import the correct libraries) and littering your code with print statements.
Other companies opt for the ostensibly fairer "take home CRUD app assignment" but this too is a facade to lend credence to a preselected candidate pool. No matter how well you complete the assignment with all enterprise grade best practices, you'll still playing the lottery (and this time with a five hour time sink).
Bottom line is don't interpret a lack of success in this draconian system to a personal defect. Ideally, seek employers who assess candidates fairly and qualitatively.
So I added an hour's pair programming on either toy problems or our existing codebase, depending what was suitable at the time. No leetcode, no months of prep for candidates, and our interview outcomes were much better.
There's a massive gulf between toxic leetcode hoop-jumping and a friendly chat.
reply