Brian Lovin
/
Hacker News

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

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

Daily Digest email

Get the top HN stories in your inbox every day.

karaterobot

At my old company, we never did take home assignments or whiteboard interviews. We just sat candidates down and pair programmed with them for a couple hours on whatever we were working on at the time. We paid them the same hourly rate we were making, (but didn't charge the clients for it).

If the candidate obviously didn't know what they were doing, we ended it early. Usually you knew within 15 minutes.

One candidate hated the interview process, and walked out. One candidate, likely a future business leader, argued vociferously for a higher hourly rate during the interview, and later with the founder.

But I would describe our success rate for finding good programmers who were easy to work with as "extremely high", and our rate for false positives as "I can't remember ever having one in about 4 years of working there".

The overhead for the engineering team to run these was not zero, and not everybody enjoyed doing it. But some people did, so we had them do it more often. I have no idea why this isn't a more common practice, I would recommend it to anybody.

activitypea

Can you go a bit more in depth about the pairing session? Most companies I've worked at, even if the person coming in was familiar all technologies we were using, I can't imagine them grokking nor just "skipping over" the datamodel and system architecture/design. All non-trivial projects I've worked on had a "bad" codebase as a result of deadlines, pivots and misunderstandings. The code is always steadily improving, but never good enough that someone can just waltz in and get to hacking on it.

kornork

I can't answer for the parent, but I've done similar style interviews. Because the candidate is not familiar with your codebase, you must be the expert. Your job is to let them drive as much as possible, while you "unstick" them when they trip over what they can't possibly know. It is a collaboration, which is part of what makes this a good interview style IMO. Sometimes a candidate will offer an otherwise good solution, but it won't work well within your codebase -- in this case you explain why, and then you iterate.

karaterobot

Yeah, usually we would give a little bit of context, and then look at the sprint tickets in Jira, and take one. The candidate was not expected to be familiar with the codebase or product at all beforehand, and they weren't expected to become an expert on it during the course of the interview. But coming up to speed quickly is one of the skills we liked to see, since that was part of the job.

They should be able to 'hang', in the sense of being familiar with how we approach problem solving as programmers. They should ask questions when needed, and answer questions as they arose. The goal was to just figure out what level they were at in general, and what it would be like to work with them. They weren't expected to come up with the best possible solution, because usually there wasn't a single right solution.

We would ask them questions like "well, you saw the ticket, how do you think we should approach this?" or even just natural things like "this function we just wrote isn't working, what's going on here?". The point is that they are working on real problems — literally real problems — and not abstract CS exercises.

Since we mostly did pair programming every day, the other thing you'd get a sense of is how easy someone is to work with. Not everybody had experience pairing, which is to be expected. You found out quickly who took to it, and who wanted to be a lone wolf. We didn't not hire someone because they weren't good at pairing, but we factored it in. Some people just did not communicate very well, which is a problem.

(This also gave them a good sense of what it would be like to work with us, and sometimes people decided not to take an offer because they didn't like the way we worked: good outcome for everybody)

They would usually do two rounds of this, both on the same day. Morning session, then an afternoon session. We offered to take them to lunch in between, which exposed them to more of the team, and let us talk to them in a more casual setting. Part of the interview would also be a private talk with one of the founders, and an HR person (in a different session).

The people the candidate paired with would provide input like: "I would recommend hiring this person" or not, but didn't make the decision themselves.

Here, I should admit that we did have a set of artificial problems we'd give candidates if we were hiring for a skillset that did not have a real project to test them on. We did both web and mobile contracts at this (consulting) company, so if we were hiring, e.g., an Android dev but didn't have an Android project for them to work on, we'd have them check out a repository and work on a fake ticket instead. Usually this was with a developer beside them, but I can remember times when the candidate had to do it solo.

jackdbd

This is great. If I had my own company I would do basically the same:

1. have a look at the candidate's github / stack overflow profile. If you like what you see, invite him/her for an interview; 2. have a couple of pair programming sessions as you described, with different team members (and don't let team members influence each other during the hiring decision); 3. invite the candidate for lunch and see how he/she treats others (basically an asshole test)

gopher_space

> I have no idea why this isn't a more common practice

It used to just be “the practice”. The folks who don’t do this are trying to automate hiring.

_448

> The folks who don’t do this are trying to automate hiring.

Or they are trying to emulate Google and similar companies without understanding why they do it.

gwnywg

I'm 15+ years of experience, I funded a few high level projects for corps and a few startups including hiring my teams. I was always conducting my interviews by making some work with the candidate and I found it best approach.

And quite recently I sat on another end of hiring table. I'm good at algorithmic challenges like letcode or hackerrank, I always liked puzzles like this. And yet, last interview I failed. Purely because I got a bit nervous and did not manage to deliver fully working solution in 15 minutes in front of interviewer. And that after passing their hackerranks and answering their general system questions. I guess their approach was all or nothing. Is it good or bad, I don't know. But from hearing their problems I knew their problems is something I eat for breakfast :)

