Ask HN: What to do about ‘Good at programming Bad at Leetcode’

291 points by mikymoothrowa ↗ HN
Over the past few years I've met people who are really good programmers when it comes to putting together a full back end system , creating a very nice front end or creating any kind of app for that matter.

Many of these people are fresh out of college and the ‘industry’ puts them through leetcode/hackerrank style rounds that are needlessly hard. I’ve seen the kind of questions these rounds have and quite frankly, if I graduated this year, there’s no way I’m going to get a job.

Ever since 'Cracking the coding interview' was released, every company's interview process has become like Google's and Google didn't have a particularly great interview process to start with.[0][1]

Now, there are several GitHub repositories that prescribe 3-4 month grinds on leetcode questions to "crack" the interview. And people do go through this grind.

The people who do manage to crack these rounds are not necessarily good at programming either because the time they spent doing competitive programming stuff should have been spent learning to build actual things.

The no-whiteboard companies are very few, hardly ever seem to have openings and not hiring junior engineers.

What would be your advice be to fresh college graduates, or anybody for that matter, who are good at programming but not at leetcode? Surely there must be a way to demonstrate their understanding of algorithms without having to spend 3-4 months memorising riddles

[0] homebrew creator.. https://mobile.twitter.com/mxcl/status/608682016205344768?lang=en [1] Zed Shaw gets offered a sys admin job https://news.ycombinator.com/item?id=93984

502 comments

[ 2.7 ms ] story [ 396 ms ] thread
Let’s not forget the emotional element of these interviews where you’re being asked questions that mean very little about whether you can perform in the role. but many pretend that they are. For me the day long “technical” interview loop is a flashback to gradeshool hell. It tests my anxiety levels at least 5x more than my skillset.

It’s a common thought among my circles that interviewing is the hardest part of being a software engineer - once you’re in somewhere it’s a lot easier.

There needs to be something better.

> It’s a common thought among my circles that interviewing is the hardest part of being a software engineer - once you’re in somewhere it’s a lot easier

I’ve heard a similar sentiment from my circles too. But lately

I’ve also met people for whom it’s the exact opposite: they can clear the first round of the interview and they fail in the subsequent design rounds (which in my opinion are a lot less challenging)

I’ve also met people who manage to get hired but are soon overwhelmed with the real work that they have to do and some even get pip’d

It's often the hardest part because many people think they can hit the ground running after following a Udemy programming course.

Engineers are expensive to start with and inexperienced/over-confident engineers even more so due to the potential damage on the product.

Tough interview stages like leetcode are a simple method HR can employ to establish a baseline competence.

Personally I have zero interest in grinding for months solving riddles and when interviewing I always check what the stages involved are. On numerous occasions leetcode has been dropped upon request - no harm in asking!

| It tests my anxiety levels at least 5x more than my skillset.

I'm not so convinced that these are two distinct things. I want coworkers who can maintain their level of skill under extremely hostile, stressful conditions. I'm not going impose those conditions on them, but I can't necessarily control the myriad third parties or circumstances that might.

The question answers itself, doesn't it?

If you care primarily about your salary, become good at leetcode.

If you don't, join a startup.

My salary is very good. I've never joined a company that does leetcode interviews. Only two of the companies I've worked for have been startups.
Very good compared to Google and Facebook, or is that a subjective statement?

But to be honest, your answer is not likely to change my opinion. For the vast majority of new grads leetcode is the obvious recommendation to maximize income. People grind for 3-4 months because it actually works, that's the reality.

Very good in that it puts me in the top 10% in terms of earning potential on the planet.

You have a different target employer than I do, and that's fine. I optimize for a different set of requirements.

(comment deleted)
Sounds a lot like you actually are one of the many individuals who do not optimize for salary.

Maybe OP is, too. If he isn't, I think my suggestion is appropriate.

I wonder if that itself is certain type of filter. For people who are ready to spend lot of unpaid hours for job. Might this also expand to their work?
Yeah, I think that's actually part of the intent of the whiteboarding in the first place. How type-A and career-obsessed are you? Enough to spend months learning tangentially relevant material to pass an interview?
I've worked for exactly one startup on a devops team of three. The coders next door to us were mostly fresh out of university and most of them thought they were the cat's pajamas. They worked for a fairly crusty former military cyber dude who had likely forgotten more about programming then they would ever know. Military dude told us that code checks were an eye-opener for these guys. There's boot camps, university, and then the real world. The real world is often not what these kids think it is. Same kids were shocked when I told them the company ran the back end on Bash and Python. They were incredulous we weren't using Golang, Haskell, or some other flavor-of-the-month language. I told them to go ask what runs their bank. None of them had the faintest idea it was COBOL. The one COBOL programmer I know is in his 60s, already retired and comes out as needed for the princely sum of $200/hour every couple of months for contract work. Beer money as he calls it. Guy retired a millionaire from COBOL but you'd never know it looking at his modest house and hatchback car.
I don't get the modern (?) obsession with having the latest tech in your resume.

Knowing how to solve problems for someone willing to pay you a lot for it seems to trump knowing how to solve problems in a specific way. I've improved my salary more by putting work towards fixing things for existing code bases than I have by building brand new things on brand new technology.

With that said... having been in the position of the hot-headed junior engineer full of ideas, I don't think that position's without merit either. The trick is to balance new ideas for the employer, personal knowledge growth, improved performance for the employer, and making the right kind of mistakes.

In that latter bit, I don't think _anyone_ has figured it out, yet. Not in a way that's easily repeatable, anyway.

Many startups cargo-cult these poor hiring practices.
The good news is that that's a predictor for a shitty startup (or at least a predictor for a startup that isn't focused on building things)
Work at older, non-tech companies that have tech departments. Almost every single one of my jobs has matched this pattern, and none of them included a coding exercise as part of the interview process.

Silicon Valley and its satellites seem to disproportionately favor code interviews compared to the rest of the US market, for some ungodly reason.

Do they pay comparable money?
You can't have your cake and eat it, too. If you want to get paid as a developer who has to design algorithms as part of their job, you should know how to design algorithms.

Doesn't mean that pay grade is fully correlated with skill, of course. There are other industries that pay more and don't require anything like that.

> You can't have your cake and eat it, too.

But the thing is... you can

Most of us are not designing algorithms, most of the time, or any of the time

Many engineers are just filling seats in places that are just in the business of sucking up talent from the market instead of having a bunch of entreprenuers running around

Rest and vest

Sometimes. Particularly in the financial industry.

However, something to note is that while money is important, it's not the most important thing in life. Or it shouldn't be, anyway.

> Silicon Valley and its satellites seem to disproportionately favor code interviews compared to the rest of the US market, for some ungodly reason.

I work at a well known SV tech company with about 3k ppl and we got over 50,000 job applications last year. Code interviews suck, but they're a scalable way to assess skill with minimal bias.

There could be an argument made that most code interviews have a bias twords younger less experienced developers. They are the ones that take the time and study these questions. Years of experience probably won't help since the questions don't represent day to day problems most developers are solving.
I interview at FAANG and we do take this into account by holding pretty much anyone over ~2 years of experience to the same standard with respect to leetcode questions.

A fresh grad is expect to be able to solve ~medium problems.

Someone with ~2 years of experience is expected to be able to solve ~hard problems.

Someone with 10 or 20 years of experience is still only expected to be able to solve ~hard problems.

The standards for a more experienced candidate are of course higher for other attributes: Leadership skills, communication skills, etc.

(comment deleted)
Would you suggest someone with 10-20 years of experience to practice and learn how to solve leetcode problems? Or just expect them to be able to solve them without any prior exposure?

