Hacker News new | past | comments | ask | show | jobs | submit login
Leetcode has taught me that I'm a bad engineer
408 points by Fattestmoron on Jan 5, 2022 | hide | past | favorite | 456 comments
Just like https://news.ycombinator.com/item?id=26468248, I give up.

I've been at it intensively for a couple months and my mind simply refuses to cooperate. If anything, after having done 400+ problems I seem to be worse at them than when I started.

Since your time is more valuable than mine, let me summarize:

7+ YoE, MSc. in some science (like it matters)

Last 4 years been mostly ETL with Spark and some backend thrown into the mix with a "senior" title for devops and mentoring noobs.

I used to think this job was a creative one, since writing frameworks and libraries for further use, documenting code and extreme programming made me think that I was building something new and useful.

In fact, due to having extreme ADHD the only thing that kept me distracted during all my overtime was the ability to pursue fun and challenging things. MPP and all the cool stuff you can do with modern tools is fun, interesting and challenging.

Leetcode isn't about fun and challenging things, it's about thinking in one particular way, spitting out solutions using the same exact data structures and jumping through hoops on command without philosophizing or creating anything that can be reused/extended.

This is also what Software Engineering has become: you memorize, regurgitate and participate in agile the masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

I wish I had practiced law for the past 7ish years instead, because at least all of my skills would still be relevant.




I'm a 20+ year Senior Software Architect, Team Lead, Senior Developer and a PM (all at the same time at the moment!). I've done everything from C++ to 20 years of .Net to now TypeScript and Angular 13 with .Net Core REST APIs against an Oracle SQL database.

I am self-taught and I can't do these leetcode problems if my life depended on it.

I still deliver high quality software on time, and on budget, and have a solid grasp on my career.

I wouldn't worry about this too much. It depends on what you are going for.

Sure, if you want to pass a FAANG interview where you are going to get these types of questions, go for it. To solve day to day business problems, you rarely need this stuff. You just need to learn how to write quality, performant, correct code that results in solutions.

The best way to do this is develop experience in the industry over the years.

My 2 cents.


I'm also self taught with over 20 YOE and pretty lost with leetcode problems. But I get the job done and have a really good eye for user and business domain concerns. My last two jobs haven't required any kind of test. I actually had to do a couple of short narrative essays for one to prove I could write - which was a hoot because I majored in English.

The only job I've ever had to do any kind of test for wasn't leetcode - just a practical demonstation that I could write a basic CRUD app. Was actually a pretty good test to weed out people who were just completely useless.

I'm also finding that experience matters. It's just tough to get that across up front.


The only job I've ever had to do any kind of test for wasn't leetcode - just a practical demonstration that I could write a basic CRUD app. Was actually a pretty good test to weed out people who were just completely useless.

I think this is a totally reasonable way to weed out applicants, particularly if they allow you to do it during the interview time. I've been through several interviews (though, to be fair, they were well over 15 years ago, since that's how long I've been with my current employer) that used a similar exercise. One interviewer just sat me down at his workstation, and told me to build a quick crud with their tech stack (which, of course, I knew going in). Nothing was off-limits (web searches, etc).


If you were to choose between no Leetcode in interviews vs. a significantly higher chance of getting fired in the first 3 months of your job (essentially treating it as a trial period), would you take that deal?

I ask because as a startup founder, I would significantly prefer to try working with someone for 3 months instead of doing useless least-common-denominator interview questions. It's a bad fit, it's better to quickly part ways. But getting fired or asked to resign is a big emotional blow for many people, and I'm not sure if they would rather face that than the Leetcode grind.


I realize that I'm probably the outlier here in the US market, but absolutely I'd rather have a 3 month trial period (not only so you can evaluate me, but so I can evaluate you to make sure it's mutual).

I'm fairly confident in my ability to deliver value in the first couple of weeks on a project, so would much prefer this to having to spend time grinding leetcode puzzles that I'm not innately good at.

Note: a large part of this perspective is the privilege of feeling like I could get another job pretty easily, and having a sizeable emergency fund that I could draw from to continue the search if things didn't work out. So you may be filtering out people who are not in such a fortunate position.


The problem is that it takes a lot of effort to fire people. And every time you do, you increase your exposure to legal trouble.


At least in Germany it's usual to have a trail period of a half year in any job. During this time both, the employer or the employee, can resign form the contract with usually a two weeks notice period. Neither side needs to specify reasons in detail.

As this is a normal contractual regulation there is almost no risk of any legal trouble (usually).

On the other hand side as soon as this trail period ends all the German workplace protection regulations start to apply in case of permanent employment contracts. So after the trail period ended it gets quite difficult for an employer to get rid of an employee.

But all in all that's pretty fair, imho. After a half year you quite surely know whether you like the workplace, or form the other perspective, the employee.


Not in the US it doesn't. The turnover rate if anything is a symptom of the problems in the industry.


What do you mean by "can't do these leetcode problems if my life depended on it".

Because there is a difference between writing FizzBuzz and solving one of those dynamic programming problems that are so common in competitive programming. For the former, I am surprised you can even work without being able to to this, for the latter, you pretty much need special training that is not very useful in most professional settings.

I never took a leetcode style interview so I don't know what is generally expected. If you are expected to do hard problems, it doesn't test much besides your leetcode skills. But easy problems look like a pretty good filter, assuming the stress of the interview isn't blocking you, which is another problem.


FizzBuzz != leetcode. You are correct - easy problems are a good filter. After starting with one company I started sitting in on phone screens and candidate interviews and I was shocked at what a lot of applicants didn't know. Actually helped me with my imposter syndrome. I walked away from several interviews feeling like maybe I did know a thing or two!


IME the challenge is that all leet code problems seem easy once you know the answer, in particular because the code itself is often very simple. And so many of the interviewers claiming a candidate cannot do "easy" problems are off-base. This usually stems from not knowing the history of the underlying data structure or algorithm. Interviewers take for granted the things they know, especially once they've asked similar questions a few times.

IMHO I believe the right approach is to either ask from a standard bucket of questions that require preparation and advertise which ones to candidates, or not ask them at all. Asking "only a few really easy ones" is becoming a red flag to me.


It reminds me of the "Jewish problems". Math problems that look simple, with a simple solution, but are actually really hard. It was used in the Soviet Union to deny access to universities for "undesirable" people like Jews. They were given these "simple" tests and their failure was used to justify their rejection.


> a standard bucket of questions that require preparation and advertise which ones to candidates

And what are you testing than? Whether someone can memorize things?

Even though I'm not good at memorizing things every second monkey out there is.

Actually, people relying mostly on memorization for "problem solving" aren't very intelligent in my experience.

Especially in software development you don't want people who can mostly only reproduce things once learned by heart!

No two problem instances are exactly the same. It's all about the context! What is the recommended text-book solution in one case could be the most stupid thing you could probably do in another superficially "similar" case. You want people being able to recognize the difference and act accordingly.

(Of course you need some amount of drones in every company. Especially when your company is big. Not everything needs highly skilled and highly intelligent employees. Also there is only a given amount of adequate people available at all. If you're big you can't be too picky if you want to hire enough staff in a reasonable time frame. But those are problems of really large organizations).


I agree that leetcode easies are good filters.

But what if too many people pass those filters?

Then we move onto mediums.

But what if too many people solve those?

And that is how we reached the current state of interviews.


I'm a 15 year(ish) engineer-turned-manager who has spent a good chunk of time doing recruiting.

* I confirm that day to day business problems rarely are the sort of problems you find on Leetcode.

* I might ask similar questions in interview. I don't expect the candidate to solve them. As a matter of facts, I don't care if the candidate actually solves them or not. I am observing how the candidate behaves in front of a difficult problem. Will they freeze? Will they jump head in the code? Can they articulate their thoughts and think analytically about it? Can they think on the spot if I challenge their approach? Are they comfortable saying "I don't know"? This sort of things.

In my book, being a "good engineer" is much more about communication, collaboration, familiarity with git/sourcecontrol, clarity of commit messages, pertinent emails, being reliable, being resourceful, etc.

Good grasp of algo is a big plus, of course, but it's not something that all the best engineers excel at.


> Will they freeze?

So what if they freeze during those 45 minutes? How representative is that scenario for what most devs do?


Most people freeze on interviews and its normal entirely.

Also, most problems are not solved in the 45 minutes and in day to day coding , we generally have a minimum of day to think on the problem and solve it without people looking over our shoulder, google or ask someone :)


> Most people freeze on interviews and its normal entirely

And presumably fail said interviews because they froze. Usually "I think I need to think about this for a while, or maybe even sleep on it" isn't the answer that the interviewer requires.

As you note, it's normal to need more than 45 minutes to think about a problem that you haven't seen before. Many leetcode type problems puzzled eminent computer scientists and/or algorists/mathematicians for years before they were solved.

Then there's the psychological aspect of when interviewers try to "help" you by asking questions, providing clues or even the specific clever (or stupid) trick needed to solve the algorithm puzzle but really you're in no condition to understand the hints they might be providing.


What do you mean?

If a candidate freezes for 45 minutes in a 45 minute interview, they won't get the job.

... Right?


So if I asked you a complex architectural question, or an algorithmic question and you froze, would it mean that you are an incompetent manager?

Clearly thinking on your feet in front of people is what it means to be good at ones profession.


My role isn't to assess if you're competent or not. My role is to assess if I want you on my team or not. There's a difference.

And yes, if I ask you a technical question and you freeze, I don't want you on my team. It doesn't mean you're a bad engineer. It means you're not a good fit.


My role isn't to assess if you're competent or not. My role is to assess if I want you on my team or not. There's a difference.

Pretty much sums up how the hiring process is a gamble. So if you don't like somebody and they could be an asset to the company you would not hire them?


> I can't do these leetcode problems if my life depended on it.

Don't undersell yourself, you ARE able to do them, maybe with some practice, like putting some basic algorithms implementation into your muscle memory.

Doubtfully it'll make you a better developer though.

Anyway, the most important skill for FAANG interviews is ability to write code on a whiteboard with a dried out marker.


His intention isn't to undersell himself, for whatever reason it's very favorable on this site to tell people how you have decades of experience working in this field but can't write fairly basic data structures or algorithms. It comes across as very likeable and personable and gives people hope that they too can spend decades working in a field making a better than average salary without ever having to master the fundamentals of their job.

The reality is that if this person's life really did depend on it, for example they lost their job and they have bills they need to pay or a family they are responsible for taking care of, then they almost certainly could put in the effort to brush up on their skills and get to a point where they could do leetcode easy or leetcode mediums in a matter of weeks or a month at most.

It's along the lines of an MIT grad saying that where you go to school doesn't matter or a rich person saying that money doesn't make you happy, or even the myth that Einstein failed at math. These statements that espouse a false sense of modesty have great appeal and they likely come from good intentions, but ultimately they give people bad ideas about what it takes to be a fairly competent developer.


> Anyway, the most important skill for FAANG interviews is ability to write code on a whiteboard with a dried out marker.

This would be a good April Fools ecommerce site. "Dried out markers! Guaranteed to land you a job!"


Same. I've been working 20+ years and am now more management than coding, but I have never been subject to a leetcode style interview and have never subjected a candidate to one. I think they are poor predictors of value in 95% of actual industry work. Any line of business software, web dev, mobile dev, DevOps, IT, creative tech, consulting work requires a mix of basic technical competency, organization and communication skills. And good Googling technique.


Similar experience. 4/5 years in mobile/web, android and angular in Italy. No degree but still now on a solid job. I fully agree.


I have a similar background and YOE as you EMM_386 (except no .NET but a relatively common progression from php to node/react), and I even have a computer science bachelor degree from a top 50 US university (graduated with honors). I can't do these leetcode problems if my life depended on it either.

For OP, I read your post and the post you linked from 9 months ago. It sounds like you two have fairly different backgrounds and experiences. The other poster said they had only worked for 1.5 years before getting fired at a first job, and then spent time leetcoding. 1.5 years is a short time for a person to be able to learn how to effectively work in a grown-up world after school/college. In fact, I had a similar experience at my first job (I didn't get fired, but I was getting below-average performance reviews and I left on my own), also for about 1.5 years. It wasn't until later I learned what matters, what to do and what not to do at a job, and then excelled.

For you, it sounds like you've already learned it, evident from the fact that you had 4 years at a real job with a senior title, proving that you can do it well. It sounds like your issue is more around finding meaningful work, having a disdain for the current trends of agile, react, CRUD apps, etc. which isn't uncommon. I think there are other solutions to what you're facing, and leetcode isn't it.

For me, the key has always been working in an industry I'm truly interested in, then I can dive deep into the business domain knowledge. I'm a very senior level engineer and I'm good at it but at the end of the day the code is still just a tool to me. I don't really care if architectures are tried and boring, I just want to make business impact and build products. Maybe it's the same for you, maybe not. The key is finding what matters for you, and not care about parts that don't matter.


IOW, it turns out that it is really hard to test for the high-level skills that actually produce results, no one has really cracked how to do it, and "Leetcode", despite their marketing, has also failed to figure out how to really build a useful test set.


Disagree that the knowledge required to do well at leetcode is not useful for some business problems. FAANG most definitely has products/projects that need that specialized ds/algo knowledge, which is something most people learn in CS formal education.

Off the top of my head, React uses lots of graphs and trees to render stuff.


All you need to know is that this stuff exists, and when / why it would be appropriate to use it.

Also there is almost never a reason to implement such things yourself—even when you need the algos—as there are libs for that! (Imho one of the biggest signs of incompetence is when someone starts to reinvent the wheel! That's an absolute no-go. And the truth is: If you're not in academia doing research all the wheels you ever need are already invented).

A valid test for a candidate would be whether he/she is able to google for an algo and pick the correct code form the results.

Such a test would be good enough as a lot of bad candidates would fail as they wouldn't google but start to "solve" things on their own; the other bad ones wouldn't be able to pick the right solution at all—because they don't know what they should look for in the end.


I must admit I don't understand how one can not be able to solve them and be able to solve other programming problems at the same time.

I believe you and others when they claim they are good developers. I just want to point out that for many people, it can be impossible to understand how your minds work.

Maybe it is a bit like dyscalculia, where some people can not comprehend "amounts". They can not calculate well, but they can actually be good in other fields of mathematics.

Edit: I never did a lot of leetcode, but for reference, here is a problem they categorize as "hard": https://leetcode.com/problems/median-of-two-sorted-arrays/

It requires calculating the median of an array. Is that really a kind of thing people who are otherwise good developers can not do? I must admit it really boggles my mind and makes me a bit hopeless and desperate. It seems all attempts to explain stuff to people are futile anyway, at least for some things.


Got this question at a FAANG company. Interviewer was absolutely not satisfied with linear solution and wanted it solved in log(m + n)

There's a huge meta-game around these questions that you pick up after practicing them enough.

Even without the hint, I intuitively know looking at that question that linear time is too easy for a 1 hour face to face interview at Google.

I also know that as the data is sorted the optimal solution must be logarithmic, as in these contrived problems there's no such thing as an unnecessary detail. Monotonic means binary search.

I haven't built this intuition from my experience as a software developer, but by spending my free time playing the game and grinding these arbitrary puzzles.

The fact you missed this meta, tells me absolutely nothing about your skills as a developer, only that you haven't been grinding leetcode.

That shouldn't be a signal not to hire you, but that's how the game works at FAANG.

If you can make this observation about the arrays, and code a fully functional binary search taking into account whether the total length of both arrays is odd/even, handling the out of bounds case, whilst under pressure on your third interview of the day with just the intuition you've built in your day job, then as far as i'm concerned you are the exception not the rule.


Typical day-to-day programming never requires you to find the median of two-sorted arrays, so a self-taught programmer generally has never thought about how you would tackle a problem like that, especially given the complexity requirement (O(log (m+n))) stated in that problem. If your brain immediately knows what to do when you read that problem, then you probably have a CS degree. If you have to spend 5 min thinking about the complexity notation before you even start the problem, then you probably don't have a CS degree.


And if you see that and go "do they actually say the words 'big oh' when they speak that outloud..." you're interviewing as successfully as I do!

I really appreciate your greater point. I've been given all sorts of CS problems in interviews that I don't have any background in understanding the context enough to know what to do. I changed careers from experimental physics, so my software work is essentially self taught. That doesn't mean I'm totally useless in my job or not an asset to my team or can't deliver products that generate massive revenue. But, those things are how interviewers make me feel.


But wouldn't it be exactly the hallmark of a self-taught programmer to be able to figure things out on their own? In general I don't think a programmer can expect the kind of job where they only do standard things all the time?

Merging and comparing arrays as in that task also seems like something that might actually come up in a job.

However, I take the point of the other comment that the real issue here is doing it with certain speed requirements. That does make it harder, indeed, but still doable.


Self taught programmer here. I get stuff done for the project or program I'm working on. I learn how to do what I need to do securely and automate a lot. I can figure out documentation of frameworks, libraries and random code written 10yrs ago. I can glue things together or write new code in python, golang, C, C++, shell, nim, lua, and others. I'm self taught where it matters to get my job done.

Self learning 'big O' is a waste of time and effort. Never have I needed to know it to accomplish a task beyond interviews. Don't nest six for loops, reading lines from a file into memory each loop. Got it, learnt it, can do. Next problem.

This gatekeeping attitude is bullshit.


I never used the O notation in a job, but I have seen people waste cycles. For example in the early days of ORM, I saw people load the whole table and then sort and filter in Java, rather than writing appropriate SQL queries.

Understanding Big O notation is not that difficult and everybody knows it is a common question in interviews. Analyzing specific algorithms can of course be difficult.


Absolutely - a self-taught programmer should be able to figure out how to solve that problem. All I'm saying is that it's going to take longer for the self-taught to solve it because it's not something they have thought much about before.

Having a CS degree gives you a large advantage when solving problems like this, but that advantage is markedly lower when you are trying solve typical real-world problems in the private sector.


> But wouldn't it be exactly the hallmark of a self-taught programmer to be able to figure things out on their own?

Self-taught or not, no one is able to derive an optimal solution to algorithm problems on the fly. You must have previously learnt the technique, and probably practiced applying it a lot.


I think the tricky part with that specific problem is that it asks you to do it in O(log(m+n)) complexity, so you can't even iterate through the two arrays to see all of the values -- you need to do some binary-search-like thing across both of the arrays. In O(m+n) complexity, yeah you could combine the arrays and then find the median of the combined array, which is much simpler. This is actually a great example of why those questions are so hard!


OK I missed that - that does make it harder indeed.

Also I must admit I used to enjoy such tasks more in former years, now it seems more like a needless chore. On the other hand, somehow I feel compelled to solve games like "Human Resource Machine" or "Infinifactory", which can be equally tedious.

I'll try to solve that leetcode task.


For more points, try solving it in 25 minutes without running the code (i.e. as if it were on a whiteboard), and produce an answer that you're confident doesn't have any major errors, and be able to explain why it's logarithmic time. When you're done with all that, then run it and see if it passes. If not, you fail!


Demanding code that runs is silly, I agree. I think it can be valid to see how people cope.

I was once asked to produce the proof of the theorem of Pythagoras, which I hadn't thought about for many years. I failed to do it in the interview situation and later did it at home. However, I enjoyed the interview and I was also offered the job.


Many of those simple problems are only simple once you understand the underlying techniques, and often have subtle tricks that make or break the underlying solution (for the allowed runtime / memory). I am continually amazed reading Segewick when he points out "this only takes one line here to make it all work! Seems simple, but actually took researchers years to work that out". But if you read (or use similar code) invovling that one line, you might think it easy.

A good exercise, I think, would be to ask people to implement binary search (assuming they never have before). We can all intuitively explain the algorithm, but actually getting all the code just right is a little tricky. See if it trips people up. Then ask them to do it in 20 minutes or they are fired (e.g. comparable to interview scenario).


The point of that exercise seems to me to make people implement binary search without having a solution they have learned by heart.


Well, yes but my supposition is that it will trip some people up in unexpected ways. And given a tight timeline, the results will not translate into how good of a programmer they are. IMHO it will be semi-random whether good programmers can complete the problem. And of those that can, a sub-set will have (whether they recall it or not) completed VERY similar problems in the past.

I've found a great number of "easy" problems too challenging to complete in 45 minutes. And yet once I learned the underlying techinques / DS / Algo's, many "medium" ones I can complete in 10 minutes or less, even when I have not seen that particular problem. Conversely, I was able to complete some of the harder problems in 5-10 minutes without EVER having seen the underlying algorithms before, because I actually had in real life problmes but had never drawn the connection. The more leet code I do, the more I realize when encountering a new problem, it is a complete roll of the dice if it will take me five minutes or five hours, despite being of the same level of difficulty and even same class of problem. But this is not so surprising -- this is how the history of those algorithms unfolded. Many were one line of code away from a far better runtime, and sat for years before someone cracked it.

My main take away is, algorithmic style questions can be useful to test whether candidates adequately prepared and practiced from a given set of information, and is perhaps most predictive of their level of comittment / professionalism / base-aptitude. IMHO unless you are building a novel product or charting unknown territory (rare), its far better to be experienced, prepared, and well read, than it is to be smart. Perhaps. I don't take issue with Google requiring a wide variety of expertise in such problems to get in. I do have a problem with a random set of "easy" problems and then making judgements of people afterwards. But that's just IME.


>I am self-taught and I can't do these leetcode problems if my life depended on it.

>I still deliver high quality software on time, and on budget, and have a solid grasp on my career.

There's simply no way of proving that to recruiters without Leetcode.


There's no way of proving that to recruiters with Leetcode.


> There's simply no way of proving that to recruiters without Leetcode.

If a recruiter can't assess engineers without something like Leetcode, they need to find a another job. Assessing talent is the job of a recruiter, and if the only way they can do that is with Leetcode, that's just pathetic.


Except, recruiters were able to do just that for a really long time before leetcode came along. If a recruiter today can't assess a candidate without toy questions, they should probably reconsider doing technical recruitement.


I don't see this mentioned by other commenters so let me provide another perspective. Namely, I think OP is doing it wrong.

OP claims to have done 400+ LC problems over a couple of months. Let me say it out loud here: this is simply crazy. It strikes me as an attempt to not learn how to tackle these challenges, but to actually brute-force through them. To anyone preparing for an interview: don't do this! Grab a book like Elements of Programming Interviews (EPI), maybe follow some online courses on programming puzzle patterns, and then start grinding LC. Maybe interleave grinding with learning? Your end goal should be to develop deep understanding of what you are doing, not memorise the solutions.

Also, while going through LeetCode, it is very important to realise that the problem classification there is a bit wild at times. Don't stress that you cannot solve a medium sometimes as they are mislabeled. I did mediums that could be hards, hards that could be mediums, and hards that were just impossibly hard. Typically a very hard problem is not something you should expect in an interview setting as most interviers* don't expect you to implement KMP on the spot. Doesn't hurt to know it and impress the interviewer with knowledge, but if you think memorising KMP is the way, you're mistaken.

* - there is still luck involved and you can have a crazy interviewer. It can happen, so just accept it and move on. Don't treat it as a personal defeat.

Source: I grinded and I had offers from most of FAANG letters.


Yeah, I practiced leetcode by spending about an hour a day for 2 months, but I had only done around 60 LC total (25 medium, 35 easy).

I didn't feel a need to do much more as they had very similar patterns. I did attempt the ones I had solved more than once though, but it was to really drill in the principles behind the problem rather than to try and "memorize" them.

Prior to my prep, I had almost 0 algorithm experience. I got an offer from every FAANG I applied for.


Going to call bullshit on that, since in recent interviews most people have been getting hard problems and not "trapped rainwater" prefix sum hard problems, but the kind where the optimal solution has nearly 100 lines of code involving multiple steps (topological sort combined with dp and other garbage at one go).

Easy problems literally mean jack and I don't even think 50 medium problems could span all of the possible topics.

Sounds like you got in when it was easier.


It was 2019, so things may have changed but I doubt it. Maybe I was lucky? Or maybe you were unlucky. I also applied as a Senior SWE (mobile) if that makes any difference.

Out of the 12 companies I applied for I was given 2 hards (both were private startups), the rest were all mediums.

>nearly 100 lines of code involving multiple steps

I was never given anything even close to involving a 100 line solution. Are you sure this was even the correct/optimal solution? Either that or you're very unlucky. Which companies were asking such questions?

>50 medium problems could span all of the possible topics.

I was given problems that I hadn't encountered before, but I was able to solve them by deduction/critical thinking and applying the appropriate algorithms/patterns. Often the easy solution and the optimal solution weren't even that different, and just involved using a hashtable.

Grinding through hundreds of LC to try and memorize/familiarize yourself with the solutions really isn't the right method. Have you read Cracking the Coding Interview? Gayle McDowell has some videos on youtube in which she explains her process.


   I was given problems that I hadn't encountered before, but I was able to solve them by deduction/critical thinking and applying the appropriate algorithms/patterns. Often the easy solution and the optimal solution weren't even that different, and just involved using a hashtable.
Yeah, no.


this is the way. although your innate ability to learn and apply algorithms is probably above average :)


Including google and Facebook?


Yes, I accepted the FB offer.


This still seems off. If you wanted a deep understanding, you'd go for academic books about algorithms and data structures, then go try the leetcode problems without the coaching advice. Otherwise we're just coaching towards the particular interview format, which is only proving you can learn to game that particular format. Coaching for an interview format doesn't solve real world problems which is why people are annoyed about these interviews.


If its helpful, I did read one of those academic books (Segewick) thoroughly. But personally I found the practice questions laborious. You have to do the setup, you don't get the feedback. You don't know if its going to be easy or hard. And it takes some effort to see similar solutions. Conversely, once I paired with it with leetcode, I could e.g. finish reading about topological sort and then go look up common problems. I found alternative solutions, comparisons, got instant feedback, etc. To me, the combination of a quality DS&A book with leetcode for the raw (targeted) practice is a really great combination.


Adding to the comment about difficulty, the number and ratio of likes : dislikes on a problem is a good measure of difficulty. A Medium with 5K likes and 300 dislikes is probably quite a good (well-written, constrained, fair) problem. A Medium with 300 likes and 800 dislikes I'd steer clear of.


I'm more interested in how do you even get noticed by FAANG in the first place. I never get contacted by agents about them and applying just gets me ghosted every time?


I think at 7 YOE, you’re at a very good spot where you have the flexibility of being picky with what types of interviews you can choose to interact with. Especially in this current market where it’s one of the rare times that candidates have some semblance of power in the hiring process.

You should check out https://github.com/poteto/hiring-without-whiteboards, which is a list of companies that don’t use LeetCode in their interview process.