colinmhayes

This is great for small companies, but large companies are interested in standardizing the interview process. Leetcode is great for that since the outcome is pretty binary.

MrWiffles

Sure, great for metrics, terrible for actually doing the job.

Leetcode can never compete with or allow a candidate to demonstrate real multi-dimensional or multi-systems thinking. You may be able to write some bass ackwards arcane algorithm and prove you’re “31337” but can you make that work at scale with a data store that you have no information about? How’s it going to get the data to operate on in the first place? Will your data retrieval query cripple a prod database? Read from replica? How far behind can that data be without making your fancy algorithm useless? How will you parallelize that work set? In-request or background job? Multi-threaded or single thread? What about changing state in multi threaded contexts? Database indexes? Schema design? How will you handle failures in your algorithm? How will you handle malformed data? And most importantly, does what you’re doing benefit the user, or just your epeen?

Leetcode is bullshit. It’ll never let somebody show you they’re good at anything other than solving bullshit problems. And you’ll lose everybody who CAN work within the larger context by chasing candidates who’s chief skill is solving bullshit problems.

bluedevilzn

Leetcode is a proxy IQ test. Anyone who can do leetcode can learn how database indexes work (hint: it uses Data Structures and Algorithms) but not the other way around.

charcircuit

>can you make that work at scale with a data store that you have no information about? How’s it going to get the data to operate on in the first place? Will your data retrieval query cripple a prod database? Read from replica? How far behind can that data be without making your fancy algorithm useless? How will you parallelize that work set? In-request or background job? Multi-threaded or single thread? What about changing state in multi threaded contexts? Database indexes? Schema design? How will you handle failures in your algorithm? How will you handle malformed data? And most importantly, does what you’re doing benefit the user, or just your epeen?

Some of these questions are perfectly valid during LC coding rounds. Others would be more appropriate in a system design round.

karaterobot

Agreed, but I see the impulse to standardize as the source of a lot of the problems people have — by people, I mean both good engineers, and the companies who can't hire them.

angarg12

Honest question, how would you handle hiring at FAANG scale without standard processes?

For reference we had an opening in my team and 1600 people applied.

jackdbd

sure, let's spend time solving Leetcode problems instead of understanding how HTTP works.

_448

This!

> I have no idea why this isn't a more common practice

My maths teacher once said in class during lecture, "Kids, when you venture into the outside world, you will realise 'common-sense is not a common thing!'".

b20000

the goal of the leetcode interviews is to get into who is the smartest mode, so the cost of hiring can be driven down. those who conduct the interviews are unaware of this. the process you describe would result in paying people more which is not what FAANGs and those imitating them want.

jacknews

This is exactly the right way to do it. Not only do you find out if the candidate can program, but how well they can pick up unfamiliar code, tools, etc, can they communicate, can they work with others, etc, etc, etc.

Leetcode bears little resemblance to everyday programming. Of course it's sometimes necessary to understand big-O, and that various data structures and algorithms exist, and which ones you might apply to certain problems, but coding them from scratch, from memory, within a fixed time? Pretty much never.

heleninboodler

> but coding them from scratch, from memory, within a fixed time? Pretty much never

This is definitely true, but having to do it quickly and on-the-spot is one way of measuring just how comfortable you are with it. You might never have to do it in an hour, but being able to is a proxy, however weak and indirect, for your competence, and guess what, I only have an hour to talk to you.

I love and hate leetcode interviews. I enjoy the challenge, and I hate being put on the spot and knowing that poor performance on one specific problem might result in an unwarranted thumbs down. I sincerely hope any interviewer whose chair I'm sitting in treats them the way I do, which is that it isn't important that you come up with the optimal solution; it's important that you can think through the problem and come up with any solution, however inefficient, and then honestly evaluate this solution (including big O) and point out how it could be improved. You probably don't have time to implement that improvement, but you've demonstrated competence in both thinking and coding along the way.

Edit to add: When I'm preparing to interview, I practice leetcode-style problems, but not so much to memorize all the questions and their answers as much to just practice my quickness for thinking and coding on that type of thing. It feels kinda silly because, as you point out, that's pretty much not a part of the job at all, but it's very very helpful to exercise your mental muscles for that sort of thing so you don't stumble over the simple mechanics of the problem. It feels absolutely great when you get a question you've never heard before but you've put yourself in the mental state to solve it and you kill it. And like it or not, I've personally found that people who enjoy this type of challenge are often the exact types of coders I want to work with.

