This all came to a head yesterday when someone on Leetcode made a post about being able to solve every single Leetcode problem in a year within a year while managing a post doc degree and having almost no programming background (link at bottom of post). It made it clear that Leetcode is a game of talent not hard work. The difference between someone like her and someone like me must be noted by the programming community. The majority of people would not ever be able to accomplish that. I dedicated myself for 5 years to Leetcoding almost exclusively and still am no where near what that person has accomplished. I have put in much more work than that person and have gotten much less from it.
I believe the programming community can learn from this contrast. The culture of always trying harder and thinking success stories apply to everyone that is pervasive in programming circles is toxic. The is reality not everyone is lucky enough to be intellectually gifted to succeed and not all hard work pays off. I am proof of that and this is the type of story that needs to be shared and heard too.
I am quitting programming out of humility and recognition of my limitations. It’s ok to give up and wise to do so when you aren't good enough for something.
https://leetcode.com/discuss/general-discussion/1108530/leet...
The best coder I’ve come across in my career once told me he attempted to solve some leetcode and was stuck fairly early and gave up. I was surprised to hear that he even cared to try.
What made him a fantastic engineer was his meticulous work ethic, his track record of never having missed a deadline, him spending 40% of his time designing before he even wrote a single line of code, writing extremely human readable code, his obsession with unambiguous and simple APIs and his extensive unit testing.
He was humble, loved to crack jokes and was always fun to solve hard problems with.
None of that is captured by leetcode. This is probably my personal bias - but the only people who work hard at leetcode are people who want to prove something to the world. I’d rather work with people who like the profession and don’t feel compelled to prove anything.
What you are saying would be kind of like someone saying "I knew an athlete who could do a mile in under 4 minutes, but one time he got on a bike, fell and then never cared to try biking again. Therefore, the ability to ride a bike has nothing to do with athleticism." Which is technically true, but misleading. It misses the key idea that the main factor is the person not taking the bike seriously as if he actually decided to take the time to learn how to ride a bike, it's virtually certain he would be better at it than 90% of people because the underlying traits that make one exceptional at running would also make one good at biking.
It also sounds this person had a good temperament and personality which worked in his favor. That wouldn't matter though if he didn't have the cognitive ability to never miss deadlines and correctly design out code in his head and on paper before writing it as you say.
The bicycle analogy is interesting, it us more like getting someone on a time trial bike and checking if they can hit 25 mph. That counts for almost nothing when doing a downhill mountain bike course. Can you communicate to people clearly? Can you convey expectations? Can you write simple and easy to understand TESTS?? Leet code is part of a cottage industry for interview styles that faang employees for lack of anything better.
I did one faang interview and omg I bombed so badly. A week prior, I did another with the same company and they couldn't stop calling me asking me to stop interviewing and work for them. The hiring manager wrote a love letter of how much I'd enjoy it there. It's crao, half of the senior engineers at that company can't pass their own interviews, it's a broken system. You can't know if a dev us good until at least 3 months after hire, if not 6.
But I think you are doing your now not_future_colleagues a solid by giving up. If you are that square to think there is only one way to reach the "prestige, benefits and pay of Google" and that is by excelling at some Leetcoding pissing context: I see you not solve issues that are exciting to solve which is exactly what I like to see in programmers.
Deleted Comment
Not the world.
Hiring committees.
Do you come from a credentialist culture/upbringing? There are many programming jobs out there where people don't care about your school, your GPA, etc. Also, don't believe some random person's post about what they do or don't do. People often lie or exaggerate. E.g. "oh man, I barely studied but I still got an A".
You seem to be suffering, so I don't want to pile on, but it seems kind of crazy to me to spend 5 years on a particular approach to getting a job. Is there something else that's limiting you? Hard-to-understand accent? Language Skills? Social skills? Resume typos/grammar? Contact list? Trying for jobs that are out of reach, when other satisfactory jobs could be in reach?
I have no credentialist upbringing.
There are other things that are limiting me. I have no network and bad social skills.
1. Graduate from a top school
2. Work at non-FAANG companies for several years and develop strong software engineering skills: attention to detail, deep knowledge of one language, writing and maintaining unit tests and integration tests, giving and receiving code reviews, being oncall, sitting in on requirements meetings with customers, spending months implementing features, seeing some of them fail in production or fail with users, and deploying and owning a small service and being the go-to person on the team for it. This takes several years. Almost nobody can get a FAANG job without this experience.
Grinding leetcode is something to do for 2-3 weeks before your FAANG interview to brush up on algorithms. Leetcode cannot give you software engineering experience that FAANG interviewers look for.
It's really good that you recognize your bad social skills. You can improve them with effort.
Good luck!
I don't make FAANG money, but I make really good money. It's not enough to retire at 40, but it's enough to have a pretty nice life.
Why do you want to program? What do you want to program? Programming is a tool and a craft, like literacy and creative writing. But it is in service of some goal or just the pleasure of doing it.
lol, EDITFAIL
If you have something else lined up and just want everyone to wave you goodbye then so be it. But people obviously want to help you and it sounds like you're looking for some.
I'll just say it's better to be mediocre at something than to do nothing. A non-FAANG job/tech endeavor will still expose you to a lot of opportunities. You may not immediately be making what you want to make, but over 10 years there's a non-zero chance you'll luck into something bigger. A 20% chance of getting what you want is still better than a 0% chance. In the process you may find something you are actually exceptionally good at. It's much harder to find these things if you're not actively working on something.
That won't be solved by fixing the community, which is an enormous boat that won't turn around any time soon. But it's hopefully a lesson to other people putting themselves in a similar position. The community also contains a lot of people pointing out the footgun.
This is the sort of thinking that keeps people in their place continuously participating in the rat race hoping that one day they'll make their break. For most people, it's much closer to delusional hope than a real path to success.
Point is, if one completely drops out the chance of any of that happening is basically 0. If you stay involved in one way or another, it may happen.
The sooner you realize your limits the better. The issue with most of us is that we don't push hard enough to understand what those limits are. As you've seen, you've worked hard and now know your limit.
But frankly, what's the issue? You're not good enough to pass a leetcode interview? Guess out, most people writing software aren't able to either. If all you do is compare yourself to the Wayne Gretzky's and LeBron James you're always going to feel inadequate. Ask them why they are so good and they will tell you that it's hard work and dedication. Because it's more fulfilling to say that than to say "yes, it is those things but heck, I'm just naturally good also".
Read "Flowers for Algernon" for some perspective. Personally, I always remind myself that the intelligence I do have is a gift because there are those with no fault of their own that are far worse.
If you don't enjoy programming or just want to do something different, be honest with yourself.
Your conclusion is right - The is reality not everyone is lucky enough to be intellectually gifted to succeed and not all hard work pays off.
But the issue is you've boxed what success means you to so much that it's suffocating you.
Most of us writing software are failures if we use passing a Google interview as a metric.
For some reason that I can't really articulate, I never liked that story. I agree that it can add some perspective. Maybe it has to do with seeing a somewhat similar struggle with my grandfather going blind later in life. That many things he used to do easily became arduous or impossible, and the ways that affected him and those around him. I feel the story doesn't do that sort of situation justice (maybe too simplistic?).
Here's an anecdote from myself. I have been a software engineer for 15+ years. I was a computer science major like you in college. My first job out of college was at Intel where I also only lasted less than 2 years. While I didn't get fired for performance issues, my first annual performance review was also a performance improvement plan and I was the bottom of the pack (i.e. did not get a raise). I had issues coming from years of education-focused mindsets that I thought passing exams was all it's about, and I often did not "get" what it means to be productive in a company as an employee. It took me time over the years to "get it". After Intel I worked for a friend's web dev shop for a year. Then I finally landed at a startup (which became a unicorn later), which was 2008, and the rest was history -- I was promoted several levels in said startup, and later cofounded my own funded startup (which didn't work out at the end), and I went on to work as a staff engineer at my next two companies. And finally, I probably wouldn't be able to solve any leetcode problems (maybe above the easy ones).
It's your personal decision to stay or quit programming, but if you had any willingness to stay at all, I would encourage you to simply ignore this leetcode stuff and interview at companies that don't do leetcode whiteboard interviews and try to work as a software engineer at a new company, so you have a sample size of more than 1 company in your work experience. And when you do so, try at it from a standpoint of understanding the business, understanding what makes an impact and drives the business forward, and do those things. At the core level, that's the most important thing about working as a software engineer.
I joined a FAANG at 44 and had to do the Leetcode evaluation. TBH, it wasn't so much a grind as a bit of re-learning how to ride a bicycle. I have the "benefit" of being old enough that solving those kinds of low-level problems was work I actually did in my younger days before all of these fancy libraries existed. I spent about 10 hours over the course of a couple weeks just "refreshing" myself on ways to identify the brute force vs. clever solutions to some basic CS problems of array manipulation and graph traversal.
It was pretty low effort, but it was the side show to my decades of experience. For younger folks with only a couple years experience, I can see how it becomes the "everything" because it's the majority of their evaluation.
"I'm only interested in FAANG money and retiring early"
You literally have no intrinsic motivation to solve hard problems other than getting paid more.
Focus on learning and acquiring skills and solving problems, not trying to get "FAANG money".
Leetcode has nothing to do with FAANG money, sure, knowing algorithms and how to optimize code helps, and that's the only commonality between FAANG interviews and leetcode, but those things can be learned outside of leetcode. Simply taking a few CS algorithms courses will make it apparent that 90% of leetcode problems are found in some variations inside your undergrad CS algorithms course.
Sounds like you need to reset your values and re-align your priorities.
You got fired for performance reasons as you mentioned. "Had" all these resources and time spent on trying to improve yourself, but you just want a "FAANG salary". This is not the way. Either you love CS as a field and you love solving hard problems, or it's not for you.
Furthermore, it's easy to be passionate about things that you are good at. Being good at something means constantly getting positive feedback. So then the question becomes- Are people who are passionate the ones who become good at things or are people who are good at things become passionate them? The reality is you can find cases where people hate the things they are good at and like the things they are bad at. Just proves this idea of yours is false.
When I'm interviewing it's one of the things I strongly look for. Even if the interviewee has some other weaknesses or lack of experience, passion for what you're doing can make up for it.
For example, I've seen those who are interested in leetcode, algos, and the like. I remember this one time where management wanted to have JS/front-end devs answer questions about C and b-trees. They couldn't find anyone to make it through the whole interview process. The problem was that people who could handle the C and b-trees couldn't cut it at the JS questions that came later. The JS devs never got passed the C/b-tree questions.
There is a culture of elite knowledge and a club around that. Some are into the school people have degrees from and that kind of thing.
There is another side of it that's about the ability to use code to problem solve. I remember meeting this senior engineer that customers used to constantly request by name. He was one of the most senior levels at the company. I later learned that he had no degree. He had a ton of hands on knowledge and understood the technology from years of working. He learned it like a skilled trade and he was valuable to everyone involved.
There are places where both types of folks can thrive.
I personally go after the problem solving type situations because I don't like forms of elitism and I really like solving problems.
Don't look at the leetcode space and Google mentorship as the whole realm of software jobs. There is a lot more out there and many very successful people doing other types of stuff in software.
I used to be like this as well, till I noticed the people solving the types of problems I wanted to work on we’re either guarded behind these leetcode type interviews or something much more difficult to “fake until you make it”.
I don't like this idea. I prefer the idea of mentoring and people constantly learning. Faking it is kind of like deceiving until you figure it out.
People should be mentoring and teaching each other. This levels up the people around us.
> I noticed the people solving the types of problems I wanted to work on we’re either guarded behind these leetcode type interviews or something much more difficult
This is a real thing.
Sometimes you need a foundation in a hard problem that is often taught in some university courses. There are some hard problems here and people look for that. Sometimes it's math skills or specific algorithms.
Sometimes the people working the hard problems artificially add levels to their processes to keep clubs exclusive.
Most software isn't these hard problems. 99.9% of software is not these hard problems.
Notice how nothing in this thread is your fault. Every single problem is on another person our outside force. No one will pity you, doubly so in a highly technical team. It's just not part of the culture. Take it or leave it.
Chasing money is not going to get you far. Focus on skills.
1) The book How to Design Programs. Its main point: the shape of data determines the shape of functions. Northeastern University has a good course on this principle. There are several types of data, such as atomic values, constrained values, lists, and the functions for dealing with them follow the "shape" of how the data were defined.
Recursion can also follow this pattern because data can be defined recursively, such as with binary trees and linked lists. Obviously, recursion is not limited to recursively defined data, but it helps to see the relationship between functions/methods and the data they operate on.
The book and the course also discuss how to abstract general patterns from concrete instances, such as "filter", "map" and "fold".
2) Once I saw that function "structure" can follow the structure of data, I looked at the structure of functions that operate on graphs, trees, arrays, greedy problems, dynamic programming problems. There is usually a structure involved.
To get at the structure, I abstracted the details to get at the "elements" of the function and the data it operates on.
Here's one pattern: for each element of data input do something with that element
Basically all algorithms follow this pattern. Replace "do something" with a transformation, a summation, a "map", filter, fold, etc. Replace data input with tree, graph, array, etc.
3) For dynamic programming, I studied the approach used in "Optimization" courses, often taught in the context of business. In that context, DP is not taught as "finding the subproblem", but as a multistage decision process. I found this very helpful.
Lastly, even though receiving material rewards is nice, re-framing motivation towards contribution rather than receiving can mitigate disappointment in any endeavor in life.
I will check this book out.
>Lastly, even though receiving material rewards is nice, re-framing motivation towards contribution rather than receiving can mitigate disappointment in any endeavor in life.
This has always sounded to me like the consolation for those who are not good enough to get what they really want.