An issue I often ran into when using the repo myself was I’d find a company that sounded awesome, and then find that they didn’t have any open positions. I created nowhiteboard.org to act as a way to pull all the jobs from the companies listed on that repo (and other companies that I’ve manually found that don’t use LeetCode).

I think there’s a matter of education and shining a light on the companies that don’t use LeetCode as I feel that the prevailing notion in online communities is that companies only use LeetCode to interview. I’m obviously biased since I’m obsessively researching this, but I’ve read a good few comments online of engineers who’ve stated that they haven’t had to use LeetCode for any of their interviews over their career, and that all of those companies aren’t listed on the repo above.

If companies had a good way to source candidates that are hesitant to jump jobs specifically because of LeetCode, I could see our industry starting to make some semblance of progress towards making LeetCode less prevalent in interviews.

Anyways, rant over, hope your job searching goes well!


YMMV I guess. Based on experience, I'll take leetcode or a whiteboard interview over wasting a weekend doing another one of those take away projects.

Any mention of these gets a hard NO early on during the interview process.


I'm really pissed about take-home projects now. I put so much effort into one, I passed it, I hit the interview loop, I got very positive feedback on my tech skills ("top tier"). But they ultimately pass. Five days later I get one sentence of extremely vague, useless feedback about my soft skills. That's representative of the entire process, which had numerous long delays and cancellations of meetings.

It's really insulting to put so much effort into something and then get treated this way.


I too am very tired of home tests.

Recently: * burned 2 days PTO putting together a comprehensive solution I was proud of. Feedback was they wanted me more proficient in their specific tech stack. I'd already said I was looking to learn their preferred language on the job and would do the test in a language I was more comfortable with, and they had been happy with that line of discussion.

* was given an open ended dataset and told to spend 2 hours on it. Did all the initial analysis I do on any new dataset in my regular day to day job, spending a little more than the allotted time, and found some interesting things. Feedback was that I should have gone deeper in my analysis.


> Recently: burned 2 days PTO putting together a comprehensive solution I was proud of. Feedback was they wanted me more proficient in their specific tech stack. I'd already said I was looking to learn their preferred language on the job and would do the test in a language I was more comfortable with, and they had been happy with that line of discussion.

Ugh, gross. You dodged a bullet. Pathetic.

I really despise it when compulsively agreeable people agree to something without actually meaning it, just because they're uncomfortable with saying no, and then backtrack later.

If any of you out there do this, please stop now. It's a huge waste of time for the people who interact with you, and it's hurting your reputation.

> was given an open ended dataset and told to spend 2 hours on it. Did all the initial analysis I do on any new dataset in my regular day to day job, spending a little more than the allotted time, and found some interesting things. Feedback was that I should have gone deeper in my analysis.

Yeah, it's obvious that this "don't spend more than X hours" is just HR babble to make the process look fair. They want you to spend a week and pretend it took 2 hours.


Surprisingly, I don’t think I completely disagree with your point of view.

I think if I had the power, I would allow candidates to have multiple ways to interview at a company. Some companies do this already where the tech assessment portion can be administered as a take-home, LeetCode challenge, or re-factoring some sort of code.

There are downsides to LeetCode, and there are downsides to take-home projects. My intention with the website is to offer extra choices to developers when choosing to interview at companies.

And I think as a candidate (and companies as well,) LeetCode is the more scalable of the interviews since there’s defined criteria to study and to test on, so I do see the merits of your POV!

I’m not necessarily about this full-on hatred for LeetCode, BUT I also did buy fuckLeetCode.com just in case


Yup, would much rather do a 30 minute phone screen than a "2 hour" take home (usually more like 4 hours with all the requirements needed for the project, unless you already have a decent framework you're working off of).


I did one of these recently, and they basically looked at it, said it was great, and and made me do ANOTHER leetcode interview!


I find competitive programming to be creative and expressive. For most problems, there actually can be multiple ways to solve the same problem, with each approach having both hard (perf, memory) and soft (simplicity) trade offs. Leetcode problems remind me a lot of Celeste levels or rock climbing, where even though there might be an optimal solution, everyone solves the problem in their own unique way. No two solutions look the same. Even if everyone is solving the problem with the exact same algorithm, every submission has its own code style, and that's really cool.

I also find that Leetcode translates really well into the code I write in my freetime (a roguelike. Real work is boring fullstack crud). I personally hate reaching for libraries in my side projects, so being able to have these data structures and algos at my fingertips and being able to implement say A* or a weighted rng function or something else on the fly has been super handy. I honestly don't think I would be able to implement a vertex fragment shader w/ lighting without the skills I've picked up from Leetcode grind.


I'm sure Leetcode and similar exercises are great recreational activities, whose benefits leak into daily work in some shape or form. The problem I see is that the practice has been manifested as a one-dimensional interviewing practice:

"Solve this problem in 45 minutes. Top to bottom, single pass, no typos, right now, while I'm watching and interrupting your thought process. You are not permitted to feel anxious. You now have 43 minutes - Go!".

This is not a representative field test.


I understand there are companies which treat Leetcode as a "representative field test", but IMHO (based on my 8+ yrs experience working across FANGM, w/ ~200 interviews conducted) any company that uses Leetcode this way, is doing it wrong.

The "right" way to use Leetcode, is to treat it similarly to how IBM does their weird IQ test screening, except Leetcode is strictly better than an IQ test. It is NOT a simulation of work. It is also NOT an "intelligence" test (thank god for that).

If anything, it is closer to how professional sports teams evaluate young athletes via a training combine or a set of individual drills/tests. Doing vertical jumps or sprinting really fast are not "representative field tests" of how well you actually play a sport (the whole sport, not just a single part of the sport), but they are good-enough filters for an athletic "interview".

However, in the same way that IQ tests are bad for a multitude of reasons including implicit demographic biases, so too are Leetcode tests flawed (including a heavy element of age-ism, as there is a strong anti-correlation between "years since college" and affinity for Leetcode-style tests).


I don't agree, but one upvote is from me because I'm impressed at the clear justification of your opinion in your comment.

I disagree for the same reason that I didn't like D&D-style magic, where magic-users memorise their spells and can only do magic as far as they still have spells in their memory "slots". That's not how real magick, a.k.a. programming a computer, should be like. Memorising solutions is useful and you should not reinvent the wheel (ahem, which means you should use libraries actually) but I am not convinced you can really learn The Laws of Magick (principles of programming) by solving specific coding exercises and memorising their solutions.


> For the most problems, there actually can be multiple ways to solve the same problem, with each approach having both hard (perf, memory) and soft (simplicity) trade offs.

True, but my understanding is in interviews, which is the context most people are interacting with leetcode, the interviewer is looking for only one of those answers, and you have to regurgitate the right one fast.


As someone that does interviewing, I am not looking for one specific “right” answer. Acknowledging the time constraint and pressure of an interview, I find it acceptable to get non-optimal solutions. As long as they’re able to come up with a reasonable solution and can recognize it as being non-optimal, and offer ideas for how to optimize it outside of an interview setting.

I’m not sure how common this way of thinking is, but I wanted to point it out since many of the comments here make it sound like only the best answer will do.


20 years in the business, if someone asks me to do fizzbuzz or leetcode at an inteview, I'll just walk out and won't look back.

I've been doing this crap way too long to do brain teasers at an interview. I suck at them, I always have. Advent of Code makes my brain hurt.

That doesn't mean I can't design, implement and lead a team to create a service that can handle insane amounts of load with minimal cost.

Can't even think of a similarly stupid thing to ask for a different field. Are doctors quizzed on House[0] -style patient cases to see if they can tell the actual cause from the top of their head?

[0] https://www.imdb.com/title/tt0412142/


Maybe not exactly House style, but yes. Think one or two paragraph questions, multiple choice answers, a minute or two per question, for multi-hour exams. At least the certifications are recognised, so you can pass once and apply in multiple places.


> you can pass once and apply in multiple places

You just answered a different question. OP was referring to job interviews, not certifications (most certifications in S/W development work the same way).

The analogy would only hold if medical doctors would have to do these multi-hour exams each time apply for a position.

So do they?


Doctors take multi-hour exams in job interviews?

Or is it a certification exam comparable to an AWS/Cisco/MS cert?


Yep, same as you. 20+ years in the industry, including the last 10 at Google. If I get asked to code on a whiteboard or do these kinds of tests, I walk out. I've never been good at them. Don't ask me how I got in at Google. I trained twice to do interview training at Google and just refused to do the interviews because of this style of interviewing that I don't feel comfortable administering, either.

Now that I'm looking again I do see that many companies have switched to practical take-home type stuff, which is far preferrable.


They aren’t House-style, but trainee doctors in the UK take OSCEs (objective structured clinical exams). Someone pretends to be a patient and the doctor has to take the case history, read an x-ray appropriately, or whatever the scenario demands. Although OSCEs test real clinical skills, conversations with doctors suggest there’s a lot of memorisation and exam technique.

But what really surprised me are the portfolios — trainee doctors keep track of things like procedures done, so they can present a portfolio at job interviews.

OSCE example: https://www.gmc-uk.org/registration-and-licensing/join-the-r...

The BMJ on “Creating a good portfolio”: https://www.bmj.com/content/338/bmj.b811


>> Are doctors quizzed on House[0] -style patient cases to see if they can tell the actual cause from the top of their head?

I don't know about doctors but police inspectors are definitely trained on Cluedo. /s


But fizz buzz? I get that being asked that may feel a bit insulting, but it definitely shouldn't feel challenging...


> I wish I had practiced law for the past 7ish years instead, because at least all of my skills would still be relevant.

I get the sentiment. I really do. I have been both a programmer and a lawyer. I was a programmer for about 5 years in the late 90s/early 00s. Then I was a lawyer for more than 10 years.

Being a lawyer is not better than being a programmer. For the overwhelming vast majority of lawyers, you either make a lot of money killing yourself with lack of sleep and high stress and wasting your life doing the same shit over and over again, or you make a loooooooooot of money doing that same thing but making a bunch of assholes even more money in the process, or you make very little money but not proportionally less hassle/stress/life-wastage. Yes, your skills do retain relevancy for quite a long time though. There is that. But so what? Still gotta do shit-tons of CLEs every year. Still gotta keep up with the laws and chase clients (unless you're the super rare rainmaker or are okay stagnating).

After I got tired of being a lawyer, I went to be an experimental scientist. This has been nice, but it's not for everyone, of course.

I was going to continue on to a PhD, though my circumstances have changed enough that I am no longer sure if I can do that, as much as I want to do that. I have been thinking long and hard about what to do lately. Having had experience as both a lawyer and a programmer, I tend to lean towards going back to being a programmer.

My only real point though, is, the grass is always greener. :)

In the end, I really do sympathize. I'm not trying to be critical at all.


I have a friend who is a lawyer. 10+ Years experience in corporate litigation, works long hours, and pulls down less than half of a software dev salary of equivalent experience. And most of the job is rote memorization plus dealing with clients. And every minute of her day must be accounted for.

It sounds like hell compared to a software job.


I don't know many lawyers making anywhere close to what I make as a software engineer.

Software development isn't perfect, but the compensation, hours, freedom, time off, potential upside, even stupid stuff like being able to wear normal clothes or get flights paid for if you want to go to a conference. It's a pretty sweet gig.


My coding style completely changed after solving about 400 mostly medium level LC problems

LC was obviously to prep for interviews which are time boxed. This means for each problem I had to:

- plan, come up with a pesudo-code and verify the correctness *before* implementing it

- write concise and readable code

- make practical tradeoffs

LC isn't fun. Maybe it is for some folks but it was discouraging for me to some extent since it made me compare with folks who can solve these problems when I'm clueless

But this was the eye-opener at the same time. It was shocking to see someone can solve the same problem with less than 10 lines of code when my code is 100+. It taught me what parts of my code was unnecessary and also some neat tricks certain languages provide

This isn't to say I'm LC God. I still suck at LC but what I appreciate is I get better little by little. I tried a medium level question last night after more than a year of break and couldn't solve it haha

I see your point about creativity. I think algorithms are mostly memorization. I'll never be able to come up with KMP algorithm or gift wrapping algorithm from scratch. However, how to apply these algos on a problem or transforming a problem into another problem that can be solved easily is creativity IMO

I do have ADHD as well and my advice is this is something you have to solve with pychaistrists with different meds and therapies.

LC is not fun but necessary to be a good engineer IMO


The 100s vs 10s loc is something very interesting. I witnessed that when doing DP or highly recursive problems (outside of LC bit still).

It did alter my coding too.


So don't practice Leetcode.

You are not an 3l337 h4x0r who p0wns puzzles for a living. You're a professional software developer who builds useful systems for people and organizations.

It sounds like you know the kind of culture you've enjoyed, and you know what the red flags are. Which makes sense. I think everyone gets pickier as they gain experience.


Exactly, I saw people building useful stuff for the internet by using if this then that and arrays without even hearing about 1337... its not about that.


I think I missed out on this concept, only recently on a Quora email did I come across this concept of leetspeak



Loved it! I've been chuckling for a few minutes


No kidding, that time would be far better spent contributing to open source and building a profile there, in terms of interview performance and mental health. I do a couple interviews a week as an interviewer, and probably once a month we see a talented senior eng who has been out of the interview loop for a while and just explains that, but if you can point to your open source work I'll go read your code and judge that, it's a far better marker.

Even if you don't do well at the single LC style question in our interview loop, you can still pass and be hired, there are other things we ask that are specifically NOT LC type questions.

Find a startup to interview at, skip the 4 LeetCode questions in 4 hours interview.


Please consider that software engineering is one of the highest paying jobs one can get, bar a very select few. And most of those jobs require gruelling education or can't be performed from the comfort of one's home. And also take into account that there are tons of jobs, which still require insane amount of studying and the ability to solve very difficult problems - all non-software engineering positions come to mind - while still paying less than software.

The amazing thing about SW is you can get a job - and even some of the best ones - without any formal education. So even if you don't agree that the ability to solve Leetcode problems is predictive how good an engineer is - just power through it.

And keep in mind that, for example, Electrical Engineers have to know tons of difficult math, physics, circuit theory, analog and digital design - and yes - even programming, where the acquisition of these skills is just as hard as getting decent at Leetcode - just to make a fraction on what you make.


> Please consider that software engineering is one of the highest paying jobs one can get, bar a very select few.

In the US of A. In continental Europe this is just an office job. Maybe you can consider it an upper-middle class job if you're senior enough.


Exactly, being a developer or in IT in general pays well enough, but it doesn't compare to SV saleries. I've seen people here on HN complain about salaries we would only pay to the CTO or higher.


Plebian logic.

Pay is not related to effort, pay is related to value provided.

Its not an insult, comparative effort is a way many people think at the bottom out of necessity to focus and escape, people at the top gaslight people into thinking this way to retain all the value.


It's also 'plebian' to suggest that effort and value provided are not hugely correlated.

Tiger Woods started training at age two, and spent his entire childhood training hard, consistently, repetitively, nauseatingly.

It takes monumental 'raw effort' to get into a good law firm and to work your way up.

But the partners, even though they don't have to do a lot of the grunt work, are not slouching. They are busy to the point where it can even take over their lives: social aspect of their lives blend with business. Imagine your ski vacation becomes 'work' because it's with the clients. Etc..


This is a discussion about hiring practices being under scrutiny because people are forcing an unnecessary kind of screen into them that doesn’t help a company.

This process lacks inspiration. Even following a company’s “false positives are worse than false negatives so we don’t care that experienced people can’t pass” logic, leetcoding doesn’t help with that. So a third unknown process needs to be done instead.

The simple reality is that there is alot to build, in this sector. People can slave away preparing themselves for a lower paying job with higher requirements, and that has nothing to do with whether this sector pays alot now or 10x more in the future. The market is saying what to do. Hiring practices are hampering the market efficiency. Full stop.


> It's also 'plebian' to suggest that effort and value provided are not hugely correlated

I think it's a weak correlation at best. A single data point (Tiger Woods) doesn't constitute a correlation. People working manual labour jobs put in a lot of effort, but they create comparatively little value.

I suspect that leverage and value are highly correlated. If you have more leverage, you're probably going to create more value.


Where you fund successful people with leverage, and can generate value with limited work, you find 'hard work' supporting that.

That doesn't imply that 'hard work' alone creates success, value or leverage.


I didn't say hard work doesn't matter, I said I think it's only weakly correlated with value. Putting in effort is clearly important, but it's not the main driver of value.


No. I provide value to companies by solving their business problems, not by memorizing completely trivial puzzles.

I resent the implication that we should beg to be paid what we're worth and be grateful to be made to do a jig in a tutu for scraps that fall off the table.


>Please consider that software engineering is one of the highest paying jobs one can get, bar a very select few

Managers of those engineers can make more plus they don't have to do technical interviews


I think the creativity thing is a fundamental misunderstanding.

Software engineering is an engineering discipline, not an art. Engineering is about applying the best known methodology to solve problems.

That does not mean there is no room for artistry and creativity.

But most jobs are looking for software engineers, not artists. To them it's more important to have a reliable ETA and get a robust product than for you to find new and creative ways to solve their problem.

Live out your need for creativity in your open source side projects.

Generally speaking: Be creating in WHAT your are doing, not HOW you are doing it. The more creative your methods are, the higher the likelihood of failure. Which is good if your goal was to learn something, but not so good if someone is paying you to solve their problem.

Also note that most software engineering is grunt work. That does not mean it can't be fulfilling, but it does mean you don't have to be a 10x engineer to do it. View software engineering as a great way to make money. Then tend to your needs in your side projects.


I feel like this is the issue with calling most software development a form of engineering. That term has been mostly adopted for prestige or to make it seem much more established than it really is. Certainly in some limited domains, yes, it is engineering and what you said applies to it, for example if you're developing software that controls systems whose failure could result in loss of life then you must be accredited as a Professional Engineer to do that work. But the vast majority of software development does not adhere to engineering principles in the way that civil, mechanical, electrical or chemical engineering does.

For most software projects including web development or CRUD applications, there is no known best methodology to solve problems. Despite how passionate some people are about extreme programming vs. pair programming vs. TDD vs. this vs. that, there is surprisingly little empirical evidence that one methodology is actually better than another. We do what we do out of imitation rather than out of solid and well researched engineering principles.


I beg to differ, it is an art much more than it is about engineering. At least, that’s how I approach my work.


It's sad to put it this way but some "software engineers" roles are essentially like bricklayers: a bricklayer is expected to know how to best lay a brick given the circumstances, or to come up with new techniques to lay bricks faster and better, but they don't need a civil engineering degree to do it.

Other software engineering roles do involve a fair bit of creativity though, e.g. architects (designing the structures), computer scientists (study how to make better bricks), and perhaps also project managers (coordinate brick laying and manage bricklayers).


Can confirm. This is my thumbrule as well.

At any point of time, have two buckets of projects to work on.

#1 projects that lets you apply what you already know and ship fast while being useful in real world (typically dayjob takes this slot)

#2 projects that lets you learn new stuff and think creatively, while affordable to fail or ship slowly (usually side projects)

Following this gives you a balance and avoids burnouts.


i find a lot of the creativity/puzzle solving is in figuring out what they (product + customers) actually want to accomplish and how that models abstractly into computing terms. Once you realize what is being modeled you can often creatively see how given multiple future features are all just a different class of X and can be treated identically/similarly save for a couple of tokens or a slightly different finishing touch

and example might be a permissions feature that could be designed as adding a column to each row, or could be more generalized into a foreign table giving the ability to N:N, or create arbitrary new permissions etc.


I feel like leet code problems help you get good at leet code problems.

It's a bubble of a specific type of engineer. Have you tried your hand at project Euler or Advent of code? I feel like those problems are like leet code( or hacker rank) problems but with a different bent, one thats more enjoyable and allows for greater level of creativity when solving for them.


Exactly, leet code is like those brain training games that claimed to made you smarter... When the studies showed they make you really good at brain training games.


I'm sorry this has been so hard for you, it sounds like you're burnt out.

I also want to affirm that yes, part of the reason for these tests is definitely to check that you are able and willing to jump through the hoops that a large organization sets up as it scales; it's no fun at all.

As someone who's done the grind myself, I would push back slightly and say that the skills I use to solve leetcode problems are ones I've used at my BigTech job, and that that can be fun and useful. Gaining that type of insight though, generally doesn't come from just grinding leetcodes over and over again, but also returning to study algorithms textbooks like CLRS. The insights you gain from understanding these techniques deeply can lead to some truly interesting solutions to real problems.

Best of luck.


>"MSc in some science (like it matters)"

a formal 400-level course in algorithms will go a long way, preferably at a good university with a good professor, but if you can't get that right now: https://ocw.mit.edu/courses/electrical-engineering-and-compu...

computer science is a discipline where people seem to think the education doesn't matter that much, but the truth is once you start to get even a little mathy it matters big time


> computer science is a discipline where people seem to think the education doesn't matter that much

I think when people say that education doesn't matter that much in our field; they are talking about formal education as offered in academia.

This is not to say that university education isn't valuable. But SE is unique among engineering disciplines because a) it is possible to learn everything relevant in self study and b) a lot of formal education in the area still teaches CS, when most people who attend the courses want to be engineers, not scientists.


The math behind leetcode is induction and number theory, courses I took some 20 years ago along with DSA that I haven't used in productive engineering since.


I agree. As soon as you start working in physics simulation, 3D rendering, signal processing (image, audio)... you realize that programming isn't just CRUD web apps.


I am genuinely curious as to what makes leetcode harder than MSc? I am not sure if the hate received towards LC style interviews is justified. It levels the playing field and most companies ( except MAMAA ) picks a question from Blind 75 anyways.

On a personal note, I do believe LC has made me a better programmer. In my 3rd year of BTech, I was given a task to figure out splitwise (a bill splitting app) algorithm. I was quite proud to have written a modified version of Kruskal's which solved the problem. Last year, I saw the same problem on LC and it had a much cleaner and nicer solution to it. The solution opened up ways for me to think in different terms all together.

Similarly when I was in my 1st year, we used to play `Chain Reaction` a lot and I wanted to write a brute force A.I. for it. I had not been introduced to graphs, DFS or BFS algorithms. Hence, I had basically produced a recursion hell but working solution. Later when I had discovered DFS/BFS, I was ecstatic to say the least.

Thus, I believe LC helps/prepares/arms you with various techniques which you could leverage to solve certain problems in a more efficient (and also as a result, cleaner code) fashion.


I think a lot of the hate comes from a perception that its all about memorization, and that in turn comes from lack of experience with DS&A. There's absolutely a lot of BS, but I think in general as one currently grinding through it, its better than I first thought. Most of the common problem lists cover data structures and algorithms covered prominently in the algorithms book I read (Segewick). Moreover, I find that leetcode, despite its sometimes lowish quality, still provides the best platform to efficiently practice implementing basic algorithms. The Segewick book for instance provides numerous exercises in each chatper. But setting them up, running through them, getting feedback, seeing other implementations -- that would require tremendous amounts of time. Pairing it with leet code, you can quickly jump to exactly the thing you want to work on, get a variety of similar questions, and see competing solutions.


IMO, LC (and similar) aren't a bad choice for the interview process. The problem comes when it's used as a silver bullet solution. Most seniors that'll show up to an interview are probably working and simply don't have the time or will to grind LC.

Also, SWE is a highly movable profession, where being more than 5 years on the same place is unusual. So every ~5 years you have to polish your CV, grind LC and basically restart learning all computer science concepts you haven't used in those ~5 years, without feeling burnout or dismay.


I'm also ADHD, and I'm completely on the same page as you regarding stuff like leetcode.

How do you feel about puzzles in general?

I have a really strong antipathy towards 'solving' anything that I know is (a) already solved and (b) where the solution process is not interesting in and of itself. So I hate, hate, hate puzzles.

Your post made me wonder if there's a link between ADHD and finding explicitly pointless challenges unbearable. It feels kind of intuitively true that ADHD predisposes one to cut a lot of mental chaff in order to focus on stuff that's engaging and interesting; a puzzle is kind of explicitly chaff, it's something you have to manipulate in some way to get some predefined result.

The normal trick if you're up against this kind of intense, adhd-driven disinterest in something is to see if you can twist it in some way until it's interesting for you again. So instead of seeing the puzzle itself as the challenge, turn it into a training process for something for something you consider worthwhile.


Weird. I'm (probably) ADHD spectrum. (I've never been properly diagnosed, but its all very familiar).

I love puzzles though. They're short, they have a right and wrong answer. Optimization problems are especially satisfying because you can get a score, and improve on it over time when you come up with clever ideas.

I've never done any problems on leetcode, but thats absolutely my wheelhouse and I love that stuff. A few weeks ago I invented a new String (Rope[1]) class by combining skip lists and gap buffers. I don't know if anyone else has ever done that before. Its 3x faster than the next fastest library I could find. There's probably an academic paper in that, but that sounds really boring.

Maybe its useful for other people, but I think if you said "leetcode is a training process" to me, that'd make it more boring. For me the fun part is finding those puzzles in regular code. ("Sure this algorithm is simple but its n^2. I wonder if there's an O(n log n) approach out there somewhere..?")

[1] A rope is a "fat string" for text editors and things, where you want to insert / delete characters at arbitrary positions. My library is here - https://crates.io/crates/jumprope


Perhaps it's more attitude, then? What you said does sound interesting - I just never think like that when I'm solving puzzles. When I think puzzle, my mind goes to something like a rubics cube - an object where there's some trick that once you've learned, the object becomes 'solved'. That abrogates any need for creativity, since the solution is already preordained in the design of the puzzle itself, so I just get irritated and (usually) find some way to cheat it.


Yeah; I never learned to solve rubicks cubes for exactly that reason - what’s the point of memorising a solved algorithm that only works on this one problem anyway?

But plenty of algorithmic ideas are broadly applicable and useful. Eg, b-trees, bloom filters and priority queues have some wild uses across a host of problems. Those tools strike my fancy.


I actually like puzzles where I see that it involves analytical thinking, or creativity. Open-ended stuff where I am allowed to let my mind take over and not worry about a time limit or some artificial constraints.

I also find it unbearable to "solve" something I see the solution to, or can describe how to solve it. In fact, if I see the solution, I find myself unable to go through the steps to actually do it, especially if there is a time constraint involved.

The trick you have described was my way to do the problems in my spare time back when I hadn't seen them before, but the whole problem is that leetcode problems are designed for an incredibly narrow range of solutions.

Analytical solutions that have poor worst case run times, but incredibly good average case run times are not allowed and a lot of mathematical approaches involving matrices and exploiting vectorization aren't allowed either.

Leetcode-style problems force you to put your mind in a very narrow box and I simply can't do that. I've always had a very great need of orthogonalization in how I think and operate; i.e. if something doesn't stimulate me enough, I need another concurrent activity that is completely different to keep me motivated.