jacknews

I don't agree it's a good indication of competence; leetcode skills are almost orthogonal to the skills required in general programming.

It might be different if you're being hired to develop a new video codec, or distributed consensus algorithm or whatever, but for the typical large web property or enterprise database, leetcode is all but irrelevant.

Code cleanliness, code communication, defensive programming, properly considering edge cases etc, flexibility, API UI design, and how other people interface to your code, etc, etc, all these things matter far more than advanced algorithms, which will rarely be required.

kushan2020

If this interview process is so golden (based on your metrics of success) why isn’t every one doing it?

caffeine

Not OP but here are a couple reasons:

* It doesn’t scale well to huge organisations.

* It’s not standardised “repeatable” in the sense that you cant generate datasets from this that let you correlate interviews with subsequent outcomes and improve hiring metrics company wide

* It requires expertise in pair programming, which most companies don’t have

Basically, OP’s hiring process is an excellent example of “doing things that don’t scale” to gain an asymmetric advantage as a small organisation.

They don’t need to derive metrics, they can invest the time, they have a team who are skilled at pair programming - so they can have this hiring process and other people can’t.

r0b05

Brilliant.

throwaway1777

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.

colinmhayes

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.

Hermitian909

> 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.

colinmhayes

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.

mikymoothrowa

> 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

dijit

> 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.

tlextrait

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.

mountainriver

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

AshamedCaptain

> 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.

mikymoothrowa

Off topic: what’s this IBMization at Microsoft?

mountainriver

Yup exactly, that’s the whole thing. They want people who will devote their lives to meaningless tasks

nowherebeen

> devote their life

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

filoleg

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.

tfigment

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.

depr

I appreciate the cynicism but isn't it more likely that they use it just because everybody uses it?

samhw

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.

ardit33

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.

mikymoothrowa

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

ghaff

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.

spike021

> 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.

mikymoothrowa

> 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

anyfoo

> 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.

mikymoothrowa

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

nelsondev

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.

SkyPuncher

> 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.

nogridbag

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.

TheOtherHobbes

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.

bialpio

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.

NateEag

> 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.

mikymoothrowa

> 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.

b20000

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.

ripvanwinkle

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

c7DJTLrn

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.

tlextrait

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.

mikojan

Naturally, but how is that a flaw?

roland35

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.

drewcoo

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.

fshbbdssbbgdd

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.

gtvwill

Go work in an industry. Any industry that isn't IT, I suggest manufacturing and raw resource industries like farming and mining. After a year and you get your head around what's going on automate some of their business process or collaborate some some of their data into a form that's easier to interpret.

Sell back to your employer or their competitor. Congrats you've just started your career in coding and you didn't do a single whiteboard riddle I interview. Also your doing real work for real people and making actual differences in day to day lives. Not just some faang companies pleb work, bleeding metrics from the masses.

gopher_space

You’ve also built a mental model of how large systems interface that takes years to acquire from the other direction.

chaosbutters314

this is actually our company/startup for the ChemE type companies.

it is just hard to find software/data science people interested in manufacturing/engineering

paulkrush

Yep, get in through the backdoor.

jalino23

this is good advice.

spacemadness

Much better advice than “get used to ‘em” as alternatives to the status quo do in fact exist.

lacker

My advice is to get good at leetcode "the right way". Don't memorize problems. Instead, learn the underlying algorithms.

Learn heapsort, quicksort, how to find medians, how to derandomize and calculate the running time of the quicksort/median algorithms.

Learn how hash tables, red-black trees, and b trees work. Learn why vectors allow O(1) append but only if you amortize the analysis.

Learn depth-first and breadth-first search, learn A*, learn all-pairs-shortest-paths. Learn enough dynamic programming that you could implement a memoize decorator.

All of this is valuable knowledge. It'll pay off to learn this in the long run. Yeah, interviews overrate its importance. It's good to learn it anyway. If you learn that stuff and you are good at the basics of practical programming like string and array manipulation, you'll be able to do well at interviews.

62951413

As much as I agree with your advice in general my interviewing experience is completely the opposite. To begin with reading algo books/being aware of the topics you mentioned doesn't necessarily translate to solving leetcode _puzzles_. The last time they simply asked me to implement quicksort was almost ten years ago. What is even worse, usually you have about 30 minutes to solve a puzzle. You won't have time to think even if you are capable of thinking under such circumstances.

