It's probably not that the leetcode problems are ultra hard to solve (though they can be). It's also the combination of the artificial time constraint and the high pressure interview setting - which is a very different kind of pressure than you typically experience on the job.
The core money-making algorithms don't take many human bodies to develop. At Google, 500-600 researchers and core algo developers likely do most of the heavy lifting.
Otherwise, 90%+ of their developers are likely solving routine problems.
Although, most of them likely convince themselves that only the "chosen ones" among mankind can do what they do.
The reality is that most of software, even at the FAANGs, does not require the type of interview questions these teams enjoy asking.
I just couldn’t pull it out of my butt in the 30 mins I had. Sux. I’ll get there one of these days.
I find it extremely annoying to come up something while someone watches me as if I'm an idiot.
Interviews are also hard (as I frequently comment around here) because, once you've seen how the sausage gets made, you realize it's basically still a crap shoot which comes down to the loop you get. If you get an unlucky roll and end up with the personality type which views interviews as a chance to show how much more clever they are than everyone, then you've already failed. Their ego is tied to their "high bar" and impossible question set, and you're just fodder for them to show off that "high personal bar" during the de-brief.
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.
or trying to glean proprietary information out of others?
It's a struggle between fitting the interview to real-world situations vs making it seem like the candidate is doing work for the company.
I feel like a good situation might be actual problems previously encountered with the technology being assessed during the interview that would've required you to have collaborated with someone who is also experienced in that technology to help you solve them.
Maybe the best way to do this is when the situation is proposed to the candidate, make it clear that the answer is already known and put it in an envelope (physical or digital), which will be referred to when it's solved or the candidate hits a dead-end.
Do you have a source for this? I can't help but think about the person in this clip: https://www.youtube.com/watch?v=LlCEmPF4-V0. You think you can learn much about her from that interaction?
I acknowledge there are some situations where you might pass the interview even without arriving at the optimal solution, but those are probably the exceptions.
I've interviewed people who didn't know the answer to some of these tech questions, and honestly, I was more impressed by them calming saying "I'm not sure on this one, I would probably need to go look it up".
Why worst? If you're not given an offer, nothing changes. You've spent somewhere between 45 minutes and a day, got some interview practice and all is basically status quo. But, if you're given an offer, you are now faced with having to weigh the pros and cons of accepting it.
And I rarely get an answer that makes sense. Instead I get mostly rationalizations for Leetcode. The thing is I recognize those rationalizations because I was certainly guilty of it in the past ("We're evaluating intellectual curiosity" is one I cringe at now).
The real problem from my perspective is that most teams have never taken the time to really think about and identify the underlying principles about how they want to work. We go through a process of defining those principles and all of a sudden the interview gets a lot clearer. Do you value the highest quality code? Do you value getting things into the world quickly and then iterate towards the final solution? Is security always at the front of your mind?
Getting really specific about what exactly being "excellent" means to a team is really critical.
Because then you can design an interview process that actually selects for those things. I've never had a team define "the ability to solve leetcode problems under pressure quickly" as an endpoint they actually care about. Some teams continue to use leetcode, but only as a small part of the process with problems that ARE actually directed at what they care about. Having been through a bunch of interviews in my 25 year career I instantly know when a team has actually done the work to design a good interview process (which has been far too rare in my experience).
Though I think my expectation is that they'll get annoyed and stop the "interview".
I also don't really ask "trick" questions (I try to select questions based on what the CV indicates would be a strong area for the specific candidate), the closest I get to that is probably when it comes to service monitoring (where the exact final answer is less interesting than the process of getting there).
My reply was only intended for "trick" questions that have absolutely no relevance for the day to day job of 99% of Software Engineers. And that's exactly because those trick questions tend to be more about the "exact final answer" than about the process, so my point was about figuring out if the interviewer actually has a grasp of those sort of problems in general or if they memorised a good solution and are milking that for all it's worth.
And I do know that almost any interviewer would reject me based on that, but I think it's worth letting them feel the burn they try to inflict themselves.
My absolute favorite interview of the group, a guy who ended up getting hired elsewhere, was the most calm and professional developer I'd ever been around. Sitting in the room, I felt like he was interviewing us rather than the other way around. It was just in the way that he carried himself, answered questions.
And then the guy on our team started asking questions. The gentleman we were interviewing, rather than answer, kept calmly asking more questions of him instead.
- Can you describe the situation where this would be used?
No
- Have you ever run into an issue like this before that could be an example?
No
- How do I know that by solving this problem we would be addressing the business or customer problem?
We don't
- Then shouldn't I be solving questions related to the work?
...
I loved that guy. Wish we could have hired him because I really wanted to work with him.
I stopped an interview once. I told the guy I didn't think I'd be a good fit for the organization, and maybe we should save ourselves some time.
I've done this a few times, each time from a startup that reached out to me asking me if I'd come in to talk to them, and then would throw me into their coding challenges immediately. Like whoa hold on there, I don't even know what you do, why are you asking me to do a coding challenge before we've even figured out if there is a fit for me technically and I figure out what it is you're trying to solve.
I've rarely used unprofessional language in job application emails, but on that occasion I pretty much told them to take their no-name little company and shove it.
[0] https://www.asktheheadhunter.com/15129/before-you-risk-your-...
Many interviewers don't do this because it's often difficult to distill the most interesting problems down to something that would fit within the time allotted for the interview, and also there are candidates who prefer abstract textbook-style problems.
I often wonder why this is legal, especially given the legal concept of disparate impact. It's basically just a disguised test of some combo of IQ + free time + willingness to grind dubiously useful information
Pretty much any white collar job interview is an intellectual joust at best, and a mild hazing ritual at worst.
We actually have it good: you at least know what the broad contours of what we'll be subjected to.
Because any software person will tell you these tests are extremely detached from the requirements of the job.
It seems like it would be an open and shut case if not for the army of lawyers employed by the likes of Google.
But it’s still more diverse in contrast to the companies I’ve worked at (non-tech old school companies in finance, etc), where the tech employees tend to fall into a much narrower stereotype.
Of course the USA is ever more extreme and crazy when it comes to identity politics, so ago knows if the justice system is still reasonable in this regard. But I'd really enjoy watching people argue in front of a judge that working with tree structures is extremely irrelevant to programming.
“Not yet challenged” and “legal” aren’t exactly the same thing. Straight up IQ tests are probably more defensoble than leetcode for lots of positions for which leetcode interviews are used. But people have heard the popular misrepresentation of Duke Energy (“it’s illegal to use IQ tests”) more than they’ve heard the actual disparate impact rule, and that seems to be true on both sides of thr interview table.
Demoralizing as all hell. Thankfully I had multiple mocks with FB engineers who told me I did great so I know it really was just bad luck that the real phone screen was a dud.
They didn't even need to look at word of mouth impact to see a material hit on their customer retention, in a sector where churn is costly. They went on a crusade to improve, and now find candidates for jobs are net promoters, and their customer acquisition cost via candidates is lower than normal advertising(!)
I think some of the big tech companies simply don't care about their reputation at either micro or macro level, and nobody wants to call out that kind of toxic behaviour as they're all "part of the club".
At an employer prior to that, I saw first hand how companies were able to get negative but true reviews taken down almost as soon as they were posted. There was high turnover at that place and a lot of people were truthful in their reviews of the company. The Glassdoor rating was far higher than they deserved until they went under.
Im short, I’m sure you think you’ve got a great work environment, but I’ve been burned by bullshit Glassdoor reviews and I doubt I’m the only one.
I generally try to help everyone as much as I can during interviews, because honestly this is taking time away from my other work and I'd nothing better than to hire you, but sometimes it's just to much.
(I’m half hoping that after typing this out someone will reply with some data structure I’m unaware of that would allow you to uniquely map the reference of an object to an arbitrary value.)
I've had several interviews where everything seemed to go well, but one (out of say, 4/5) interviewer just seemed to be hostile from the moment they walk into the room.
FB only asks leetcode questions tagged with 'Facebook'. 100%. I know ppl who memorized these questions and got in.
Learning new frameworks and coding standards, surviving code review, dealing with difficult team members, dealing with ever-moving business goals, and just about every other aspect of work, including the coding, has been harder.
I admit that I have never had to invert a link list as part of my work (Graph traversals I definitely had to do, actually). But I have had to submit to arbitrary technical demands and to learn and use technical materials I did not enjoy or agree with architecturally in order to successfully complete projects. So in that, studying and practicing to pass the technical screen is similar to the job. Employers want someone who is able to (sometimes!) bite their tongue and just do the work assigned.
Actually, I remember one IT-style interview 12-ish years ago with a certain FAANG that shall go nameless that had this sorta narcissistic/sorta dumb hiring manager, whose profile picture was a shirtless muscles pool pose, believed that a technology I inherited and was forced to use was an interview deal-breaker. And, at the time, I was at an IT department at Big Name university down the street where there were much more complicated and interesting things going on, like remotely uninfecting and patching worm-laden systems and putting together a fully-redundant/HA VMware cluster that had an FC SAN and blade servers (the thing back then).
I'd guess 99% of engineers never have to do CS trivia as part of their day-to-day job.
FWIW, most FAANG employees seem to admit that if they had to redo their interview, odds are they're more likely to fail than pass. Goes to show how much luck is involved in the process.
I think it's gotten harder too. Maybe in the past it really was about trying to see how the candidate thinks and solve problems. But now it seems like all all of that is secondary to getting the optimal solution. Two of my friends in Google who got in ~10 years ago say that it's definitely gotten harder from what they see.
I believe they mean e.g. "tell me what happens when you type https://example.com" in a browser.
You can go deep into tcp/ip, dns, how ssl encryption works, how urls on a server get mapped to specific ports, load balancing/round-robin etc.
That could be trivially fixed tomorrow, either by universities or (better) by an accredited certification body.
I mean, I'm sure there weren't bar exams for lawyers and professionals either, at some point in history. What prevents us from creating one for sw developers? As long as it didn't require additional attainments just to sit for it (i.e. you should not need a university degree), it would make the whole process more efficient for literally thousands of companies.
In software it's not like that. There are very few laws on the book about how to write software, so there's no single authority that defines the right answer or the scope of reasonable questions. It's far more open. Even just picking a set of programming concepts would immediately cause controversy. Like, should monads and type-classes be a part of the professional qualifications? Most programmer would say no, because Haskell isn't widely used in industry. But CS degrees do sometimes test people on that sort of thing!
(Also, in both cases, the government hires members of the profession to define the standards.)
I'm convinced we could have a bar exam for software engineering, but I'm not at all convinced that we should. It would make my life easier personally, but it would keep a bunch of people who followed less traditional paths out of the industry and I think that would be bad.
Is that an equal burden for every candidate, in every life circumstance? Or does it privilege certain groups over others? The ROI isn't the point. Requiring preparation unrelated to the job is highly suspect, regardless of the return.
...check yo math?