> Leetcode isn't about fun and challenging things, it's about thinking in one particular way, spitting out solutions using the same exact data structures and jumping through hoops on command without philosophizing or creating anything that can be reused/extended.

> This is also what Software Engineering has become: you memorize, regurgitate and participate in agile the masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

Compare https://sockpuppet.org/blog/2015/03/06/the-hiring-post/


That's a really great article


You can check out its previous discussions on HN, too.

See https://hn.algolia.com/?q=https%3A%2F%2Fsockpuppet.org%2Fblo...


Several comments have mentioned memorizing large numbers of Leetcode problems and solutions. That's one way to approach it. Another is to approach it the same way you'd approach chess puzzles. If someone told me I was going to have to pass several Lichess puzzles for some reason, I wouldn't go try to memorize a bazillion puzzles and solutions there.

I have in fact recently been doing a lot of Lichess puzzles, and what happens is I start to notice patterns. For example there have been several puzzles where the other side has just attacked one of my pieces, while I have one of their pieces attacked. So I can take theirs and they take mine, or I can move mine away and they can move theirs away, or I can do something else and let them decide whether to trade or disengage or leave that situation pending.

But wait! For that middle option--mutual disengagement--I see that I can move mine away to a square that gives check. They have to immediately deal with that check so they don't have time to mutually disengage. I'm winning a piece!

And now I've learned a pattern--if someone is depending on some sort of symmetry in a tactical situation that gives them matching moves they must play in response to mine, a forcing move such as check can break that symmetry.

For each puzzle where the answer is not an immediate application of some pattern I've already learned after solving it I step back a few moves before the puzzle position to see how it arose (Lichess puzzles are all drawn from actual games played on the site and include the score up to that point), identify why the move that set up the puzzle was bad, and see if there is some new pattern to learn from it.


As a non-software engineer who codes as a hobby but has no real software career experience I find leet coding challenges to not be particularly difficult or frustrating.

Can someone with better understanding explain the negative sentiment around leet coding. Are most SWE just mediocre at coding or is there just some fundamental difference between leet coding and the skills needed to be a SWE?


> Are most SWE just mediocre at coding or is there just some fundamental difference between leet coding and the skills needed to be a SWE?

At the risk of catching a lot of shit for this, I’m going to say yes to both of those.

A large amount of software development jobs involves taking various components big or small, and gluing them together with business logic of varying complexity and then trying to figure out what’s going wrong when one of the components or glues fails. Pretty much every job I’ve had personally has ended up being call some API / Query some DB and perform business logic on the results. There are a LOT of jobs like this out there, and a lot of them pay pretty good, by anyones standards who’s not into the whole tech culture. You perform at these just fine without hardly any knowledge of implementing many data structures or optimal algorithms.


I agree entirely with both these points, although i would note that the space of unlike-leetcode work is larger than just gluing. I've spent a lot of time in my career clarifying user requirements, hunting problems in data, writing build scripts and test tools, laying out UIs, parsing weird file formats, etc.

I have also sunk weeks on algorithmic problems much more complicated and less clear-cut than anything in leetcode!


The leetcode puzzles have no correlation with day to day software engineering.

But yes, that kind of puzzles can be fun sometimes! (Back when I had no family and free time for such things).

But worst part is that the interview experience is entirely different from doing puzzles for fun at home. In an interview you need to present a carefully choreographed act where you:

- pretend to be quickly discovering the solution out of the blue (even though the original algorithm took some PhD multiple years to figure out)

- never solving any part too quickly, or they'll fail you for having seen it before (of course you've seen it before if you've done the requisite months of practice)

- never solving any part too slowly, or you'll be labeled "yet another who can't even write an if statement" (comment seen often on HN)

- maintain a running commentary to "show how you think", make it credible

- while doing all this, be writing syntax perfect code on a whiteboard

- while the interviewer makes derogatory comments about how much help you appear to need, alternates between browsing social media on their phone


You don't think using maps, trees, recurison, bounds checking, conditionals has ANY correlation with day to day programming?


Dude, that will not carry you through a hard problem.

You need the pocket Dijkstra, Kruskals, Union-find, Bellman-Ford, KMP, Kadanes (sliding window), LCS, DP (1-n dimensional), Topological Sorting, NP-hard heuristics (usually DP), BFS, DFS, Backtracking, Memoization (basically DP, but usually used in DFS), Prefix sums (DP as well), that weird palindrome-specific algorithm I can't remember, binary search, bisection (numerical anaylsis ftw!)

You also need tries, heaps, red-black trees, B-trees, DAGs, priority queues (heaps)

But wait.. there's more!

Euclidean algorithm, Josephus Problem, Sieve of Erastosthenes and all the number theory bullshit I can't remember and refuse to, because it has fuck all to do with daily engineering.


Exactly!

I have a masters degree from CMU, certainly a very top school in CS. I probably could've passed this style of interview fresh out of school. I did enjoy algorithm classes, it was fun.

It was also well over 20+ years ago and having had a successful career in silicon valley as an individual contributor, I have used that knowledge... never. Not once. It has no relevance to software engineering. I've forgotten nearly all of it. Want to hire someone to design and implement solid, performant, maintainable, secure production code? That's me. Want to test me by regurgitating memorized algorithms? Nope, I'm not participating in your game. The loss is yours.


I think that's a great reason to throw out the hard and harder medium questions.

I've never ever even heard of an interview problem where a b-tree or RB tree was required to solve it.

But my point stands that there are a ton of great little questions that involve very very basic data structures and tree traversal algorithms that you can use to glean quite a lot about a candidate.

You're absolutely right that asking a candidate if they can solve a 2D DP problem isn't telling you anything other than if they'd either seen this problem or they are good at this algorithm. I'm stating that you can learn a lot and eliminate some bad folks by asking some basic coding LC questions.


If you're talking FAANG you're talking hard level. If you're talking a company that fancies itself FAANG, you're talking medium-hard while being treated like a human septic tank, which could happen at FAANG as well.

I think most candidates could give a solution, just not while they are being treated like sardines and prodded with a stick.

It has made me ask myself: do I really want a job at FAANG, or any high level company? I mean if it's pumping out leetcode while simultaneously dealing with office politics and sadistic managers, I think I'll just go back to selling cocaine.


Are you failing interviews or are you just failing leetcode?

I've done 700+ LC and I still regularly get stuck on Meds/Hards, but I imagine if you know all these concepts and can explain tradeoffs during an interview, you have a better chance of passing than someone who immediately spits out a memorized solution but can't explain why they chose that specific approach over another.


FAANG just wants immediate, perfect solutions. The OA is also now exclusively hards. People on Blind talking about giving interviews and only accepting perfect, canned solutions. No talking through, no hints, or you fail.


Blind is full of trolls and you shouldn’t take them too seriously. You should apply to FANG yourself and see how it goes.


My take as someone with a PhD in CompSci , Bsc in Software Engineering, and with 10+ in the software dev industry my take is that Leetcode type problems suck. They are "gotcha" types of tests for which you only need to know their specific answer.

As an interviewer I learned that they don't tell me anything useful: people who show they can solve them just show that they spent months churning.