Where I completely disagree with the original statement is that leetcoding hurts mostly experienced developers. What else are fresh graduates supposed to know well if not algorithms and data structures? Experienced developers are from generations when few people majored in CS and spent formative years interviewing long before anyone heard about leetcode. And they have too much experience with building real software to tolerate artificial puzzles.

spike021

I won't argue that being able to apply different patterns to problems is incredibly useful, but a lot of these are also fairly domain-specific. It really depends on what your typical work is like.

I've worked on teams that dealt with messaging queues and associated backend systems. In those cases it was rare, if ever needed at all, to see or use any kind of graph searching algorithms.

Sometimes some forms of memoization were helpful when it came to system issues that required a meaningful but efficient backfilling strategy. But they were almost never in the same form that typical DP interview problems are.

I would argue many of these patterns can be helpful to test candidates with but only depending on what roles they're interviewing for.

I've seen more "trivial" problems that test for the same kinds of answers that interviewers usually want anyway.

Usually the messaging is something like "we want to test that you can write code. We want to test that you can iterate over and consume/aggregate some data. We want to test that you can evaluate this codes performance." You can do all those things with simpler classes of problems than some of the brain teasers I've seen. And I don't mean the usual stuff like how many tennis balls fit in a school bus, but leetcode style, overly complex problems.

dominotw

>Learn heapsort, quicksort, how to find medians, how to derandomize and calculate the running time of the quicksort/median algorithms.

i've done around 800 leets and never had to learn any of these.

you can do a whole bunch of leets if you just learn the following and fill the gaps along the way

1. data structures: tries, maps, lists, heaps/priorityques, stack, dequeue.

2. graph: shortest paths, dfs, bfs, cycle detection, topological sorting, union find.

3. binary search

romeros

After all this knowledge you still won't be able to solve "Next Permutation" or "Integer to Words" or "LFU Cache" within a 45 min Interview if you haven't seen the problem before or never practiced enough leetcode for it to become subconscious and automatic.

lacker

If you learn all this and you can't solve LFU cache in 45 minutes, go back and study the parts about heapsort, red-black trees, and B trees.

If you learn all this and you can't solve "integer to words", go back and do some more practical programming. Build your own blog in Django or something.

If you learn all this and you can't solve "next permutation", well, yeah sometimes interviews ask you dumb theoretical stuff that you will never use in real life. Them's the breaks.

taurath

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.

comprev

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!

mikymoothrowa

> 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

dchapp

| 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.

nomemory

I am not particularly good at competitive programming, but at some point I did invest quite some time into it. Contrary to my username I have a pretty decent memory and I can remember easily if I've solved something similar.

At some point I've interviewed for a company who gave me four exercises to solve in an hour. Normally, it would've been impossible to solve them without previous knowledge. Funny part is that I knew the idea for all 4 and the only difficulty was to write things quick enough so I can finish everything in time. 57 minutes later, I was finishing all of them, to the surprise of the interviewers who were watching me coding.

I had the all time best score for that company, and everyone thought of me I am some kind of genius, which was certainly not true, because I know my limits, and I am far from it.

Nevertheless, everyone was a little disappointed by me in the next 6 months. I was quite junior, and had junior problems.

PragmaticPulp

I haven't done whiteboard coding interviews for a long time, but this was a problem back when we did. We started by using generic coding problems that someone got from somewhere (probably a popular book or website). Occasionally someone would show up and basically recite the solution from memory.

Having 4 different problems is usually an okay defense for this because you can spot when the candidate recites some answers from memory but then struggles through relatively easy questions they obviously haven't solved before.

The fact that you had all 4 memorized defeated that heuristic, of course. The smart companies are careful to rotate their problems and customize them in ways that will trip up most recited answers.

> I had the all time best score for that company, and everyone thought of me I am some kind of genius, which was certainly not true, because I know my limits, and I am far from it.

> Nevertheless, everyone was a little disappointed by me in the next 6 months. I was quite junior, and had junior problems.

I mentored college students and recent grads for a while. A lot of them had been convinced by the internet that they just needed to memorize enough LeetCode problems to squeak through a FAANG interview and then they could relax for a decade or too until early retirement. It was like all of the Reddit memes about CS careers collapsed into a single narrative.

I spent a lot of time reminding them that high paying companies have high expectations and it's not as simple as collecting $300K/year to do nothing. Of course, they didn't really want to hear it from me.

nitwit005

There was a Google talk some years ago that brought up this same idea with regards to people who did programming contests: https://m.youtube.com/watch?time_continue=51&v=DdmyUZCl75s&f...

jupp0r