And if you would suggest they learn them what would that person be gaining that they lacked before?

the fact that SV companies are getting 50,000 applicants while other more or less critical sectors struggle to field any talent at all points to a (the?) deeper problem at the root of the leetcode fiasco
Let's unpack that for a second.

"Skill" is probably one of the least valuable metrics of a given hire's performance over time for an employer.

Yes, being able to effectively select for the people most likely to develop a competitive non-extant algorithm is an important metric for certain employers that skill tests will assist with. However, it's as niche to general society as academic studies are.

This is not to say that it's unworthy of practice or attention. In some cases, it's absolutely justified.

What I'm advocating for, however, is skewed towards the broad middle of employment cases - people who are competent, able to solve most day-to-day problems, and not adverse to new practices.

In most cases, people aren't looking to advance the knowledge of a particular field of study. They're just looking to solve problems for their day job while earning appropriate compensation. The employer gets a satisfactory advancement of their capabilities, and the employee gets to enjoy a quality of life they're used to.

The "broad middle" is much messier, but also easier to filter for. As a hiring manager, I would look for people that are A) not obvious assholes, and B) likely to improve my team's performance in some measurable way.

In other words... Company X, which lives and dies by having the absolute latest technology available to humanity, may well need to use code interviews to even establish a baseline performance metric. Company Y, which is just interested in appreciably improving its market share versus a wide cohort, is probably better served by "softer" hiring metrics.

One possible a consideration would be that "softer" hiring metrics breed mediocrity and complacency in the long run. Should the company in question to pivot into a more, let's say, intellectually rigorous direction, how should they handle the predicament they've put themselves in without the end result being bankruptcy, mass layoffs, bad PR, or some combination of the three?
Tech companies favor deeper tech skills greater than non-tech companies do, is what I'm reading, and it does not sound too surprising.

You are also less likely to deal with the "leetcode" subject matter (e.g. design and analysis of algorithms) at a non-tech company, so if you don't want to deal with that, applying at a non-tech company is a good idea. Does not mean that a job at a tech company won't be like that, though. They have CRUD SaaS apps, too...

> Silicon Valley and its satellites seem to disproportionately favor code interviews compared to the rest of the US market, for some ungodly reason.

It's all the money that they're making compared to everyone else. Even in a crash like we're seeing now, they have extremely high revenue per employee.

The other US markets don't "get it" yet imho.

Older, non-tech company with a tech department employee here. And uh, yeah, we do code exercises with candidates. Nothing ridiculous, we just put a basic, relatively straightforward problem in front of the candidate (two notches above fizzbuzz) and ask them to solve it, or at least talk us through how they might solve it.

We've had a problem with candidates who seem impressive on paper and during the first phase of the interview, and then can't solve this exercise without being seen to glance at Google or SO results on camera -- or worse, being caught copying a worked example directly off the web!

There are plenty of people who can talk a good talk about their technology experience but can't write a line of code to save their lives! Entire majors at universities are devoted to this; when I was in college, all the people who couldn't cut it in CS because math, fell back to MIS -- Management Information Systems -- whose courses had big colorful textbooks I call "Richard Scarry books" because they're packed full of busy-looking illustrations. MIS helps you learn about technology in a business context, but prepares you very little for actually doing technology and building the systems with it. The coding exercise helps screen out the people who can't actually do what's needed of a developer.

I guess people reach for leetcode because it's easy, but it misses the point of the coding exercise. The point is to screen out people who can't program at all, not to select for the programming equivalent of NES speedrunners. So it needs to be set at a very low bar and administered by forgiving interviewers.

Join a startup and move into engineering management asap.

If you can hit director level, they stop asking leetcode questions. But if the goal is to eventually get into a Big Tech company, they may down level a startup director to be a line manager (which may still require leetcode).

All these people I have in mind are fresh out of college, self taught probably and aren’t old enough to be EM
This would be a 5-8 year plan. Communicating with your manager early that this is a career goal will help set them up for success in that path.
Depends entirely on the startup I guess? And, I mean, I could found a company right now and call myself "CEO" and my friend from school who's a brilliant actor with no computer skills "director of IT", that does not say much.
Experience depends on how many humans are under you. If you're a CEO with 0 full time directs, you would have a difficult time moving into an EM role.
That’s my point, except stronger, because number of people under you is not sufficient. If you’ve never written a line of assembly, you will have problems managing a compiler backend team for example.
Please let me know what startup that is so I avoid it at all costs.
I wrote my own dynamic garbage collected programming language from scratch just to solve leetcode to prep myself for interviews.

I still don’t feel ready.

If you’re curious: https://www.github.com/glouw/rr

Why did you think writing a programming language was necessary to Leetcode?

I applaud the effort, I'm just curious why you say you wrote it "just to solve leetcode", when I'd imagine the skills for creating a programming language have limited overlap with Leetcoding.

Likely because one would “applaud the effort”. If I can’t prove to the interviewer that I’m capable of going beyond leetcode, by building my own language to solve the same problem, then I might as well memorize a thousand solutions to cheat my way into FAANG. The latter will guarantee entrance, but I can’t stand the memorization process. I’m a professional, and like an undergrad or grad, I shouldn’t have to memorize homework problems to pass exams
> when I'd imagine the skills for creating a programming language have limited overlap with Leetcoding.

FWIW golfing languages are a thing, where a language is designed specifically for code golfing type problems and usually optimizing for a tiny core language and small source files.

i have about 1000 stars collectively on my public GitHub repos and recruiters still ask me to do "coding interviews"

i take this as an insult and reject instantly

no matter how much money and stock you offer, i'm not gonna bend my back over to prove anything to you (that's what resume and GitHub are for, fool)

luckily, i have saved enough money to not care about this shit

Not a programmer, but a sysadmin/devops. Once had an interview at about my 15-year mark as a Linux/Unix admin working for some household names. Punk kid interviewer asks me if I know how to add a user to a Linux server via command line and, if so, please take the marker and write the command on the whiteboard. Same kid asked me why I would choose Bash over the far superior zsh and other nonsense. Kid didn't, likely still doesn't, understand that methods don't often matter, results do. Needless to say, I didn't want the job working with people like him. I found a better job working for a government contractor doing more interesting stuff working for people who just wanted results, methods not even a consideration.
6000 stars here. It doesn’t matter to be honest
I disagree with this take to an extent. Take it to the other extreme and you get folks who can’t even solve fizzbuzz. So some coding bar is good.

Leetcode is a very learnable skill, and I would argue any decent programmer can learn it well enough to pass an interview. I for years thought I wasn’t good at it, then I actually practiced and I got job offers at google and Facebook. I have also optimized code quite a few times using algorithm skills I picked up practicing for interviews so it’s not totally a waste.

There is a limit though, and some companies are pushing it with absurd questions that you couldn’t reasonably solve unless you had seen it before.

In summary, algorithms are useful and learnable, but some companies take it too far.

To second this point, part of being a good programmer means picking up new skills quickly, and then applying them.

Leet code is very contrived. However, learning leet code, then applying it in an interview shows you have the aptitude to learn quickly.