Most of the problems in Leetcode are related to CompSci theory (DP, DFS, efficient graph or tree reversal, etc). Reality in most software Engineering jobs couldn't be further away from the that. Even if you are working with C, you'll likely use Boost or a similar library to solve a problem that requires any of that (implementing your own low level libraries is a sign that you are a jr dev... I've seen lots of them trying to implement their email validation fn or similar).


Exactly. I think it is reasonable to ask candidates to demonstrate basic programming competency, but "gotcha" questions are terrible.

Consider the interview question: "Write a function that can detect a cycle in a linked list."

> Between 1955 and 1967, the problem of “how do we determine if there is a cycle in a linked list without modifying the list or using an extra memory” was a essentially an open problem. Meaning, any number of PhD candidates in Mathematics or Computer Science could have written about it as part of their dissertation. With all of those hundreds and hundreds of minds, this problem remained open for 12 years.

> Do you honestly think you could, in a twenty minute interview, from scratch, come up with the solution to a problem that remained open in the field for 12 years, all under a pressure far more intense than any academic? Seems pretty damn unlikely, the only reason you think you could do so is that you’ve heard the answer before, and it seems obvious and simple in retrospect. In other words, “a-ha!”

https://www.nomachetejuggling.com/2014/06/24/the-worst-progr...


While I agree that this is an example of a particularly ridiculous interview problem, and "gotcha" type interview problems are bad in general, I don't think it's accurate to say it was an open problem for 12 years. An open problem is one that has been posed but unsolved. In this case, the invention of the linked-list data structure in 1955 does not mean anyone had actually posed the problem of cycle-finding. It's possible, even probable, that the problem hadn't been seriously considered until Floyd did so and came up with the algorithm he published in 1967.


I got that question interviewing for an internship at Microsoft. Your post makes me feel vindicated that I bombed that interview.


OTOH, if you've never done a few of those problems, you won't even know it's called a cycle, why they're bad, how to avoid them or find the library. There is usefulness in knowing the basics, and one way to know if your candidate knows, is by taking a look at the problems he/she tackled, or the courses taken. I agree it's a problem most devs won't encounter.

But that interest in the technical/algorithmic side of programming has turned into a paid job competition board ... I'm baffled.


Knowing that someone has the ability to grind leetcode for a few months is a pretty good signal of high conscientiousness. That's useful.

If they can use what they learned to solve variations on the problems they previously solved it's probably a good signal of above average intelligence. That's also useful.


Funny thing is I had an interview some years ago and he asked me about cycle detection, so I gave the basic set approach, then added the tortoise and hare as a memory free solution.

It immediately made him uncomfortable and I didn't get the job, because he didn't like the tortoise and hare solution not being as "tractable" as the set solution.

Damned if you do, damned if you don't.


I feel the same, I can't really relate to the idea that leetcode style problems are about "memorize and regurgitate". Maybe you need to know a few basic data structures, but beyond that it feels like you can just figure things out as you go. Is the classic "invert a binary tree" actually so hard to figure out that you could only solve the problem if you had memorized the solution beforehand?


Agreed. My skill for straight up memorizing things is terrible. I dont know how one could do it with leetcode, especially since a lot of problems are “kinda similar, but with one major change that alters the entire approach.” To me, it is mindblowing to even attempt memorizing it at all. I will never understand how one can even attempt to deal with leetcode by memorization.

For me, leetcode just helped with intuition for tools and approaches. When i see a problem, i think “ok what are the constraints? With this in mind, would it be better solved using graph structures or some recursion? Which would be cleaner? Which would be better for memory? What about speed? Etc.”, and from that point, it is just pure problem solving on the spot. Occasionally, i get those “oh, I remember solving a problem that wasnt quite like that at all, but it reminds me of it on fundamental level, and back then i remember using a recursive approach (though i dont even remember the problem at all anymore). What would happen if i approached this current problem the same way?”.

It just straight up helps me keep going and coming up with possible approaches to consider, as well as analyze and evaluate them, rather than being frozen on a problem for a while. And those “approaches” aren’t specific to a single unique problem, they apply on a fundamental level to a lot of other completely unrelated problems.

Yes, I’ve seen double nested for-loops in production code, which later became a performance bottleneck that had to be addressed. The issue is that “the problem” in that case was something that can be solved in linear time, and it would be a leetcode easy problem level of difficulty. It instantly jumped out to me wildly the second i saw that piece of code, but no original code reviewers were concerned. This is the kind of stuff leetcode is supposed to help with. Not with solving specific problems, but giving you a solid toolset and intuition on fundamental screwups and how to avoid them and spot them quickly in bajillion different situations that dont look the same at all.

Memorization won’t be your friend here, unless you possess one of those photographic memory brains that remembers the faces of every single person they’ve ever encountered. If you are going into leetcode with the mindset of “i am trying to memorize as many problem solutions as i can”, you are gonna have an awful time.


10+ YOE myself, ranging from CTO to big orgs. I can tell you when I was fresh out of school I actually liked those kinds of challenges, but I trained on them relentlessly as part of participating in programming olympiads and the like.

The more experience I have the harder they are for me to solve, as engineering problems tend to have very different mental models to reach the solution.

First thing you do is you ask people is that the problem they are actually need solving - most of the time refining the problem leads to there being something totally different that is requires. A process of asking people “why you want this hard to implement thing” and discovering that what they actually need is something smaller and more aligned with whats currently working. Leet code is the opposite usually - you see a simple problem but “there is a twist” that would be considered scope creep generally.

Then the implementation of the solution itself requires knowledge in your head, whereas years of experience has led me to put a lot of that knowledge out of my head and into “places I trust to find the answer” - google stack overflow, HN etc. And keep in my brain only the general abstractions of how to apply them. This allows for vastly more powerful solution making as you can stand on the shoulders of giants.

Example - see you have a leetcode puzzle. My first instinct is to use my google fu to find out what the best current solution is out there, understand it and either apply it or modify it a bit if it needs tweaking.

But that would be considered “cheating”. Leetcode: 1, Life skills: 0.

And there is the damn time pressure. Every time I’m pressed for time on my day job, its a signal something in tech or management has gone wrong, and I seek to optimize and fix that. Rushed engineers make poor, shortsighted decisions.

Each time I do an interview I feel out of sorts as all my instincts scream “something is really bad, you should _not_ be doing this solution this way it will bring pain in the future” But you have to power through. And I probably look way less impressive than someone who has the solution memorized.


  The more experience I have the harder they are for me to solve, as engineering problems tend to have very different mental models to reach the solution.
That is what I think the true purpose of it is. It's poorly hidden age discrimination.


I mean there’s two camps. One camp can do them easily or with practice, another camp can’t.

The first camp is pretty “meh” about leet code interviews because for them you just study a bit and get a high paying job.

The second camp is pretty vocal about how bad leet code is because it’s somewhat of a personal attack on their abilities.

Personally I agree with the criticism that leet code can be learned with enough practice and so it’s not totally indicative of a positive hire. But then I also sorta feel like there’s enough examples out there that people should be able to ace these tests with practice.

Some SWE just write code, they wanna make features and build a product. They don’t care about this stuff because things are fast enough without the extra thought — and if they turn out not fast enough they can still fix the issue.

Other SWE are more careful with their code, performance, etc. this is more of a systems engineer personality. Writing C, managing memory, writing optimized code the first go round. Yah, being thoughtful and careful pays off here.

No one’s right or wrong imo, or one better than the other.

Should FAANG do leet code interviews? I dunno, there’s surely better ways to interview, but at the same time they’ve hired plenty of highly talented engineers so something’s working for them?

Should SWE’s just spend a few weeks on leet code and learn the tricks? Ya, it’s pretty easy. But if you don’t want the job then don’t do it?

All the endless criticism of leet code generally comes from people who fail it. Shrug.


You'd be shocked at how bad the average software developer is at writing software. I've interviewed many people who can't solve FizzBuzz level problems. In interviews I have people program a function to rearrange characters in a string, appropriately named "SimpleProblem", and >50% of candidates with experience can't write a function that compiles and solves the problem.

LeetCode is just what you get when you ask Software Engineers to solve the interview problem - they like showing off their chops so that's what you get. It doesn't need to be that complicated though. I know with about 80% certainty whether someone will work out based on how they solve that "SimpleProblem". The other 20% - just fire them if they don't work out. It doesn't need to be that hard. You don't need 100% certainty for a hire, you'll never get there. Just fire the ones that don't work out. You don't even need to feel bad for them - in this market they'll find another job by the end of the month.


> In interviews I have people program a function to rearrange characters in a string, appropriately named "SimpleProblem", and >50% of candidates with experience can't write a function that compiles and solves the problem.

I would struggle with this problem, because it's difficult to read whether you want me to push back against the requirement itself and try to solve the real problem instead of shuffling chars, or perhaps you want me to talk about the edge cases you're likely to encounter while I write the naïve solution, or maybe you want to pretend it's the 80s and nothing outside your chosen charset could ever exist in real data.


It's a conversation -- just ask. Clarifying requirements before jumping into coding sends a good signal.


In my experience leetcode mostly tests algorithmic thinking. Write a sort function, for example, but the problem is, in real life you use a library with a well tested, battle-hardened sort implementation.

It IS important that you understand the algorithms, but I think they are far less important than data modeling and systems design. In any application, you must be able to understand and design how you model business things, and where you put them, and how and when you access them. Also how you fit a small unit of business logic into the larger picture.

This is much harder to test for, since for a given problem there might be multiple, equally valid models and solutions. So obviously the kind of auto-verification leetcode sites do does not work. There must be a human evaluating the solution, which is much more expensive.


My guess is a sense if urgency in doing them? That is, you don't give them overly frustrating. What about getting them done in fifteen minutes? The time constraint is a major part of it. Add in any discussions, and it adds to anxiety for those of us that aren't good at social.


There's zero difference. It teaches you how to solve problems analytically. In the real world you have to solve problems analytically too, even if you have a terrible corporate job writing some template for a bank you're going to run into something that needs solving eventually.

Here is the truth about leetcode, advent of code, codeforces, whatever similar problem site:

  There is no memorization involved, just like you don't memorize every math problem on earth to map directly to a correct answer you instead derive the answer using the skills you have in math from experience solving problems before. Polya has a book for this, called 'How to Solve It' he just happens to have used math to teach problem solving but it's the exact same concept.

  You have at your disposal problem solving strategies such as: complete search, dynamic programming, greedy and divide and conquer. You don't need to memorize any code to write a greedy search, you could ad-hoc hack that together just know what a greedy strategy is. You don't memorize all search algorithms throughout history ever invented.

  There is no grind. People who haven't done it assume you sit there for hours daily writing brute force algorithms, no. Instead it's exactly like doing a crossword puzzle over a coffee and something you can do at your leisure where in a month or so you're now at leetcode medium/hard no problem.
In my limited experience, the difference between these problem solving sites and a job interview is after your hacky ad-hoc greedy search solution they will ask you to optimize it 'can we make this faster' so really for an interview you only need knowledge of the language you are using and it's built-in data structures what their complexity is. That doesn't require much memorization either just know how they are implemented looking at the standard library or documentation where hopefully somebody has explained the implementation 'this dynamic array has constant time access, but linear replication when full'. Only that level of knowledge, like knowing how to move something out of a loop so it's not repeatedly initializing or rewriting your solution in another data structure no insanely advanced algorithm analysis needed just practice using the language standard library or container libraries enough and this will be easy. People make this harder than it really is, tl;dr learn problem solving techniques either from logic philosophy texts, math or programming problems, learn the standard library of the language you want to use, that's it.


Honestly curious, how long does it take to do an average medium problem and pass all test cases? Are you spending like, an hour or ten minutes? Somewhere in between?


Depends a lot on the problem, for medium probably between 15-30 min for most. I have interviewed at FAANG companies for software roles and done the whole on-site leet coding gauntlet. Did about an hour a night for a week total prep. I can solve their problems, what gets me is when I finished early and they ask more academic follow up questions. Like getting backed into a corner and having to admit I have no idea what big-O notation is.


How do you know that scanning an array looking for a number in a sorted array vs. searching for it is slower? Just kind of intuitively? Do you have your own terms for it? I too sometimes get dinged because I use the non academic terms for things...


Can be anywhere from 1 minute to hours, depends on the problem. The whole classification thing is kind of ridiculous, because some hard problems are easy and some mediums are hard.


You have 7y of experience. You can afford to be picky when it comes to interviews.

And yes, LC problems do not deal with the day-to-day work of a software engineer. They are fun puzzles to do sometimes, if that's your thing. As a "hiring tool" I think they are abysmal. Fortunately, many companies don't use them. There is a bubble where it is prevalent, but again, people with experience can chose where they interview.

If you want Programming puzzles that are actually fun and correlate to problems an engineer actually encounters, I can strongly recommend https://www.codeabbey.com/


Stop caring about and studying Leetcode, which is apparently a full on program now (yikes). It just doesn't matter. I've been a software developer and have never done well in heavy "leetcode" interviews, and it doesn't bother me at all. The reason: I don't want to work for companies that think that is a good way to hire. There are plenty of companies who don't hire or operate that way.


I am a bad engineer too. But I do Leetcode because it gives me money. Sure I could instead spend time to be a better engineer but why? That doesn’t pay. Leetcode pays. I have to optimize there.


> I wish I had practiced law for the past 7ish years instead, because at least all of my skills would still be relevant.

Hah! Not so.

I've been a dev for a long time, and my spouse a lawyer. Back when we were both fresh out of school I remember running her through quiz questions to help her prepare for her bar exam. We devs HAVE NO IDEA how much arcane archaic stuff lawyers have to pretend to know to get certified to do their jobs.

For example: "mortmain" (French for "dead hand"). What happens when property is bequeathed to a defunct institution? It's on the test. It's easy to come up with a logical answer. But to pass the bar exam would-be lawyers have to know the right answer, cold without looking it up, and why it's the right answer. Hint: it's not at all logical. And, will a working lawyer deal with that question? Maybe three times in her career if she's an estates-and-trusts specialist.

There are thousands of these things for lawyers.

Bar exams are hard because of protectionism -- low supply means high pay. The same is true of doctors and developers. Developer pay is high BECAUSE the exams are hard. The exams are hard BECAUSE developers want high pay.


Why do people grind on leetcode instead of reading papers, watching lectures, reading books, implementing hard-CS things from scratch, and … you know … enjoying the endless joys of a fascinating field?

It’ll land you a nice salary, to boot.


You'll find me strange, but I find more enjoyment in a leetcode than in implementing a "hard-CS thing". Probably because it's easier and you're a better engineer than I am.

Note that I would never require leetcode during a job interview. However, a single LC question is a small-sized puzzle I can solve in a day (or a weekend). If I want to write a ray tracer, well... Good bye life for a week or two.

In other words, I have difficulties finding 50+ hours of large chunks of time to be unavailable to my family in my supposed off time. Leetcode I can do on a couch while my SO watches Games of Thrones.


>Probably because it's easier and you're a better engineer than I am.

Not necessarily! Maybe you just like puzzles? I don't.

>In other words, I have difficulties finding 50+ hours of large chunks of time to be unavailable to my family in my supposed off time.

If that's all that's stopping you from working on a ray-tracer, I think it's "just" a time-management problem. I work in increments ranging from 30 minutes to 2h. The trick is to schedule them, or at the very least, to have some kind of issue tracking system for yourself so that you can find an appropriately-sized chunk of work for those serendipitous 20 mins.


> If I want to write a ray tracer, well... Good bye life for a week or two.

Lookup this book: Ray tracing in one weekend by Peter Shirley. You're in for a treat :-)


I share this sentiment, I do find Leetcode and stuff incredibly boring

Meanwhile writing your own libraries, parsers, compilers, oh boi.

Additionally it gave me waaay more than LC stuff, especially when it comes to learning system modeling / proper OOP


Those are the things I do, plus going to conferences (virtual ones now). It's fun, educational and keeps me informed and at the top of my game.

None of that will help you pass an interview though!


>None of that will help you pass an interview though!

I submit that you may be interviewing in the wrong places.

Obviously, it doesn't suffice to just point the decision-makers to your repos. You need to pick companies who would benefit from the expertise you acquired, and effectively pitch yourself to them.


No, it won't. Leetcode is currently the enforced path to the 6 figure salary.


Not everywhere. It might be a lower 6-figure salary than Google, say, but it's still 6 figures. Like, >200k.


Let me try a contrarian suggestion on the peanut gallery (and maybe the OP will buy too): LeetCode is bad pedagogy precisely because it's repetitive.

Consider this problem: https://codingcompetitions.withgoogle.com/codejam/round/0000...

Several articles have been written about it, and the winning submissions all implement generic numerical integration in like 10 lines of code (a few even implement Simpson's rule), which is sort of neat it its own right. From reading solutions to other CodeJam/TC/SPOJ problems I've also come across similarly compact implementations of matrix inversion, linear optimization, etc. It sounds like your math chops are more than good enough, and these companies just want to test if you understand 80's computer science anyway. If you study interesting solutions to hard problems, you might stay interested and you might even improve more at boring LeetCode problems than you did after grinding. Chess puzzles help up to a point, but eventually to get better you have to start reading books, and that point comes before all chess puzzles are easy. Pushups help up to a point, but eventually to get stronger you have to switch to a barbell, and that point comes before you can do a million pushups.

Finally, I've given this advice in other comments, but if you're just posting this because you want to get hired, my experience is that it's better to focus on interviewing more than on LeetCode. Specifically: think of getting hired as a numbers game, and think of applying for a job as a sales process. That means having a funnel for companies, e.g. "discovered -> openings available -> resume drop -> recruiter screen -> interview round 1,2,3 -> offer". Make a spreadsheet and start filling it; don't just list companies you know about, start googling tech you're interested in to find more companies you can add. If certain types of interviews seem to go better, look for similar companies you can add, and wait to optimize your performance (e.g. with LeetCode) until you do notice a big drop-off in your funnel (e.g. recruiter screen, first round interview).


You may need to jump out of your current pond and make your way to a new one. Leetcode problem-solving is not highly correlated with much. Plenty of employers will spring a Leetcode problem on you to join, others won’t. It’s mostly a bubble.


One thing it does seem to be correlated with is making more money as a wage worker than most people will ever see.


Sorry you feel this! I agree, leetcode is no good.

The nice thing is that there are lots of jobs out there that don't require leetcode skills. Sure, there are many jobs that do, too, but you can avoid them by looking at the job req.

Source: I too am bad at leetcode but have had many jobs in my career, including three different employers since 2019.


How do you figure out the leetcode employers from the non-leetcode ones? I refuse to interview at a few major companies because I know that's how they roll. I actually love coding and am good at it. I just refuse to spend weeks/months studying for I consider a useless test.


A spreadsheet of companies that eschew algorithm/leetcode style questions, and information on what they do use instead:

https://airtable.com/shr5TdnpVYVTpeRrN/tbluCbToxQ2knSLhh

Similar to the first link, as a github repo: https://github.com/poteto/hiring-without-whiteboards

Information related to companies, their culture/values, and hiring process: https://www.keyvalues.com/


Sometimes it is mentioned in the job description under the interview process. Other times you can ask; it's a great question for the initial call.

Also, I've found that smaller companies and consulting companies tend to avoid leetcode style interviews. #anecdata


If there isn’t any info online about their interview process, you can ask the recruiter if they have any algorithm-based interviews in their process. I’ve found probably 1/3 of the recruiters that reach out to me on LinkedIn will end up telling me if they do or not without requiring me to hop on the phone with them.

Alternatively check out my other post in this thread if you’re looking to target those non-LeetCode jobs specifically!


> How do you figure out the leetcode employers from the non-leetcode ones?

ask the first recruiter? put it in your emails? ask your friends about their employers?


As much as I love to blame LC for all the interviewing issues for software engineers, I think the bigger issue is lack of training for interviewers themselves. Very few companies actually train candidates before they take interviews and train them to look for the right "signals". Lack of signal (unable to fully solve the problem) doesn't mean negative signal. It takes some experience and healthy amount of interviews to train oneself in knowing whether the candidate is worth hiring or not.

I have failed candidates in the past, who have solved the LC problem, but could not reason tradeoffs and runtime complexities of the code. It was very apparent that, the solutions have been memorized from LC.


I'll go farther than that and say that the primary fault lies with not having a structured process to interview candidates. If you don't have a structured process, providing training is a lot harder, and calibrating individual interviewers so their ratings are all relative to the same bar becomes near impossible.


There's also a wide variety of Leetcode problems, with some (data transformation and validation problems in particular) being more resembling of real life coding than others (e.g. dynamic programming problems).

There seem to still be interviewers out there who focus on puzzle-like problems.


There is a lot of cynicism in this thread, including this from the OP:

> This is also what Software Engineering has become: you memorize, regurgitate and participate in agile the masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

No, not really. Maybe some jobs are like that. Many are not. But even the jobs that are not like that will generally be gated by interviews that include Leetcode-style questions.

This happened in the software industry because credentials and experience often mean nothing, resume fraud is rampant, and the cost of hiring a bad engineer is very high.

How about a take-home assignment? Suggest that and many will respond, "I don't work for free" or "I don't have time to work after work, I have a family to take care of." How about just looking at prior experience, or credentials? Resume fraud prevents that, and a lot of companies prefer to hire generalists and find a team for them to work in, rather than hire specialists for a particular team. Outside of research-heavy fields like AI/ML, a university degree is no predictor of success.

So, we need to find a way to evaluate a candidate, in a short period of time, that gives a reasonable estimation of how they will do in the job. If there was a better way, and it was proved to be better, the industry would adopt it very quickly, and it would be a competitive advantage for the companies that realized it first. But that has not happened.

If you put aside the cheap cynicism that permeates threads about programming interviews, you'll realize it hasn't happened because none of the people who are hiring have figured out a more reliable way to hire, even though there are very smart people doing it and they have an enormous financial incentive to figure out how to do it better. A company that could find all the good programmers who can't Leetcode, and weed out the bad programmers who can't Leetcode, would get an enormous amount of talent that others overlooked.

This is just a hoop to jump through, and it's not nearly as difficult as getting a college degree or learning how to code in the first place. I'm not saying it's easy, I'm saying it's doable with time and practice. Most of your colleagues have done it at your current job and also at your future job. I can't do it at the drop of a hat either; I would need to practice like almost everyone else. You can do it too, if you approach it with the right mindset: you aren't supposed to enjoy it or find it intellectually interesting; it's just an obstacle to overcome and it's smaller than many other obstacles you've dealt with before.


I appreciate your even-handed perspective here. I agree with a lot of what you’re saying. Mostly I disagree with your conclusion.

The criticisms you mention about take-home tests apply equally to practicing Leetcode-style questions. It will filter out a ton of people who don’t have time or aren’t willing to spend it. In that sense it’s not better (and it’s probably why I see a lot more take-home coding tests lately).

But really neither of these is ok. They’re both ageist and sexist and lots of other things (older people and women disproportionately carry the burden of caring for others and many won’t have the time or energy to prep for Leetcode problems). Even if I’m willing to jump through those hoops, I don’t want to work at a place with a strongly ageist and sexist filter.

Lots of other careers don’t ask people to prove their skills before they get hired. They accept that some resume fraud will happen and deal with it. Bad hires are really bad and destructive, it’s true. But let’s not adopt solutions that are worse than the problem. Discrimination is not an ok price to pay. I’ve been working in this industry for almost 25 years now, and we did ok before Leetcode-style interviews. We can do it again.


Your comment starts from the assumption that LeetCode-style interviews are common because they work or are, at least, the best we can come up with at the moment.

There are many reasons why this could be the case, and it being the current best alternative is only one of them. Another that immediately comes to mind is survivorship bias.


How does survivorship bias factor into this? What are some of the many other reasons you allude to?

If there was a better way to do this at the scale of the software industry, the incredible incentives to find out how to do it better would have resulted in something by now.


there is no survivorship bias. Just compare random engineer from Big tech who knows leetcode to a random engineer from unknown company (like your local community bank IT guy) who never heard of leetcode and you will see the difference yourself.

or better yet open your own high growth IT startup, raise few mills from VC and start hiring and see if you like leetcode interview or not.


> because credentials and experience often mean nothing, resume fraud is rampant

Problem is, it's even easier to game the system by just memorizing LC questions. A metric that is known to be relevant beforehand and can be tackled by "learning for the test" is an almost surefire way of ensuring that a lot of people will do exactly that. There is an entire industry to prepare people for these tests, same as there is for standardized MC tests in eductional systems that rely on them.

It's not easy to detect resume fraud. But it's even harder to determine whether someone actually knows his stuff, or just spend time (and sometimes money) on just memorizing a lot of questions.

> If there was a better way

There is: Talking to people. Actually doing interviews.

https://www.linkedin.com/pulse/why-interview-coding-tests-mo...


It's not like we don't talk to people. We do that too. Most interviews I've been a part of, on either side of the table, have involved coding questions, design questions, and conversation.

However, to get to that point you need to get past the phone screen and that's usually a coding exercise. I'm not mad about that because I have seen firsthand that companies need to filter out all the ridiculously unqualified people who come their way, to ensure that time spent on interviewing (including conversation) is not wasted.

If you list a decent software job right now you will get hundreds, maybe even thousands, of applicants. Many will be outright liars, many will be junior people pretending to be senior, and many will be very good. You can't spend time on all of them. You need to have a way to decide who is worth your time, or you'll never have time to do anything else.


> You need to have a way to decide who is worth your time

The "first filter" is what we have HR departments for. As you say, decent jobs get thousands of applicants. Whos going to do the phone interview on a thousand people?

The first filter is skimming the applications and checking basic credentials. Filter out resumes that don't check out, and looking for red flags. This already brings down the candidate pool to a manageable size.


There are lots of talented people in our industry who don't have formal credentials. We're kind of known for that. So if you insist on credentialism you risk eliminating a significant number of perfectly fine candidates.


I am absolutely aware of that.

I used "credentials" in the above post in a very broad sense of the word, because "something that shows on paper that you know how to program" is a bit of a handful to type.

Work Experience, Involvement in projects, a degree, a github link, code-camp certificate, reference to prior training, all of these can be credentials. The better the position, the better whatever someone puts in needs to be in Order to consider the candidate. If it's a beginners position even a short paragraph about when, how and why someone started self-teaching would be acceptable, if I am looking for a senior database engineer I want to see more.

Writing something tangible in a resume about ones skills is a prerequisite. If a candidate doesn't do that, his application is eliminated before it even gets past the desk of the first HR person. This is not "credentialism", it's normal procedure for basically every single job-that-requires-some-form-of-expertise on the planet.

"credentialism" would be to only consider candidates with, say, a CS degree. That would be bad in our industry, for the exact reason you outlined.


The problem is "something that shows on paper that you know how to program" is so easy to fake that this amounts to basically no filter at all. Literally anyone could go on linked in and copy+paste blurbs from other people's job histories and nobody would know the difference between them and a viable candidate.


The thing is, in smaller companies, where there are few applicants, this can be solved by interviewing people (as in "talking to them", not with LC puzzles which can just be memorized).

In larger companies, and for well paid positions, where there can be hundreds of applicants for each job, that just isn't feasible, so HR has no choice but to apply some sort of filtering.


> just memorizing a lot of questions

If you can implement one of the memorised solutions on the spot, with tweaks, then you're probably good.


Good at what?

If I memorized how certain classes of problems are solved, and can derive an implementation from that, then yes, I am probably a good coder. I am then also someone who used LC et al. to learn about data structures and algorithms, aka. what these puzzles were originally intended to help people with.

If I memorized the question and its solution however, without understanding why and how this solution works then I am merely good at memorizing text and replaying it. This doesn't demonstrate my ability to solve problems or to code.


You won't be able to implement it from memory if you didn't grock it.


I am not implementing them "from memory". If I know the principle of, say, a B-Tree, and I know how to program in language Blub, then all I have to do is translate the principle into code.

It's the same with translating a concept into natural language. I have not memorized the word-by-word explanation of how the JW-Telescope deploys. I have an image of the process in my mind, so if someone wants an explanation, I translate that principle into english dynamically.


Algorithms do not shun creativity. They are born creatively. But they do set a high bar for new contributions. You either beat the existing complexity or you don't.

If you can improve upon either the space/time complexity or even the comprehensibility/maintainability of algorithms, the industry is your oyster.


Exactly and that is precisely why the current interview system is bad. The companies want candidates to pretend they just invented these algos on the spot and haven't solved like 50 similar questions on leetcode to remember the approach.

The algorithms are supposed to be fun and deriving them a group exercise.


ghkm, sorry to break it to you, but these data structures and algorithms are covered at freshman year in CompSci program.

leetcode merely tests whether you have foundational education for a professional software engineer.

like when you hire accountant you would expect them to know debit, credit and other basic stuff, right?


Lol. Show me someone who can solve these problems under interview conditions after taking a freshman algo course, without further practice and I will show you the greatest genius who has ever lived. Humans are not that smart. But they are tricky lying assholes who will pretend to have not practiced if it advances them.


Anyone who participated in IOi/ACM ICPC can crack them easily


This is literally practice. What part of my comment caused you confusion? (I cannot repress the snark, but you are performing some pretty intense mental gymnastics to support some internal emotional state)


And why do you think practice is bad or people are not supposed to practice?

Would you hire someone for a highly paid job with literally no experience/practice?


We appear to be living in alternate realities and each be having a different conversation. Perhaps the time streams crossed or something.


There's plenty of us professional devs out there who never went to uni, so is leetcode designed to eliminate us? And since we didn't go to uni, we learnt what we actually needed for whatever job we happened to do, which (surprise, surprise) has very few algorithms (web dev). Most algo problems are abstracted away behind a ready to consume library, so if you want to quiz me on stuff I've never made, and most likely never will, that's kind of dumb.

But then again this is the same logic that gave us google doc coding interviews so I'm not sure why I'm expecting anything at all ...


I am sure there are professional home builders/construction workers/house flippers who never went to college. I bet one can learn building house from youtube.

yet there are Architect/civil engineering degrees and large engineering firms that design and build skyscrapers/bridges/industrial facilities that require quite a bit of formal training.

both of these engineering subtypes can coexist, same in software


As someone without a CS degree, I was quite happy I could use a week worth of algorithms training / practice to prove my suitability for the industry, rather than have to go through a whole formal degree in CS.


I've had a bout of impostor syndrome yesterday as I felt like I was getting stuck. I was trying to use sqlite as a back-end for a document store and thinking about things like constraints. (the problem itself isn't actually relevant here). I was like, how can I not figure this out? Am I overthinking it? Why is this so difficult? Why is there not a Solution out there I can use?

So that's the one end. But on the other, this software I've built is already the biggest I've ever made. It combines SQL, the Go programming language, hexagonal architecture, REST, JSON, XML, some custom format like INI files, business logic, hundreds of different validation formats, models, fields, all in a very specialized three-letter-acronym-rich domain, and application that is / will be used by a small community that will end up serving millions if not billions of people (mobile networking technology)

So yeah, on the one side I'm a fucking idiot that can't get past day 3 of Advent of Code due to losing interest, on the other I am and have written applications for the masses.

I mean there was a time I worked on some iOS app, not on my own but a very small team. It had over two million installations some years down the line. And yet I didn't feel like this was my achievement, because others were involved and they all seemed to have more dedication, more 'talent', more intuition, more passion, and of course, more money.


I’ve never signed up for Leetcode and think algorithm board questions are a bad joke. However, I am very proud of my accomplishments, and I am a highly sough after professional in my network. I would advise you focus on building products and ignore prepping for interviews. Building a product successfully will do much more for your career than numb interview prepping.

Find joy in building something. Ignore the external pressure, slack at work if necessary, and use your free time to solve a problem you really care about.


The issue is that all the problems I really care about solving are not “products” in the sense that they’re not commercializable and no one cares about them but me.


Dude just go for it. Even if it isn’t a product and cannot be sold, having a project that demonstrates your skill is worth more to the right recruiting staff. Also, in trying to solve a problem you care about, you will find challenges and the right motivation to learn the tools to overcome them.


I am pretty sure Leetcode would not produce engineers like Fabrice bellard - https://bellard.org

Pros - I believe memorizing does help - If you do understand how things work - memorizing does make you fast - Leetcode did help me understand and appreciate pithy code - when I browse other's solutions - Leetcode did help me get inspired to learn new coding techniques - Leetcode did make me a better engineer who is quick to implement solutions which are already implemented - Leetcode did help me to learn libraries, functions, apis which i previously did not learn - Leetcode does bring needed positive peer pressure - sometimes helpful to get up and running and keep running

Cons - I believe it makes you run the rat race, you end up in another mill - running for someone else. - It doesn't foster creativity for the joy of programming - but rather it is motivated to clear interviews ( I wouldn't judge my skills based on leetcode alone | the gym is useful but it doesn't define me ) - I always adore super programmers like Fabrice Bellard - In programming, If I would want my skills to parallel someone, if not go beyond - it would be him. I am sure Leetcode wouldn't produce people like him. ( where would you have the time to dream and create if you use all the free time you have to leetcode ? )


I don't get why most of the critique seems to revolve around memorization. In my (small amount of) experience with LC they seem quite close to regular algorithms exercises. All of which relate to the theory that I got at my algorithms class in some way.


Do you have a checklist to go through? Something like:

1 - just try to think of a solution. Sometimes you'll just see it. 2 - what if you sort something? Sort the data and see if it helps to see a solution 3 - what if you stick all the data into a dictionary? Does that help? 4 - what if you stick all the data into a tree? Does that help?

Etc etc. You can make a nice long list of things to try. For 90% of the problems, doing one of the things on your list will lead you to a solution.


If you've ever done math competitions at the middle/high school level, you'll know that they are fairly poor at preparing you for more applied math. Same goes for Leetcode: it's great for competitions and recreational coding, but "real" software engineering is very different and is much more on the applied side.

Software engineering also requires fairly strong communication skills - something Leetcode doesn't help with at all.


Leetcode taught me that the vast majority of engineering problems are rote, and to think of the algorithms and data structures as the primary "Legos" (building blocks) of each task. Besides understanding the algorithms that best represent the problem, the only hard task really is understanding what the customer is trying to accomplish via the proxy of a Product person.

To me the really interesting part of engineering is educating Product people and customers about what computers are best suited to do and to rethink problems in systems of cheap tasks less than trying to fit arbitrary human centric processes (ie, a process that works for humans, but maybe isn't the best fit for a computer). Once we have a really clear agreement of the goal, it then fun to find a way to optimize a computer doing it.

A really simple analogy might be long division[1] -- if you implemented the long division algorithm on a computer you'd waste a ton of LoC, when you (usually, w/ certain caveats) can usually just use a division instruction. Sounds trite, but you'd be surprised how often I see product people, and even "Senior" engineers, just blindly copying a 10 to 100 step algorithm because that's how the humans do it, missing that the problem can be decomposed to a few general patterns and then iterated, recursed, map/reduced, faster when batched etc.

Often times these simpler computer centric algorithms also lead to much simpler code (for each do something simple), vs human centric algorithms often lead to big if/ifelse/else trees or code that does all of the tasks iteratively instead all of _one_ task for all items.

[1]: https://en.wikipedia.org/wiki/Long_division


You don’t need leetcode. I have 4 YOE and I was able to find a job in 3 weeks (after being fired because the company decided to not hire remote outside of US anymore) as an international remote at a US company paying low 6 figures (which is an awesome salary for me). I did not practice leetcode at all and didn’t interview anywhere that would ask it.

Stop applying to those companies.


Where on Earth did you get an idea that creativity was needed in the first place?

Creativity is not scalable, even dangerous, and big companies strive to scale => they need obidient soldiers, playing by the rules and just smart enough to not f*ck up a critical project.

Hence the Leetcode. It's a perfect way to ensure obidience, just enough brains, patience and motivation to risk wasting few month of preparation to the interview for the chance to get in FAANG.

If you want to be creative — "go fund yourself"! :)

I mean it in a positive way, because I feel exactly like you, ready to dump my current well payed job for the risky chance to do whatever I myself feel interesting and meaningful.

Wish you best of luck finding your challenges, and don't be so hard on yourself, leetcode is not a big deal anymore. Besides, there are plenty of startups these days full of creative people without leetcode mindset.


Here's my minority opinion: Leetcode-style problems can be valuable for finding talent. I know this will get me a lot of hate in programming circles.

Trust me that I know it feels horrible when you're bad at them. It does not mean you're a bad engineer by any means. It just means you're bad at Leetcode problems! Clearly, you still have strengths that have allowed you to accomplish what you have in your career. Those are strengths that should not be discounted by potential employers and certainly not by you.

But that doesn't discount the value of those problems either. You're right that you have to memorize the basic data structures and there is a certain pattern to these problems once you're good at them. But if there wasn't any art to these problems, then after 400+ problems wouldn't you have figured out the robotic algorithm to solve them? I argue that there is more to those problems than bullshit.

People who are good at these problems exist. I would not dismiss the strengths of these engineers either. These engineers may not even possess the same strengths you do! But just like you, there is a certain skill or talent that allows them to solve those problems. Those skills are valued by companies who want to run smart engineering teams.

It is not the only skill out there, it's just the easiest skill to empirically measure. You cannot run a large organization without a data-driven method. If you trust the human intuition of your hiring team, you will have a lot (more) variance in your hiring quality. Not to mention that your hiring will be biased against women and anyone of a different race than of your hiring team. This is true even if everybody is aware of their own internal biases. This is why large orgs give these problems.

Even if you do not share those skills, you might still be valuable as a good engineer. You just have to look for teams that are looking for asymmetric advantages: that is, those who can't afford to compete directly against the richer teams.


> But if there wasn't any art to these problems, then after 400+ problems wouldn't you have figured out the robotic algorithm to solve them?

https://www.youtube.com/watch?v=FHwnrYm0mNc


There are tons of repos on github that consist of nothing but solutions to leetcode problems. This is basically running the copilot model on it's training data -- of course it's going to do well.


My point exactly.

Copilot cannot "solve" these problems, it just knows the answer.

And for that exact reason, using LC as a hiring tool runs into the same problem as using standardized tests in colleges: Once people figure out that the tested metric isn't actually "understanding of the subject matter" but "test knowledge", and learning for the test is easier than understanding the subject, people start learning for the test.


Showing one way to get to the solution doesn't mean that it's the only way to get to the solution. It's still possible to solve these problems without the training examples that Copilot has memorized.


Rekt... exactly what a lot of us have been predicting and why it's so hard to force oneself to "git gud" at solving these problems


Interviewed at a company recently, who were very keen to take on a senior dev, as they had a lot of 'juniors'. Their interview process boiled down to 'we want you to take hackerrank'. At which point I basically decided they weren't somewhere I wanted to work.


I'm also anti-leeting for interviews. The one argument for them that I struggle with is when the candidate is told they'll be asked about data structures and algorithms.

The reason for the struggle is that, framed properly it tests a real world situation. Given this problem I've told you about in advance, how well did you prepare yourself to answer it?

I don't think it's fair to tell the candidate they could be asked about sorting, trees, lists, graphs, dp, lp so try and cram a 4/6 year CS degree(s) into the next two weeks. That said, telling the candidate, that they will potentially be asked to whiteboard a solution involving binary trees, sorting, or a linked list seems fair to me.


"I wish I had practiced law for the past 7ish years instead, because at least all of my skills would still be relevant"

This.


Once you accept that LC is used 80% for personality traits test, and 20% as actual knowledge test it gets easier to swallow your pride and do the grind in order to get in to the desired company.

That is, if you want to be a part of such company.

Because, yes, compensation is awesome, and you get the shares and what not, but there is more to life than that.

Scratch the surface a bit deeper, there are many different companies out there with different core values that will attract totally different group of people - while having all of the benefits of a "well known company"


I don’t think the weird hiring proclivities of giant companies, nor the rote learning some put into things like Leetcode, should obscure the power and beauty of the algorithms and data structures available to you. Maybe there are other ways into this stuff, but being able to pattern match problems into known (and perhaps even near-optimal) solutions is a tool to your creativity, not a hindrance. It brings conception and execution closer. But it should feel like a series of epiphanies, not like maths homework.


LeetCode is one of the biggest reasons I have anxiety over jumping to a new job. I was never great at it. I somehow managed to get through a good company as an intern without hardcore LeetCode practice that many of my friends did. Didn't get a full time there, spent several months in the pandemic hunting jobs, and I have one now but it isn't something that I am really enjoying but since they have given me WFH, I feel partially inclined to continue the status quo.


There are many companies that don't require leetcode. I forbid it in my hiring interviews.


I don't know what is the situation in the US but I interviewed for a job where I was given an offer of 4.5 lakh rupees plus a bonus of 50K(equaling 6,726.67 USD) and the guy asked me quite a bit of questions from LeetCode amongst other stuff. That was quite terribly low for me personally (and had I known the salary before hand, I would have never interviewed for it).

So at least in India, from what I have encountered so far and I am yet to encounter a company that hasn't asked me those questions yet.


Ah yes, I have forgot to account for local bubble. My apologies. I am in Europe and I've seen LC only in FAANG.

If you can, try to apply to companies in cities like Berlin, Vienna or Paris, but of course not everyone has that opportunity.


I have 12+ years of experience. I get so much anxiety during leetcode interviews that I have trouble reading the word problem and understanding the question. My brain just goes haywire and I have to take deep breaths. Usually I get part 1 done/running and fail because I didn't make it past part 1. I can do just about any easy/medium problem on leetcode. Just can't code under pressure. I don't get anxiety in any other part of my life, ever. I think this speaks to how badly they are at sorting out the original goal of can this person write code, and do they know basic data structures.

I recently interviewed somewhere where I did a leetcode interview, then a take-home and then it felt like they didn't care about the 6+ hour takehome and made me do another leetcode. Pretty frustrating!

Thanks for the thread, it's nice to vent! It's also good to learn how to be a better interviewer, and write better interview problems. My favorite is a debugging interview, where there are like 4 bugs in the program and we work with the interviewee to solve the 4 issues. I'm sure there are problems with this style too, but it's far more practical...


Don't despair. I have decades worth of experiencing in a variety of operational environments and when I interview I don't ask any LeetCode questions. Why? Because those aren't the problems I have that I need you to solve. Honestly, what I'm looking for are what a lot of developers brush off:

1. Team player. Modern development is a team sport. Bonus points if you've actually played a team sport so that you have an understanding of team dynamics and how to work with a team to achieve goals. A lot of people still think software development is a career for loners.

2. Good communicator. Developers interact with multiple business groups, multiple technical groups within the organization and multiple technical groups outside of the organization. You have to know how to communicate effectively with each of those groups - who all have varying technical backgrounds and understanding of what you're trying to accomplish. I'm not saying you have to be extroverted to be a modern software developer, but you can't be so introverted that interacting and engaging with others is difficult for you.

3. Big picture understanding (abstract thinking). A successful developer needs to be able to traverse several layers of abstraction. The people who can't do that well can't see the forest through the trees. They get lost in code and can't think about the abstract things the code is implementing and how those things interact with one another. They get lost.

You know what I don't care about? How well you do LeetCode exercises. I have some great people I've hired onto my team and I have no idea how well they can do LeetCode exercises because those aren't the problems we have to solve.


I am not an engineer but I am always curious - this must not be the case in all companies out there?

Same as for other professions, you would suffer in law for the first 5 years doing proof-reading (the grass is always greener).

But if you want creativity - why not just build your own stuff? You have a super power that majority of the planet does not have. Alternatively changing jobs to a different kind of company that structures this position differently?


> this must not be the case in all companies out there?

It isn't. There is a bubble where it is prevalent, and there are lots of companies where people actually talk with candidates, eg. about software they have written, why and what they were excited about it, discuss the company product and what they are looking for in terms of contribution, etc.


anyone can talk, the bar to "talking about software they built" is too low.

leetcode is hands on demo of what you can do and how you think.

since big tech pays big $$ they can afford to set the bar higher than just talking


"Too low" is relative -- there's only so much talent out there at any given time, and it's generally going to go to the highest bidder. There is so much demand out there that many lower tier companies can't afford to filter based on even easy level leetcode problems.


this is good for top tech companies, highest bidders.

if mediocre companies cannot hire top engineers, they will not develop software in-house and instead will buy the SaaS software from those big tech companies that pay top dollar for leetcoders. Software scales up easily


Would you say its actually a good indicator that a candidate will succeed on the job? (no sarcasm intended)


I only have few data points from my circle, but all friends or mine who went to IOI/ACM ICPC and were good at solving these types of problems, all became quite extraordinary engineers in terms of types of problems they solve and individual productivity


> I am not an engineer but I am always curious - this must not be the case in all companies out there?

No, it's not.

Most of my non-SWE friends are from liberal arts circles. Interview process for their jobs had no "LeetCodes", no take-home assignments. Just a few steps of 1-on-1 conversations. The companies are also heavily relying on the trial period to accept/reject fresh hires.

Naturally, it's just my anecdata.


leetcode is testing a broad range of algorithm design concepts. It's an intellectually rich area, not boring or "thinking in one particular way". And it's an area of computer science that indeed does involve creativity.

To get started, first understand that leetcode problems fall into different categories: graph problems, "dynamic programming", double-pointer techniques, etc. And within those broad categories, there are families of problems. So first, stop trying to solve random leetcode and pick one family. How about "Best time to buy and sells stock"? Start with the easiest one. It won't be that easy! Don't worry if you can't solve it. Turn to the discussion where people post solutions, or the official solutions page, pick one solution in a language familiar to you that looks understandable, and study it. It might take an hour or more to understand what it's doing, but stick with it! Make notes, whatever helps you. But get to the point where you absolutely understand how that solution works.

Now, try to write it out from scratch without looking at the solution. And then, try to do the next one in the family. Keep notes for yourself on what your learning. And eventually you'll have learned how to do some graph algorithms, some "dynamic programming" (it's a silly name and a bit hard to define but it's a category) etc. This will all take weeks / months. But that's fine -- your learning the material of a couple of semesters in an undergrad CS course.

It's fun if you enjoy programming and algorithms, in my opinion. If you cannot sit down and learn like that then it is possible that you don't have the sort of mindset that the companies who are employing these tests are looking for.


How many interviews with non-FAANG companies have you done in the last year? Before dismissing the industry entirely, find some interesting companies and interview them for the culture you're looking for. Also, I've been programming for over 10 years. I personally know two ex-lawyers who switched to programming and are much happier. I've never met anybody switching from programming to law.


I also have worked with people who left FAANG seeking better work/life balance.


If you can't solve them after half year of training then you probably aren't in >99% in raw intelligence but that's still fine. Myself I think people might have most problems with dynamic programming as this type of optimization solutions aren't popular in normal programming. Also geometry or number theory puzzles can also be weird. Also tons of these problems are underspecified or just plain wrong, which made me sad sometimes.

Algo solving comes down to knowing certain tricks or math properties. On competitive level it seems to be all about memorising solution classes and fitting problem to pattern, which I found boring.

I have 15 years of programming and I was better at algos as a kid as it was kinda fun to solve these back then. There's not much fun anymore, so I don't do it but programming I still enjoy somewhat but more inspired by RL/NLP progress but DeepMind won't hire me :/

> ETL with Spark

Lol, you do ETL with Spark and talk about creativity in the same sentence.

How about designing new platform, startup, game, NLP/vision application, solver, trading bot, search engine, programming language, operating system etc?

> This is also what Software Engineering has become: you memorize, regurgitate and participate in agile the masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

I mean that's kinda true in BigCo and many people are fine with that. They want low buss factor and good profit margin and not programming stars. The bright side is you work 9-5 for good salary. Just need correct attitude (I am so inclined to quote hustlers here ;). Express your creativity by paiting, dancing or writing poem and you will be better off and happier.


and here i am, pre-final year cse undergrad who took this as a new year resolution, get good at leetcode and crack interviews,, why ? every single person in my college is doing it and every single company hiring on campus is doing.

wanna try finding companies that dont go through this process ? then there payroll isn't nothing close to these leetcode-interview based companies ( factor of 2 to 3 times ) :(


Sometimes giving up is the right thing to do. Don't fall for the sunken cost fallacy. If this isn't what you are good at then you should definitely look for something else that is. Lots of people choose a career because of the image or for other reasons and find out they aren't actually good at it. It's normal. Just keep trying.

I chose to pursue mathematics after school. I was into computers but for various reasons I didn't think I wanted to do programming as a career. I was good at maths in school and assumed I would make a good mathematician. Well, I was wrong. I didn't get on well with maths at all at university. I went from being top of the class to bottom and I didn't like it. I decided to switch to computer science despite a significant cost and was top of the class again.

Later I decided I wanted to stay in academia. Again, I was wrong and didn't get on well. So I switched to industry and I've never looked back.

Sometimes you just have to accept that you chose the wrong path. It's no big deal. That's life. You won't choose the right path every time.

> This is also what Software Engineering has become: you memorize, regurgitate and participate in agile the masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

Nah, that's not true. Even the leetcode problems can be solved in infinitely many ways. They don't require a particular data structure, they only require a particular time and/or memory complexity. But just like any field, there is an enormous amount that you won't be an expert in. When you encounter those parts, you use someone else's solution. That's part of the job. Nobody solves a problem from scratch in any field, ever. We stand on the shoulders of giants.


It is a bar they use to hire. The barrier to entry. They figure they can't go too wrong if you get over the bar.

In the beginning, they just took grads from Stanford / MIT. Then, someone did a study and figured out that was a bad idea, so now they are doing this.

Is it a good idea? For a small startup, absolutely not. But they are at a size and scale where that doesn't really matter.


Leetcode is just a single signal interviewers should use. It's useful, but it's not the entire story. Someone who has strong signals in every other area should be able to have a weak leetcode signal.

And I find a bit of contradiction in your post.

You both claim that you feel the problems are harder now and that they're all simple regurgitation. These both can't be true. If you recognize they're just simple recitation, then recite. You should be able to crush it with no problem.

I don't know if you've done any interviewing yet (it sounds like you're going in that direction), but one of the favorite follow up questions in FAANG interviews is: "and at scale?". And there you have to know how to go massively parallel.

Also, what's to prevent you from hanging your shingle and doing those creative/fun/whatever things?

It sounds like you've been on a job hunt for a few months and are getting frustrated and taking it out on the one thing you've done the most. Consider you're taking this attitude into everything you're doing. It will come through in your speech, your writing, everything.

And as to leetcode itself: What else is there? Hiring isn't broken per se, it's just really fucking hard. I've seen others mention a desire for a test they could give that could test for what employers want. That's what leetcode/whiteboarding is supposed to be. It's a skills assessment.

Then you have the people who claim that what they're doing at FAANG isn't that far off what others are doing on average. Let's say that is true. Let's say that 90% of software developers out there could do it. They still pay the most. Most people would still want to work there. So they'd have to filter somehow. This is just a filter that excluded you.


I can sympathise with this.

Engineering isn’t a linear track. Being able to consistently smash leetcode puzzles out the park will land you a $250k total comp FAANG graduate job, but the more experienced you are the less crucial the puzzle stuff becomes.

For a punk grad, being good at bubble sort is all they have. They have no engineering taste, no immune system trained to respond to dodgy design, and no discipline to evaluate when it would be effective to push back on something versus avoiding unnecessary drama.

I recently went through several rounds of interviews where the only code I wrote was on my own time, after I had outlined a solution to a practical problem in each of the interviews. I have landed my dream job at a business that’s just closed a series B. I was delighted to be treated like an adult whose technical ability wasn’t fundamentally questioned as part of the application process, but whose organisational maturity and approach to working with a team was.

The truth is out there.


I'm at the point where I refuse to continue the interviewing process if something like this is required. I have plenty of open source stuff the interviewer can peek at. I'm also happy to discuss any technical question to whatever depth the interviewer wants.

If a take-home assignment is wished, I'm billing for it.

There are plenty of good jobs/projects - be pickier.


Coding is about creativity and architecture, just not if you work for big tech. Big tech is not interested in quality architecture which minimizes the amount of maintenance work. They will use any opportunity they can get to boost headcount - Poor quality code and complexity bloat is a great way to achieve this. That way there is a constantly increasing need to hire new employees to manage the increasing complexity. These new employees can be placed at the bottom of the org pyramid for old employees to start bossing around and 'move up' the crony career ladder... All while the systems become increasingly more complex and brittle and internal processes become bureaucratic to a kafkaesque degree.

I agree, if you love coding, law would have made a better career; that's an industry where logic and reason still matter.

It seems like medicine is not good either nowadays for rational thinkers.

There's never been a better time to be an idiot. Idiots shall inherit the earth.


SWE doesn't have to be boring and repetitive. There are lots of interesting problems in embedded and HW system design/scoping (software engineers can be really useful for providing requirements to these systems). I work on cameras, specifically on dynamic controls (designing the algorithms + implementing in firmware) and it's so much more fun for me than writing web services, regardless of the scale. There are lots of jobs like this that make programming by, it's just that getting your foot in the door is hard because you have to have the experience. But what you don't have to do is grind Leetcode to get those jobs. You might just have to be willing to take a more junior position, since embedded is different. It took me 3 years to get here from a regular backend c++ job where I wrote the network backend for a database.

The only downside to these jobs is that they tend to pay less, despite them being very challenging.


> There are lots of interesting problems in embedded and HW system design/scoping

Every job I see in these sort of areas are very senior level of staff/principal and want significant domain experience in whatever the hell it is they’re doing.

The exception being the lowest rung which always seem to exclusively target university pipelines.


You're right, but the jobs do exist. I'd look for jobs that are embedded linux based. If that's what they want, then they need somebody who knows how to write user space applications and are willing to learn a bit about HW registers. It's a way to get a foot in the door.


SWE with 6-ish yrs of exp. I get good annual reviews, have been promoted consistently, good feedback overall from not only peers but from higher-level managers, business folks, designers, legal, content /copywriters.

But according to leetcode and the FAANG interview process, I am not worthy of employment at any of big tech companies, and I failed a lot of those interviews. I love coding and tech, but leetcode makes me hate it.

If I lacked self-esteem, I would not be in a good emotional state, which is something that does concern me - being rejected by many companies can take an emotional toll on a person's emotional health.

The good news for folks like me is that there are enough companies that will interview me on relevant skills and $200K-ish TC is enough to live well, especially with good work / life balance.

FAANGs and start-ups are shooting themselves in the foot with the interview process - they are effectively:

1. limiting their new-hire pool by having too high of a hiring bar, and

2. hiring candidates that may not have the expertise that they need bc they are not interviewing for that expertise (you might be desperate for AWS / cloud skills, but testing for dynamic programming will not help you find that candidate).

Big surprise - there is a hiring problem. This is a big enough problem that the tech companies are doing unusual things:

1. Amazon has been reaching out candidates that were given offers within the last year, and trying to entice them with higher offers, and

2. Apple (and Amazon will in April too, according to Blind) has been giving big pay increases (40% ish IIRC) to keep top performers from testing the market.

^^ There will be more anomalies bc the skills gap will get worse.

Good news, folks - likely we will all get paid more, leetcode or not.


'Medium' level Leetcode questions are a pretty good way to see how someone thinks and codes.

1) They are generally not that hard, there is no 'trick' to the 1st order solution, maybe optimizations, yes, but there's always a straight forward 'brute force' solution.

2) There's 'just enough code' to see how they would basically organize a function or two.