You make the assumption that Google cares about their false negative rate when ranking candidates, ie not hiring somebody they should have hired. The process is optimized for minimizing the false positive rate, ie hiring somebody they shouldn't have hired.

mikymoothrowa

I don’t care that Google is doing this.

It’s a problem that everybody else is using the same process. (I blame it on CtCi)

CoolGuySteve

I've started ignoring companies that hire using leetcode or whiteboard algorithm questions.

Even if you make it through the interview process, you're going to be working for people who cargo cult their business practices and surrounded by coworkers who are willing to spend vast amounts of energy on stupid things to accomplish their goals.

It's a massively negative indicator for company culture imo.

I can't remember the last time I actually enjoyed using Google's software or their libraries, I don't know why I'd work for a mini-Google.

mountainriver

100% Leetcode is now a great metric for me on company culture.

Is your company able to back the trend when it’s obviously wrong?

fernandotakai

one thing tons of people don't understand is that interviews are two way streets. companies are getting to know you, but you are also getting to know the company.

as you said, i would never work at a company with bad interviewing practices because it means that either the employees were hired by these bad practices OR the practices changed and no one cares.

adam_ellsworth

what does "cargo cult their business" mean?

Kranar

No that's not true, the vast majority of companies/positions do not do this.

Most companies that pay very well and are competitive do it, and the reason is because we get so many crappy applicants that it remains to this day the least risky, cost effective way to filter out bad developers.

mountainriver

Sorry but there’s a lot of ways to filter devs, you would need to back this up with data.

Here’s another avenue, show me your OSS work if you have it. That give me a far better picture of how you develop than LC ever could. Don’t have OSS, then a take home test also works perfectly fine or a programming exercise that’s realistic

bradlys

Blaming it on CTCI is like blaming it on needle manufacturers for people shooting up with heroin. The issue is more fundamental. CTCI is just giving a methodology for people to get through the interview process.

The issue is that SV cargo cults extremely hard. A lot of startups copy the big companies (and often the founders of small companies are from big companies - so they take what they know with them). Then everyone is like, "SV is so cool and full of money! Let's copy everything they do to emulate their success."

That's all it is. I'm not a fan of the author (for personal reasons) of CTCI but I don't think she or the existence of the book is the issue.

com2kid

Microsoft was one of the first big tech companies to popularize these styles of white board coding interviews. Back when I was in college, Google had just lowered their hiring bar from "must have PhD" to "well BS from an Ivy League may be good enough", CTCI was seen as a way into Amazon and Microsoft.

jstx1

I’m not seeing everyone else doing it. I wish they were because I prefer those interviews over something that pretends to emulate real work. I want every company I interview with to do leetcode and most of them don’t.

turtlebits

Just went through a round of interviews in the past 6 months (~20 phone screens, 6 in person loops, 3 offers). Not all of the companies do it. If you don't like the process, then politely decline the interview. (you probably don't want to work there anyways).

The worse to me are the interviews that ask you technology specific commands (for ops positions, especially k8s) and/or specific language constructs.

throw827474737

Come on, there's enough, far more than enough, out there which is not like this.. just change your expectations.

TheOtherHobbes

if that's the case, it doesn't explain why Google's software and product quality has been declining steadily.

nostrademons

[Disclaimer: Two-time Googler here, obviously speaking only for myself.]

Sure it does. Collaborative software development is a low-pass filter, not a high-pass one. If you put 100 people on a team and tell them to develop a product, the product quality will track the least controversial ideas, not the best. With more people, the set of uncontroversial ideas gets progressively smaller, and trends toward the features that nobody really cares about because those are the only ones that don't provoke strong emotional reactions. The simple fact that you added more people is what made the product shitty, not that the people were incompetent or poorly-skilled.

I've been in design discussions where we've had a room full of incredibly accomplished people, folks who've written major open-source projects or launched consumer products with billions of users, and the eventual decision was more brain-dead than anything that any one individual in that room could've come up with. And everybody knew it too, but you don't want to piss off highly intelligent and accomplished people, so you make the decision that everyone can kinda live with rather than the one that will wow users.

The lesson here should be "Don't hire unless you absolutely need to", not "Google hires stupid people."

bryans

Surely this is a consequence of management and corporate ideology, rather than a natural outcome of having some arbitrary number of devs in a room. A good project manager doesn't allow great ideas to die on the vine unless there is pressure to do so, and that pressure is not coming from the team or customers -- it's coming from the top of the company.

For all of his and Apple's faults, Jobs aggressively fostered a culture of "good is the enemy of perfect," which placed the focus on polished features instead of the dull hum of incremental development. And that bucking of homogenization is what led to such a rabid base of loyalists, as consumers tuned in to that momentum of (albeit perceived) innovation.