This argument can be used to justify forcing candidates to learn how to do double-entry bookkeeping (or insert other skill that you won't use on the job) just to see if they can learn. Yes, it checks if they can learn, yes, it is somewhat related to the area, but maybe there's a better way?

I've been 10 years in the industry. If recruiter tells me I need to prepare for an interview in ways other than looking back at the projects I've done, then the interview is not testing for what is important on the job.

> I've been 10 years in the industry. If recruiter tells me I need to prepare for an interview in ways other than looking back at the projects I've done, then the interview is not testing for what is important on the job.

Some people lie on their resumés.

If they're good at lying in person, it can be difficult to detect that.

If they're able to deliver working code of some kind under the pressure of a job interview, then they're almost certainly about to actually program at least a little, so you can trust me of what you see in their background and what they tell you about their achievements.

I'm personally skeptical that leetcode really tests what most companies need in a programmer, but it's probably better than nothing.

> Some people lie on their resumés.

My point isn't that I want to only chat about my resume - just that the problem you give me should be something I may encounter in the new job, ergo I do not need to prepare for that since my entire career prepared me for those (unless I want to reskill and the new job is different than the old one, then some preparation may be warranted).

> If they're able to deliver working code of some kind under the pressure of a job interview, then they're almost certainly about to actually program at least a little, so you can trust me of what you see in their background and what they tell you about their achievements.

Sure! But if the assignment is depending on stumbling upon a brilliant idea, instead of solving a problem that you may see in your day-to-day job, then I don't think it's useful. Think "trim a string" or "split a CSV" [1], not "find the longest increasing subsequence". And maybe also explicitly stick to ASCII encoding for string-based problems (but TBH, if a candidate asks about encoding, they probably know their stuff, or at least know where the gotchas are)...

> I'm personally skeptical that leetcode really tests what most companies need in a programmer, but it's probably better than nothing.

Agree that it's better than nothing. Disagree that we can't do better. :)

Edit: [1] ... maybe w/o relying too much on standard library if those are built into the language you chose.

Yep, that all makes sense.

FWIW, I agree we can do better than leetcode.

I'm personally a fan of an approach I saw someone else describe here, where you literally have the candidate do a few-hours freelance gig for you, paid at a decent rate. Triage some of the low-priority bugs so when you're interviewing you have a little stack of relatively self-contained, well-defined tasks for candidates to pick from. Probably good to have someone pair with them, if the candidate is willing.

You get to see them work in a real context, they get paid, you can learn about how they work, and it seems like a win-win to me.

I also think it's good to be open to other options - if a candidate has a different way to show they'll be good at the job, let them do that. If burntsushi wanted to work on a company's CLI tools, I'd hope a link to the rg repo would satisfy everyone that he knows how to write a good CLI.

> However, learning leet code, then applying it in an interview shows you have the aptitude to learn quickly.

That’s not why they were introduced. Leetcode using tools like hackerrank were introduced because college GPAs were very bad indicators of programming proficiency and a lot of people also did not have a CS degree.

The questions weren’t this bad before.

And these competitive programmers aren’t necessarily fast at learning things either.

leetcode was introduced because the founder in india could not get a job because he didn’t have a degree. so he made a platform where people could prove how good they were.

the trouble is that this just trains code monkeys to memorize optimal solutions to a set of problems and to quickly reproduce them.

it does not optimize for real engineers who have the experience to build good software and to come up with creative solutions to hard problems.

It also shows you have the time to prepare. Not everyone has that luxury - think working parents with some other challenging happenings thrown in and you have an advantaged and disadvantaged class of people for these interviews
Naturally, but how is that a flaw?
The cynic in me says that's intentional. They want young, enthusiastic people willing to work for less that they can throw away when they're done.
It's more than cynical: https://www.britannica.com/event/Griggs-v-Duke-Power-Co outlines that IQ tests are unconstitutional due to racial biases.

It was out of that judgement, that companies started to require degrees for office jobs of all sorts, as you could discriminate based on education but couldn't on an arbitrary IQ test. And naturally, tests on the topic of a job can also be administered.

And I do think you're right - Leetcode does select for recent graduates who likely were taught in a throwaway language for academic purposes. And selecting for young college graduates are highly likely what they're searching for, as they also do not know their worth.