3) Plenty of opportunities to talk about second order small stuff, get the interviewee talking and opportunities to express their insight.

Yes, it's hard to think when 'someone is watching you' or 'under time pressure' - I would tend to leave the room or go away and say 'don't worry about time, just ping me when you're done and ready to chat'.

But I would be reluctant to hire anyone who could not consistently bang out and solve medium level leetcode problems. Experienced devs should be able to knock them out one by one without too-too much time and few hangups.


Why do you care if you're good at leetcode? Are you finding that it correlates with bad performance on real interviews?

Last time I interviewed (at ~5 YoE) I found that while Facebook and Google still have several "leetcode" style interviews, many other high-tier companies only do one interview of that type (e.g. Stripe, Dropbox). The rest are some combination of practical coding, discussing your experience, and working through design problems. And even the FB/Google interviews aren't as bad as they sound, because you often have an intelligent and engaged person on the other end who is trying to help you demonstrate your skill, unlike the relative vacuum of working through Leetcode problems by yourself.

You should be able to get really detailed information on the interview process up-front, either on Glassdoor or by talking to recruiters. Pick companies whose interview process emphasizes your strengths.


You memorize, regurgitate and participate in the agile masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

I feel like there is plenty of room for creativity in the high level solution and working with the customer/user. But it makes sense that when you get down to the nitty gritty, established patterns should be used. Without a doubt other engineers will come after you to work on the code, and the last thing they want to see is a super creative implementation that only you understand.

You might see a similar thing in architecture. A bridge architect might draw up a beautiful, flowing bridge...but at the end of the day the engineers will use the same techniques to make it structurally sound. So...maybe you might like software architecture more?


I wish I could give you some purpose... because you're right software engineering (or software) is just a tool to solve a problem. problems are best solved with purpose... I know I'm lost like you when I don't know my purpose or problem to solve... Perhaps saying this will help you see software is a tool... sometimes we obsess over the tools (interesting problems) but usually we just use them to get to our goals. Not sure what kind of problems you like solving or if problem solving is what gets you excited... but for me there is a little bit of a hit every time... A new tool just equals a new potential solution to a future problem... It is hard to learn new tools, don't be fooled...


Been programming professionally for about 23 years now. I've done Leetcode-like code for my job I think maybe once? A modestly clever bitpacking scheme for a particular problem in a confined space that used algorithms one step beyond what you get in an undergrad education. But I mean, only one step... I didn't have to whip out the Knuth or anything.

Sometimes the court jester speaks profound truth under an appealing layer of humor... in that spirit, if Leetcode is bothering you I very seriously propose that your best solution may be: https://www.youtube.com/watch?v=SlKao_Pox5A


Sounds like your job is the software engineering equivalent of fighting parking tickets. ETL is basically the type of problem you get in CS 101, transform a set of inputs into an output. There's obviously a lot of value in that, but it's hardly the sum of all SE/CS. You've done that for 4 years, have no formal background, and now you expect, what exactly? To get a half million a year offer from a FAANG based on your algorithmic excellence? You may have valuable skills and experience, but they are not in type of things leetcode tests- your next step should be further up the chain in architecture and management, not chasing some dream dev job.


Just don’t do them? I have around 10 years of experience, in a similar place as you. I refuse any leetcode or hackerrank request.

I interview pretty regularly, move jobs every couple months. Probably receive 2-3 offers a month without doing any leetcode.


You move jobs every couple months?


Just around that time. I work 4 SWE jobs so I tend to move around quite a bit. It comes out to maybe a new job every 4-6 months.


Are these full time roles are are you taking purposely short contracts?

I always wondering about doing the latter. I get bored very quickly, but don’t want to risk hopping full time roles too quickly.


3 full time roles and 1 part time contract.

I get bored quickly as well. One of main reasons I started working multiple jobs (the money is nice as well).


You do 3 full time jobs simultaneously?


Yep. 3 full time remote Senior/Staff SWE roles and one part time contract.


Sounds to me like you're obsoleting your self for the first time. It does not get easier the 2nd, 3rd, 4th or 5th time, but you'll perhaps see it getting easier.

As for your perceived lack of something, consider that some part of you is smarter than you know and gives you cognitive issues just so you don't go down a path meant for people that are somewhat less well rounded, less integrated, have narrower talents or whatever. I mean, your judgements on the industry are spot on.

Since people will generally only call you a genius while profiting from your work, think of these tests as selecting the most exploitable.


Why go through all this instead of just finding a more laid back place to work? Are the leetcode-gated jobs that much better? I'm at a very good place for my YOE and my interview consisted of one low-stress zoom call.


Many people are of the opinion that leetcode style interview jobs, on average, pay a lot more. Is your experience different?


They certainly do, but no salary is worth your mental health


I have to because I want to be able to retire someday, which is already looking unlikely tbh


This is my motive behind grinding LC to get into a FAANG as well: inflation is out of control, housing in my locale has tripled in price in the past decade, uncertainty regarding climate change and the energy crisis, my lack of faith in social retirement programs.

Many people would kill to have the opportunity to study for 100 hours in order to secure a 2-3x increase in pay. That is only 2 hours a week for a year. If a SWE is making $150k and they can spend 100 hours grinding LC to get a job which pays $400k they are going to make $250k extra in their first year of the new job or $2500/hour spent grinding LC. The present value of an extra $250k/year for the next 20 years of your career at 3% interest is roughly 3.7 million dollars. So over the period of a 20 year career you will net $37k/hour spent grinding LC.

The fact is that so many SWEs — as seen in this thread — outright refuse to grind LC to get into a FAANG which is why not everyone is making boat loads of money at a FAANG. The process to get there is well known but many are not willing to put in the work to get through the process.

I do believe that LC filters don’t reflect a SWEs ability to develop software, but it is a reflection of their commitment to do what it takes over long periods of time to complete an objective, regardless of whether or not that objective has merit.


I've been a coder since I was 8. I'm one of those obnoxious gifted coders. I have used some of the algorithms that leetcode tests in the real world, but I had to Google them every single time.

Leetcode is a race to the bottom. Be the change that you want to see: walk away from this nonsense. You should be keeping your blade sharp, but leetcode really isn't the way to do that. I enjoy programming talks on YouTube, maybe you might: cppcon, fosdem, linuxconf, rustconf, strange loop. You might find another way (OSS contribution is also great!).


Leetcode has exactly nothing to do with software engineering.


Go work on something you enjoy, these tests are meaningless.


Yeah but significantly less useful when it comes to finding a job.


Don't quit! I SUCK at those algorithm tests but frankly the best engineers that I've hired have not done a great job at them.

Instead communication skills and a willingness to learn have been much bigger indicators. There are plenty of startups that will LOVE to have you. Focus on getting a job at earlier stage startups. Create your own projects as well. People like seeing those projects to show that you're passionate about coding.


> I wish I had practiced law for the past 7ish years instead, because at least all of my skills would still be relevant.

The grass is always greener on the other side.


I think that the SWE will converge towards more memorization - which is fine as it's a craft. Our craft will be like plumbers, carpenters etc.


As an outsider to your situation, I thought this post was satire/criticism until the very end.

Sorry you’re going though that.

On the bright side, sounds like you’ve recognized the pattern to be successful at leet code. Add it to your tool belt and move on to things you find fulfilling.

There is a lot of power that comes from creatively applying those algs skills.


Leetcode is being a good sprinter, but software engineering is being a good marathon runner. It's a different skill set. Don't let these coding problems drag you down as getting good software out and maintained is something you are capable of doing well.


I'm not sure that being involved in law would be any better. Most of that is standard, boring, frustrating stuff. Plus, you get to witness the injustices that are performed against people.

I wish I could have a fulfilling job. I don't know what that would look like anymore.


*Leetcode isn't about fun and challenging things, it's about thinking in one particular way, spitting out solutions using the same exact data structures and jumping through hoops on command without philosophizing or creating anything that can be reused/extended.*

Yes


Yeah it's a pain. Here in the UK it's not just FAANG and start ups. Most hedge funds and asset managers are following that interview style.

Even old school investment banks are joining the trend, which I find baffling because the comp package is nowhere near the above.


