Ask HN: Did preparing for LeetCode type of interviews improve your skills?
I'm not new to the field and I have nearly a decade years of experience under my belt. I'm currently job hunting and decided I'm not gonna shy away from LeetCode type of interviews as before (I used to refuse to proceed with any company that had this as part of their interview process) and actually give it a shot.
As I'm doing some Hackerrank/LeetCode exercises, I'm actually enjoying solving these puzzles. I'm wondering if anyone who went through this prepping for an interview ended up being technically better overall. I know that I rarely needed this kind of skill in my career, but also I'm wondering if there were cases where I did need them and I didn't know.
Cheers!
191 comments
[ 4.2 ms ] story [ 221 ms ] threadAnecdata: In Europe but have had more than a handful of these nonsense Leetcode tests. Normally for companies with an inflated sense of their own worth - but possible to spot this from their mission statement, website, etc. and avoid them.
This is also my experience, crappy Berlin startups that pay poorly and expect you to jump through hoops and work long hours. I switched to contracting and haven't had to do any of these silly tests, I usually discuss the project and my past projects and that's enough. A few times I've been asked to do a take home challenge which I don't mind and actually quite enjoy. Separated from the interview process I find some of the leetcode type challenges kind of fun, like doing a puzzle but they have been of very little practice use to me in my work.
In 2021, it's a few percent higher. The one I saw recently was related to checking for N matches against M permutations.
All required passing a test suite.
Don't fall for the hate people give. Every selective interview process gets hate. It's extremely useful for your development as a programmer.
Edit: I do think it's not good when there are bad interviewers. For example, interviewers who don't give you a chance to think, or expect you to know the perfect solution rightaway. Or just arrogant interviewers :(
On top of prematurely optimising code that executes once in a blue moon and creating an unnecessary maintenance burden, they also lacked any skill in designing codebases whatsoever, and generally pick the worst solution for a problem (which is sometimes detrimental to performance overall, even if the "local implemenation" is great) Most of my refactoring nightmare situations were caused by leetcoders.
Maybw it's just anecdotal, but in my experience there's been a strong correlation.
Also an aside: they tend to be quite a bit snobby/circlejerky and vastly overestimate their skills. IMO, leetcoding is a skill but not the most important one. And also, once you start approaching software as design/engineering, the leetcode will start coming gradually and naturally to you.
I hate it when interviewer is an asshole. Somehow in my experience companies that have 'Leetcode' or that kind of thing in process have interviewer that is an asshole.
If someone thinks he is better than me just because he is in a position to ask questions, well that leaves me frustrated for the rest of the day after interview.
It is specially frustrating when you already have the experience, I am now almost 10 years and a senior dev and I cannot really put up with it.
When I was a junior trying to find any job I was not offended at all, but I still remember all bad interviews.
They don't know me and besides my CV they have to see that I can write code or see that I can use a computer. I can invest up to 2h into some task if I am switching jobs and offer/company is interesting for me.
For some specialistic roles I don't mind questions about specific technologies, just keep in mind that for example "Web Development" spans so many topics that we might have vastly different experience and questions that you ask or the way you ask them might not connect to my experience.
That is why it should be more of a discussion to try to find out common understanding than grill:quizz, shooting question and 0.5s answer.
But fizzbuzz is truly the lowest of the low bars you can pass. You could even do it in a language you have never ever written before.
However, in my experience, most interviewers are not like that. But even one bad interviewer leaves a really foul taste.
Context: I do conduct a fair amount of technical interviews and it can be quite awkward to be in front of an engineer with arguably more experience but that struggles to write a correct solution to a relatively simple problem.
They could keep it to themselves and go back to their colleagues and nag about "what a waste of time, that guy was".
I am also interviewing people from time to time, but I see it as part of my job not some kind of punishment. So maybe don't push technical colleagues, who are not happy about it, to do it.
Well this means you dodged a bullet early :) It's better they wasted your time for the interview (couple hours or days of preparing?) than months or years of your time working there.
You didn't study CS in school?
> It's extremely useful for your development as a programmer.
Can you give some concrete example?
Quite an entitled comment. Studying CS in school doesn't mean you've learned everything there is while practicing programming. Yes, you learn these skills on the job, but doing programming interview questions helped me learn skills too.
The point of any CS curriculum is just that, providing you with a framework (which should ideally be a balance of theoretical and practical knowledge). It doesn't teach you the job. Neither do leetcode questions.
I'd rather learn interview algorithms from books. And by getting feedback from trusted peers.
Anecdotally, many programmers I know didn't.
Also 'CS' has grown into a huge and varied field that can include everything from highly abstract mathematics to cognitive behavior and human psychology. If you want to it is absolutely possible to get through an entire CS curriculum without doing much actual practical programming.
In Australia I have fortunately not encountered a company that uses these puzzles in interviews. I feel bad for my friends in America who have to practice them every time they switch jobs.
Most of the applications I work with have moderate data and few users. It has to work robustly and has to be easy to modify.
Let's not talk about working with dates and times.
Took me years of part-time use to really understand these.
Still waiting for an opportunity to code any non-trivial data structure I meticulously learned about in the past.
If you want that sort of work, you kind of need to be building software infrastructure. So, contribute to linux, mysql, firefox, ... or work at FAANG, Microsoft, Dropbox, or something like that.)
Or work on a product that needs high performance (like video games) or has a lot of users (like Twitter).
The big ones are definitely doing it. FAANG of course, but also Atlassian, Optiver, Xero, Akuna etc. I am not sure, but maybe it's more common in the less experience levels? I am not experienced enough to know hiring after 5YOE etc.
An example of good tech interview at a company (not in Australia) I interviewed recently, is a take home test that encompasses doing 1 or more PRs to fix issues, code reviewing someone else's PR, and document a simple security audit.
not necessarily, a search problem can be solved in a functional way in 2 steps: 1) constructing a search space in lazy stream, this is where dfs or bfs happens 2) filtering the stream using standard filter function
Similarly if you do dynamic programming using memoization instead of tabularization you might not need any state
I think, like practical problem solving, algorithms have been predominantly taught in a stateful way of writing code that was popular because of the computing power constraints back in the day. That doesn't mean that's the only way to write them
I think it is important to know WHEN you're facing an algorithmic problem, and to be able to generalize your problem enough to recognize what kinds of algorithms might apply. But leetcode style questions as currently posed go way beyond that imo.
I thought I was a good Ruby programmer, but preparing for a FB interview in Ruby, and bombing an earlier one, really showed me how slow I was with the syntax.
Leetcoding really improved my grasp of the language.
The bigger benefit to me, however, was that I got more confident during the interviews.
1) Learning the algorithms. I agree with the general criticism that these algorithms aren't that broadly applicable. I work on data storage software, so we use a few relatively fancy data structures, but even so most of my day to day work isn't on the code that manipulates them. That said, I think succeeding at these contests (especially when they're timed) requires you to practice avoiding bugs, particularly off-by-one errors, and I think that practice is pretty broadly applicable.
2) Thinking in terms of data structures. The data structures that a program uses are a lot more important than the actual code. Some critics complain that programming contests teach you to write messy code. I think that the people who are really good at programing contests who write messy code (ime, it's more compact than messy) do it because they've trained themselves to look at a program and see the data structures rather than the code, and in my opinion that's a better way to think about a program.
3) Learning to get good at something in general. This is the main reward I feel like I've gotten from these contests. I think many skills in life (including job performance and career advancement) can be developed the same way: study the rules, study the best competitors to understand what's achievable and what techniques are available, make an attempt, try to understand the results you got, try to improve your approach, repeat. I think programming contests are a great place to learn to do this (among many others, of course).
There's a lot of things in life that are a pain in the butt, hard, and stupid that you just gotta do.
I went through the leetcode grind a few times, the last time I went through it I ended up taking a job at a startup that I was using as a "practice" interview before the FAANG ones because I could relocate out of California. I never would have interviewed there though if I wasn't laser focused committed to leaving my previous job for a better opportunity.
If you're the kind of person who grinds leetcode, you're _probably_ also the kind of person who spends the extra time reading all the documentation for redux. Or spends the extra time writing a tricky unit test before shipping something. That being said, there's still _plenty_ of people who fail leetcode phone interviews (e.g. myself) but go the extra mile, and FAANG companies still manage to let some questionable hires through the cracks. But engineer hiring is currently a filtering game, not a sourcing game.
You can either learn the rules of Monopoly and play or sit in the corner during board game night and complain you're not playing checkers. shrug
Have you seen this first-hand and compared leetcode grinders against say, prolific open source developers?
You can get into well paying jobs without it, but then you need skills that are way harder to practice and usually you also need a lot of personal connections as those jobs often selects friends.
I suppose there's an argument to be gained that the marginal gain of Leetcode given thousands of hours of practice already is the better side of the tradeoff, but that's a circular argument. You're going to select your programmers based on whether they recently spent 30 hours doing Leetcode, rather than on what they got out of the 10,000 hours of regular coding practice they did beforehand? Doesn't seem like a good selection criteria to me.
That's why I asked whether OP had actually seen the effect he was describing and compared results directly. It's easy to come up with hypothetical benefits.
Companies don't select programmers based on leetcode performance, no, they care a great deal about those 10,000 hours people spent. However if you fail that leetcode test you are out no matter what other experience you have. And it so happens that the set of companies paying twice the average for any experience levels tend to do leetcoding, so no matter what level of experience you have leetcoding is great. Although sometimes your experience might impress low tier companies but not high tier ones, so they downlevel you and ultimately your total compensation didn't move much.
If you haven't seen this process then you are either ignorant, don't live in an area with high tier companies, or don't have a lot of experience. Personally I did double my income by going through this process and I've seen many others do as well.
Now, lots of low tier companies started seeing high tier companies do this process, so they started copying it for some reason. But it doesn't work if you don't combine it with also paying significantly more than most others.
> Personally I did double my income by going through this process and I've seen many others do as well.
That's insane. That's a broken market. If that's happening, it's not a reliable signal.
Ultimately, if the market is rational then your actual ability will matter more than anything else. The only time that isn't the case is if the market is irrational. You can argue the market is currently irrational (although I would say that's not quite what's going on), but placing a long-term bet on it staying that way... Bad idea, IMO.
But I think the actual explanation for why high-tier (read: large) companies use Leetcode is a combination of the fact that they're monopolies, so they aren't punished for bad selection criteria (see Google's use of lateral thinking puzzles for years before admitting they were completely useless for predicting job performance), and that they need a replicable interview procedure that can be applied consistently by a workforce that fundamentally isn't very good at interviewing, thinks they are, and doesn't care if they get it wrong. It's the Big Mac of interviewing methods.
There are other situations, such as when measuring actual ability is sufficiently difficult or impossible (subject to the constraints you pointed out - via a process that's repeatable by a largely undifferentiated set of interviewers).
In those situations, you have basically no choice but to look for proxy measures.
Now, obviously, proxies can be gamed to various degrees. Leetcode is not actually such a terrible proxy, though. Here are some points in favor:
1) On average, better engineers will require less practice time to achieve similar results,
2) There is a certain minimum level of capability required to even "grind it out"; that minimum doesn't serve as a sufficient floor for being a net productive engineer, but it gets you a reasonable chunk of the way there, and that's why so much of the evaluation criteria for these interviews focuses on communication ability, since that's the rest of what they care about
Taken together, you get a process that is reasonably good at eliminating false positives and still manages to tilt the field in favor of more skilled candidates. On the candidate's side, it has the benefits of being generalizable across multiple interviews and also getting easier each time you do it.
While I'm somewhat sympathetic to the claim that the process favors candidates who have more free time, I think it's a largely overstated concern. First, this is true of any interviewing process wherein a candidate can improve their performance through practice. To a first approximation this is all interview processes. Second, it doesn't take _that_ much time. If you put in 100 hours (which is basically "made it a moderately important priority for 2-3 months") and you still can't clear any interviews, there are a few possible explanations.
1) You're failing at the communication side of things. Thankfully this is also something you can practice!
2) You fall into an unfortunate edge case, e.g. extreme performance anxiety, which isn't reflected in your day-to-day work. This sucks! I don't think there's a process that doesn't have unfortunate edge cases; all we can do is try to minimize them.
3) You're not able to learn the material well enough to generalize it to novel interview questions. This is the process working as intended.
I've also heard a reason that goes something like "I can totally solve those problems, just not in 45 minutes". Problem-solving speed is going to be positively correlated with other traits of talented engineers; obviously some otherwise talented engineers will still fall on the right side of the curve. Again, this sucks, but please bring me a process that effectively rules out false positives without bringing in some false negatives. If you can manage it there's a huge market opportunity there.
Do you really believe in the quality of Leetcode as an evaluation criteria, or are you trying to justify it? Google used lateral thinking puzzles for something like 8 years before realising they were completely useless (not just unreliable - they had zero predictive power). We have precedent for these companies using selection methods that are bananas, and smaller companies copying them.
>There are other situations, such as when measuring actual ability is sufficiently difficult or impossible
Sure, that's an example of why the market might be irrational. But then I'd ask: do you think it's extremely difficult/impossible to judge other programmers? I mean that seriously. I don't find that difficult. I can usually size up another programmer pretty quickly. If I sniff around a bit and look at some example code, my intuitive read will be much more three-dimensional and reliable than giving them two Leetcodes. You don't find that to be the case?
How much do you spend on hiring one candidate? I'm guessing tens of thousands, if not more. You can't invest a day into trawling that candidate's GitHub? "But not all candidates have a GitHub." Ok, but some do, so that's not the reason.
What I think is actually extremely difficult is a large, beurocratic organisation developing a replicable, second-hand evaluation system. It's a standardised test, and it has the same problems as most standardised tests.
> you get a process that is reasonably good at eliminating false positives
Right, it's good as a filtering mechanism. But if it's just a filtering mechanism, it shouldn't take up the majority of the interview.
Like, here is one of the assumptions you're making: most good engineers grind Leetcode before a new job. I don't think that's true. I think the number of people who grind Leetcode, even among the best candidates, is extremely small. Like <10%. If that's the case, it's inherently a very flawed criteria. If nothing else, you're filtering for the candidates that everyone else is filtering for - which means you're filtering not for capable candidates, but for candidates who are overpriced.
Here's another thing that's absent from these discussions: algorithms questions were developed before Leetcode existed. They're not designed for a world where you can game them. Leetcode is a bug in the system, but a lot of your justifications are, "it's fine, because the selection criteria is actually designed to select people who game it." Really? You want people to game the criteria? I don't buy it.
The argument that it selects for industriousness strikes me as a cope. It might, but it's also so easy to game that it obscures actual ability (unless you're just using it as a filter). Is that trade-off really worth it?
> I would have thought most talented programmers don't want to waste their time on leetcode, so it would primarily select for people who can't succeed without dedicating time to it.
I was saying that it's not that much of a waste of time, because it's not that much of a time investment for a good outcome (doing well at interviews).
If you want to change the argument from "it's a waste of time" to "it's trivially easy and easy to game", then why are there people who complain about leetcode and not wanting to do it?
That's all from the individual candidate's perspective, of course. From the employer's perspective, you're still only going to have a minority of your interviewees having prepared their cheat codes. So you're evaluating based on ability to prepare a cheat code. Which IMO is retarded. If there wasn't a site dedicated to preparing cheat codes (which is how it used to be), then it would be sensible.
So the point is, how do you interview if you know that everyone is going to know all the questions ahead of time? Seems like google's solution is they'll just make their questions difficult leetcode level. So, then their thinking is, sure if you're able to grind leetcode to a point that you can pass our interviews, then we'll be perfectly happy to hire you. So you've "cheated" the system by learning how to program a wide variety of difficult algorithm-heavy programs. Worst case scenario, your resume is a complete sham, but at least you're able to write the code that they're hiring you to write, and everything else that you're lacking, well, they'll be indoctrinating you in the google way anyways, so they don't care about your past experience.
I'm hesitant to take Google's use of a tool as an indication that the tool is good, or that the process is refined. They used brain teasers for years before figuring out they had zero predictive power. Ignoring the implications of the scale of that mistake, one thing it indicates is that they aren't able to effectively evaluate different interviewing methods.
I see google's process along the same lines as "democracy is the worst form of government except all those other forms that have been tried".
Now ideally, what you'd want is to be able to perfectly read someone's mind and someone's intention, to be able to tell instantly their strengths and weaknesses, to be able to tell which of those weaknesses are trivial ones that will get smoothed over a week into the job, and which of those are ones that are actually long-term issues that will poison your organization. It's possible that individuals with such judgement exist (Paul Graham has said that YC's success was attributed to Jessica's ability to judge founders) and that they work at google. But now you also need a process that can interview and evaluate a thousand people every single week. So what works for small companies where you can agonize over every hire or for exec searches, doesn't make as much sense for mass hiring of peons.
So given those constraints, everyone knows your process, everyone wants to apply, you need to interview a thousand people a week and decide to hire a hundred of them, and they really don't all need to be rockstar founder quality, but they all need to be able to produce something, you can start to imagine what type of interview process you might end up with.
that sounds pretty difficult for me to understand
when you read the code, analyze and understand it and due to your experience you see that something is bad (e.g poor api), then how can you "lose focus" from it / ignore it?
how it ain't just lack of experience or simply not caring?
And I think it makes sense and that is a hierarchy. Data structures are the most important, followed by logic (algorithms), followed by comments.
The reason is that if you change your data structures, you need to change your algorithms, and if you change your algorithms, you need to change your comments. Data structures define everything, comments define nothing but themselves.
Rephrased as I understood it in context, it says: "unnamed colleges in northern America has better chances at getting to WF than India, Belarus, or China".
Which is a surprising statement to me. At my time (2008-2012, followed it a few more years thereafter), the heavy hitters were from Belarus/Russia, China, and India to a smaller extent. I remember getting news that Shanghai Jiao Tong really dedicates time to training, almost like a sport. Petr Mitrichev is Russian and tourist (forgot his real name) is AFAIK Belarusian. At least Mitrichev coached in grassroots programs for IOI which then translated to ICPC performance. Maybe India wasn't as dominant but I believe they were at least a considerable contingent in the Asia-regional levels.
So it seemed to me the competition format favored these countries over US universities, which focused on research. Not to mention China and Russia loved hosting big ICPC events, if not the World Finals itself.
Do elaborate on your statement please. I am curious why you'd make that claim.
https://codeforces.com/blog/entry/73791
https://codeforces.com/blog/entry/64909
The problem is that certain regions just have too many slots relative to their density of competition programmers.
For example in less competitive regions, a rating of around ~2100 gives you a decent shot at world finals.
But if you were in a region with a lot of other good schools, then even if you had a rating of 3000 you might not even be able to represent your own school, let alone your region. See MIT's result where their top 3 teams dominated their region but their school can still only send at most one team to world finals: https://nena20.kattis.com/standings
it's Macalester btw
I don't see how this is mutually exclusive to writing readable code. I'm not good at these but I picture good code in your definition to be utilizing data structures in an intuitive way instead of coming up with some novel but wacky performance trick.
For me, i'd sacrifice raw performance for using Python because i love its simple datastructures and protocols and the compbination of code and interpreter is great... and more often then not, it's not much of a sacrifice since compute time is often more affordable than creative programming time...
It's easy to say that such tests are useless, and they probably are as a tool for judging coder skill. However when I did a few of these it did open my eyes to a few common solutions that I could apply in various places in my code. If you read through an algo book you'll probably find a few things that are a bit surprising like Kadane's algorithm, or some things that you kinda know how to do but you need the last piece of the puzzle for, eg various graph algorithms (is there a loop etc).
I'd say the main benefit is that it illuminates what kinds of things you can solve and what kinds of things are tricky (eg knapsack), which is a useful intuition to have.
I'll admit that and I found myself re-employing one of the things I learned to creatively solve a problem, however this only applies to my personal/passion project which is mostly shader-based and where algorithmic optimization knowledge like this is highly useful and applicable. In every day work however, and the kind of work I'm doing for companies 99% of the time it's not useful, as you'd expect.
Anyway, a trial period like you said seems like a better way to learn whether someone is a good fit for the team (and whether the employer is a good fit for you) as well as technically skilled than trying to do these coding interviews that seem to be overemphasised in the USA (we do them here too, but most of the time they sound very reasonable). It's a bit odd because from what I know of USA law, you're permanently on trial and can be fired with 2 weeks' notice regardless of having an indefinite-term contract. Might as well do two-week trials with anyone that seems promising if it's that easy to let someone go.
It's actually easier to fire someone here than that makes it sound - many US states have what's called "at-will employment", which means that you can be fired from a job for any not-illegal reason with no notice.
My feeling is that it didn't help at all, because programming competition and programming are quite different skills. But I can't say for certain.
Of course, fizzbuzz is just checking if you grok some super basic programming concepts like logic, branching, and iteration.
So what if you want to know if someone knows a little bit _more_ than just the basics? It's the exact same story.
The ability to be able to work with algorithms and puzzle your way out of a problem is kind of important when you're doing some sorts of programming, especially when you need code that scales well (up OR down).
If you're really bad at it, you might write pessimal code that even overheats your regular laptop; but fortunately most people aren't quite that bad. ;-)
> The ability to be able to work with algorithms and puzzle your way out of a problem is kind of important when you're doing some sorts of programming, especially when you need code that scales well (up OR down).
The main issue is that many companies don't do that. They ask leetcode questions because Google does it. But they expect you to have seen the problem earlier and memorized the solution.
Anyway my point still stands. Big companies ask FizzBuzz++ because they want to see how you solve it, if you're able to communicate and write clean code.
But unfortunately a lot of smaller ones don't invest the time that is necessary to have a good and consistent interview process. And more often than not, being able to regurgitate the solution to a problem you've already seen will definitely score you more points.
Before that I remember talking about interview questions with others at college. Also joelonsoftware.com (from Joel Spolsky who later was a cofounder of Stackoverflow) had a sister site called techinterview.org and I'm sure there were other sites.
So in terms of testing and finding edge cases to handle, it's really eye opening how deep you may need to go. When I do LeetCode, I try to write my program once and if I fail a test case, I consider my attempt a failure and move onto the next question.
But otherwise, it doesn't make you a better overall programmer. There's no incentive to write maintainable code, and you're incentivized to get the code running as quickly as possible by trying to shave off milliseconds, which usually don't matter as much in real world situations.
I think this would be a great thing to help in coming up with requirements and writing code that doesn’t crash because of edge cases or malformed inputs?
The problems are small, isolated, and usually come with an irritating edge case.
I think the types of companies using these tests are the big FANG type companies and they are mostly recruiting more junior people so for them 10, 15, or 25 years experience doesn't matter. They don't care how long you've been working just if you can balance a binary tree or solve NP hard problems in under 15 minutes.
So if you are applying for a FANG type job then yes definitely but the likelihood of you being picked is actually really low. Why you ask ? Because ageism is rampant in the tech sector so the FANG companies almost exclusively hire younger candidates (with 10 years experience you're not young).
What about other smaller companies using similar tests though? That's true but I've found most small companies that do these types of tests don't hire for some reason. I think they reject a lot of employees as they think they will get better candidates. So the likelihood of anyone getting a job there is really low.
They expect you to be M1 roles at facebook if you are in your 40s. Not compete with fresh grads.
For example:
bad hire lowers managements' opinion of my performance and can be costly to team morale, especially if company culture makes firing difficult
no hire can be blamed on lack of qualified developers rather than a competency issue
good hire is nice, but if current development team can push back on workload, that benefits the company much more than the development team
If you can do difficult tasks, you’re capable of doing easier ones.
Leetcode exercises helped me make coding a data structure to solve a problem, second nature.
It gave me a problem solving confidence boost.
Day to day, it will help you much less, but it comes in handy when you hit that use case Leetcode trained you for.
Like realizing that a trie is valuable when doing a prefix name search in a Contacts application. You might have seen it in a CS class, but you won’t “believe” in it until you’ve implemented it yourself.
If you're organised and manage your energy wisely I'd say you could prepare well in ~2-3 months. While a lot might not agree, I think that instead of moaning on how to avoid the technical interviews and how useless the questions are the time is better spent on focusing and getting it done.
I do more challenging work as a hobbyist than as an employee, by several orders of magnitude. The cause for that is that as a web developer the emphasis on work and capabilities is entirely around knowledge of tools. If fact it is pretty extreme to the point of people often telling you to deliberately avoiding writing original solutions to problems, even if quick and minor, if instead you can download an untested package from the internet.
See:
* https://en.m.wikipedia.org/wiki/Invented_here
* https://news.ycombinator.com/item?id=27310461
I usually excel at the leet code portion of the interview and then immediately bomb the next round of interview when I advocate for writing code, originality, and portability.
The puzzles are enjoyable though.
1) preparing for an interview doing LeetCode puzzles two weeks before is like studying for an exam the day before. It's worthless. If you haven't been studying the subject for months (i.e., if you haven't been working as a software engineer for years), then nothing will make you pass the exam. And even if you pass the exam (because, you were lucky and the questions in the exam were the exact bits you just studied in the week before), you don't really know the subject: you'll forget what you studied the following week.
2) I can successfully avoid companies that require LeetCode interviews. I thought I would be out of the market if I rejected such companies, but it turns out that's false! In my limited experience, around 50% of companies out there do not require LeetCode-kind-of interviews.
Don't get me wrong, I do enjoy solving programming puzzles but only on my free time, not because a company is telling me to do so.
i would correct this to "if you haven't been switching software engineering jobs every few years", which forces you to grind leetcode for months every time.
It's always cute to see people saying nonchalantly "oh, i didn't have to do LC at all to get this (FAANG) job", and it turns out they went through the grind many times before, starting from annual internship hunts in college or competing in ICPC for years.
I know how obnoxious this is, but there are engineers out there (hi!) who can pass leetcode style coding interviews without studying because we love this stuff. I love algorithms and data structures. I'll happily discuss the relative advantages and disadvantages of vectors, linked lists, b-trees, etc for different tasks in a job interview. Or over dinner, or at the beach, or any and every time people let me get away with it. I've spent the last month or two optimising CRDTs, and I've used a bunch of data structure changes to improve performance in one of our benchmarks by 4500x (!)
The goal of the interview isn't to "force you to grind leetcode for months". They're trying to filter out candidates who would need to grind leetcode in order to explain how a hash table works. They're looking for engineers like me, who graduate at the top 15% or so CS classes. Algorithm and data structure questions are asked because lots of programmers never touch this stuff in their day jobs. The people who actually know this blindfolded are in demand because we're useful on large projects with novel systems architecture.
Thankfully, there's lots of other jobs out there where all they're looking for is a warm seat, closed jira tickets and happy customers. I go crazy doing jobs like that - so I'm glad lots of folks are around to do that work. If everyone was like me, we'd have 18 different web frameworks for every working website.
I sometimes wish we used two different names for our profession in the same spirit as "electrician" and "electrical engineer" being different roles. Then we might all waste less time applying for the wrong kinds of jobs.
Many leetcode questions rely on very specific tricks like using a fast and a slow pointer, or two pointers at opposite ends of a sequence.
So one might know about many different types of self balancing trees and which ones are best to implement a database index on disk, but these things do not come up very often in leetcode style interviews, although these are quite real problems in the realm of algorithms and data structures.
To be fair though I do not know how you can test this kind of knowledge in an interview.
This is obviously a generalization rounded down. Most of my whiteboard interviews were fine, like you’re saying, but some did ask ludicrous puzzles that required specific knowledge of existing algorithms like “largest sum consecutive array”.
I know and agree that algorithms knowledge is rarely useful in practice. Most professional programming work is in feature factories. But people who know algorithms well can usually also figure out react. The reverse isn't true.
> There's a lot more to CS and software/system design than just this l33tcode stuff.
I agree, though I'm curious what else is on your list? My favorite interview question was: "Here's some code we wrote with bugs and failing test cases. You have 30 minutes. See how many of the bugs you can find and fix." It takes some work to write a question like that, but its so worth it. I wish more companies invested the time into assessments like that.
> it's nonetheless very far removed from the skills one would actually find worthwhile
I literally found these skills worthwhile in my job just last week. They're usually not useful at small startups or at most product companies. But the field of programming is bigger than the set of things you and your colleagues work on.
____
> I don't love leetcode.
> The people who actually know this blindfolded are in demand because we're useful on large projects with novel systems architecture
> Thankfully, there's lots of other jobs out there where all they're looking for is a warm seat, closed jira tickets and happy customers
As if there is no in between and only your specific type of job is in demand. Why are you so condescending towards any role that doesn't perfectly match your interests and skillset?
I guess product-focused developers, partner engineers, embedded engineers, etc are all useless because they're not working on "large projects with novel systems architecture".
In any case, this is also a false dichotomy. See this person's comment about being a PhD compiler and algorithms student yet still struggling with LeetCode: https://news.ycombinator.com/item?id=27312674
Your example is not a good one because 1 month of practice would not be sufficient for most people to get into FAANG. See: the guy who grinded Leetcode for a year and failed to get into Google (though he did get into Amazon). If you only need to grind Leetcode for 1 month to get into FAANG, then that means you're already pretty good algorithms wise.
> If you only need to grind Leetcode for 1 month to get into FAANG, then that means you're already pretty good algorithms wise
That's the point. That person should be pretty damn familiar with LeetCode questions, yet they still had to grind for a month and they're scared of it.
Most real world programming work kind of is plumbing though? We take data from over here and put it over there. We build pipes. And for good, sensible reasons, most of the pipes we make use standard fittings (REST, JSON, etc).
This is the whole point of this thread - you don't need to be good at leetcode questions to do this sort of work. I agree with that and I think we're all on the same page here.
Leetcode tests something else. That other thing is also a real skillset. I hear you that calling it engineering is condescending. But I still wish we had a good name for it..?
He could have just said it better, and should probably take any conceit out of his head because even between engineers there are hugely varying levels and he might not be as big as he thinks.
To be explicit, I love that there's so many engineers out there who are keen to do product work, or work as partner engineers or whatever. Thats really important stuff!
I personally prefer to spend my time with interesting data structures. And as luck would have it, lots of engineers really struggle with data structures and algorithms. So I do that work instead whenever I can. Why is my love for this stuff such a threat to you?
And sure, real roles usually don't have us doing one thing all day. Very wise. But, so what?
> See this person's comment about being a PhD compiler and algorithms student yet still struggling with LeetCode
PhD candidates are humans too, like the rest of us. We all struggle at some things. Algorithms are hard. Getting a PhD doesn't magically change that.
And what point are you trying to make in bringing this up? Do you think that nobody is good at, or enjoys leetcode style algorithm / data structure puzzles? I'm walking proof that thats wrong.
Based on your previous comment, I don't believe you.
You describe your own work as "large projects with novel systems architecture". Large (Important), novel (New and difficult) and dealing with architecture (Complicated and important).
You describe other work as "all they're looking for is a warm seat, closed jira tickets and happy customers". Warm seat (Low skill/easily replaceable), jira tickets (No creativity or thinking, just follow the ticket), happy customers (Isn't this important for everyone?).
The difference in tone is massive. It's hard to believe this wasn't intentional.
I graduated alongside some people who work on SeL4. They wrote an operating system kernel in Haskell, then used proof systems to formally prove its correctness. Then rewrote the whole thing in C and mathematically proved their C code is equivalent to the haskell code they wrote. The result is an entirely fully formally verified operating system kernel. This has never been done before, and its a massive achievement. Its a first for humanity.
I'm not sure I'm smart enough to work there. I certainly don't know enough math. I think most programmers I've worked with throughout my career aren't good enough at programming and math to work there either.
I think formally proving the correctness of an OS kernel is more difficult than implementing a B-tree. And implementing a b-tree is more difficult than styling a button in CSS. Knowing how to style a button is a more useful skill. Its important. Its valuable. But I stand by my comment. There are more people who know how to style a button in CSS, and they're given less respect, they're more replaceable and usually less well paid.
And for good reason. My friends on the SeL4 team could probably do my job if they wanted to. I don't know if I could do theirs.
The fact that most of us in this thread aren't good enough hackers to work on sel4 is something we have to live with. It doesn't make us worse people, or less deserving of love. And it doesn't mean our work isn't valuable. It is.
But if all you know how to do is style a button, you are valued less in the jobs market. Some people are actually better at programming than other people. And some jobs in our field are genuinely harder than other jobs. Hard interview questions are asked when they only want someone who's excellent to fill the role. Its absolutely not fair, but thats life.
I guess it depends on how we look at it.
He is implicitly trying to say (just my hunch) that a lot of those leetcode interviews don't land jobs that actually need a lot of algos and data sturcutres but are just glorified CRUD boys.
What you are saying is that some jobs are indeed very hard and need some screening during interview to weed out inadequately educated candidates.
I, as a hobbyist, actually agree with you. Hobbyists like us can learn whatever we want to learn, and usually we pick tough topics (for God's sake why would I learn to make a button?) such as compilers, algorithms, operating systems, database systems and such over web development and CRUD, because the formal topics have more FUN, and we don't care about real usage (this is different from you guys -- we don't care if our toy OS get used by anyone else :D).
Damn I'd die for such jobs if they can withstand my stupidity and teach me :D
I'm not a particularly good programmer, but I think I would never be particularly good in your estimation, because I generally remember where I read something, rather than the matter in detail. This is obviously more efficient, as you always have books available when you're doing actual work, but isn't always that great for extremely broad quizzes over a broad range of subjects.
To be clear, I look stuff up all the time too. But the downside of the “I can look it up” approach is that if you don’t have an intuitive grasp on various algorithms, you can’t use those algorithms as building blocks to make something else. Recently I took a btree and instead of using it an associative array I used it as a list of spans. The result let me do arbitrary inserts and deletes at arbitrary locations without linear scanning (like in a linked list) or shuffling other elements around (like in an array).
Most people can’t do that. But that’s ok - you can be an excellent product engineer without this weird knack I have. It doesn’t help me write clean CSS.
In some ways it makes me actively worse at my job. I did some client work a few years ago. I helped write an indexing system for the search box on their website. I wrote a real-time indexer which streamed changes. After I left I got feedback that nobody at the company was able to maintain the code I wrote, because they couldn’t understand how it worked. I should have just written a simple bulk indexer for them in a cron job instead of getting clever with it. My “good programmer” instincts made me a worse contributor on their team.
My objection is that somebody who had been working with a narrow intensity in a specific field could be a very capable programmer without having the sort of general proficiency to do well in this kind of interview. That doesn't mean they are a 'product engineer'. It just means they are somewhat specialized.
Although I agree that jobs that apply theoretical CS should have it clearly stated. But, contrary to your belief, some seem to just require it for the sake of it. Not because it's needed.
I have totally no idea what does it even mean
is top 15% good?
In $my_country, maybe 2 "schools" of CS are good, the rest is mediocre at best (I guess) so it'd be like 1% is really good
I kinda compare edu with ELO based games like chess or even league of legends
In league of legends top 1% people are somewhat decent, but still nowhere even close to $PRO
>Algorithm and data structure questions are asked because lots of programmers never touch this stuff in their day jobs.
Why not Security then? it's way more important - poorly performing algo can be rewritten, leak cannot be reverted as easily if at all
Well if anything they select these people because grinding leetcode does work
Why do they presumably even need to select people who doesn't need to prepare to do a specific job? Is that because at those companies you're supposed to do that kind of work without preparation? I don't think that's anything more than what you think they think.
Edit: clarifying a bit: in an ideal situation, my preparation for the interview would involve going over all the work projects and reviewing how to talk about them.
That said, more than a week of preparation is too much.
How do you know this detailed information ahead of time? It's not a surprise companies say they'll do technical questions, but those specific to LeetCode? They don't share that.
Not ahead of time. When one receives an offer from company X, you just ask: "you do LeetCode?"