Google, on the other hand, has never really had a fan base to speak of, and the few remaining loyalists are rapidly disappearing. I genuinely have never met a consumer or dev who believes Google is at the bleeding edge of any feature. That is wholly reflective of Page and Brin's ideologies, who fostered a culture of "over-engineer, refactor and ship incomplete," which is exactly what you're describing. Angular, for example, is the perfect representation of the Page/Brin ideology, and that's why nobody uses it.

mountainriver

Yeah this is so true, I’m experiencing this at my current org. Does anyone have advice on how to avoid these pitfalls?

undefined

[deleted]

kansface

> if that's the case, it doesn't explain why Google's software and product quality has been declining steadily.

Why do you assume that poor products are poor products chiefly because of code?

xmprt

The discussion here isn't about code. It's about quality of engineers hired. If their software and product quality is steadily declining then that says something about their team. Perhaps they are incredible coders but don't have good business skills or "customer obsession".

tmp_anon_22

User opinion is one of many success metrics that Google tracks but it isn't the most important one. Up until the recent recession their stock performance indicated that their product quality has been doing just fine.

yakak

That's not a valid metric. Every effective monopoly has a climbing stock price while it's product quality is declining, this is why they have such a terrible time when there's finally a market upset, they can have decades of bad practices to overcome just to stop their descent.

mikymoothrowa

Come on! Showing 4 more ads per video on YouTube would boost their stock price while making me hate YouTube PMs even more

ffggvv

having worked there they had a decently high false positive since the hiring bar wasn’t consistent. workers choose what questions they want to ask. seen some onsite loops have two seperate dp questions while others have “design tic tac toe” and 2 sum.

plus a lot just blindly memorize thousands of leetcode answers but aren’t great coders.

brhsagain

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.

lolinder

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.

hiq

> 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.

rot13xor

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?

colinmhayes

Probably more like 100% more tbh.

throw827474737

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??

charcircuit

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.

cheeze

Uh, generally yeah.

anyfoo

> (since you won't be touching leetcode-like problems in the course of your actual job)

That is not universally true.

confidantlake

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.

corrral

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.

frontman1988

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.

rebelos

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.

AQuantized

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.

mikymoothrowa

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.

bluepizza

If the grinding is not going to translate into a business advantage, then it is pointless.

mirceal

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.

widjit

SATs are also a very bad way of evaluating anything meaningful

jonhendry18

They're useful as a second piece of evidence if, like me, you did poorly at classwork because of undiagnosed ADHD.

naniwaduni

The flip side is that a DS&A toy problem grind is an actionable item that approximately anyone who can already bear the cost of their own training can work on, with legible indicators of their progress.

I know it's popular to throw shade on interviewing for "wasting" candidates' time on this instead of "learning to build actual things", but even if DS&A toy problems aren't the best-correlated with actual work performance, the fact is that (a) they're well-enough correlated, by the standards of scalable interview assessments (b) contrary to popular belief around these parts, presenting "actual things" is much easier to bullshit your way through than a few hours of talking through toy problems (c) every job opening gets a deluge of bullshitters.

mikymoothrowa

You do realise that these leetcode rounds are virtual and there are “agencies” on the internet that would take this test up for you?

When I interview people, I have to make sure that the person actually wrote the code by asking some arbitrary questions about it in a subsequent rounds

We’ve had cases where people committing this fraud did manage to slip through the cracks but thankfully here it’s very easy to fire people once we found out.

stopachka

I think learning to excel at algorithm interviews will make you a better engineer. It's not memorizing questions, it's learning to solve a variety of interesting problems you seldom get in your day today. You may think, if "I don't get those problems day to day, why learn to solve them?". This is similar to an airline pilot saying "Engines work well on my flights; why should I learn how to handle engine failures?"

2-3 months of devoted effort on algorithm interviews has given me some of the best ROI / time for engineering growth I've had in my career.

ceejayoz

It's more akin to expecting the pilot to know how to replace a wiring harness in the avionics bay; someone else handles it and they'll never need it in practice.

Panzer04

I guess you just swear off ever doing an algorithms problem? This doesn’t seem comparable at all - there are feasible circumstances where you need to know this stuff.

ceejayoz

> I guess you just swear off ever doing an algorithms problem?

I swear off memorizing the answers to them. If I run into a problem that requires a leetcode-style solution, I'll find many available bits of information to help me solve it.

curiousllama

My advice? Start memorizing the riddles.

Consulting jobs require case interviews - they're pale imitations of actual projects that translate loosely at best. And every company uses them.

Trading jobs ask probability questions - they're idealized versions of what traders do all day, requiring tangential (at best) skills like mental math and memorizing niche formulae. And (almost) every trading firm will ask them.

Tech jobs ask leetcode questions - they're vaguely correlated with tech skills (you can't learn leetcode without learning to program, I guess?). And (nearly) every company asks them.