I am only at 4ish yoe (keep in mind I work casual since I am still studying full time so this isn't the same as full time experience) but I refuse to do leetcode style questions. If companies pass me up because of that, I am okay with that at this stage.


Most of the jobs out there are slowly evolving into small FAANGS. I started in a rather small, startup-type of company, but with time it became a big buirocratic machine. And I had a lot of collegues I wish know how to evaluate time and space complexity.


+1 thanks for sharing your rant. I totally agree! I'm at about 18 YoE, and these Leetcode challenges are a major hurtle to pass. I can either study Leetcode problems, or study how to be a better engineer, and the curriculum isn't the same.


A writer doesn't need to do crosswords.

A mathematician can hate doing Sudoku.

Proficiency at these games is not really related to these professions, clearly.

Same with programming puzzles like these, until some MAMAA recruiter decides they will use Sudoku to screen candidates :(


Try game development. No worrying about imaginary best practices. No know-it-alls who pretend their way is the only way. The ugliest and most novel hacks are the best hacks. Very healthy for the creative mind.


You can make up to X without jumping through hoops. You want to make Y at FAANG you need jump through hoops. If it was not leetcode type questions it will be something else that lets them filter out people.


Personally I want this kind of attitude on my team. We should not be cargo-culting stupid stuff. We should be clear about the problem and the solutions should be simple and direct.


It is a Human->Resource game, as many other commenters pointed out. It has little to do with being a good dev. Play them! there's a support site for this: dev-assist.com


On the bright side, this gives startups and other new businesses a chance to hire great talent that is highly resistant to getting poached by FAANG!


Those of us who are on the other side of the hiring table need to push back against asking leetcode and similar kinds of things.


Coding in C style C++ taught me that I'm always in the 99th percentile for speed, memory usage and runtime speed. lmao


funny, I once did a backward scheduling for a client during a task, I had to justify 3 times why I looped backwards over an array. So if I were to create an actually clever algorithm like they ask in leetcode, I don't knwo how well that would go over.


So long as there will be leetcode, people will continue to debate about its usefulness.


Jump into crypto related stuff.

Everything is so new and open to expirimentation

Check web3, Bitcoin lightning


Intelligence is many, many dimensional. Leetcode isn't capturing it.


There's an interesting sentiment shared amongst some of the comments both here and in the linked thread that leetcode is somehow a fundamental measure of social worth or quality.

Like, if you can complete leetcode, you're so in the in-group, if something happened to Earth tomorrow and humanity suddenly had to migrate to space, you'd definitely be on the shortlist of people $company would select to join the new colony, because you've been trialed by fire, the results have been locked in, and your value and worth will never be questioned again.

At least that's my take on the perspective I'm seeing.

Now, written out like that it almost seems like I'm belittling the view, but I'm caricaturizing it to call out an important distinction:

Ability to complete leetcode puzzles to acquire a job has absolutely no bearing on your *social inclusion* as a *person*, precisely because the initiative to mandate these tasks is coming from HR departments.

And what right does HR have to dictate whether you should feel socially included or not? For that matter, what right does a workplace have to tell you that you should feel small as a person?

Leetcode suffers from a sort of simplicity problem. The mental model of what leetcode implies (programming challenges) is virally straightforward to reason about both for programmers (compete! be the best! go to space one day!) and hiring managers (wow this tiny picket fence is the most effective thing I've ever been recognized for, I've made it!!). I mean that it's virally straightforward because it has a simplicity that makes it "click" for everyone in 5 seconds, which makes it easy for it to scale/spread like wildfire.

And in an industry where hiring is known-ungood and everyone is grasping at straws, you can kind of see why organizations everywhere (especially the well-known, large inefficient behemoths) have adopted this on a shoo-in basis: in those environments, its user experience is orders of magnitude better than what it replaced.

Here's the rub though. That simplicity I mentioned? Other comments here have talked about how leetcode only challenges a specific mindset, that it's extremely narrow. And indeed it is. It's like an IQ test. But there's something about it, a... single-minded, zen-like quality to it, like dance-pad or Tetris arcade games.

In a recent thread (https://news.ycombinator.com/item?id=29728892) showcasing a multiplayer online Tetris game a lot of people marveled at how fast some players can play (the author of the site linked https://www.youtube.com/watch?v=MJDz4-pr9J4, and my personal favorite (definitely watch the end) is https://youtube.com/watch?v=lE_UHhqAd1c). These people get good not solely because of inherent talent, but because there is a catnip-like attraction that draws everyone in, and these people just keep coming back.

I suspect the same is true for leetcode. People just do a Jon Skeet and keep coming back. Reminds me of "the unreasonable effectiveness of showing up every day" (https://news.ycombinator.com/item?id=27833064).

However, I think that in that overwhelming one-dimensional simplicity of "leetcode means X", these finer points are completely lost in translation and do not scale. Instead we're left with "<blah> passed leetcode and got a job" and "wow this is really hard" and lots and lots of "wow I feel terrible as a person" - where that latter bit turns into what feels like an insurmountable Mr Everest because this is hard for a *lot* of people, including both those in your immediate social circle and the like-minded individuals who hang out on the same forums that you do.

If you're pushing to complete these, IMHO the only context that makes sense is in an unexpected-interview-next-week sort of situation. Definitely immediate to short term. Generally speaking, if you're aiming to work somewhere this sort of thing will be valued... it doesn't really make sense to try and get your foot in the door of a marathon race by proving you can sprint, right?

That's not to say that most large corporate environments actually give you work that requires a significant cross-section of this sort of skillset. In that regard leetcode is the grown-up version of "I learned all this stuff in school that I'll never use". In practice whatever real work you take on will generally be paced somewhat more sustainably and you'll have ample time to familiarize yourself with the approaches a particular piece of code uses - if they're not already in your mental toolbelt already.

The simplicity of leetcode lends toward what might be described as a "false bigger picture" that describes some sort of idyllic scene where you're working on zen puzzles at work all day. You know that isn't going to happen, but it can be so easy to develop a mindset that looks at the world through leetcode glasses and says, well, what if everything I do all day does reduce down to zen puzzle solving? Yay, I get to do this forever! (Protip for ADHD hyperfocusers: observe red flag. Red flag bad. Red flag signal imminent core burnout. Hate job. Stressed out all day. Depression.)

In reality, the competitive target that leetcode represents can be overwhelmingly easy to extrapolate into a whole occupation of its own.

The fact that leetcode gets people jobs is 100% orthogonal to the fact that some people get stymyingly good at it like with competitive arcade games.

There's probably a notable separation/distinction between people who do leetcode all day and people in Actually Interesting Positions.

For example, you might've heard of the Oroboros Quine (https://github.com/mame/quine-relay), a program that emits source code in over 128 programming languages in successive steps (as you run each program, it outputs code in the next one's language) and when you finally reach the end you wind up with the original source. This person works at a Japanese company that maintains an online recipe dictionary/service. Is this a major tech company? Nope. And that's most likely the reason this person has the time to dedicate to this. They clearly have sane work-life balance. (Work isn't life, it merely sustains it.)

There was a post on here recently about making a supersonic trebuchet (https://news.ycombinator.com/item?id=29408127). The author made a point that he expresssly optimized for difficulty so he would be able to control for how much time the project took.

A very small pet-peeve of mine is when people say that they're passionate about working in field X or Y, as though being passionate is a critical step to solving problems. It can be, *but only if you are not emotionally investing in what you are not capable of*. The problem with passionate investment is that it can be kind of blind, like blind faith or trust - it's just, this is vaguely the right direction to go, put a moonshot amount of mental effort into it and have blind hope that something good WILL happen. (I'm reminded of a quote by a swimmer, who IIRC was asked how he won a marathon swim race. He said that he did not mentally spare any energy for the swim back.) While it is by definition pretty much impossible to have a proper cause-and-effect discussion about the efficacy of this approach, what can hold it back is being passionate about solving problems that you're fundamentally not able to just *do*. Things where you go "...wait that's actually a really interesting problem" and dwell on for hours or days or weeks because, deep down, to your brain it's not a solved problem and instead a Very Good Question.

Folding back to leetcode, if you're terminally stuck, firstly you need to both identify where you're investing in what you're not capable of, and figure out what that means. While just the first half of this sentence on paper, this step may end up being a multi-month (-year?) project. It may benefit from therapy/assistance to help work through. With that done, you then need to figure out how to optimize for difficulty, possibly sourcing help to assist fighting stubbornness to solve problems the hardest possible way ("if I learn to solve this I'll be a better programmer!" - no, stop bashing your head against the wall and look at all the tomato sauce you've already gotten all over the floor; you are fallible). Finally, remember that the Zen mindset/simplicity of leetcode describes 0.01% of real work. Now have a hard think about what sorts of positions you really want.

If you're saying "I don't know, something cool," then judging your abilities off of the back of leetcode is an especially significant liability, both for you (leetcode cannot provide authoritative direction about how you want to grow) and your employer (who cannot really discern any sense of what to expect from you as a person given leetcode's incredibly narrow focus as a catalyst). Seriously narrow down what you want to do - not just in terms of what sorts of programming you want to do, but what kind of environment you want.

Welp, not really sure how to continue this from here so I'll stop now. I think there's a bit of projection and misinterpretation in places - I know I was envisioning a "just left school" stereotype at the end there - but hopefully parts of this are useful.


This is wrong on so many levels. I've been writing code commercially for more than 30 years.

> This is also what Software Engineering has become: you memorize, regurgitate and participate in agile the masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

Not necessarily. If it feels like this, you may be in the wrong bubble. And that bubble is going away, too, because these tasks are the first that will be replaced by AI-assisted code generation. In the meantime, you can always Google an algorithm if you know what to look for.

There is almost zero usefulness in an ability to regurgitate boilerplate patterns, but there is tremendous usefulness in executing good judgement, creative problem solving, and a solid understanding of fundamentals.

Programming is about solving problems that are interesting to you personally, in a way that satisfies you (and ideally your customers). The hard part is finding that niche.

> I used to think this job was a creative one, since writing frameworks and libraries for further use, documenting code and extreme programming made me think that I was building something new and useful.

You had it right the first time. If you enjoyed making these tools, that means there is still an internal drive in you to solve those kinds of problems. Even if those tools happen to be terrible, apply lessons learned and repeat! Spoiler alert, everyone else's tools also make trade-offs at the wrong points, even successful ones. Don't be fooled into thinking that the big things are already solved.

In the end it's about finding gainful employment doing something you enjoy. The good thing about programming is that you get to choose your environment and the nature of your work from a very broad spectrum.

> I wish I had practiced law for the past 7ish years instead, because at least all of my skills would still be relevant.

If you chased framework specifics and arcane patterns for the last few years, then yes, some of that work is not relevant anymore. Learn from that, stop chasing ephemera. You may be better served by doing deep work on a specific thing for a long time, as opposed to perpetually playing catch-up with JavaScript frameworks to impress the next fickle startup that thinks it'll change the world by selling ads.

I would advise anyone who doesn't absolutely need it for an interview to stop spending time on LeetCode and such sites. Instead, invest that time in a project that is relevant to you, and learn everything about a specific domain as deeply as you can. Pushing up a score counter on LeetCode doesn't compare to actually making something competently in the real world. ADHD can trick you into believing that solving artificially parceled-up and pre-defined problems for points in a few minutes at a time is progress, but it's not. Work on something meaningful that doesn't leave you with an empty feeling.


I've been at it intensively for a couple months and my mind simply refuses to cooperate. If anything, after having done 400+ problems I seem to be worse at them than when I started.

Yup -- brain fog, paralysis and negative performance are the sure-fire signs of burnout (as least as pertains to your capacity for grinding LC). Excellent preparation for the daily grind of actually working for companies that rely on these tests.

Leetcode isn't about fun and challenging things, it's about thinking in one particular way, spitting out solutions using the same exact data structures and jumping through hoops on command without philosophizing or creating anything that can be reused/extended.

Exactly. And these are apparently precisely the "skills" these companies are "desperately" seeking to find among the engineers they invite for an on-site interview.

And don't forget the strong "culture fit" signal indicated by the sheer willingness to grind, grind, grind.

You memorize, regurgitate and participate in the agile masquerade. Creativity is shunned. Tried architectures/patterns are what is expected.

That's ticket. This is exactly the mindset these companies are after. That's why they swear up and down on the efficacy of these tests.

On the bright side: at least you've been freed of any illusions, by this point, about the intrinsic value of your advanced hard science degree.


This leetcode (and similar) nonsense is really ruining our industry.

I've been delivering commercial products (that's the goal, no?) for over twenty years, regularly get high praise and top ranks in reviews, get promoted often including to "distinguished" and "chief" levels (always as a technical IC, not in management).

Yet.. no way I'd ever pass any of these leetcode style memorization interviews. I guess companies think that proves I can't develop? Funny. But sad. Our industry should not be like this.

Personally I feel lucky that this leetcode interview disease started after I was fairly senior already, so I'm getting hired based on track record and connections who love to hire me to deliver products. Hopefully, fingers crossed, that'll carry me to retirement.

But if I was in my 20s or early 30s, I'd be looking to leave tech entirely and go into something else where experience is actually appreciated and valued. None of my high school friends who went into medicine, law, finance, etc have this type of problem in their industries.


> But if I was in my 20s or early 30s, I'd be looking to leave tech entirely and go into something else where experience is actually appreciated and valued.

I'm in my 20s and think about this a lot although I already moved to management (with a lot of software development, still) as well.

There's a great article [1] analyzing this problem (quotes from the article: "Professionals with higher cognitive ability drop out of STEM careers earlier and faster", "High-ability workers are faster learners, in all jobs. However, the relative return to ability is higher in careers that change less, because learning gains accumulate").

Knowledge depreciates a lot faster in software development than many other fields. That's why I really think about going into finance or sales (still fast-paced), but attending expensive top business schools and starting as an analyst with a low salary again is pretty rough after already building my current skillset. Currently feel a bit stuck with my career options right now. Money's still good and the work is fun, but working in a field that is set up to be a grinding mill as an IC is not an entertaining thought. High-tech projects will still be fun, I guess, but still definitely something to consider. Specializing early on may mitigate this.

[1]: https://whoisnnamdi.com/never-enough-developers/


Good assessment on the need to shift domain to ensure long-term stability. However, can you help me understand why you shortlisted finance and sales?


For sales: After attaining product-market fit and everything becoming more stable, it’s all about sales. Software development in the growth stage turns into an endless grind of features and bug fixes and is regularly seen as simply a cost. Sales is the mechanism that allows the business to get new customers, so this is something which has a higher impact in the growth stage.

For finance: Managing finance and deals is one of the most important aspects in any business. You can make the same money compared to tech without a ceiling and I’m personally interested in economics and financial topics.

Both have a quantifiable aspect (deal/fund size, new revenue/customers) that makes it easier to measure your impact on the business. This means that it’s easier to get a fair compensation - although bad performance will get noticed easily, too. And the knowledge in these areas compound, especially in sales.

On a personal note, I’m interested in psychology and economics and can build connections with others quickly, so these two fit quite well and I'm convinced that sales and finance are important ingredients for any type of work (philanthropic included).

Best of all worlds would be to build a MVP using software development skills until product-market fit is reached, then being able to grow customers using sales skills and then supporting further growth with external capital and managing an exit using finance skills. - In reality, these are all separate roles, but I'd like to be able to work in these other two areas, too.


I've been delivering commercial products (that's the goal, no?)

No.

Once a company grows to a sufficient size the goal stops being delivering products and starts being not ^&*£ing up the product that generates a lot of money. The aim is to hire people who won't get things wrong, either by making errors or by introducing new unproven ideas.


Just to think that people who do good in leetcode alike tasks will not get things wrong is funny to say the least.

When I was young I also was pretty good at these interviews and loved doing coding contests and such for fun. However when I joined a big company I learned what really is hard about software "engineering".

It's dealing with legacy code, finding and fixing bugs in highly distributed systems, understanding tickets from customers, managing integration of different components, balancing tests to be enough but not to be too much.

In general the hard tasks are very rarely one specific well determined problem such as finding a node in a tree in the most performant way.


> It's dealing with legacy code, finding and fixing bugs in highly distributed systems, understanding tickets from customers, managing integration of different components, balancing tests to be enough but not to be too much.

Right, if you can't do any of those and can only do leetcode you will get hired as a junior. Do you think that juniors need those things? No, of course not, they need to learn that on the job. So juniors gets leetcode. Now, since all juniors can do leetcode, why shouldn't we require seniors to also know it? Otherwise we would hire seniors who are worse than the seniors we grow ourselves. You can say that seems like an arbitrary requirement, but it makes sense, and there is no lack of senior engineers wanting to get hired at FAANG. And getting X years of experience isn't an accomplishment, even the dumbest software engineer will get there after X years.


You didn't understand my point. It is that leetcode does not help at all (for 99% of jobs) because you are not faced with these problems.. you can of course claim that the juniors which excel in leetcode questions will be good at these other things I mentioned but I don't think there is much proof for that.

Of course you will gain experience anyways over time. But all your leetcode skills will fade into meaningless very fast when you see what the actual problems are.


I can do those leetcode bits. They just take time and energy. They can be fun in their own way, but I grew bored of them quickly. But all of the things you listed and leetcode have one glaring difference, collaboration. leetcode is a very solitary experience. You are basically picking at a puzzle by yourself and 'grind it out'. Yet all the other things you listed involve making everyone around you understand those bits. That is almost an entirely different skillset. Hell yesterday I sat back and just listened in a meeting to 3 different people state the issues they were having. I was able to help each one. Because 'been there done that', and another skill I picked up over the years listening to what everyone is saying. Not one bit of that was leetcode. But organizational and the same errors many devs stub their toes on. "oh go talk to so and so about that", "which error are you seeing in the log? oh that means blah blah blah, go talk to so and so and have them fix the wizzy wuttsy". Most issues in most organizations is either money, time, or knowing who to talk to. Big O, hash tables, CS style issues, are how you build the thing to sell. But day to day the business is run by people, time and money.

I have been meaning to go back and grind some of those problems out again. Just to refresh my memory on them. But notice I have to 'refresh my memory'? These problems usually do not come up. You are usually clicking some if conditions together and a few for loops. Nothing fancy. The interesting bits are figuring out someone elses framework using docs written in an afterthought and what 3 other methods do I need to call to fill out param 4 of this method just so I can get this thing to do what I want.


This line of reasoning makes no sense at all.

Imagine a math professor would be required to be as fast in answering questions regarding times tables as a child in third class. I bet you wouldn't be able to hire almost any math professors any more because almost all of them would lack this skill!

Nobody would be of course so stupid to judge a math professor by asking them questions about the times table.

Well, but one, and only one, industry is bonkers enough to do exactly this.


I'd be pretty damned suspicious of someone claiming to be a maths professor who couldn't tell me what seven eights are.


"Deliver commercial products" includes the part of continuing to deliver those products over many years and many releases, without any regressions. It's part of the job.


OK, but it's a different set of skills. Leetcode challenges optimize for finding devs that believe there's One True Way to do things, and that creatively deviating or using a mathematically non-optimal solution for reasons outside of the code itself is Bad and Wrong. If you want to continue delivering a successful product without breaking things those are good things to look for.


If you don't want to break things you simply don't alter the state of being. If you want a successful product over time it requires innovation. These goals are at odds with each other.


We’re generally talking about large complex distributed systems with tons of throughput.

As LC itself demonstrates, there typically are multiple ways to solve a problem. Most engineers will do the brute force approach and stop there because it does in fact solve the problem. And for most companies that will be enough.

The issue here is those types of solutions can be catastrophic for these larger tech companies… some algo that’s part of a tiny feature cab cause a massive performance regression.

When it comes to these algos, computer science dictates there is an optimal time and space complexity solution. There are also more clear and more obtuse ways to achieve what is technically an optimal solution from a performance perspective… often these can be found and discussed in the LC discussion sections. The more obtuse… ie trying to get to a minimal LOC, might be fun from a competitive programming perspective, but terrible for production code that needs to be maintained by coworkers.

So there is a craftsmanship aspect to it that goes above and beyond these algos, but ultimately there are optimal time and space complexity approaches that need to be adhered to.

Now no one is perfect. You’re not always going to come to an optimally performing solution. But if you’re good enough at this stuff, and your coworkers are good enough, it’s going to be rare that a PR enters the system that causes some notable bottleneck. And when it does, you should have the mental toolkit to quickly determine what happened.

Making a call to arms avoid this stuff as it stifles creativity is sorta like the folks who say learning music theory can harm someone’s ability to compose music. If you’re a pop songwriter, perhaps. But what if you need to compose a symphony? You’re just not going to luck into it with a basic understanding of music theory and advanced composition.

It’s just one kind of mental toolkit, and somewhat orthogonal to knowing the apis and design patterns of some framework you’re using to build a thins, the idioms of a language, etc.


But what if you need to compose a symphony?

Then the software industry isn't for you.

I'm definitely not saying it doesn't require dedication and brainpower and (in the right places) formal methods. But the overall creative process, and most especially the end product (and the aesthetics) of what we produce are about as far from a musical symphony ... as anything you could think of.

There's a good Steve Jobs quote about this, which I couldn't easily find, but which completely nails this distinction. Something along the lines of: "No - we're not here to build something that that people will look at in a museum hundreds of years for now. Very little of what we do will last for more than 10 years or so. It's about meeting people's needs in the here and now."

(Or to that that effect; I am horribly mangling the original).


That's not the point I'm making. Symphony as in complexity of the overall problem and synchronicity of so many moving parts (ie. so many instruments, multiple melody lines working w/ a far more advanced ruleset).

It's a very different thing to bust out a bunch of features for a consumer product w/ relatively minor concerns relating to load/perf and something that operates at bleeding edge scale and complexity.


OT: > learning music theory can harm someone’s ability to compose music. If you’re a pop songwriter, perhaps

This is a funny take on it as pop music is 99.9% just some basic music theory put in the shaker and than pressing the random shuffle button. The rest is mostly just dull and boring work.

That's the reason why after people once figured out how to actually do it are able to produce constantly hits for decades thereafter.


Let me amend that and say advanced music theory and composition. There is a definite thought out there that knowing too much impedes creativity.


As pop music is 99.9% just some basic music theory put in the shaker and than pressing the random shuffle button.

No it's not. No more than writing a successful novel is a matter pressing the random shuffle button on all the distribution of plotlines and clichés you've seen before.


They're the same skill. The difference becomes implementation. When delivering consistently what you're also doing is critically examining when or if the trade off value exists.

Sometimes the best answer is the one that maintains an API that was introduced in a beta that one customer is using. Sometimes the best answer involves breaking a 15 year old API that the entire country's electrical grid requires. But in both cases we're always looking for a single answer, a One Ring to Rule them All. The end-point or approach-point trade off considerations are IMHO, the real issue.


At a big company it's all about politics and optics. It doesn't matter what you actually accomplish, only what the people in power think of you and think you accomplished.


Which is part of the reason why the LC process exists -- to prop up the illusion that there's some kind of objective skill measurement happening.

And thereby distract us from the very central fact you have articulated.


> The aim is to hire people who won't get things wrong

The problem is that this almost inevitably leads to a decline of the company.


No.

I'd say it's more like a "Yes and no." But it's definitely not a binary. Your "No" characterization is partially valid. But only partially.

And what's a great what to introduce mistakes and fuck up an existing product or team? By being overly confident about one's binary "No" answers.


You'd want robots at that point. Or guillable people partaking and circle jerking in their own careerist cesspools. Better hope they don't get put in a leading/exploratory positions as the company dies a slow 30 year death.


>No.

Oh look...a googler ;)


You nailed it, friend.


I've looked at the other options, medicine, law, finance, your avg swe the best lifestyle, stress+time+creativiry to pay ratio, and flexibility around work.


> I've been delivering commercial products (that's the goal, no?) for over twenty years, regularly get high praise and top ranks in reviews, get promoted often including to "distinguished" and "chief" levels (always as a technical IC, not in management).

So… the industry is apparently working fine for you, right?

> But if I was in my 20s or early 30s, I'd be looking to leave tech entirely and go into something else where experience is actually appreciated and valued.

Yeah, sure. Not for everyone. It’s unfortunate.


You are dead on. I am burnt out from my previous position and jumping through hoops for people who don't know what they are doing.

The science degree was useful for when I did advanced math, before the finance industry figured it would just abandon complex math in favor of statistical learning.


There are definitely places that value non-formulaic advanced math. I spent most of the last 20 years (before retiring) doing signal processing, and some of it was very research oriented (no standard answers).

Don't get me wrong, I burned out for other reasons, but if you're looking for a job writing math oriented software, they are out there. Maybe consider finding a new area. Maybe take a break first though :-)


There are jobs that are not like this.

I’m very happy with my current employer. They’re hiring. Want an intro?


Sure, thanks, I'd appreciate it, or at least it would be interesting to see what is being done in that area.


Can you give me your email address (or Matrix, if you have it)? I’ll shoot you a message and we can have a quick chat about it. Plus, it seems like you could use a bit of good conversation :)


Who cares what companies want or trying to chase some huge payday. It’s all very boring.

What we do is a craft. Those things on lc are the foundations of our craft. I want to know everything about my craft, and a lifelong student of it, so I like sites like lc.

I’ll take it over trying read page after page of some big comp sci book.


I hate it when someone calls it a craft. First off programming is one of the easiest engineering disciplines out there. That's why it's so easy to learn without a degree. It's like calling plumbing, "the art of plumbing." Sure it's a "craft" but don't be so full of yourself.

Also lifelong student? Have you ever felt that everything you learn is just the industry moving in circles?


Been doing this for 30+ years. "Craft" is an ok way to put it. It definitely isn't the "easiest" engineering disciplines - all engineering is difficult otherwise we wouldn't call it engineering. If you think it is easy, you haven't done anything worthwhile, sorry.

To bad engineers, I can see how it looks easy and that it is "moving in circles". It is still a relatively new discipline, and as such, still finding a lot of the process, tools, and techniques that other disciplines have developed. Plus Moore's Law and its ilk change things constantly.


>If you think it is easy, you haven't done anything worthwhile, sorry.

LOL this is an insult. Let me put it this way, you're right but I can bet you haven't done anything worthwhile either. Anything you've built as a software engineer, I can 100% build as well. There is nothing you can do that I can't as a pure software engineer. In fact likely everyone on this thread can build anything you've built and likely do better as well.

But let me be clear. If you programmed CAD software that can simulate an entire boeing 747 flying through the air... that is a feat that not many software engineers can do. But this doesn't count because it's combining two engineering disciplines (even a PRB renderer doesn't count.

Something like an OS would be an example of a pure software engineering approach.

Also I never said software is easy. I said it's the "easiest." Big difference.

IN ALL of engineering it's highly unlikely for all engineering disciplines to be equally hard. highly highly unlikely. All engineering disciplines must overall stand at some general point in the challenge spectrum. You could say the answer is too complicated to answer as there are jobs in say chemical engineering that are much harder than certain jobs in mechanical engineering and vice versa but regardless a GENERALITY of hardness exists.

What engineering discipline in your mind is than the easiest if not software engineering? Tell me. What other engineering discipline to practitioners don't require any schooling are hired without a degrees and you can easily form a start up around with less effort? Why don't we see a bunch of spaceX startups but see a ton of startups building some stupid dashboard for a niche?

I'll give you a hint. Because when you compare rocket science versus computer science, one of these fields is GENERALLY easier.

> I can see how it looks easy and that it is "moving in circles". It is still a relatively new discipline, and as such, still finding a lot of the process, tools, and techniques that other disciplines have developed. Plus Moore's Law and its ilk change things constantly.

How it looks? I've been in this industry for years. I can assure you it's not a "look" thing. It's a TRUE thing. The industry does move in circles.

There's no mathematical theory on how to organize code so we make shit up and call them "patterns" but there's ultimately no actual proof that one pattern is better than another and we're not 100% clear about the tradeoffs diving in. That's why the industry moves in circles. It oscillates between two solutions and it can't figure out which is better.

For what use case is a monolith better or a microservice? What software design pattern is actually better for what use case? Can you plug it into an formal equation and optimize the best design pattern to use for a certain case? You can't... because no theory exists.

But no theory needs to exist. You can hack a half assed solution and that's really all that's needed. Even if you don't "hack" a solution together nobody can really prove whether your "designed" solution is better. A stupid engineer can design something and think he's a genius but without theory nobody can prove whether his design is the best one possible.

And that is why software is easy. Anything goes. It's like building 1/32 scale model of the eiffel tower out of toothpicks. Is there a theory behind it? No. Is it easy to do? No. Can anybody do it? Given enough time, Yes.


> But no theory needs to exist. You can hack a half assed solution and that's really all that's needed

I don't understand your reasoning. You say that it's possible to "hack a half assed solution" that somehow works and from that you conclude that software is easy (or the easiest, doesn't matter)?

Aren't you contracting yourself? If software is easy why do you produce a half-assed solution? If it's so easy why isn't your solution of high quality like the 747? Maybe it's not so easy to write cheap, bug free, portable, maintainable, compatible, little-resource-consuming, high-performing software?

I can also build a half-assed airplane. It will crash often, not do what I wanted, and I will use a lot of off-the-shelf components (engine,...), just like modern software... That must mean building airplanes is easy, right?

Edit: It would be more correct to say it like this: Creating software is hard and poorly understood at the moment. Even worse, people writing software are not trained well. But since the expectations of our customers are low (compared to the expectations we have to, for example, an airplane), the market tolerates this.

Edit 2: By the way, I agree with most of what you have written about the industry moving in circles, half-assed solutions, using patterns and frameworks without any deeper understanding. But that's actually proving that software engineering IS hard. (or maybe it's easy but nobody cares)


>Aren't you contracting yourself? If software is easy why do you produce a half-assed solution?

That's why it's easy. Finding a formal theory for software organization is hard so it hasn't been done yet. We make do with design patterns and many of those patterns are outright mistakes.

As it stands without "Computer scientists" establishing a formal theory on this... Software engineering is a shot in the dark and therefore easy.

>I can also build a half-assed airplane. It will crash often, not do what I wanted,

An airplane can only crash once. And when it crashes, people die. That's why no airplane is ever half-assed. Building an airplane is hard because of these requirements. Building software is easy because the requirements ALLOW for it to be half assed. Does my OS crash once a day? Still somewhat useable... Does my plane crash once a day? Holy shit.

>Edit: It would be more correct to say it like this: Creating software is hard and poorly understood at the moment. Even worse, people writing software are not trained well. But since the expectations of our customers are low (compared to the expectations we have to, for example, an airplane), the market tolerates this.

Hence why Software engineering is one of the easiest engineering disciplines out there.

>Edit 2: By the way, I agree with most of what you have written about the industry moving in circles, half-assed solutions, using patterns and frameworks without any deeper understanding. But that's actually proving that software engineering IS hard. (or maybe it's easy but nobody cares)

I would argue that this is more, computer science is hard rather than software engineering. The development of new techniques and greater understanding is the domain of science and academia. Engineering is about solving existing problems with existing techniques. Software engineering as it stands is easy.


What about safety critical software? For example software running inside airplanes, rockets, etc. Is that also easy, or it doesn’t count because it’s cross discipline? Although I would guess that many of those developers are indeed software engineers and not aerospace engineers by training.


>What about safety critical software? For example software running inside airplanes, rockets, etc.

There's two ways of handling software that's safety critical. For software that needs an extreme level of safety... formal methods are employed to prove correctness and that software is bug free. For this part of computer science the foundational theory is well established. This part is really really hard which is why 99% of software engineers don't even know what I mean when I say the word "formal methods." It's so different from traditional software that it's never ever referred to when people use the term "software engineering." We have a rudimentary form of it in the form of type checking in our programming languages.

But there's another part of it as well involving empirical testing. This is popular in the industry and engineers use the term unit testing or regression testing to refer to it. It's a shot in the dark. Basically taking a couple test samples out of an huge sample space of possible tests and saying if those samples work then likely the whole thing works. IF you want to prove your program correct using this method you would have to run every single possible test that exists on your program. It's untenable so we informally rely on a statistical phenomenon of taking a sample of tests out of a huge sample space.

This is the most common way of creating safety critical software that everyone uses because it's easy. Don't mix tediousness with easy. Using this methodology is very tedious, but I would argue quite easy.

Also redundancy and fail-safes in logic are used throughout the system for safety critical software. This again is easy to implement but tedious.

>Although I would guess that many of those developers are indeed software engineers and not aerospace engineers by training.

Yeah most of the mathematics in this case is modeled by system engineers or other engineers that are more specialized than the math is handed down to the software guys who only need to understand the equations but they don't need to understand how to derive those equations.

During testing the software engineers and hardware engineers would have to work together to make sure the software operates the hardware correctly. If the hardware is simple or well established and accessible often the software engineer can do the testing alone.

Sometimes the engineer of the physical system itself just programs it himself. Alot of non-software engineers are like this because software engineering tends to be easy so they can just learn how to program.


I agree that formal methods probably isn’t as well known as it could/should be.

> Also redundancy and fail-safes in logic are used throughout the system for safety critical software. This again is easy to implement but tedious.

I wouldn’t call implementing redundancy and fail safety for a fairly complex system easy though. Tedious, yes. And tedious but easy probably could describe lots of other engineering work as well, not only software.

> Sometimes the engineer of the physical system itself just programs it himself. Alot of non-software engineers are like this because software engineering tends to be easy so they can just learn how to program.

They might believe that it’s easy to write some software that in some way solves the problem but in my experience they don’t always engineer good software, and don’t always realise that their small part of the program has to work together with a huge amount of other software. Not that all software engineers do this either..


>I wouldn’t call implementing redundancy and fail safety for a fairly complex system easy though.

What's the cutoff for IQ then to implement a redundancy. Is there really a mediocre software engineer who can't do it. My argument is with a lot of effort any software engineer can do it. And if anyone can do it.. it's easy.

>They might believe that it’s easy to write some software that in some way solves the problem but in my experience they don’t always engineer good software, and don’t always realise that their small part of the program has to work together with a huge amount of other software. Not that all software engineers do this either..

As I've stated before. There's no logical theory behind program organization. How you integrate software together is mostly gut level arbitrary decisions and many times those decisions come out wrong and people make workarounds to fix things.

It all usually ends up working in the end. It may be ugly but it works and then everyone rewrites and the cycle begins anew.

Nobody in this area of software truly knows what they are doing. Hence why it's easy.

Let me be clear about what I mean by easy. Easy means anyone can do it. If a lot of hardwork and problem solving effort is involved... it doesn't matter and it's still easy because anyone can do it.


What you wrote confirms what I thought, sorry. You seem incredibly bitter, and I'm also sorry that you feel that way. If software isn't for you, it isn't for you. I come from an era when I was considered a weird nerd because I understood and liked "programming". The idea that everyone should like it is bizarre and foreign to me.

There is worthwhile software, and I have written some. But worth it is in the eye of the creator, and so I maybe I find worth where you don't.

What is the "easiest" discipline is a nonsensical question to me.


>If software isn't for you, it isn't for you.

See this is a straight up insult. How do you know software isn't for me? You only say this to be manipulative and insulting. I love software, I'm just not delusional. Software is easy.

Let me tell you the extent in which I love software, I study haskell in my freetime. I study formal methods. I study graphics programming all of which are unrelated to anything practical to my current career trajectory.

>There is worthwhile software, and I have written some. But worth it is in the eye of the creator, and so I maybe I find worth where you don't.

I defined it in a way where it isn't defined by the eye of the beholder. What "worthwhile" software have you written that very few people in the industry can write? I bet you all the stuff you wrote, any mediocre software engineer can write. Which illustrates my point.

>What is the "easiest" discipline is a nonsensical question to me.

Of course it's nonsensical to you. How convenient. Because answering this question would defeat your argument or display how much knowledge you lack for other forms of engineering. The answer is: "software engineering"