I had a 3 and 2 year old when I prepared for interviews and I did alright enough to get a job at a FAANG (and it's not Amazon). I took about 2 months and blocked some time every single day. I still managed to cook meals for 4 and put two kids to bed, and wake up at 1am and 3am for night time milk feedings... yes that's not delegated to a housewife it's done by me.
Glad that worked out for you. After a day of watching my now 1.5 year old the brain fog sets in. I tried grinding Leetcode for a while but the pace of progress was glacial and nowhere near the recommended pace for BigCo interviews. I'm glad I went back to doing my own thing even though nothing has come of it yet. Doing Leetcode felt like memorizing party tricks that wouldn't even guarantee a job at the end.
Honestly, do you want a BigCo job? Would it make you happy? The experience of being a tiny cog in an unthinkingly vast machine is more alienating than you might think, even if you like the money.

I think lots of those who stay on long-term in that environment, say >3-4 years, effectively become institutionalised, condemned to spend the rest of their life philosophising about whether they can ever be L8 material. These are people who are, by and large, smart but not wise. Yes, the money is good, for an employee, but it barely equals what even a small business owner could make - and these are people whose smarts would allow them to thrive in the software niche, at least with a minimal amount of commercial nous.

The truth is that FAANG (or FAAG, considering what's going on at Netflix?) keeps these people there by creating a value system. If you've ever read the internet-classic 'Five Geek Social Fallacies' post (https://plausiblydeniable.com/five-geek-social-fallacies/), you'll know that people like us - frankly - are suckers for taxonomy. If you tell them that they are the best because they work for you, and the only thing that can make them any better as an engineer is creating maximum returns for the Borg, and surround them with others who mirror and validate that behaviour, they will fall for it for the rest of their lives.

Don't fall for it. There are a fuck ton of smart people at FAANG companies – that's one of the few marketing points which is unvitiated in its merit, they do scoop up very many of the smartest (again, smart-not-wise) people in the world – but that doesn't mean the only way to be smart is to join. It doesn't mean you - as a unique human being - will be happy there. Carve your own path, be suspicious of people selling you axiologies and hierarchies, find a middle road between excessive cynicism and excessive credulity.

It's something I consider every couple of years. But unfortunately I see a lot of similarities in the hiring process for much smaller interesting companies hiring remotely that seem to be cargo culting BigCo hiring practices. BigCo from my example were just the only ones to be open enough about what will occur during interviews. Is it something fulfilling? Probably not, but I have 5 years of practically unpaid work to get caught up on.
What exactly did you do during that block of time? As someone in a similar situation to you I'd like to begin getting some practice, but I'm not sure where to start. Are there any resources or websites that stood out as being particularly helpful?
> Leet code is very contrived. However, learning leet code, then applying it in an interview shows you have the aptitude to learn quickly.

I feel very strongly that this premise is flawed. It shows that you have aptitude for a very specific type of learning.

I lead an engineering org at a small startup. We teach our engineers to dive deeply into the customer value prop to find ways to deliver the simplest technical solution to their problem. You don't need leetcode skills when you can identify simpler, more accessible solutions to a customer's need.

The reality is outside of very specialized technical businesses (or business components), most engineers jobs are not to build technically advanced solutions.

Yes, exactly this. Leetcode isn't just an irrelevant skill in these situations, it's the wrong skill. Algorithmic optimisations are pointless if you can't assess how much value they generate.

MAANG seems to use Leetcode as a legal proxy for conscientiousness and IQ without testing for other relevant qualities such as strategic insight, creativity, and other skills that are essential for a successful business.

There's no problem with testing for basic coding ability, but if you're not selecting for broader skills - preferably with some diversity - you get the same old leet monoculture causing the same familiar delivery and stability issues.

I think this style of interviewing also serves as a proxy for age discrimination and/or to detect personal work/life balance values that don't favor the prospective employer.

If you aren't willing to dedicate a considerable part of your unpaid, personal time to an activity that they mandate, you aren't a good fit for them.

I agree. We lost two of our worst performers to FAANG companies. They were both junior and came from top schools. Communication was a huge problem and both wrote very sloppy code. We would assign trivial tasks to them that would take an average developer 30 minutes or less and they would struggle even with heavy mentoring. I was the mentor for one of them and I really tried my best, but there was little improvement over several months and luckily they moved on.

Now I'm mentoring two devs who didn't study CS in college and only completed a coding bootcamp and they're working out amazing.

Yup this is a pattern I’ve seen as well and why I think Leetcode is on the way out. People will figure this out
> algorithms are useful and learnable, but some companies take it too far.

This is my take too. So I don’t see where the disagreement lies.

Except it’s not just some companies doing it. All companies paying over a certain threshold seem to be taking this to ridiculous levels.

And please do share your ideas for what people should do or what finally convinced you that you weren’t bad at this

> All companies paying over a certain threshold seem to be taking this to ridiculous levels.

They can afford it. And assuming they are a tech company, they need that in key roles. You cannot write things that scale without solid knowledge and intuition in designing and analyzing algorithms, something that can be learned and furthered through experience.

Now of course it's true that not every job in a larger tech company is like that, so there would be some room to adjust the interview based on the exact role. And there actually is. But overall, if you have a massive amount of people applying every week, why take chances, why not take someone from the pool who can demonstrate the skill and allow for some horizontal movement within the company, into a tech-heavier team?

> And please do share your ideas for what people should do or what finally convinced you that you weren’t bad at this

For me, back then, it was something that was fun for me. Part of why I got into computer science in the first place. I would be totally lying if I said I didn't study for the most relevant of my interviews, beyond what I would have done without them.

But I distinctly remember for example freshing up some graph algorithm skills not by doing leetcode examples (I don't think "leetcode" was already a thing back then), but by arbitrarily taking the Debian package database and do fun self-made exercises like: Let's find the largest strongly connected component in the debian package library, i.e. the largest set of packages where installing one will always install all of the others.

I work at a mid-large tech company ~5k engineers.

> You cannot write things that scale without solid knowledge and intuition in designing and analyzing algorithms, something that can be learned and furthered through experience.

The point is not whether people need to learn algorithms, they of course need to, but that Leetcode questions seem to test people’s ability to solve riddles more than their ability to design algorithms

Bingo – I've seen some of the interview requirements – like 20 mins to solve an LC medium, and you can only hit "Run" once so you have one shot...!?!?

Basically if you weren't already familiar with the question and knew the trick you're screwed.

Plus they're really blatant about it too – the recruiters will _actually tell_ you to practice LC, and to try again in 6mos/a year if you didn't make it this time!

> the recruiters will _actually tell_ you to practice LC,

Here they do this before you even take the interview for the first time

The recruiters actually email me all the leetcode prep material and tips

Exactly, even before the first interview, that’s what I’ve seen too
> The point is not whether people need to learn algorithms

No, I said design and analyze algorithms, which is a distinct skill from "learn algorithms" (although that certainly helps). And which is certainly very riddle-like.

At some point the metric becomes the goal itself.

Ie. Leetcode style programing is/was used to filter out engineers that couldn't program. And the problems themselves were relatively easy, reverse a tree, build and LRU (which is not trivial at all).

But then there is an army of prep information, and people are just optimizing for Leetcode style programing. Then companies have to raise the bar again, and keep asking even harder questions. ie. build LRU from scratch was considered hard, now it is just a 'medium' level.

It has taken to stupid levels, where it is not anymore a metric of 'is this person a good engineer', but more of a 'how much this person did prep'. i.e. it becomes a measure of effort and desperation, and not just sheer ability.

That's why you see so many stories, of engineers preping for leetcode only, getting in, and not being able to do their job and getting piped....

Also, personally, the best thing that I did to make me a better engineer was creating an app, a backend, and full service, with paying customers. That taught me much much more than spending months on leetcode ever did. Brushing up some CS concepts and Data Structures, and some coding, does help you to become a better engineer. But doing just that, it doesn't make you a truly useful engineer at all.

Exactly! 10 years ago, I was a strong proponent of leetcode style questions instead of using college GPAs to hire engineers.

It’s the ‘Cracking’ idea that has thrown this whole process off. People have started over optimising for the metric

And it may be worth observing that, as far as I know, this sort of thing is totally unique to programming. No other branch of engineering does it. I've certainly never had to do any unusual prep for an interview--though, admittedly, my handful of jobs since just out of grad school have all been through people I know.
Here's the thing, large tech companies aren't looking to hire engineers, especially juniors, who are great at being an engineer because that's incredibly hard to test for in an interview and almost impossible to scale fairly. They're looking for people who will devote their life to the company and can quickly learn new skills. That's exactly what leetcode tests for, so it really isn't surprising at all that every tech company does leetcode interviews. Really the answer is either commit to the grind or go for a job at a non-tech company.
> devote their life

Sounds like they are trying to breed a cult...

They are exaggerating but not all wrong. As hiring manager my job is not to train you for your next job. I'm hiring for productivity and that takes time. If you are going to jump ship before you "pay" back the company then I'd rather skip on you. There is no test but I want 2-3 years if you take 9 months or more to get going and I'd be foolish if I didn't want more.

Lots of programmers think they are 10x but few are. Even my best senior engineers took 2-3 months to settle in and contribute more than they take and juniors are bigger gamble.

The best proxy now is will you spend 1 hour on a simple set of tests, if not you are not serious or are shopping for counteroffers.

More like, sounds like the parent comment you replied to has no idea what they are talking about.

I worked across a couple big tech companies mentioned in the thread, and I've met maybe a couple coworkers at most who "devoted their life to the company". And that's across almost a 3-digit number of people i worked with in some capacity over the years. People take vacations often, they work 40 hours a week or less on average (over the year).

One big thing about most teams at big tech companies (probably sans Amazon, from what i hear, haven't worked there myself) is the work/life balance being an important priority. We had a manager giving stern talks to the few teammates who would reply to work emails on their days off ("you left for a week of vacation in Hawaii, why are you replying to work emails or even brought your work laptop with you? Please stop doing that and enjoy your vacation, everything will be totally fine when you come back.").

I don't even care to defend any company, that's their problem. But seeing the whole "cultism" and "expected to dedicate your life to the employer" accusations just make me feel like I am reading some alternate timeline fiction story.

I didn't mean it in a "cultism" way at all. I was more saying that the point of leetcode isn't to discover if someone is a great engineer but to discover if they are capable of becoming one. Big tech figures if you're capable of becoming a great engineer you either already are due to experience or soon will be because they'll make you into one.

They've decided things like ability to devote time to a meaningless skill that is required to get the job, attention to detail, and problem solving skills are what is required to become a great engineer and see that letcode is a good way to test for those things at massive scale.

> an quickly learn new skills. That's exactly what leetcode tests for

I don’t know where people get this idea. Leetcode used to test programming proficiency

I feel the only reason companies continue to take leetcode to absurd levels is because (a) they think harder questions would get them better engineers and (b) other companies are doing it

> Leetcode used to test programming proficiency

The discussion is exactly this, that leetcode is used to test programming proficiency, but it's an inadequate bar.

The parent is postulating that it's a lie; that actually leetcode tests for malleability, and we're getting bent out of shape because we think it's a poor test of coding ability.

However it might be a good test of malleability, and that might actually be it's intended purpose, but that's not communicated.

I don't know about malleability, but I know Big Tech uses it to filter down the number of applicants. They get 200 applications in an hour so HR needs a way to pick a few that won't get them sued.
Understandable when big tech does this.

200 person tech companies are doing the same.

Not quite but almost: Leetcode doesn't evaluate programming proficiency but ability to solve complex and abstract problems using programming. Doing so doesn't require being good at programming but being good at solving problems, and doing so using a programming language. It doesn't require knowing a language well, but only well enough to solve the problem.
> It doesn't require knowing a language well, but only well enough to solve the problem.

I guess that really depends on the language. IMHO, if you can solve a reasonably complex problem using a language, you know that language.

This doesn't seem right at all. I can kludge together a solution to an arbitrarily complex problem in any language, but that doesn't mean I'm writing it in a way that can be extended and developed upon by other people. The latter is also what takes up the majority of development time.
A one-day interview can't test you on things that take up the majority of your career time.
I am on the interview team for the company I work for and I wrote what some consider to be our canonical python solution (fastest and simplest) for one of the problems we use. I had to look up the syntax for a "for loop" because I hadn't written python since my first year at university. To me, being able to stitch together simple concepts present in almost all mainstream programming languages doesn't mean I know python, it means I know how dynamic programming works. I don't know the python ecosystem (history, present, or future), know the standard library, know what idiomatic code looks like, deeply understand what makes the language unique, have the mindset of a python programmer, etc. Maybe I just have a high threshold for feeling like I "know" a language.
i did a leetcode interview in c++ and didn’t remember some syntactic details of lambdas and that was the end of it. please stop with this nonsense that interviewers are understanding and that you can look things up or that you will be able to take your time to produce the optimal solution to a problem.
Well I can't speak for other interviewers especially at other organizations, but I try very hard to make it a positive experience. In fact I'll give as much help as necessary to get to a working solution, within reason. I would much rather fix the lambda syntax myself or help the candidate find an example on stackoverflow so we can go back to the interesting part. If the interview ends with a working solution but needed a ton of help, the candidate probably did not pass but maybe they learned something. And maybe they'll tell their peers that it seemed like a place where they could fail without embarrassment, collaborate, and learn.
I've had zero or near zero gotcha string problems in my professional career, which are many of the leetcode problems.

Find the (gotcha) in this string and emit len(gotcha) ... Now do it computationally efficiently (or be able to explain tradeoffs to other resources).

Don't forget: in 45 min, without bugs
oh and do it in Go* ... Good F'ing Luck .

Go makes normal string operations tricky due to rune being an alias for int32, ranging a string gives []byte indexes ...

https://go.dev/play/p/33jCwNG6Eu6

It's a bit sucky but you can use the standard library function "utf8.DecodeRuneInString(a)".
String problems are rare, though may come up more in search engine companies.

But manipulating sequences comes up a lot in many contexts. Usually it's sequences of more complex things: instructions, packets, files, polygons. It's hard to assign tests directly on those, because you have to explain the objects themselves first. So it's a reasonable shortcut to test ability to manipulate sequences of characters.

You mean simple abstract problems, right?

LeetCode problems are solved with under 50 lines of code, using textbook models.

This is fine, except when the candidate knows substantially more than the interviewer about how to solve the problem. I was once asked to implement a spsc circular buffer, and I used C++11 atomics rather than a mutex. I wrote up a working solution, but most of the interviewer's followup questions fundamentally didn't map to my wait-free solution. I spent most of the time explaining to the interviewer how atomics and non-blocking algorithms work. The FAANG rejection email came a few days later.

So I don't think these interviews evaluate the candidate's ability to solve complex and abstract problems. They seem to evaluate the candidate's ability to grind contrived sophomore-level computer science homework. Experience solving the real-life version of the problem rather than the academic one is unwanted.

this illustrates the problem very well. your lock free solution is superior yet the interviewer had no clue and you only know about this solution due to experience which is not what leetcode optimizes for.
As I understand it, programming is only part of it, a big part is just seeing if you will study hard to learn meaningless stuff
If they’re so interested I have a massive catalog of things that can fulfill such a requirement.
> Really the answer is either commit to the grind or go for a job at a non-tech company.

There is quite a world outside these mammoths Google/Facebook/Amazon/(MS, depending on how their IBMization is going these days) and their minions/wannabes. Personally I would not work for any of these even if they paid me in gold bars.

Off topic: what’s this IBMization at Microsoft?
I appreciate the cynicism but isn't it more likely that they use it just because everybody uses it?
Yeah, it's clear these people have never hired for a company. I've sat in on a thousand hiring committees, helped design these processes, all that boring shit, and the idea that someone would say "let's do Leetcode challenges so that we select for people who are willing to subordinate their lives to our company" – presumably followed by a "mwahahaha!" – is fantasy, it's something out of a movie.

I mean, look, it sucks when you can't get a job. I've been there (when I briefly tried to escape programming for a different metier) and it's awful. But pretending that the entire outside world is a dark mass of malevolent forces arrayed against you.. well, it may be psychically necessary in some Freudian, Jungian sentence, to prevent ego death or whatever, but in the long run it's neither (a) true (obviously), and (b) nor is it going to do your mind and mindset any good.

(comment deleted)
> But pretending that the entire outside world is a dark mass of malevolent forces arrayed against you.. well, it may be psychically necessary in some Freudian, Jungian sentence, to prevent ego death or whatever, but in the long run it's neither (a) true (obviously), and (b) nor is it going to do your mind and mindset any good.

Maybe you can post this in the endless Russia threads posted here, which seem to have crowded out the endless China threads.

I guess what you're saying is that apprehension about the motives of of corporate executives is so irrational, it's akin to a psychological problem.

It is low of you to conflate the two. While both companies and russia pursue goals in somewhat pragmatic manner, the former aims to maximize profit while the latter aims to execute an entire nation and take their resources with calculated brutality (most war crimes committed were under direct orders).
> I guess what you're saying is that apprehension about the motives of of corporate executives is so irrational, it's akin to a psychological problem.

No, that wasn't what I was saying there, but coincidentally, yes, I would agree with that statement. For one, 'corporate' is a phenomenally lazy word used to invoke some mental image of besuited sociopathy, from a million children's movies and internet debates. In the real world, 'corporate executives' - human beings, mothers and fathers, working in management careers at (large) companies - are humans doing jobs, like any other humans doing jobs.

I've been involved (as an engineer) in C-level meetings with people like that, as well as worked alongside them in the same teams, and my experience - thoroughly unsurprisingly given what I said above - is that they are pretty ordinary human beings on the whole. I'm sure there are differences between companies in terms of their cultures or values, but that's company-specific and not discipline-specific or seniority-specific.

I get that your experience is that these are people who mete out decisions from on high, which affect you in sometimes-negative and always-unforeseen ways, and that makes you feel like a mediaeval peasant might have felt towards his feudal liege. And maybe it's helpful, from a cathartic standpoint, like I said above, to picture them as evil baddies from kids' movies. But no, the reality is more banal.

(Incidentally, I think those who worship company CEOs - and suchlike - are equally stupid, from the Elon bros to the HackerNews types who recite stories about startup founders as though they were superheroes. These people underestimate the role of chance and – in a way, very similarly to you – overattribute the differences between execs/founders vs regular workers to a proportionate difference in their inner essence [in their case, they think intelligence & industry; in your case, you think amorality]. Both are fantasies.)

Yup exactly, that’s the whole thing. They want people who will devote their lives to meaningless tasks
> They're looking for people who will devote their life to the company and can quickly learn new skills

This doesn't reflect my lived experience in SV. People I know who learned leetcode skills and got into big companies usually work less than people who passed more practical tests and get into smaller companies.

I'd say big companies are trying to hire employees who are a "good" mix of:

1. Smart

2. Conscientious / willing to work hard on the right things

3. Existing CS knowledge you know well enough to explain and apply.

For some vague handwavy definition of "good"

(2) is probably worth expanding a bit. Many people are willing to work very hard on the wrong thing, this extends to engineering. As an example, a common failure pattern you might see is someone constantly struggling with how React works and what they really need to do is sit down and read the ~15 pages of documentation. But they never do, and just keep putting in 10 hour days with subpar output.

I've met some legit geniuses (think Putnam winner) for whom basically no studying was required to pass these interviews. Companies paying top dollar are happy to have them. For people like who are less smart and need to dedicate ~100-200 hours of focused studying and practice, companies paying top dollar are happy to take our mix of smarts and willingness to do that work. But once in the company I haven't noticed any expectation to "devote my life" to it.

Right, I think you've explained it better than me. I was just going for the idea that the point of leetcode isn't to figure out if someone is currently a great engineer, but if they have what it takes to become one. Everyone complaining that leetcode isn't related to their day to day job is missing the point.
Woodworking is also a learnable skill that's completely unrelated to on-the-job activity.

Why not ask candidates to build a desk? As a take-home project! If you're truly kind, you'll let them keep the desk even if they don't get the job.

The algorithm test is standardized. If you make up your own weird test, candidates won’t play ball. Personally I’ve turned down companies that had a strange interview process that required extra preparation. It’s not worth it when I’m trying to churn through a dozen interviews (without my current employer noticing). The leetcode prep process is unpleasant, but since I have to do it anyway, adding one more company doesn’t take any extra studying.
> Take it to the other extreme and you get folks who can’t even solve fizzbuzz. So some coding bar is good.

Sounds like the epitome of a slippery slope, to be honest.

Some people are going to say FizzBuzz (or similar) are a good enough bar.

More people are going to say 2Sum is a good enough bar.

Even more people are going to say Longest Common Substring is a good enough bar.

{...}

And the cycle will continue, because people who will have been asked such things will (most of the time) feel like 1) they've been asked it before, so now they must ask it, 2) they can solve it and feel anyone can solve it (in theory this is fine but in practice, not everyone can solve a problem in 45 minutes that they've never seen or never fully solved before).

Which reminds me of when I was going to college and I frequently had professors or TA's say X problem from the problem set is an "easy" one. Well, yeah, you're the professor or TA (for a reason) and you're the one giving it, of course you'd know how to solve it and such.

I recently went through a round of interviews at big tech companies, and I found that the coding questions were less stressful than I was initially worried about. Leetcode problems are fair, and it just isn't true that you need to know the trick to pass. It allowed me to get in the door at a company I would have had no chance with otherwise (no CS degree, no top school, small no-name companies, etc)

System design on the other hand... that can be hard to prep for!

The reason companies provide so much info upfront, and even send candidates to leetcode.com, is so that everyone knows what to expect. Not everyone is on HN or is even aware of these types of interviewing trends.

If you can leetcode, there's decent chance you can program other things well. If you can't leetcode, there's decent chance you can't program other things as well.

It's just a simple filter with the usual caveats of false positives and false negatives.

Just practice it. It is a skill in itself just like anything else. It is true that it doesn't actually measure your real skills, but just like an IQ test can be corollary with lots of other mental faculties, leetcode skill can be corollary to programming skills.

I highly doubt that we are talking 3-4 months of memorising riddles. There are a few recurring concepts that you should memorize, sure. But after that, if you have the programming and logical thinking skills you claim to have, you should be able to think on the spot for the rest of the leetcode question.

I’d say just keep on keeping on. I personally have and will never work at a place that does leetcode challenges during the hiring process. I wouldn’t worry about it. It’s a self-filtering process for places you don’t want to work anyway.
You don't need to completely avoid SV-style companies as some people recommend. Check out: https://github.com/poteto/hiring-without-whiteboards.
I like the idea of this list but in practice there seems to be a lot of 'hiring without witheboards *if you happen to interview with the same team that I did and if the hiring manager for that team hasn't moved on since I interviewed there 4 years ago.'
Get good at leetcode because it's not that hard and the best way to make tons of money as a young person.
I couldn't care less about leetcode, I literally have done less than 10 leetcode exercises in my life. I have been getting hefty pay bumps every 1-2 years since I graduated, and there are no signs that curve is flattening. FOSS / side projects and soft skills seem to be pretty underrated by most developers.
I’m in similar situation… it’s been two years since I graduated from college and I have done literally less than 10 leetcode problems so far… but I do spend a lot of time on my hobby projects and it served me right for getting jobs as a mobile engineer in some good startups.
Google dropped the college degree requirement but retained the leetcode interviews, so it must be working somewhat well for them. They have access to more data on this than any of us.
It's important to emphasize the last part of your sentence: it must be working somewhat well for them. That doesn't mean everyone else should be asking these questions, because your ideal hires might be quite different from Google's.
no, google's interview style didn't work for them. now they have the problem of having tons of junior leetcoders and need to hire a ton of technically savvy managers to ensure their efforts aren't wasted.
You just have to practice. I used to be quite bad at it, but I've improved greatly.

Here's what I recommend: start with a specific topic -- maybe HashMaps, Graph Problems, Dynamic Programming, Greedy Algorithms, whatever. Start with the easiest problem on Leetcode for that category and work your way up to a "Hard" problem in the same category. It helps build a mental "muscle" for that type of problem, and it will be easier to activate that "muscle memory" whenever you have to brush up on Leetcode again for your next round of interviews in the future.

> The no-whiteboard companies are very few

I would disagree. My guess is you are only going after top tier companies. It is okay to have a job with a company that is not a household name.

I’ve seen the no-whiteboard list. Almost none of them hire “outside their time zone”
The no-whiteboard list represents at best, a small sample of the total list of companies that don't require whiteboard interviews. Hanselman talked about dark matter developers, the unseen 99%. The same principle applies to companies. In other words, there are tons of jobs out there flying under the radar.
How do I find them? Or how do these companies find me?

I kid you not, I’ve received messages from 200+ companies over the past 3 months and all of them have the leetcode round as their first round.

When you say leetcode, are you talking about leetcode questions, or just algorithm/CS questions?

I've been asked a wide range of interview questions from "what's a cache" (I answered "would you like to me to cut to the chase and implement lru cache in python?"), how many steps does it take ants on a stick to fall off (https://physics.montana.edu/avorontsov/teaching/problemofthe... the interviewer said "it's easy if you just think of them as virtual ants that can pass through each other"), "what's the average waiting time for a bus that comes every ten minutes" (interviewer could not answer some of my starting questions like, "what is the arrival distribution- every ten minutes, or is that just sort of an average, is it poissonian, are the buses interacting with each other, etc", "implement quicksort" (got this wrong the first time I interviewed at Google).

When I interviewed at a company recently a junior employee administered a question straight out of leetcode, with the data inputs and outputs completely unchanged. I exited the interview and contacted the CEO directly to say that if that's how they interview senior staff, it's not the company for me (I wouldn't have complained if they'd changed the inputs/outputs or slightly modified the problem, or came up with their own interesting variant).

Because we need some signal that a candidate can program and do something a little more complicated than fizzbuzz.

The homebrew creator shouldn't have been hired at Google if that was his attitude. Also, homebrew sucks and many googlers try to avoid it if possible.

My suggestion is to start with the easiest leetcode questions and memorize the answers and type out the code and run it with various inputs.

I am talking about the kind of questions you would get if you went to hackerrank right now and took an SDE interview with any random company.

> homebrew sucks and many googlers try to avoid it if possible

Huh? What do they use then? I wonder what makes a Google engineer with a MacBook different from any other engineer with a MacBook that only Googlers in particular are avoiding brew

I've done SDE interviews with random companies (and administered them), although normally they are called SWE in the bay area.

Many of the questions in leetcode have a skill rating. The easy ones- I expect most programmers to be able to figure out in 30 minutes and type out an answer. The hard ones- those are for people (as you say) doing programming competitions, or who are doing CS research and have a lot of prior knowledge and skill, or for extreme coders operating at the 10X level.

I think many people have moved to macports. In my experience, the Googlers mostly do dev in the cloud and don't depend on having custom software installed on their machines. Also I think the other big problem was that half of homebrew is broken any time you try to install something complicated.

> I think many people have moved to macports.

I did the opposite. Macports reliably broke itself every three or four months under ordinary use, and Homebrew's package selection was much more useful to me, so I switched. I also think the Homebrew CLI is above-average, ergonomics-wise.

Granted, that was about 10 years ago, but exchanges for/against brew and macports looked awfully similar then. But maybe it got better, I dunno.

They still both don't work as well as linux packaging.
I prefer it to all of those that I've used, which is a lot of them—for the specific use case of managing the tools I use on my workstation.
I am not sure why people bring up the homebrew author's case to justify the argument that "leetcode question = bad intervew question". I mean, I hate many of those leetcode puzzles, but "inverting a binary tree" is not one of them. IMO, this particular question is a good one. It is a simple manipulation on a simple data structure. I think at least a good programmer can probably discuss with the interviewer, take some hints, and write _something_? Instead, that tweet gives me a feeling that he didn't like the question and refused to think at all. Everyone knows that Google asks tricky algorithm questions, did he expect to get some special treatment because he created homebrew?

Homebrew is popular, and is indeed a very successful project, it is just not very well designed. Let me quote the author's own words:

> https://www.quora.com/Whats-the-logic-behind-Google-rejectin...

> I wrote a simple package manager. Anyone could write one. And in fact mine is pretty bad. It doesn't do dependency management properly. It doesn’t handle edge case behavior well. It isn’t well tested. It’s shit frankly.

> Is it any surprise I couldn’t answer their heavily computer-science questions well?

> On the other hand, my software was insanely successful. Why is that? Well the answer is not in the realm of computer science. I have always had a user-experience focus to my software. Homebrew cares about the user.

> Also, homebrew sucks and many googlers try to avoid it if possible

Google is more than welcome to come up with something better...

How do you feel about assessments in other professions? For example, the bar exam for lawyers? X Engineering Certification for the specific fields? Even networking and security folks take certification and exams as a means of attesting proficiency. Are these things accurate? Is there a better system? No idea. Software engineering's processes are more adhoc, but can be categorized similarly. We're looking to answer the same question: Is this person competent? Resumes / CVs often aren't sufficient for the examples above.

We do the dance when we swap jobs, other professions do the dance as their licenses / certifications expire periodically. I'm sure there's an engineer somewhere that struggles with anxiety when attempting their Engineer in Training [1] certification too.

In short, buck up.

1 - https://en.wikipedia.org/wiki/Engineer_in_Training

> We do the dance when we swap jobs, other professions do the dance as their licenses / certifications expire periodically.

The huge advantage to the latter is that it decouples the license exam from changing jobs. This helps for two reasons:

First, it means that the friction of the recertification doesn't coincide with the friction of switching jobs. It's a lot harder to leave a bad job when you know you'll need to review for the "recertification" for a month before you can start interviewing.

Second, in these other fields your employer has a vested interest in keeping you certified, because you can't keep working if you aren't. This should mean that they're incentivized to help with the process, rather than it being something you have to take full responsibility for and do on your free time. In software, not only do your employer and coworkers not help you study for "recertification", you have to actively keep it a secret that you're grinding leetcode lest you tip them off that you're looking to switch jobs.

I'm not disputing that what we do as an industry can't be improved. I'm primarily against the idea that our profession is unique, and people should take us at face value when we claim expertise. Validation by employers is looked at as an undue burden. We have perks in this industry: For the most part no one cares about your education background and often not even your experience as long as you pass the interview. It's hard to have both those perks, and expect some of these hoops to disappear.

Should the hoops be a take home assignment? White boarding? Pair programming? A new governing body that offers a license? Not sure, but something will exist, and your anxiety and need to prepare likely won't disappear.

If the bigcos had any interest in this, they'd have created such a cert/license. At the very least, they wouldn't make candidates who'd previously passed their interviews, and perhaps those of similar companies, multiple times, do it again.

Since they haven't created a cert, and they do make people re-test, they're clearly doing it for purposes that aren't served by those actions.

For one thing, I don't think they'd be happy about any change that makes it easier to leave. Imagine what'd happen to comp at these companies if you didn't have to do yet another goddamn leetcode gauntlet every time you switched.

In theory, I'd be cool with taking some sort of standardized engineering test every N years. In practice, software engineering is pop culture and I'm not sure what those tests should contain or who I'd trust with creating those tests
Upvoted because I think you bring up an important question. In many ways, leetcode style whiteboard exams are the BarrierToEntry(TM) for our field.

My problem with this analogy is that our field has no examinee "bill of rights" that slowly evolved over time (often hundreds of years or more) in some of these other fields. We (software developers) have no idea who will be conducting our exam, how they will be grading it, or whether it will be done consistently. We don't know if the graders are competent. There is no clear and defined study path, nor do we get any feedback. The exams appear very suddenly, when we get an offer for an interview, we have very little control over how and when the exam will take place. And lastly, we take them again and again and again, every time we interview.

I've read that people suggest several hundred hours of prep on leetcode to get ready. When I interviewed at Google, my lunch interviewer (no coding, just a conversation) told me that when he got an offer for an interview, he asked for and received well over 6 months to prep, and he studied intensely the entire time. Now, for the bar, I'd understand this, because passing the bar doesn't require getting hired by a particular firm. But if he'd missed google? Well... I suppose there are other companies, and the prep would have you ready. But also - these interviews can take all day, and there may be multiple rounds. Hundreds of hours of study and several all day exams? That actually sounds like something approaching the bar - but for just one company that can capriciously throw you out, with secretive processes and no accountability at all.

Law firms don't run the bar exam. They respect the results, and I suppose some might volunteer or work as professionals, but Dewey Cheatum and Howe does't run the bar. Also, large law firms don't claim that there is a critical shortage of lawyers to hire, all while running a makeshift, privately administered bar exam that they acknowledge results in an extraordinary high false negative rate.

I'm not sure if there is a great alternative to leetcode interviews, and I actually do respect the right of high tech companies to hire as they please. But I sure have no sympathy for companies that rely on these interviews and then wail about a shortage of people to hire.

Software engineering as a profession is relatively young. I'd be very happy if we eventually end up with a license that can be revoked. Cause a large data breach? The board investigates and revokes your license, much like if you were a civil engineer who caused a bridge to collapse due to negligence.

There's tremendous potential in this space for a startup, but nothing seems to have stuck, which demonstrates the difficulty of getting companies to trust a third party. They'd almost always rather trust their hiring process flawed though it is.

I think your educational merits should carry some weight. Seems to almost ignore this is industry standard.
I know leetcode hate is a popular theme on this website but frankly I think it’s overblown. You can basically solve any leetcode easy or medium if you understand like ten basic concepts (that you should know anyway) and then spend maybe a week reading solutions for the more trick questions. Leetcode hards require more memorization, but honestly, if we’re going to talk about pointless studying take a look sometime at what med school and law school students have to do.

In perspective, is 3-4 months of studying to get a job really that big of a problem? I spent longer than that studying for the SATs.

I think the hate isn't for the 3-4 months of studying to get your first job, it's the sense that you'll need at least 1-2 months of studying to get every subsequent job (since you won't be touching leetcode-like problems in the course of your actual job). That's not a big deal when you're young, single, and childless, but it's overwhelming if you don't have a lot of free time.
> (since you won't be touching leetcode-like problems in the course of your actual job)

That is not universally true.

2 months of studying every 2 years for job switch is 8.3% overhead. Do leetcode jobs pay 8.3% more after-tax than non-leetcode jobs?
Probably more like 100% more tbh.
Yup, 200k -> 400k, sounds about right

So I guess try to get your first LC job before your personal life gets demanding, then hold on to that job for dear life so you don’t have to grind LC again?

This is a decent strategy, I approve.
Is this the norm in the US/SV?

Very skeptical of someone who switches every 2 years... you also become only really efficient after 6 - 18 months.. not only the code / legacy / wider system your stuff integrates with, but also socially knowing all the right people, context of all the bigger processes, a good chunk of domain knowledge ingrained??

It’s quite common among the Silicon Valley scene during the tech boom. People bouncing between startups or even between FAANG level opportunities. Switching companies annually even (though not for many successive years).

Sometimes it’s not the worst strategy as the hidden truths of a startup reveal themselves over the course of a year or two.

It's surprisingly common, and a great way to filter out candidates if they have a history of job hoping.
People under 35 change on average every 20 months in the US. People who are focused on salary and career achievement. There are a lot of people who get a job and blank out on cruise control and wake up 10-15 years later and wonder why everyone else is making more than them. But the talented people are usually switching every 2-3 years. It's not uncommon for someone to spend an extra year at a company to have a child, plan a marriage.
Your math is wrong. People aren't literally doing LC for 2 months straight without eating or sleeping. If we assume it means you study for 2 hours a day that's only an overhead of 0.7%. I still think that's an overestimation of the time you would actually need.
> it's the sense that you'll need at least 1-2 months of studying to get every subsequent job

I think it doesn't have to be this way if you focus on the fundamentals when you prepare, as it's easier to refresh a reasoning that clicked the first time than a complex algorithm you understood only superficially. And these fundamentals are enough for leetcode problems of medium difficulty.

I'd love leetcode-type tests if you only had to do it once. Or even with a smaller every-five-years refresher to retain certification or whatever. And then not worry about it at all during interviews.
SATs are also a very bad way of evaluating anything meaningful
They're useful as a second piece of evidence if, like me, you did poorly at classwork because of undiagnosed ADHD.
YMMV. I studied zero hours for the SAT and did well. There are honestly no hard questions, just a lot of them in a short time.

I have studied at least a hundred hours for leetcode and I still have never passed an interview at a well paying company. Leetcode hards are legit hard.

Yeah people in India/China spend 2-3 years grinding complex maths/physics puzzles just to get into a college and Americans can't put in a few hundred hours of hardwork to get a high paying job. It's probably lack of rigour in American schooling system that's behind this entitled mindset.
If the grinding is not going to translate into a business advantage, then it is pointless.
A lot of those people in India and China commit suicide, have mental breakdowns, or end up living generally unsatisfying lives. Their system is entirely unenviable.
OP here.

I’m in India. People spend 2-3 years grinding leetcode questions too. So you can imagine how difficult the tests have become over the past few years and how pointless this whole test is.

There's a difference between 'entitlement' and recognizing that a system is flawed such that it doesn't necessarily select for the best candidates, only those who are willing to play the game hardest, which doesn't necessarily correlate with the best on the job performance.

The zero sum burnout games many Chinese and Indian students play are also a good example of such a system, and I think it's a positive feature of American culture that it's objected to.

You are right. The problem is not solving the question, but solving it in 15 minutes with the optimal algo/data structure. Practicing can easily get you there. Also. In the grand scheme of things it's nothing compared to the job/comp bump.
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.

what if you have code that is available publicly?

doesn't that prove you have experience?

(comment deleted)
> Ever since 'Cracking the coding interview' was released, every company's interview process has become like Google's and Google didn't have a particularly great interview process to start with.

> The no-whiteboard companies are very few, hardly ever seem to have openings and not hiring junior engineers.

Both those statements are false.

There are plenty of places, both small and large, that don't do leetcode interviews. There are places that don't do whiteboard interviews at all; there are far more that do have you go to a whiteboard but don't have you do leetcode there (my own company is such a place).

Personally, I don't grind leetcode at all. I know what I know. If a company wants that, fine; if they don't, I'll work somewhere else. But I am far from junior. For a junior programmer, it may be harder to get the first job, and leetcode may open some doors. But the absence of leetcode doesn't close all doors - far from it.

What we care about is, can you code at all. We give a problem that is a step above FizzBuzz, but not all that far above it. Can you write code that does something like that? Can you think through the problem? It's not a "you have to find the trick" problem at all. We don't care about whether people can find tricks. But can you code at all?

We aren't alone.

I'm a senior sysadmin/devops guy. I'm not a programmer per se, but I can and do write a fair amount of code, usually Bash, Python, some PowerShell. I had an interview not terribly long ago whereby the interviewer was asking me as a sysadmin if I could write and compile programs in C++, Python, and a few other languages. I told him that my role historically didn't include these things. I told him I write code to primarily automate things. He asked if I could write programs from scratch--systems stuff and turn out MSIs. I told him no. End of interview. I've never stated I'm a programmer, it doesn't appear on my resume as anything other than scripting for automation or writing small tools to do something weird or odd that the built-in tools cannot do. Anymore, it seems that companies want people to be able to do everything. Same guy asked me about how good I was at setting up a router and switches from scratch. Networking is voodoo. It always has been. Sysadmins typically are not networking guys. Networks need to be run by dedicated network admins. It's a full time job in and of itself. I miss the late 90s and early 2000s when things were more clear cut in terms of roles. Editing to say that so many people in "leadership" positions don't understand the nature of scripting. They conflate it with systems programming. The two are vastly different. I was taught in college to keep scripts as small as possible. This has been echoed by mentors over the years. One mentor who was a veritable scripting rock star who now works at Google told me that if it's over a couple of hundred lines, it needs to be in a systems language, even things like Python. Compiled programs, of course, always run faster. But that's not my world. I live and breathe making servers run, tuning, etc.
Many—maybe the majority of—software development jobs aren't gated behind these kinds of problems. Or, if there are any, it's one or two from way on the easy end of the scale.

But most of them merely pay very well, instead of ZOMGWTF well, and you'll be writing software in probably Java or C# to help out boring but profitable companies, rather than doing flashy startup change-the-world (LOL) stuff while burning VC dollars, or being in the advertising business.

> What would be your advice be to fresh college graduates, or anybody for that matter, who are good at programming but not at leetcode? Surely there must be a way to demonstrate their understanding of algorithms without having to spend 3-4 months memorising riddles

If leetcode is necessary for interviews in your city, train leetcode. DO NOT MEMORIZE. But, do simple exercises and work your way up to harder ones. It is learnable, but memorizing is just about the worst way of learning it. You don't have to burn yourself out either, go by pace easy for you.

Not being good at leetcode is not some kind of helpless unfixable state.

there are a lot of things in the world that seem unfair or unreasonable. often it's because they are. complaining about it can be satisfying in the moment, and if enough people complain, it might eventually change. but reflecting on how unfair or unreasonable something is does not help an individual achieve their goals.

as a fresh college grad, you have to decide whether you want to work at a company that does leetcode interviews. if yes, you have to practice them until you can pass the interview. if no, there are plenty of companies that don't do this style of interview. they just don't get discussed on hacker news as often. unless you are an incredibly well known engineer, there is no third way.