All of these industries put up somewhat-arbitrary filters just to get a manageable signal, however imprecise, on the endless morass of new grads trying to break in. They ask them because they work: the pool of candidates who pass them are of a higher average quality than the pool who fail.

They're biased, arbitrary, and often quite silly. And they've persisted for a half century. Get used to 'em.

tsuujin

> Get used to 'em.

No.

I’ve spent the last year or so reinventing the hiring process at my tech company to expressly avoid algorithmic puzzles and leetcode nonsense, and I was able to do this because I patently refused to accept the status quo.

You can do this too. Anyone can. I’m basically a moron and I managed to convince our talent team to radically change how we do things; if I can do it I feel like the bar is pretty damn low.

The only real requirement is that enough of us simply refuse to accept how things are today. Right now is a fantastic time for the tech industry to adopt change because your talent recruiters are probably struggling to find and retain new developers and are almost certainly willing to listen to suggestions on how to stand out.

beej71

> I’ve spent the last year or so reinventing the hiring process at my tech company to expressly avoid algorithmic puzzles and leetcode nonsense, and I was able to do this because I patently refused to accept the status quo.

I think companies that break out of the leetcode habit are going to do well. There's a lot of great talent out there that's being passed over by these tests.

If the job is to solve leetcode problems, by all means, test the candidates for that. If the job is to solve real life problems, there's almost certainly a better measure.

I will never judge someone based on that kind of problem. I believe the data that results is just bad.

Edit: I should add that leetcode is useful for developing programming and problem-solving skill. I've done tons of problems, myself, and have fun solving them... and learn from them. So I do recommend it for a challenge. But not for interviews.

stutsmansoft

> I think companies that break out of the leetcode habit are going to do well. > There's a lot of great talent out there that's being passed over by these tests.

Agreed. And there's a lot of great talent that doesn't even want to try with some of these companies solely due to the hostile interview process.

tsuujin

Strong agree with all of this.

Ideally, interview questions should be directly related to the domain of the position. Show the candidate what they will actually be doing if they accept an offer.

The whole process should be a two way conversation.

undefined

[deleted]

bfung

Agreed. As a hiring manager, I’ve also explicitly, purposely come up with coding questions that reflect normal work: call APIs & issues, sync data issues, model data for usable systems.

The hires, then, focus on the right customer problems and don’t spin on creating random, useless code.

Everyone from mgmt to ICs, technical and non-technical, are happier.

undefined

[deleted]

ssalka

Yeah, I've worked in tech 6 years now and never had to do Leetcode to get by in interviews. That being said, I never interviewed at FAANG. But many teams set a bar easier to pass than leetcode that still ensures good engineering skills

undefined

[deleted]

UncleOxidant

> now is a fantastic time for the tech industry to adopt change because your talent recruiters are probably struggling to find and retain new developers

Unfortunately, this will likely change much sooner and more rapidly then most of us expect. The music is stopping and chairs are about to be removed. It was great while it lasted, but all good things come to an end.

rejor121

Sure. Someday. Same thing has been said since the 90s

tsuujin

I’m not sure I agree, but I’m positive this isn’t a barrier to adoption right now. Recruiters are really looking for an edge to provide differentiation, and “friendlier, faster process” is a big one.

rodenmonte

Would you be able to share the kinds of questions you ask and have had success with? :)

tsuujin