It's like refusing to answer the question which is harder: Calculus or algebra? Well they are two different subjects and I am a logical automaton I can't determine which is harder so I am labeling the question as nonsensical even though the entire face of the earth OBVIOUSLY knows calculus is harder.

Well guess what you're not a robot. Don't hide behind that as an excuse. Calculus is harder than algebra just like how software engineering is the easiest engineering discipline out there.

Even "worthwhile" software that you write is easy.


Calculus and algebra were easy. I know you haven't written worthwhile software (yet), since you say writing software is easy. Write something worthwhile and then come back and let me know how easy it was.

Although, to be fair, some worthwhile software is easy to write, it's just figuring out what to write is really hard ... but that's one of the reasons why the discipline is hard!


>I know you haven't written worthwhile software (yet), since you say writing software is easy.

lol. You're a genius. I've stated this multiple times. Software engineering is EASIER than other forms of engineering. This is a bit different than just being "easy" and while I've used the word "easy" you know my intent.

I am also absolutely positive all the worthwhile software you have or yet to have written, any mediocre software engineer can do. Just name all the stuff you done. Anyone can do it.

Let's look at your stuff: https://github.com/gilbitron This is you right?

Well when I think of impressive "worthwhile" software I think in terms of kernels, 3D rendering engines, a compiler that kind of thing. Those are things I would argue that actually promote your argument as less software engineers know how to program this stuff.

But looking at that site looks like you mostly do typical generic webdev stuff. Web dev is one of the easiest areas of software engineering. Also you're a vue guy and php. Vuejs is the typical choice for old school web dev guys who do php. I assure you all the stuff you built, anyone can do it. Doesn't even come close to "worthwhile."

Because anyone can do it, that is why it's easy. You can call it hard. But that's fine it just becomes a word game. Let me put it this way, ALL the software you have done may be "hard" but it's easy enough that any mediocre software engineer out of bootcamp can implement everything you wrote from scratch.

>Calculus and algebra were easy.

Nowhere near as easy as programming. The math involved with engineering goes much deeper than highschool algebra and calculus. I know you haven't done anything worthwhile in engineering besides webdev because you called it easy.


> And that is why software is easy.

> That's why it's easy.

> Software engineering is a shot in the dark and therefore easy.

> Software engineering as it stands is easy.

> Nobody in this area of software truly knows what they are doing. Hence why it's easy.

> Let me be clear about what I mean by easy. Easy means anyone can do it. If a lot of hardwork and problem solving effort is involved... it doesn't matter and it's still easy because anyone can do it.

Seems like you think it is easy.

And no, that's not me that you linked. Although I have done webdev work in my career, and only easy webdev work is easy. There is plenty that is difficult in webdev.

Also I've created a 3D renderer from scratch (a complete 3D engine, in fact, including networking), a flight simulator, an ISAR simulator, software for force feedback, and a genetic samples assembler - and that's just the stuff from before stack overflow existed.


>Seems like you think it is easy.

Let me repeat it a bunch of times so you get it: Software Engineering is Easier than other forms of engineering Software Engineering is Easier than other forms of engineering Software Engineering is Easier than other forms of engineering Software Engineering is Easier than other forms of engineering Software Engineering is Easier than other forms of engineering Software Engineering is Easier than other forms of engineering

Look you can either understand my point or play stupid games.

>Also I've created a 3D renderer from scratch (a complete 3D engine, in fact, including networking), a flight simulator, an ISAR simulator, software for force feedback, and a genetic samples assembler - and that's just the stuff from before stack overflow existed.

LOL, A 3D engine from scratch with networking impressive but arguably is doable by anyone. It also depends on whether when you created and what version API you used to interface with the graphics card. Prestack overflow likely means the engine was quite trivial.

But your other stuff only proves my point. Most of your projects are impressive ONLY because they combine other aspects of engineering together. Your stuff intersects with kinematics, aeronautics, biology, embedded hardware sensors, electromagnetic theory. This stuff is hard, the software by itself is easier.

>Although I have done webdev work in my career, and only easy webdev work is easy. There is plenty that is difficult in webdev.

I've been a webdev for a good chunk of my career. I've also done work similar to what you've done in your examples. You skim over general truths shooting for only the technicalities at your convenience.

Webdev work is generally the easiest form of software development and one major reason for it is due to lack of intersection with other aspects of engineering. WebDev also currently happens to be the sector of software with the most jobs and it contributes to the fact that software engineering is one of the easiest disciplines out there.


If this was the case, then why are most applications full of bugs, including those written by trillion dollar corporations? To me, coding is a lot like physical construction - anyone who can swing a hammer can build a treehouse, but try to scale that to a skyscraper and it will go badly. At that point you need careful planning and lots of specialized knowledge to do it proper.


"If this was the case, then why are most applications full of bugs, including those written by trillion dollar corporations?"

No-one ever seriously asked me how to make a program bug free. They also didn't ask me to use formal methods or prove any properties of the system I'm asked to implement. Hell, I can tell that I want to spend time developing tests and they say no, nah, we don't want that. Everywhere I've been it's been more important to deliver stuff quick and cheap than it is to make it perfect. Maybe places where extreme focus on quality do exist, and you only hear about them when the extremely unlikely catastrophic failure happens. But that's not the norm.

Analogies to real world rarely fit but I think most software is like most construction: houses and flats and small commercial buildings where you can and regularly do get away with shoddy stuff and blemishes. The usual thing complaints are about are schedule and budget overruns, and then when everything is done, all the faults and rushed parts they find... Guess what, they like cheap and fast in construction too. In every place I've lived, I could point out many many little snafus from walls that aren't quite straight, misdimensioned boards and panels and other things that just don't quite fit, design issues such as doors obstructing important paths or not having room to fully open, etcetra.

And you get away with it because your house is not going to fall apart because of a missing nail. Likewise for most software. Just another bug? Fix it and move on. Or maybe even leave it in if it's not catastrophic and there's more important things to do. The bar for quality is generally pretty low.


Exactly. Try open source development on a boeing 747 or even agile style development. @svantana Would you step onto a plane that was developed this way? The bar is low as hell.


The things you describe, managing complexity, is hard because there's no science around it. There's no optimization method for calculating the best way to organize code. It's not even formally defined what "organization" is.

As a result everyone just makes up anecdotal "patterns" without proof that those patterns satisfy any quantitative "efficiency" criteria. Again this "efficiency" criteria doesn't really exist, we have some numerical metrics for measuring certain things but we can't really say definitively which is more organized the windows code base or the linux code base.

So in terms of these kinds of things. Nobody really knows who does what better. Does hiring people who can solve LC type problems result in more "organized" code? How can we know when we don't even have the word "organized" defined? The existence of this problem in CS doesn't make CS harder because everybody is basically ignoring this problem and just picking arbitrary solutions aka "patterns" to solve things.

Coding is like physical construction, unbounded by the rules of physics and therefore MUCH MUCH easier then engineering a boeing 747. Try learning building a 747 from a bootcamp. You can't. Coding bootcamps exist because it's freakishly easy to learn programming while engineering a 747 is freakishly hard, hence the lack of bootcamps for building airplanes.

It's like making legos to fulfill your goal. In the end the thing we build with these legos likely isn't the most theoretically efficient thing but it works and we didn't need super high intelligence to build it and we don't need someone smart either.

The thing with programming is this. It makes you feel smart. The reality is, your not.


> Coding is like physical construction, unbounded by the rules of physics and therefore MUCH MUCH easier then engineering a boeing 747.

No, this is exactly backwards: engineering software is much much harder than engineering a large airplane. The latter is bounded by laws of physics, which acts as a global coordinator between parts and teams. There are no global constraints in software engineering and therefore coordinating modules and teams are very difficult. We have to come up with a set of constraints to achieve these goals, but the search space for the correct constraints is almost infinite. Enforcing these constraints is another issue.

> Try learning building a 747 from a bootcamp. You can't. Coding bootcamps exist because it's freakishly easy to learn programming while engineering a 747 is freakishly hard, hence the lack of bootcamps for building airplanes.

This is a false equivalence. Coding bootcamps are akin to learning to assemble parts --- nothing like engineering software.


>No, this is exactly backwards: engineering software is much much harder than engineering a large airplane. The latter is bounded by laws of physics, which acts as a global coordinator between parts and teams. There are no global constraints in software engineering and therefore coordinating modules and teams are very difficult. We have to come up with a set of constraints to achieve these goals, but the search space for the correct constraints is almost infinite. Enforcing these constraints is another issue.

Your joking or highly highly misguided. Very few corporations have the ability to manufacture/designs planes. Tons of software engineering firms exist that hire coders out of bootcamp. Global constraints makes problems harder. Why? because these constraints are extremely hard to figure out. They can be modeled with differential equations but much of the constraints can only be determined through building an actual model and experimenting with them.

>This is a false equivalence. Coding bootcamps are akin to learning to assemble parts --- nothing like engineering software.

This is a true equivalence. Let me explain to you. THERE are many people who can't "engineer" software after they come out of a bootcamp. BUT there are tons of people who come out of a bootcamp and CAN engineer software. That's why people say you don't even need to go to school to learn how to program. You don't even need to go to school to learn how to "ENGINEER" it's easy.

Now for engineering a plane? I can assure you. An aerospace engineer can't EVEN engineer a 747 OUT OF UNIVERSITY; it's that hard. It's also fundamentally impossible for a plane engineering bootcamp to even exist due to the sheer challenge of it.

You have a misguided notion of how hard software engineering is. Software Engineering is Ironically the easiest "engineering" discipline out there yet one of the highest paid.


> Very few corporations have the ability to manufacture/designs planes.

So what? The reason could as well be market dynamics. By the same reasoning we could also argue that software engineering is the hardest, because it is the highest paid one.

> You have a misguided notion of how hard software engineering is.

Software engineering is not programming, just like aerospace engineering is not assembling a plane.

> An aerospace engineer can't EVEN engineer a 747 OUT OF UNIVERSITY; it's that hard.

Let me rewrite that: A software engineer can't even engineer a Google out of university; it's that hard.

I don't think this discussion is being fruitful to me. I hear personal attacks instead of counterarguments to the ideas I presented. So, I won't be replying further.


>I don't think this discussion is being fruitful to me. I hear personal attacks instead of counterarguments to the ideas I presented. So, I won't be replying further.

Apologies for you thinking this it's not my intention to personally attack you, in fact I didn't. I think you're just perceiving it this way because my language is very to the point.

Saying you're misguided when you actually are is not an insult btw. It's not your fault or some kind of attribution to your intelligence when I say so. It's simply you are misinformed. Likely you are also very young.

Either way... I myself am a more logical person so "personal attacks" don't effect me if the possibility of new knowledge being imparted to me is greater than zero. This is the logical way of perceiving things. You obviously are less logical so your reasoning can be forgiven.

>So what? The reason could as well be market dynamics. By the same reasoning we could also argue that software engineering is the hardest, because it is the highest paid one.

lol market dynamics. No the reason is because it's harder. There's only two companies in the world that can build passenger airliners. There is tons of room for more competition. The duopoly is held because very few companies can build these things to the scale and speed as boeing or airbus. China is making a huge endeavor to gain these skills and after several decades their planes are still not ready for mass production. See below for evidence:

https://www.youtube.com/watch?v=4n3R1xQzs3E

This isn't the only example. Let's go with semiconductor manufacturing. Currently there's a shortage of computer chips. The "MARKET DYNAMICS" demands for tons and tons of companies to fill the space... but guess what? China and the US don't have the knowledge or the know how to fill the gap. TSMC and ASML two companies from Asia and Europe respectfully are just a few companies out of a handful that can do build chips at the 5nm process. Intel is still behind.

Meanwhile no company on the face of the earth has a monopoly on "software engineering." Why? because it's easy. Anybody can do it.

Take a look at this: https://en.wikipedia.org/wiki/Software_engineering#Tasks_in_...

There's zero science, axiomatic proofs or empirical evidence that is part of the definition. It's all just "planning" guidelines masquerading as some kind of mathematical formalism. It's not. It's just a made up series of steps for creating software. I can easily make the same set of formal rules for company bylaws or planning some event.

>Software engineering is not programming, just like aerospace engineering is not assembling a plane.

Software engineering? You mean agile? lol. or simple stuff like unit testing? Even agile isn't part of any theory. and best practices like testing are easy. These are just made up formal rules that we "think" work. Let me be honest with you, if engineering practices from software were applied to other forms of engineering you would be laughed at. Also people would begin dying if agile was used to hack on features onto an airplane. See the boeing 737.

>Let me rewrite that: A software engineer can't even engineer a Google out of university; it's that hard.

You realize google doesn't care what university you went to or even if you went?

https://analyticsindiamag.com/why-google-believes-you-dont-n...

Google is built and maintained by many people who never went to university. Additionally do you know about the founder of duckduckgo another company centered around a search engine? You know what "engineering" knowledge he used to create duckduckgo? None. He got a physics degree from MIT. Learned programming by himself. Likely didn't read a single book on "software engineering"


With you for the most part, but can’t get behind your analogy.

> Try learning building a 747 from a bootcamp. You can't.

Yeah, try doing that with an engineering degree. You can’t.

Try grabbing a random Boeing engineer and get them to build a 747. They can’t. No one can.

Okay, I should be more charitable. You mean can’t contribute to a portion of the 747 project? Yeah, college isn’t necessarily going to help you much either, and you might be surprised what a smart person off the street can do… there’s a really good chance your boss just has a bunch of spreadsheets for all her maths. Yeah in the grand scheme of things you’ll have to learn how to do that too, but it may not be the barrier it seems.

I’m a SW Eng, but did and entry level EE gig, and basing my experience on that. College did not prepare me at all. Engineers routinely enter industry without knowing what a relay is (and we used ladder logc!). Btw, we had self taught non-college educated “engineers”… they'd usually be talented operators that knew the machine like the back of their hands. So that’s basically an ME without a degree.

I did a stint on an F-16 project after switching to computer engineering, and it was the same shit. Almost everything was learned on the spot from the veterans or google for general stuff.

So yes, I could have worked on F-16 off the street, as well as done EE work and it really seemed like my ME friends were grinding out the same BS.

Where are all these super special engineering people you so admire? Some of them do get very specialized education, but we were talking BS Engs.

P.S. I do agree about the accessibility of programming. There actually are many topics that are hard to self learn, for example comp arch would be very challenging without a good professor. There’s many others, that’s just what sticks out as “thank God I went to uni so I could learn X”


> With you for the most part, but can’t get behind your analogy.

I think the analogy works. No single engineer whether out of university or not can build a 747.

However a single person built a search engine. Duckduckgo. The person didn't even have a degree in software engineering. He had a physics degree.

I see your point. Let me put it this way. Somewhere in building the F-16 or the boeing 747 there is a form of theoretical modelling that must be done as a fundamental thing in order to build it. You need to calculate the flight dynamics and mathematically model the control system using math skills that cannot be obtained by attending a bootcamp.

Most of these skills can only be obtained through several years of practice, and a bootcamp doesn't offer that. Granted there are many parts of engineering a 747 that don't need these deep design skills so you can get away with not knowing what an ODE is while being an engineer.


But again, these complicated problems tend to be handled by well educated and experienced specialists. The reasons behind why it's not possible to do for the 747, but is with a search engine deal with complexity. There's far too many pieces for one person to handle, no matter how skilled.