We basically adopted the MINASWAN interview, which Jesse Spevack can explain much better than myself in his talk [here](https://youtube.com/watch?v=c4K-ORZmrGk&feature=share).

The overview is that for each candidate we spend 20 minutes reading through code we provide to them to demonstrate comprehension, and then we give them 45 minutes to pair with us on reimplementing that same code from scratch.

What that code is doesn’t really matter, it’s more about getting a chance to work with them and start a conversation, and starting with trying to explain a provided example really smooths the way into the pair programming.

curiousllama

FWIW, happy you're doing this! A better process would make so many peoples' lives better.

The ONLY people who should "get used to 'em" are new/recent grads looking for a junior-ish IC job. For them, it's just a fact of life: they had to learn history & biology to get their CS degree; they have to learn leetcode to get a job.

Interviewers should make a better process, as you're doing.

tsuujin

Honestly, I think I would encourage junior devs to shop around before just accepting the leet code life. Unless they’re in dire need of income—in which case, do what you need to do—the kind of company willing to treat you like a game show contestant may not provide the best culture for learning and growth.

If you can avoid the BS you should definitely do so.

undefined

[deleted]

valar_m

So what'd you come up with?

tsuujin

I answered this in another comment before I saw this, feel free to respond to it if you want to chat about it: https://news.ycombinator.com/item?id=31453571

jjav

> They're biased, arbitrary, and often quite silly. And they've persisted for a half century.

Half a century? Absolutely not. It's a recent phenomenon (in software jobs).

All through the 90s and 00s it wasn't like this.

mikelevins

For what it’s worth, it was like this in my interviews at Microsoft in the late 80s.

curiousllama

The point is that leetcode is an instance of the class interview_riddles; the class has persisted for a half century.

WalterBright

> you can't learn leetcode without learning to program

A lot of people learn the jargon and sound like they know how to program, but don't. Failure to filter these out can be very expensive for a company. They have a strong incentive to ask for a programming demonstration to filter them out.

diob

The worst part is it's biased towards those who already have the time / security to devote to it, aka those from the upper class. Vicious cycle.

rockemsockem

That bias is generally true for any education-based employment that requires a significant upfront investment.

gerash

One big issue with these problems is that they are timed. So if for whatever reason you get stuck, stressed, distracted and take an extra 10m to reverse a linked list you're filtered out.

rajup

> My advice? Start memorizing the riddles.

I don't have a strong opinion either way, I got with the Leetcode grind program for my current position, but I really wonder about this: is it really possible to memorize these questions? Last I checked Leetcode has over 2000 questions, anyone who can memorize the solutions to all those is some kind of genius savant and should be hired anyway. Or is memorizing meant in a different context here?

bulldog13

Memorizing is meant in a different context.

Ultimately the problems boil down into a few "types". So you are memorizing the types.

https://dev.to/fahimulhaq/14-patterns-to-ace-any-coding-inte... https://neetcode.io/

curiousllama

As a sidenote: this holds true for other types of arbitrary-interview-riddles. There's only 3-5 "frameworks" you need to memorize/apply for consulting case interviews. Finance probability problems typically test one of ~a dozen prob/stat formulae + ability to multiply 3-digit numbers in your head.

After all, it has to be manageable for the interviewers to make sure all the questions are roughly equivalent in difficulty.

bhavikkumar

I have used hackerrank/leetcode previously just sporadically to learn a new programming language. I used it for the first time to help me get another job earlier in the year.

However, I have continued to solve 1 problem a night because what I realised is after 15+ years in the industry, I don't have a good grasp of some concepts anymore.

I'm slowly getting better at identify types of problems and apply what could be the most efficient data structure/algorithm in solving the problem. Once I solve the problem I go have a look at the solutions to see a more efficient way of solving it and try to store it away in my memory banks for another day.

The thing I don't like is when interviewer asks follow ups such as "Can you do the same solution but using O(1) space complexity". Unless the job has a restriction on running on limited hardware resources. I feel like it's unjustified asking such follow up questions because most of the time that is a very specific solution for the problem - or maybe I'm just not good enough to come up with such a solution yet.

jjav

> anyone who can memorize the solutions to all those is some kind of genius savant and should be hired anyway

But that's the problem. Why should they be hired?

The actual job will not consist of regurgitating those memorized solutions.

I'm impressed by someone who can memorize 2000+ solutions, same as I'm impressed by the acrobats at Cirque du Soleil, but I don't want to hire from either group for a software engineering job because that's not what the job is about.

mhh__

If a trading job asks you a probability question they might be looking for you to be able to understand risk-neutrality. This is an important distinction because risk neutral pricing is a very important concept i.e. don't just try and memorize it.

undefined

[deleted]

rglover

Realize that in a lot of companies most people are mediocre at best; nowhere near "leet." It's worth studying psychology to understand that many of the swords held over your head in interviews/scouting are plastic and held by insecure people.

Doing so takes the pressure off and helps you to realize that there's a ton of opportunity out there if you want to get to that level.

The truth, though, is to build stuff, practice, and don't stop. I've circumvented most of the gatekeeper stuff because I intentionally hustled freelance/contract work early on and got to a level where I had a portfolio of high-quality work (i.e., leave money on the table short-term to make big money easily long-term). Now if companies turn me down, they look like fools.

Always worth asking: "how do I circumvent the hoops?"

Also (via Derek Sivers):

> “The standard pace is for chumps.” - Kimo Williams

Feel free to email if you want an opportunity to practice/gain experience: ryan.glover@cheatcode.co.

Daily Digest email

Get the top HN stories in your inbox every day.

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