For a single person to be able to do everything (not familiar with your examples, so I can't speak to the truth of it, but accepting your premise), the implementation must be sufficiently simple. You CANNOT provide an adequate solution to a slew of technical problems by yourself. There are many topics in SW Eng that CANNOT be done by a single person. Impossible. You can build a plane by hand by yourself. People do all the time. I had a boss that did. Sure he's buying parts and not eg designing the body himself, but no one ever really did.

At one point there were no planes, but over time we learned to do it better and better. At every step engineers were learning the ropes from industry veterans, then adding their own innovations. Not that different from a guy putting together a plane from parts. You could point to more complicated areas where harder technical concepts are applied, but that really just works the same. You learn x software, and y methods (again from the veterans NOT from Uni), then you add your innovations.

You think Boeing is designing all their parts, on one team? No it's mostly people cobbling together parts from suppliers and other teams, digging under the hood for some things, tweaking similar designs, managing, "business stuff", ect. That's the vast majority of engineering, even outside of software. A high percentage of people won't touch the stuff they learned in school, or just a tiny piece of it. They're getting most of their information from the professional greybeards from within their industry.

I do agree that things are a bit different in software engineering, but not by as much as you seem to think. We could probably get a lot of traditional engineering prospects off the ground with an intensive camp. This makes a lot more sense in software for a variety of reasons (IMO mainly because there's SO MUCH of this kind of work to do), but I don't agree that it's impossible in other engineering domains.

It seems like you'd have to make a comparison that is not apples to apples, eg. comparing a master/phd educated, highly-specialized ME to an entry level software engineer. A better comparison is comparing a run-of-the-mill developer to a basic ME working in a plant. Things aren't so different there. You can also compare a specialized SW Eng, eg. working on algorithms themselves to the kind of aerospace engineers your picturing. Things don't look so different then, I think.


>But again, these complicated problems tend to be handled by well educated and experienced specialists.

That's my point. In software engineering these specialists aren't required. Like actual deep mathematical knowledge isn't needed for software engineering.

>They're getting most of their information from the professional greybeards from within their industry.

Of course, I never disputed this. However there is a foundational knowledge in say something like ME which is more reliant on schooling. This foundational knowledge is required to understand the greybeard. For example kinematics and calculus. Just getting up to that point requires at a minimum.. two years of training in school.

Plenty of software engineers don't know calculus or trig. That much I can assure you because it's rarely required.


I don't dispute that deep mathematical knowledge isn't needed for software. It isn't really needed in much of engineering. Plenty of high school level students can do trig and algebra. You can get by just fine in much of the engineering world, just like software, with bare minimums. Linear algebra, trig, even basic diff eq and calculus is relatively easy to pick up independently IMO. Plenty of books, exercises, videos, ect. Having taken math at multiple universities, including community colleges, I can't tell much difference between the programs. It didn't seem like anyone else felt otherwise. Going to college to learn basic math would be a waste of money, I think.

> That's my point. In software engineering these specialists aren't required.

That's not really true. I mentioned this in my comment. There are many areas of software and computing that DO require specialists. Elite teams or team members that tackle really really hard problems that much of the field then uses. So there's really no difference there at all.

Do you work in ME? It sounds like you have a glamorized idea of what a lot of other engineers do. I can assure you that the vast majority of them are not using specialized knowledge. It doesn't really seem that different to me. I can assure 100% that it's the same in EE, because I've done that, and it was almost exactly the same. (of course, it's fair to point out the similarities between EE and CS, but again all my ME friends reported the same kind of stuff).


>It isn't really needed in much of engineering. Plenty of high school level students can do trig and algebra. You can get by just fine in much of the engineering world,

A certain amount of People can get by, but the project itself cannot get by without a minimum people on that project knowing this stuff.

For your typical software project, the entire project can get by without anyone knowing anything from algebra and beyond.

>Linear algebra, trig, even basic diff eq and calculus is relatively easy to pick up independently IMO.

Less likely for people learn this stuff outside of a school. It can be done without school but the likelihood of learning these things without school is low because learning these things is about 10x harder than programming. Developing the intuition and familiarity with this is very rarely done independently.

Additionally, these are the bare minimum required for engineering. Complex analysis, control system theory, kinimatics, physics, circuit analysis and much much more are required for systems engineering. And almost nobody starts learning this stuff as a "hobby." Basically people pick up learning django or rails as a hobby or something along those lines.

>Do you work in ME? It sounds like you have a glamorized idea of what a lot of other engineers do.

I'm EE, switched to CS after graduation and I work in embedded systems with mechanical engineers and other EEs.

Yes the day to day doesn't require solving an ODE. But the basic knowledge is required in some aspect of the project. The same is NOT true for software.

>There are many areas of software and computing that DO require specialists.

Very few. ML or Data is mostly what I see but you're average web development shop has sw guys who are roughly homogeneous in terms of skills. Any specialization is domain knowledge as in he's the guy that coded that maze so he's the guy that knows it best.

There are "specialists" but the crossover is so close that all these specialties can combine and you encounter tons and tons of people who are "full stack" engineers.


One of the best analog engineers I worked with was not an actual electrical engineer in title. He was a technician without a degree of any sort that worked on electronics projects at home for fun. He’d often be frustrated at the solution the actual electrical engineers gave him to implement and test and would fix the design. Sure, he couldn’t program an FPGA or write DSP code, but he had a solid grasp of analog design that a lot of electrical engineers lack.


Oh yeah, we had this guy in enterprise. Total hardware wiz. Did horribly in college. All that homework-doing and test-taking got in the way of all his fun projects. So he just limped across the finish line and got a gig from a professor he'd worked with closely. Pretty cool technical work, guessing the pay was so-so, but doubt he gave a fuck.


Thumbs up to that engineer. How many of those people exist in the industry though? I would argue far far far fewer than the equivalent in software engineering.


For people interested in the comparison between “real” engineers and software engineers (as in this thread), Hillel Wayne wrote an outstanding series of blog posts summarizing a bunch of interviews he did with former “real” engineers who turned software engineers. I found it extremely interesting.

https://hillelwayne.com/post/are-we-really-engineers/


This is an especially good analogy when you look at mass home builders and buyers' frequent complaints about shoddy materials and workmanship, e.g. https://old.reddit.com/r/RoundRock/comments/ae8p5c/what_is_y...


Anaolgies are deceptive. They don't prove anything but they lead you to perceive something to be more real even though no argument was made for proof.

So houses are made from shoddy workmanship. Software is also made with shoddy workmanship. How does this analogy prove that software engineering is not the easiest engineering field out there?

I would argue that it proves software engineering IS the easiest engineering field out there because you can get away with this shoddy workmanship. In fact the engineering process of software engineering are centered around shoddy workmanship and throwing in and developing features without any sort of plan. See agile for more info on this process.


I used agile before it was cool, back when it was a website and some rebel engineers frustrated at 6-month point patch cycles. In those days everything was a skyscraper, even getting MS Word installed on your company desktop. I hate what it's become and you're preaching to the choir. But some big projects do take real engineering, and coordination, and careful weighing of options before moving forward.


I've worked on these projects, they still exist but are rare. You'll find most of these projects are in high end defense or other embedded systems projects that are highly, highly connected with building hardware.

Outside of this kind of stuff, software engineering is easier than most other forms of engineering due to an accepted lower bar of quality.


How much do you know about traditional engineering? I have family and friends who work as engineers, and from what they have told me software has a far larger problem space and the software engineering process is far more rigorous.

Traditional engineers are generally doing the same-ish thing over and over, and the number of possible things they can do is severely limited in comparison to software. Safety is also not as big of a deal as cost. Any idiot engineer can create something with an insane factor of safety, it takes a good one to design something that is safe and cheap.

If you want to compare very complex/rigorous engineering projects like airplanes you should compare them to things like Google. Software and traditional engineering are both rigorous at the highest levels, though not in the same way since software is so much more flexible and has a larger problem space.


A lot. I work at the intersection of all engineering disciplines.

>I have family and friends who work as engineers, and from what they have told me software has a far larger problem space and the software engineering process is far more rigorous.

Software engineering is and everyone agrees with me, 100 times less rigorous. Only software has this culture of releasing something than issuing patches later.

As for "problem space" this is more defined by a product. The product is the problem space and programming is one solution to solve a problem. Granted programming is more versatile than other forms of engineering in terms of solving certain problems but this only lends to the fact about how much easier software is hence the desire to convert analog stuff to digital.

Flexibility is an indicator of easiness.

>Traditional engineers are generally doing the same-ish thing over and over, and the number of possible things they can do is severely limited in comparison to software. Safety is also not as big of a deal as cost. Any idiot engineer can create something with an insane factor of safety, it takes a good one to design something that is safe and cheap.

>If you want to compare very complex/rigorous engineering projects like airplanes you should compare them to things like Google.

>Traditional engineers are generally doing the same-ish thing over and over, and the number of possible things they can do is severely limited in comparison to software. Safety is also not as big of a deal as cost. Any idiot engineer can create something with an insane factor of safety, it takes a good one to design something that is safe and cheap.

I mean sure, this doesn't change the fact that software is the easiest of all engineering disciplines.

>If you want to compare very complex/rigorous engineering projects like airplanes you should compare them to things like Google. Software and traditional engineering are both rigorous at the highest levels, though not in the same way since software is so much more flexible and has a larger problem space.

Fine let's compare the rocket industry and automobile industry with software. Are either of these industries over loaded with a barrage of random ass startups or is software the only industry with this stuff?


You are trying to directly compare software with traditional engineering which doesn't really make sense. Traditional engineering has a lot of constraints which software doesn't.

> Only software has this culture of releasing something than issuing patches later

This has nothing to do with the rigour of software engineering. The process for releasing the initial software can be very rigorous, with a conscious decision to follow up with a patch or second release.

The nature of software allows this behaviour, whereas traditional engineering doesn't. The fact you can't release a day 1 patch for a building doesn't mean that the process for designing and creating a building is more rigorous.

> Flexibility is an indicator of easiness

How so? Flexibility means more ways to shoot yourself in the foot. It means you can easily implement something that works for now, and fucks you over later on. It's harder to do that with a physical construction because there are a lot of constraints. Physical construction has physics as guardrails, whereas software has unbounded complexity.

> Are either of these industries over loaded with a barrage of random ass startups or is software the only industry with this stuff?

How is this indicative of rigour? Yes, software has a lower barrier to entry. That doesn't mean that software engineering in general has less rigour.

A lot of software is written haphazardly without process, but I wouldn't classify that as software engineering because there is no engineering process there.


I'm just comparing the hardness. Software engineering is easier is my argument. The patchy nature of software makes it easier.

>How so? Flexibility means more ways to shoot yourself in the foot

True but people do so anyway. People in software repeatedly shoot themselves in the foot all the time than shrug it off. Oh it's just a bug. Hence the easiness.

>How is this indicative of rigour? Yes, software has a lower barrier to entry.

Rigour is another argument, though software definitely has less rigour. But my point is software engineering is easier. Doesn't low barrier to entry mean it's easier? It's like literally a synonym.

>A lot of software is written haphazardly without process, but I wouldn't classify that as software engineering because there is no engineering process there.

That's why it's easier. The "software process" is not really required. It's like an optional thing. Plenty of software shops prioritize speed over planning.


It sounds like your argument is that writing ANY software is easier than traditional engineering, which I would agree with but I think it's a poor comparison.

Most software shops aren't practising engineering, so to compare them to traditional engineering seems odd.


Software engineering is poorly defined. You say most shops aren't practicing engineering yet every software guy who works at these shops has the title "Software Engineer."

Let's dispense with the linguistic technicalities. Software, whether you want to attach the word engineering at the end of it or not is easier than other forms of engineering.


I agree software engineering is poorly defined, but I don't think it's just "linguistic technicalities".

There is an enormous difference in the work between shops that hack code together and those that have well defined processes.

The former is nothing close to engineering whereas the latter is very much engineering.

Also on the title thing, I think they're basically meaningless everywhere. Engineering grads will also call themselves engineers regardless of the kind of work they do.


The titles are as meaningless as the process itself. I understand what you're getting at. Everyone understands.

I'm saying these processes are pointless. They're are made up. An arbitrary set of methodologies or plans to execute certain things made up by mostly project managers.

It's like company bylaws or procedures for scheduling an event. Engineering processes are usually designed around some form of mathematical model or statistical phenomenon. This is not the case for software. Software processes aka Software engineering is just a made up set of arbitrary planning procedures.

Shit like kanban or poker planning comes to mind.


Things like Kanban were not at all what I was thinking of.

Software processes are designed with mathematical/statistical backing when needed. For example, A/B testing, anomaly detection and merge queues.

> arbitrary planning procedures

I don't think this is an accurate description. In traditional engineering the main focus is: does it work and is it cheap? In software, both of these are usually non-issues so things can vary a lot more.

For example, recently there was a blogpost by a company about not doing code reviews by default to allow them to move faster [0]. They are making a conscious effort to optimize their process for speed. Other companies (Or even teams within companies) will make different optimizations. A service that must be highly available may have 100% test coverage as a requirement, etc.

I suspect you will call this arbitrary, but I see these process decisions as conscious choices. The fact these aren't grounded in mathematics or statistics is not a big deal to me because the goals/focus are more complex than does it work and how much does it cost.

In software everything is a tradeoff rather than having an absolute answer.

[0] https://news.ycombinator.com/item?id=29792859


>For example, A/B testing, anomaly detection and merge queues.

A/B testing is arguable a product based thing. It can be called "engineering" but it's not strictly a software thing. It's associated more with UI.

I've never seen anomaly detection used with software development. Looks more like a data ML thing.

Merge Queues are just a collaborative tool. I mean you can use this on any document outside of software engineering. Say, for example, CAD drawings where a bunch of people work collaboratively.

I don't think your examples are focused enough to be strictly things that are part of "Software Engineering" in the same way agile isn't strictly "Software Engineering."

>Software processes are designed with mathematical/statistical backing when needed.

This is rarely done. Very little statistical methods make it into the dev process or are even influenced by the dev process. When it does make it in there's no common methodology either as it's usually just some data driven behavioral changes based off of some analytics. The reasoning behind why it's like this is clear. At it's core software is deterministic. Code is simply a series axioms and theorems that can be logically proven correct. Statistics is for unknown processes and is usually employed at the intersection of software and real world stuff like the failure rate of ssd drives.

A passing unit test does give more confidence that a program is correct. This is a statistical phenomenon, but hardly anyone tries to actualize it from a statistical quantitative standpoint.

>does it work and is it cheap? In software, both of these are usually non-issues so things can vary a lot more.

I disagree. These are issues and we do use methods to mitigate these things. We want our software to work and we want to build it at a certain cost. Agile and measuring velocity is a way to monitor costs and working software is verified through mostly testing.

But most of this stuff isn't engineering. It's done out of necessity. There's no mathematical modelling going on as it's hard to even quantify the costs of software or even correctness. Hence why it's all arbitrary processes made up by managers.

>I suspect you will call this arbitrary, but I see these process decisions as conscious choices. The fact these aren't grounded in mathematics or statistics is not a big deal to me because the goals/focus are more complex than does it work and how much does it cost.

All decisions made in any field even say plumbing is a conscious choice. The difference is in engineering we use science and mathematics as much as possible to optimize these choices. We don't in software. Mainly because it's hard to model it.

>In software everything is a tradeoff rather than having an absolute answer.

Everything in life is a tradeoff. It's like this in fields OUTSIDE of engineering as well. The thing with engineering is you try to optimize your choice using math and science as much as possible. In software no such optimization procedure exists.


That is not what I meant by a Merge Queue, this is: https://news.ycombinator.com/item?id=21584144.

> The thing with engineering is you try to optimize your choice using math and science as much as possible. In software no such optimization procedure exists.

It's comparatively easy to optimize something with an absolute answer. Ex: will this building fall down with x design?

It's practically impossible to optimize something like: will our software development process allow us to deliver new functionality faster and win market share?

There is far more ambiguity in software development than in other fields.

https://en.wikipedia.org/wiki/Software_engineering#Definitio...

https://en.wikipedia.org/wiki/Software_engineering#Criticism


>That is not what I meant by a Merge Queue,

I meant exactly what you're referring to. Source code isn't the only thing that can go under source control. As long as the file isn't fully binary and is in a somewhat readable human format it can be subject to version control and therefore a Merge Queue.

>It's practically impossible to optimize something like: will our software development process allow us to deliver new functionality faster and win market share?

This is my point. It's impossible in the same way optimizing a painting of still life is impossible. Therefore it's not really engineering.

>There is far more ambiguity in software development than in other fields.

Edsger Dijkstra, had it right.


I'd call plumbing a craft, same with auto mechanic. I admire someone who put in the years to not only fix the thing, but knows ridiculous details of certain kinds of bolts or whatever. That's having a hobbyists perspective, and the enjoyment of something just because you're fascinated by it.

Obviously, some would consider it a waste of time. 90% of their colleagues would say, "I don't get paid to know unnecessary stuff about the bolts. I get paid to screw this to that according to this diagram." Which is what commercial software work is. Different thing from being a hobbyist.


>I'd call plumbing a craft, same with auto mechanic.

The point is that the plumber himself wouldn't call himself a craftsman. He doesn't label himself as some sort of artist and prance around like an arrogant prick thinking he's better than those janitorial engineers who are complete hacks.

>Different thing from being a hobbyist.

Yeha nobody does plumbing as a hobby. I'll give you that. I think you're more referring to "Computer science" here which is a bit different.


In the industry computer science knowledge is useful on average once a month when you decide between a hash map or a vector. The hard part is figuring out what the customer actually wants.


> once a month

This is incredibly dependant on your company, team and role. I’ve been knee deep in data structures and algorithms for the last year. When I was at (FAANG) years ago I worked with people who did this stuff full time. You’ll find roles which use these skills in AI, AAA game dev, finance, operating systems and so on.

But probably 95% of commercial work is styling and wiring buttons. Even at big tech companies most of the work is plumbing. The skills you learn on leetcode are completely irrelevant in those roles.


Depends on where you are in finance. I work for a financial company an nobody I worked with was dedicated to algorithms. They seem to rather take the finance PhDs and teach them how to code rather than use developers for that stuff. The rest of us are just handling boring plumbing.


But probably 95% of commercial work is styling and wiring buttons.

We're in agreement that algorithms as such probably make up about 5 percent of industry work.

But the other 95 percent -- and I am talking engineering work, not product desgn -- is definitely not simply "styling and wiring buttons". And this is a very myopic view to have.


Yeah I don't know where y'all work, but data structures, algorithms, and design patterns are for breakfast lunch and dinner practically every day at my work. It wasn't so when I just started but as soon as I got out of a jr role all the problems has huge data sizes, things had do get done fast and all that so there's no escaping the fundamentals =\.


It sounds like that website is a shallow representation of this craft. A big part is working with stakeholders in a project, understanding needs and communicating what is possible. Only a portion of the craft is about writing algorithms.


Most of the interesting stuff is in papers and books, not on leetcode …


"What we do is a craft."

Nobody except you cares about your craft though.

They care if you can accomplish the things they need accomplished.

If your craft is 'building quality decks' - and they want a 'quality deck' - then great.

But if your craft is 'building byzantine window structures with 4 plane glass imported from Italy', well then, it's going to be hard to work on a house if that's all you care about.

Software Development is a skilled trade, it's more like Carpentry than it is academic, it just has some elements that can be very academic.


Programming definitely is a craft, but coding exercises are not the basis of it. The basis is the theory in the big comp sci books you are wary of.

I recommend Introduction to Algorithms [1]. Books like that can be really dry and hard to read, and they usually are, but they contain fundamental knowledge about computation that is the only way to solve some hard problems (and there are many hard problems that remain open). Leetcode problems, if they're any good, will simply be exercises based on the concepts in such books. But you won't understand the concepts just by solving the exercises.

My experience is that I spent seven or eight years coding in Prolog (that's how I roll, OK? Don't judge!) and while I had become skilled at it, I didn't really understand how it worked until I started my PhD at which point I really had to sit my bum down and read a whole load of stuff I didn't even know existed.

You'll probably say "what do I care? I'm not in academia". Yes, but you think of programming as a craft, right? And a crafts-person is happy to constantly improve his or her craft. Well, a PhD is one way to do that, sticking with industry for many years, if you can find the right positions, is another. But one way or another you'll eventually find yourself at a point where just solving coding exercises doesn't give you anything new. That's when you turn to the books. If you don't, then you should be concerned: it means you're not really advancing, not getting better in your craft.

I'd have a lot more to say about programming as a craft. Instead, let me point to Peter Norvig's timeless essay:

Teach Yourself Programming in Ten Years

https://www.norvig.com/21-days.html

And to this book by George F. Luger who introduced me to the concept of the "Master programmer":

AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java

https://www.cs.fsu.edu/~cap5605/Luger_Supplementary_Text.pdf

I'm also linking those for anyone else interested in that kind of thing. Happy reading.

___________

[1] It's online here:

https://edutechlearners.com/download/Introduction_to_algorit...

No idea if that's a legit download or not.


What we do is a craft.

But it's an extremely narrow slice of this "craft". Right?


Where is this generation's "Moving Mount Fuji" that explains the history of leetcode puzzles and their ineffectiveness? https://m.slashdot.org/story/34239


I wonder that as well. I don't see any significant connection between Leetcode or Leetcode-style questions and anything resembling what a company theoretically should be looking for in an engineer. The only thing I can come up with is that being able to memorize or otherwise internalize so many different problems is a proxy for intelligence (general mental ability). If so, I suspect it's a fairly weak proxy.

But, is that it? In the US, at least, not a lot of employers will give a straight up test of general mental ability (IQ test), likely because they see it as potentially attracting lawsuits. This is because IQ tests show a well-documented racial disparity in scores, which has not been shown to be correlated with anything genetic. Rather, the problem is either traced back to differences in family socioeconomic status growing up, or cultural bias issues with the tests.

Everything in the previous paragraph can be verified in a few minutes of Googling, so, I'm not going to litter this comment with citations when the obvious keywords will produce the information mentioned here. But, everything else, including what's to follow this, should be considered pure speculation on my part.

Given all this context, I can only think of 2 obvious reasons companies resort to using LC or LC-style interviews:

1. As a proxy for a test of general mental ability, as previously mentioned, or

2. Cargo culting, as with the whole "How would you move Mt. Fuji?" phenomenon.

I don't personally have a great deal of insight into which it is, or, if there's a third explanation that I'm completely missing. I also don't know whether there's any research supporting or refuting the idea that LC puzzles provide a valid interview signal for software engineers. All I really know is that these type of problems exercise skills that are not what one uses on the job as a SWE, so, it seems rather illogical to use them as a main component of your hiring process.


Due to a series of coincidences I've worked at 3 companies in the hiring space in my career, and I've personally performed over 400 tech interviews. I've also spent 2+ years teaching programming. I feel like I can answer that question - though I'm sure plenty of my colleagues would disagree with my answer.

Essentially I agree with you - most of the reason is cargo culting Google.

Assessing software engineers is hard. A couple decades ago, Google (which at the time was a tech darling, and the #1 place to work) had a saying of "A players hire A players. B players hire C players". Essentially they were terrified of hiring bad people, because they figured the company would inevitably go downhill if they did. Their hiring process was essentially an expression of this idea - it was based on the philosophy of "we're all A players, but are you as clever as us?". Interviewing at google at the time involved sitting about 6 back to back whiteboard interviews with programmers. Each person would spend ~20 minutes asking you their favorite puzzles and things, and seeing how you did. Nobody can say this because it would be illegal, but it was in many ways a programming themed IQ test. Good questions were the ones which filtered candidates out. And its easy to recommend against hiring someone if they couldn't reverse a binary tree on a whiteboard in 20 minutes. (I mean, thats easy for me! They must be a C player.)

Other companies followed suit. I mean, hiring is hard. Why not just copy Google's approach? Microsoft did something similar. Facebook was full of ex-googlers, etc etc.

The problem is that being able to reverse binary trees doesn't correlate with how well you can manage a database, style a form, fix a memory leak or talk to your team. And the people who only had those useful skills are unhireable. Oops!

In my opinion, the right way to interview programmers is to make a list of skills you want your programmers to have (coding, debugging, CS knowledge, communication skills, architecture, ...) and then find ways to assess each one. For example, to assess debugging you can give your candidate some pre-prepared code with failing test cases and see how many bugs they can fix within 30 minutes or so. But that requires preparation and test calibration. Most companies struggle to convince their engineers to interview someone for 20 minutes - let alone spend a few days putting together a problem like that.

Knowledge of data structures and algorithms is useful, and it is a positive signal about a candidate. But (depending on the role) I'd weight it below communication skills, raw coding skill and debugging. Those are all much more valuable. We need to start treating them as such.


>Essentially they were terrified of hiring bad people, because they figured the company would inevitably go downhill if they did.

I heard that Google search is now performing badly in many key areas.


It is indeed, by my own subjective observation.

But that doesn't mean it's the fault of the engineers - and most likely it isn't.

Rather, the product people (who are also not dummies) basically realized that "dumber" results were more profitable, for various reasons -- most likely to do with "engagement" and prioritizing what 90 percent of the users will versus the needs of the other 10 percent.


Yet one should be very skeptical about such claims. We don't know the parameters what they are optimizing for so how can we even asses it's performance related to those?


I hate medium and hard LC questions in interviews, it's very hard for me to not get panicky, so I'm surprised i'm going to argue against what you're saying:

If you want to test raw coding ability, asking someone to implement some very basic graph or tree traversals is a pretty good way to see if they know the basics of conditionals, loops, recursions, maybe hashmaps.

If you want to see someone debug something, and you make them run their code it will inevitably fail or not compile the first time...so they'll have to debug.


> If you want to see someone debug something, and you make them run their code

I hear what you’re saying, but that doesn’t assess what I want to assess. We all have experience debugging our own code, that we just wrote. But how well can you read someone else’s code? How well can you find and fix bugs in it? It’s a different skill! And it’s vital in a team setting. Or when you’re depending on complex 3rd party packages (which is most of the time).

I want coworkers who can read the code I write and debug it when it breaks. That’s a much more useful skill than what leetcode problems train.


Funny thing is that A players can go downhill not because of their engineers, but because of their management. How many companies have we seen in tech go under because of bad engineering vs bad management?


> For example, to assess debugging you can give your candidate some pre-prepared code with failing test cases and see how many bugs they can fix within 30 minutes or so. But that requires preparation and test calibration.

The tricky thing is that no matter what test you contrive, it's more likely to say something about the developer's recent experience than about their competency in general.

For example, I'd say I have pretty good intuition for when to just read code or sprinkle printfs or fire up valgrind/gdb/asan when debugging C. Which I guess is to be expected given that I've been doing C almost exclusively for many many years. I'd do pretty bad with Haskell; the last time I really used it was around 13 years ago. The next guy might be a bit lost with gcc's error messages since the last time they used C in anger was 5+ years ago for a small project, but they'd do well if you hand them Python code that uses a well known unit test framework or whatever. I guess that's fine if you're a run of the mill crud company looking for "senior <foo-language> developer" but not if you're after general competency.

You can try hard to make the debugging be more about the system than about the implementation but it's not easy to separate the two. You can make different tests for people with different backgrounds but that only makes calibration harder.

One trick I've seen a company do is deliberately pick a very obscure language that most people have never heard of. That can eliminate some variables but not all of them (I took the test and did well but I also spent a fair amount of time studying the language to figure out if it's suitable for a purely functional solution before handing in a very boring piece of imperative code). Ultimately it wasn't much more than a fizzbuzz.

And if there's puzzling involved, I'd say there's an element of luck involved. At least that's how I perceive the subconscious mind to work when you're thinking about a problem that isn't immediately obvious or known to you beforehand. Which path does your mind set you on? Are you stupid or incompetent if it happened to pick the wrong one today and you spent 10 minutes thinking about it too hard? Are you super smart if the first thing that came to mind just happened to be the right one and you didn't doubt yourself before blurting out an answer?

If you're lucky and know the problem beforehand, you can always fake brilliance: https://news.ycombinator.com/item?id=17106291

That is to say, test calibration is hard and there are so many variables involved. It follows that there's no obvious right way to conduct interviews. And I guess it follows that companies who need people (and aren't necessarily experts at interviewing) effectively outsource the problem by conducting the same type of interviews they've seen elsewhere. Maybe that's less cargo culting and more just doing whatever seems popular and good enough?


The best solution I’ve seen to this (if you have the time, and are interviewing for a variety of roles) is to have the same code (& same bugs) in a variety of languages. And let the candidate use their own computer and their own tools to work on the problem. If you’re hiring for a python role, get the candidate to debug python code!

I’ve done hundreds of interviews like this, and it’s fascinating watching what people do. Do they read the code first? Fire up a debugger? Add print statements and binary search by hand? I had one candidate once add more unit tests, to isolate a bug more explicitly.

After hundreds of interviews I still couldn’t tell you which approach is best. But if there’s one trend I noticed it’s that more senior people (& older people) seem to do better at this assessment. Which is fascinating. And that implies it’s not simply a test of what tools the person is familiar with most recently.

As for luck, I agree this is a problem. It’s mitigated somewhat by having a bunch of easy bugs to fix instead of one hard one. But even a debugging problem like this should be one of a set of assessments you perform. If you fail 5 small assessments in a row it’s probably not luck.


It's a weak proxy for general mental ability, but it's also a signal for high conscientiousness -- someone willing to spend a couple months studying to the test is showing that they have the ability to work hard on something over some length of time.


Why not bring back the civil service exams of Imperial China, then? Surely one's willingness to undertake extended study of the classics of Chinese literature, and to master a stylized form of discourse about them is also a signal of conscientiousness, isn't it? As a "bonus," this is likely to take far longer than the few months people spend practicing Leetcode.

https://en.wikipedia.org/wiki/Imperial_examination

https://en.wikipedia.org/wiki/Eight-legged_essay


When I was in grad school for CS, I recall talking to the dean of the department who said that his preferred approach for recruiting CS students would be to have them write a five page essay on any topic of their choice. Anyone who could write a coherent essay would probably make a good researcher. Unfortunately, he was never able to put this into practice - the university administration only considered grades and GRE scores.


Does grinding for months even work? The point of this post (and others like it) is that you can spend years doing leetcode without getting better. In comparison, I score far below most of my peers on conscientiousness but I find leetcode style problems easy. I'm a terrible hire in lots of roles because most companies' problems are boring. I have a history of getting bored and quitting. But I sail through these interviews.

If conscientiousness is what companies are going for, I think they're still interviewing wrong.


I think it works to some extent. There's a limit to how much you can get out of yourself, and a lot of dumb luck involved in getting interviewers who are actually reasonable.

In my case, when I grind those dumb problems I quickly go from needing 45+ minutes to implement a working sort function with file I/o to banging it out in 5-10 minutes. I dunno if I'd ever get good enough at those problems to make it into Google unless I got lucky, but I've gotten offers from the other FAANGs over the years

The whole thing is pointless, though. If a junior engineer asked me for advice, I'd tell him to get whatever job he can and work on saving money/building a startup in his spare time.

Grinding for months to get into Google is so soul crushing, and working for any big company is just awful in the long run compared to being independent


I think leetcode is just like anything else you practice - in order to actually improve you need to practice the right way (or in the OP's case, with the right state of mind! Being burnt out is a fundamental problem which needs to be fixed first!)

I started out thinking I was pretty smart but got blasted by a fairly simple question on my first screening interview. I started looking at random leetcode questions but that didn't really work - I soon figured out that I needed to learn the concepts one at a time. I think that is the way to do it, get a list of general topics, learn about it, then practice just those questions until it clicks.


It's also a weak proxy for high conscientiousness. More often than not, it's actually signalling someone is young enough to not have other commitments, contributing to age discrimination without even meaning to. It also does in the way that older engineers are less likely to have CS degrees just because CS programs were rarer and less well-known before the 90s.

That's not sour grapes, either. I have a CS degree and worked through math and logic puzzles for fun from the time I was 6, well before I ever knew what a computer was. Interviews like this are practically made for someone like me, but even there, the signal you're getting is I'll gladly do something I like doing anyway, not that I'm going to show similar conscientiousness when it comes time to get into your daily company grind that actually has nothing to do with solving interesting algorithms puzzles.


I'd say it's a signal for a rather mediocre kind of conscientiousness -- that is, for someone willing to put in long hours to achieve a certain goal, for sure -- but for a goal they almost certainly believe to be fundamentally pointless.

And as such, is likely to cause them to develop cynical attitudes about the industry -- and about the companies requiring these tests, in particular.


I thought my ability to build a prototype in a day showed that. Maybe I should have learned every variation of FizzBuzz instead of learning how node works.


Same as any profession, the reason for the tests is to sort for compliant employees. Check out the book “Disciplined Minds” by Schmidt.

https://www.bmartin.cc/pubs/01BRrt.html


> This is because IQ tests show a well-documented racial disparity in scores, which has not been shown to be correlated with anything genetic.

That isn't true; the correlation is visible when you look at the scores of people with mixed ancestry.


Moving Mount Fuji

I see someone at microsoft was a fan of The Shamen.

https://www.youtube.com/watch?v=SpjnzxtZ6Qg


The video is unavailable.


https://www.youtube.com/watch?v=bfQ98A-6mG8 should be available for US users


I would move Mount Fuji by having it situated on an island where like three continental plates meet, and then just kick back and watch. So to speak.


Surely! If what you want is uniform, interchangeable cogwheels for the machine, you check if your candidates can act as uniform, interchangeable cogwheels for the machine.


If everyone is different, how will you decide whom to pick? or filter out. This is why there are standardized tests etc. In our industry it is leetcode, it is a grind, but it is what it is, a standardized filter.


It depends on how your shop is organised. Big corps like interchangeability in their work force, because they wouldn't even know how to allocate their employees as individuals. Smaller shops are better able to exploit specific skill profiles and may even tailor some business decisions to make the best use of their specific strengths.


If everyone is different, how will you decide whom to pick?

Remember those "thinking outside the box" skills we're supposed to have?

This is what we need to start using them on.


> Tried architectures/patterns are what is expected.

Don't forget that software engineering is often up to 100 people team sport. If every repo and every algorithm has a special snowflake unique flair put upon it, then you have to relearn everything each time you open someone else's repo... also you cannot directly hire for the work, instead you have to hire smart people who start nearly at zero to rapidly learn the nuance of each repo they work on. This is a young man's[2] game (before intelligence crystalizes and energy levels wane)

If there is a good amount of run of the mill computerscience/eng then you can hire people who can start fast(er) and they can build off assumption rather than on having a bunch of special code precariously "cached" in their working memory.

[1]: I'm speaking in generalities, yes some young people are tired/fixed mindset, yes some older people are energetic/flexible -- but afaik the psychology/science bears this difference out


I spent a year on LC to get a fang job, I actually felt it helped me improve my short-game programming skills. The problem was I then started applying for regular jobs who didn't care about LC so much and I was failing on system design, experience with frameworks etc. I spent so much time on LC I was neglecting to keep up on cool tech. So now I'm doing that. Its kinda weird being programmer for 20 years in a market where everyone is "desperate" to find programmers yet I'm struggling to get a 200k+ job. Yeah I haven't gone for regular corporate jobs yet but looks like I'll end up in that end of the pool.


Wait, why are you applying for "regular" jobs if you are decent at lc? Those jobs simply don't pay 200k+. There is only a small percentage of companies that do (maybe a pool of less than 1000?), and they mostly don't care of you have experience with xyz framework.


Ask for more money. Companies are throwing money at candidates these days. I’ve worked through 10 ish offers the past quarter and about half were 200-225k+ base comp. They all started at the 150-175k range. Non “corporate” jobs.


Leetcode is basically an IQ test in disguise (since the actual IQ tests are illegal in the US). And yes, it helps to hire people with high IQ, although you still need to evaluate their real-life knowledge and experience.


Every time I see one of the 'leetcode=IQ' test comments I wonder if the poster has any semblance of what an IQ test is.

For what it's worth IQ tests test for pattern recognition skills and learning ability, usually within a short timespan with little to no prior knowledge. A memorized pattern of answers to programming questions therefore does not constitute a IQ test. Anyone who says that is really just wanking off to how smart they think they are.


I am quite puzzled how are you not good after solving 400 problems. I thought if you can solve about about 50 problems you can clear any faang interview.


Solving problems like LeetCode is actually more fun than the average programming job. At least you get to think about algorithms and solve puzzles.

In the average programming job, most of the time is spent digging through documentation, trying to find the one method or configuration parameter you need among hundreds and hundreds of pages.


Seriously, this. LeetCode involves far more creativity than the day to day of a programming job.


In what sense do you think someone with a high score from such applications is better? In a technical sense or in a problem solving sense? I think the two are quite different things.


Leetcode style problems do test raw IQ. Here's the thing though, you need to get really creative with EACH of your problems to dodge the people who just practice for these things as even an official IQ test is game-able with practice.

If someone solves a problem that doesn't exist or isn't a permutation of an existing problem it is a sign of higher IQ.

For example. Given a grid where each element is 1 or 0. Count the amount of donuts in the grid. A donut is a cluster of 1s with a cluster of 0s within it. Donuts can exist within donuts.

Extend this problem to 3D to count the amount of hollow shells in a 3D grid.

Given a grid where only a single cluster of 1s exist. Determine if that cluster forms a 3D donut.

These problems I just created from scratch. A person who solves it in an interview, I know he is smart because I know he never looked it up.

Here's the other thing. The skills involved in solving this problem is highly unrelated to the day to day tasks of a software engineer. Additionally I believe anyone can solve these problems (except for the last one) given enough time (and you certainly are given enough time on the job). The software interview is mainly testing for IQ based on how FAST you solve this problem. Either way, software engineering itself is easy, it doesn't need high IQ.

But make no mistake. A person who solves these problems and does so both quickly and without pattern matching the problem to an existing one he/she practiced for is demonstrating higher intelligence which is what most interviewers at FAANG are basically trying (and arguably sort of failing) to test for.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: