Unless you've made it to your "endgame" company that you're happy to stay at for a while, I feel investing anything more than the bare minimum to get your assigned work done is worth less than just grinding leetcode and otherwise studying for interviews. Doing an actual good job, above and beyond, is not going to be worth much when you're looking for your next job.
Thus we're now seeing the rise of Professional Interviewers or Professional Leetcoders. I am ashamed to admit that I too, am one, and probably will continue to be one until I make it into such an "endgame" company.
Our industry feels like it's in the decline of the Roman Empire right now.
Our craft is becoming arcane: Microsoft is building VSCode for the cloud. Few people own desktop computers anymore. Apple is locking down MacOS to signed binaries. Soon we'll all have thin clients and will write software in the cloud for the cloud. Few will be able to learn how to engineer at home anymore - you'll have to go to a university or trade school. Building a simple website will require JS package management, kubernetes, and AWS. The "free tier" will fall away.
Employees aren't excited by what they do: People job hop for promos, raises, and resume fodder, not because there's an actual interest in the product. The majority of software projects are mundane glue, pipes, optimization tweaks, or migrations.
Companies don't care about employees: Wages are adjusted for cost of living. Companies are trying to hire more outside of California in order to lower wages across the board. Employees at "passion project" companies (gaming, SpaceX, Tesla) are overworked and underpaid.
Incentives are wrong: Google bestows promos on launches, not KTLO. Google kills products that make customers and engineers happy and doesn't spend enough effort to make them better.
The industry is eating the commons: The web is turning into shit. Devices are being locked down. Ads and tracking are everywhere. Open source is being co-opted, but the benefits are not returned. The cool things to hack on and integrate with (remember "mashups"?) are all siloed up, full of ads, and dumbed down to the most basic products.
The Internet now treats everyone using it like we're all brainless idiots to be injected with dopamine. Like we're not smart enough to choose how to consume it. And working for companies in this field now feels like working for the insurance industry. Optimize for the average.
Unfortunately I feel it is hard for me to disagree with the overall sentiment of what you are describing.
But I'd like to offer a little glimmer of hope from someone with too many gray hairs to count.
Computers are still machines, and we still tell them what to do by programming them.
It is still possible to stay out of what you describe above, it is still possible to work on low-level code, on real products, on things that matter to people and companies.
The reality though is that the mundane things are where the money is though.
While we all enjoy "cool" things, millions of companies need their accounting and payroll running, their truck drivers planned, their work schedules planned, ...
So you might find that more interesting things happen in e.g. industrial engineering companies or electronics companies, more so than in web companies. It's an entirely different world than what you describe above.
Hackaday might be a more interesting hangout than Hacker News for you ?
So let's not lose our excitement and sense of wonder, after all it's all bits and bytes and we tell them how to behave.
> Hackaday might be a more interesting hangout than Hacker News for you?
The Hackaday focus on the dumbed-down format of video presentation is infuriating. It would be very nice to fund something community-driven, focused on actual content, with the same subject.
Until then, I think the few articles on the Hackaday subject that appear here on HN are worth more than the entire Hackaday site.
(I still visit both, of course, but tend to only look at the headlines there.)
> Computers are still machines, and we still tell them what to do by programming them. It is still possible to stay out of what you describe above, it is still possible to work on low-level code, on real products, on things that matter to people and companies.
Yes it is possible, but in practice one will (sometimes have to) spend most of the time with devices/technologies that make one die inside a little.
Part of the problem is that "doing the right thing" is often not competitively viable.
Some of the most inspirational stories in tech are along the lines of "I had this terrible job where we had to use tech X so I wrote adapter Y in more cool tech Z and automated the whole thing and took long lunches."
I'm an eighties whizz-kid, educated hardware and software background with borderline epiphanic understanding of computer technology. From firmware to systems where peoples lives literally depend on. In 2000 jumped on a plane to Taiwan to develop the first Arduino/RaspberryPi class devices. Still up to date and currently busy polishing a ShowHN which will blow you off your socks.
Everything nowadays is shrink-wrapped out-of-the-box, hidden behind layers of frameworks. Programming languages becoming a fashion statement. Everyone seems to copy-paste stack-overflow and even then the answers are like "Why?" because it seems nobody reads specifications.
But...
Finding a job position is impossible.
The excuses for rejection range from unbelief to insulting.
It is so bad that I have now seriously considered leaving the field, taking 40+ years experience with me.
> It is so bad that I have now seriously considered leaving the field, taking 40+ years experience with me.
Please don't. We need more people like you to infuse much needed energy in a field/profession that is becoming mundane and steadily going downhill day by day.
> The excuses for rejection range from unbelief to insulting.
I was once rejected because I did not know inane crap like what "this" is bound to at the top-level in JavaScript. Their answer: "the window object". a) Yeah, okay, if your code only runs in the browser. But not nodejs. And b) if anyone uses a top-level "this" it's an instant reject in code review from me.
Ultimately, a lot of these interviewers are waving huge warning flags saying "stay away!"
Even FAANG. Every single algorithm there is a "trick" to it. Once you memorize that trick, every leetcode becomes trivial. But it took a guy like Knuth some 30 fucking years to come up with that "trick". It's so goddamn stupid memorizing bubble sort when every language has a built in sort you're going to use. And if you ever see a developer writing their own algorithm for bubble sort at work, you're going to think something is wrong with this person. What the fuck are you doing guy? You're going to get it wrong and there is a library for all of this, used by thousands of people with hundreds of bug fixes.
I left two years ago and have been largely pursuing my own extended interests. One result is that 90% of the HN postings seem to be absolute wastes of time (to me at least.)
> Finding a job position is impossible. The excuses for rejection range from unbelief to insulting. It is so bad that I have now seriously considered leaving the field, taking 40+ years experience with me.
Before you do, are you up for a Zoom call or something? Talk about anything you're passionate about, and perhaps we'll post it as a show HN.
I'm 31 myself and at the beginning of my career (I've been longer in the education system than most).
It's because the business people got interested and are increasingly taking leadership roles. As an engineer who has shifted over to the product management side I can safely say business people suck fun out of stuff for a living. Margins, cost savings, metrics to manage, each and every slow step of creating a new, less fun, normal erodes a culture built on making "Something cool" or "Just for fun".
Worse yet is when the business minded masquerade "Fun" activities as them still being cool such as hackathons. The sad truth of the matter is that this is what happens in a maturing industry. A lot of the green field money that sat around for Facebook and Google to gobble up has been eaten. The remaining scraps are enough to prop up small startups, but really only until they get absorbed into the giants with fat checks for the founders. The regular workers get conformed into the system, with assurances "Everything will totally stay the same" as they slowly change everything.
Businesses exist to make people money. Engineers are great at solving problems and innovating. Business people are great at squeezing every last drop from those solutions till only a husk remains. To be fair to the business people, myself included, if you do anything less than squeeze for money as hard as you can, you get beat out by the competition who copy you, and nothing is as not fun as being jobless. The more and more people who get coding knowledge the more and more being a coder will be just like every other engineering position. Someone who executes. Which is why I bailed and got into PM so I could actually have a strong say to the business in what we execute on.
To end on a happy note I have never seen more people getting into robotics clubs, trying to make small static sites, learning the basics, and I am certain that every day more and more people are running their first hello world programs. So I think there some ups and downs to everyone learning coding.
Agile/Scrum was the biggest bait-and-switch con out there - developers thinking the methodologies would empower them while in fact being a vector for the worst excesses of micromanagement. I feel less empowered now than I did in my earliest days as a junior dev.
Whats driving business types to think leetcode is a good test? This should be an easy conversation with HR. I think software engineers want this arbitrary barrier.
Honestly this is probably because other businesses started doing it. When businesses have no clue they look to the market for the "standard" way of doing things. We don't make mechanical engineers design mechanical solutions for fun.It is just a consequence of the early culture of "hackers" and people who do that stuff for fun and for work. Hopefully dies over time, but it is unlikely given that now seems like the standard thing to do. Businesses are not rational thinking creatures. They just do what feels like lower risk if they can.
Leetcoding involves preparation for known problems and churning out solutions in least possible time. Most of the business have problems along the same lines (think of CRUD, authentication, authorization, UI animations etc ...) and they think people who excel in the former might do well in latter.
> Our industry feels like it's in the decline of the Roman Empire right now. ....
And here I am, writing a desktop native app that targets a small niche of users, with no marketing, no advertising, and we've had our strongest year yet, and overall usage just grows slowly year over year.
Maybe it's how you think things ought to be that is misaligned with reality, rather than "the decline of the Roman Empire".
The thing is, it's not one household. Every other company I'm in touch with in the audio software world (quite a few) had a banner year. Yes, the pandemic helped us by forcing lots of people to be stuck at home and turning to that song they'd always meant to record/write. But it was the icing on the cake for a market that generally continues to improve, despite stupid levels of competition.
Now of course, if by "household" you meant "the entire niche of audio software", then sure. Or maybe even more broadly, "the entire niche of creative software", then even more sure.
But these are not tiny niches, even if they are small.
Yikes, tried to use Ardour multiple times back in the day (I used to work as an independent radio producer and sound engineer). Classic open source desktop software in that it promised the world, but in practice was extremely difficult to even get to install, and reliant on external packages that were themselves glitchy and baroque (I believe Jack was the common issue in this case).
The prebuilt binaries of Ardour that we supply have no external dependencies except for libc, the native window system (X11, Cocoa/Quartz, etc), and libstc++. Since Ardour 5.0, JACK has been optional.
Every week, more or less, someone tells me that Ardour is a piece of shit, and someone else tells me it's the best DAW they've ever used. I gave up believing that any given DAW could ever make everyone happy about a decade ago.
Source is always available without cost. Pre-built binaries are available via a pay-what-you-want pay tunnel. Subscriptions are encouraged to allow us to continue developing the software. We made on the order of US$200k this year.
>Companies are trying to hire more outside of California in order to lower wages across the board.
Lower labor costs mean lower costs passed on to the end users which means more products in the wild which means a bigger industry. It's only a problem if you're worried about being out-competed by "those hicks in the flyover states".
Techies complaining about companies moving out sounds a lot like the guy who worked the UAW system for 30yr so he could land a buddy position where he does nothing for $60/hr complaining about non-union factories and companies moving to Mexico. In both cases it's a tacit acknowledgement that the gravy train is unsustainable.
Yeah wages might be slightly lower in 40yr but that's a reflection of the difference between being an electrician in 1910 vs being an electrician in 1950 after the last of the line shaft industries had long been converted, once all the heavy lifting and low hanging fruit has been picked there's just a lot less cash sloshing around driving up prices and wages. The people who just want to be mediocre and punch a clock will still make a decent wage but the difference is that mediocrity and job hopping aren't enough to make you big bucks in a stable industry like they are in a rapidly growing industry flush with cash. In a stable industry you actually have to be worth the big bucks.
It's hard not to see Bay Area software developer wages, especially at the big "tech" companies, as something of a bubble. They're completely out of line with engineering and science jobs more broadly, including software engineering jobs in much of the US.
Which does suggest that someone going into software just for the money or, as GP or so commented, going through the motions and spending all their time prepping for Google interviews may be chasing a pretty transitory target.
Historically there's very little to suggest that the segment of one profession that's largely in one geographic area can sustainably capture super-premium compensation even though it doesn't really require a higher level of skill than many others have throughout the country (and the world).
And the fact that a lot more flexibility in living location has come in essentially overnight means that a lot of companies are going to start looking more skeptically at some of the premiums they're paying.
This is the result of a war that was fought two decades ago and the hackers/coders/sysadmins, the people to built things, lost and lost big. It was the dot-com crash. Looking back it's absurd. Everyone was convinced there was this big bubble and everyone got caught up in the irrational exuberance of the future of computing. But was it really? The real financial damage was done by the likes of Enron and Anderson consulting. If it was so irrational why did that supposed bubble give rise to some of the largest companies that now exist? Because it wasn't. That's why we spend the next two decades wringing our hands and fretting that there was another bubble right around the corner. This never happened. Why? Because there wasn't a bubble in the first place to worry about repeating.
What did happen is a ton of people lost their jobs and those people, passionate about what they do, kept right on doing it in the form of open source software. Google, flush with cash, hovered up talent for bargain basement prices. The board room got the message that software was eating the world and if they didn't do something quick the people to wrote the software and built the systems might want a say in how those companies were run. So they outsourced what they could and doubled up what they couldn't. The message was clear. I don't need you. I've got a second one of you ready to go. The waged a war on GPL calling it "viral" and "insidious" and convinced everyone it would be much better to use more liberal licenses that would allow them to build and sell products.
The war was lost when they convinced you that management was "icky" and you didn't want that boring old stuff. You wanted to be coding so they hired the MBA to be the scrum master. The result is you were cut out of the decision making process. Your only input was on a technical level and even there you were kept a close eye on. Some people would even proudly exclaim that they liked this system because they thought they were winners based on their slightly higher than average salary all the wile cranking out multi-million or even billion dollar software for someone else. Doug Cutting, the creator of Hadoop and basically everything that was to become Cloudera was only given a job. They made so much money even they were embarrassed but only embarrassed enough to allow him to keep working for them.
You lost and they won and this is the result. You're made to jump through these absurd hoops because it's cheaper to create these pathological systems and waste your time than to do something more efficient.
I feel a common thread in the events and behaviors you describe is the prioritization of decisions by valuation, IP, and boundaries over execution, progress, and flow.
Maybe the only way out of this mess is for business schools to start teaching new metrics for the latter category.
Companies are trying to hire more outside of California in order to lower wages across the board
This could turn out to be a very good thing for the country. It's a social & economic problem if all the money & opportunity are squeezed into just one metro.
> This could turn out to be a very good thing for the country.
Once you cross the hump to not seeking physical proximity when seeking to minimize labor costs, there's very little reason to go to the rest of the US once you leave the SFBA.
Have you ever looked at the map of US HP campuses in their heyday? Dispersed across the country, with regionally clumped physical proximity, a foot in numerous labor markets and all tidily within a couple timezones.
You might think of HP as a California company but they had large engineering hubs all over the country.
Have you seen the offers for remote work? Almost every one is "remote (us citizen)", "remote (same timezone)", "remote (monthly onsites)". Unless the companies are prepared to open whole divisions with colocated management in other countries, the jobs are staying local.
Anyone who has worked with remote programmers, unless they happen to have hit the jackpot on them, really has no desire to ever do it again. Timezone differences, language differences, cultural differences, communication differences, etc, etc, all combine to chew up so much more time and money than the nominal savings of hiring someone local. And the good remote people don't cost appreciably less anyway.
After a decade or so working remotely I'd describe that differently. If someone working remotely finds a company with culture where remote work is fully functional rather than something odd that people have to work around, they hit jackpot. Unless everything's documented online, every meeting is online, every water-cooler chat has a link published, etc. then remote work is going to suck for everyone.
You seem to be agreeing with the parent. Large timezone differences, cultural differences, and language differences can be real remote challenges. (Although, in my experience, US--at least ET--to Europe works pretty well. Takes more to coordinate Asia in general and probably want to minimize the amount of synchronous communications.)
Many of them definitely won't, but daylight and the location of management's homes are still limiting factors to off-shoring. Synchronously managing people in distant time zones is no fun, and trying to do it asynchronously is really inefficient. There may be a solution to this 'problem', but until they come up with it, letting people work remotely from their homes in the same city isn't a slippery slope to all jobs being off-shored.
Or, probably more accurately, it is a slippery slope, but not a very steep one. I do believe that jobs (and wages) are going to get distributed differently in the future. But, I'm hopeful that it'll be an improvement over having every high-paying job be in the same 5 dystopian cities.
I would say is that a lot of hard problems (of last 20-30 yrs) are getting commoditised (e.g. S3, DynamoDB, Redis) and barrier to entry reduced. This would mean increasing the work is "glue & pipes".
> Google kills products that make customers and engineers happy and doesn't spend enough effort to make them better.
Heck, as far back as 2010 I got a promo at Google because I was the only one on the Google Maps data team (or the org) who wanted to keep the data up to date. (Also the only one who wanted to live in Seattle -- which might as well have been Siberia to them.) So they shipped me up there and gave me a team. It was like somewhere, deep down, they knew it was a good idea, but each person could forcefully argue why it wasn't -- so that it didn't have to be them.
It was great! Well, other than encountering more of the famously toxic culture, where people get promoted for being smart but nasty. But I'm sure that little problem has been solved.
Could it be that this is a very SV problem?
I'm from a European state, I know some people doing programming in Asian regions.
What you are describing to me sounds like a bubble. Or I am in a bubble, IDK.
Yes devices can do less than 10 years ago (less arbitrary thing), but they can also do more than 10 years ago.
Of course the market in this segment might give you the feeling that everything is dumbed down. These devices are not used solely by very smart people.
The most basic of all humans has a phone nowadays. And If apple decides to make MacOS only run singed binaries. That shows that they are targeting people who do not know how to run arbitrary code safely. I am a programmer and when I have to do that I have to think really hard. If my main PC runs stuff that I would rather not like to leave my house. I have to set up a VM and check it beforehand.
You still have Linux to do whatever you want.
If people in the job market and Open Source community are getting exploited, it is only a matter of time until something develops to create a force against the exploitment.
There are unions (at least there should be) and there are multiple ways to fund Open Source nowadays (Patreon, Gitcoin, Bountys,...).
It doesn't seem to me as everything is moving backwards. It is getting harder to live out the freedom of the individual. But on a macro level, I think things are moving forward.
Yeah, a lot of posts here seem to be trying to say the following, but they don't want, or don't know, how to word it:
Technology was made accessible for the masses. That means 100 IQ people. And then it was refined so the 85 IQ people could work most of it. I have no doubt that if you gave standardized IQ tests to every reader of Hacker News, you would not see much of an overlap with the bell curve of the American, or even world, population.
The people coming here are generally very technical, very smart (I'm defining this as at least one standard deviation above the norm, so 115 and higher IQs).
Most people aren't going to build their own enormous media server from used enterprise gear. Most people aren't going to build their own home surveillance system even though the hardware and open-source software out there exists. I could list another hundred projects for which we have specialized "consumer-friendly" devices.
Watch the YouTube video where Jordan Peterson talks about working with an 85 IQ individual and how it was a struggle for that person to consistently and accurately fold a sheet of paper into thirds and put it into an envelope. And now realize that for many of you, that's someone for which you're developing.
> The Internet now treats everyone using it like we're all brainless idiots to be injected with dopamine. Like we're not smart enough to choose how to consume it.
The problem is that most people are. Look at the statistical breakdown of intelligence. Half of the world is 100 IQ and below. Half. Hell, 16% of all people are 85 IQ and below. That's over a billion people worldwide.
Any technology that you want to see enormous widespread adoption of, has to be usable by some of those people.
And believe me, no business-minded person wants to throw a billion potential customers to the wayside. They want to simplify the technology to capture those dollars.
Sorry if this offends sensibilities of anyone, but I guarantee you if you could get inside the heads of a lot of these billionaires and multi-millionaires, you'd hear the same shit I'm telling you right here. The reason I know this is because my Uncle is one of those people. Smart. Ruthless. And has absolutely no qualms about exploiting people of lower intelligence.
Don't think for a minute that the SV crowd is any different.
Goodness, you and the OP have really hit the nail on the head.
I spent the last 5 years quite happy at a simple dev shop. Then they hired a bunch of people, paid them more than me, and allowed them complete free reign to write what ever kind of code on some brand new projects. After a year of this, one person quit mid-project, another died mysteriously (covid?), and then another just recently quit. My boss expected me to just pick up the slack on these three projects that were written in the most arcane and buffoon way possible. I basically just said no, and left. I had already been driven half insane over the year just trying to figure out the crap they were committing.
This was in the spring and I'm still unemployed. I'm mostly Java and some older languages, and was really looking forward to jumping onto python and django. But it's been a struggle really learning django good enough to interview for without any good experience behind me. I have a family and on top of covid issues and this year in general, sitting at home trying to learn a giant web framework is not very motivating when I could be spending it with my family (which were already severely affected by all my time I "wasted" going above and beyond at my last job for 5 years).
I just recently did an interview for a small django shop that didn't even test on django. Instead, I was given a half page of python code and asked to "fix" the problems. No requirements or tips. There was a syntax error, a bug, and a few cosmetic things.. I managed to find 8. All this while being stared at over Zoom. I was informed that "junior" devs can find 10-12 "problems", but they only hire those that "find" more than 18 (apparently 25 is the max).
I still got the code and look at it every now and then. Half a page of code that does nothing but take a list of "item" objects and print out an aggregate of a total price by item type. A loop over nothing but:
total[item.type] += item.cost
Of course there was some random data mangling above and below that, but that is the logic. Find the problems?! Should I raise errors or use a namedtuple or defaultdict? Half a page of code that could have just been a Select/Group by in SQL. No senor dev should be summing data like that. Sadly they said the code was from "production". They have "interviewed" over a hundred people in this year and hired only 1. All this for $45/hr 1099.
In the beginning, I briefly thought I could use my savings to start some kind of business, not sure what. But I've blown most of that just paying the bills while I "interview".
I used to love software and would dream and breath it. But I've never been so unmotivated over these last 6 months. I'm debating on just applying at a local small town municipal IT job for $30 an hour. Giving up basically. Just show up at 8am, answer the phone mindlessly for IT "problems" and tell people to try restarting their windows machine (at least 3 times minimum) and screw of playing solitaire the rest of the day. But it seems so pointless and waste of a life. But even that doesn't motivate me, but just makes me more depressed and even slower going.
Your comment highlights so many problems with our industry so poignantly, and at the same time is an extremely sad personal story...
I don’t actually know what to say as encouragement but I do feel for you :(
I was in a similar position to you on your last job, and after looking at every single company I could think of in my city (London) I ended up finding just one that seemed good in all possible counts...
Maybe there is a company out there that you’d like to work for? My approach was to filter by the product, and only look into working for companies whose end product I thought was good and interesting.
The Django shop test had nothing to do with your skills as a developer, and everything to do with language gatekeeping. It's just overcompensating for boring work and poor pay. It's no different to how the gaming industry exploits workers.
Don't give up. And for the love of all that is holy, don't work municipal IT, it would only demotivate you further. Keep at it, improve your skills and keep applying.
> Giving up basically. Just show up at 8am, answer the phone mindlessly for IT "problems" and tell people to try restarting their windows machine (at least 3 times minimum) and screw of playing solitaire the rest of the day.
You have a very holier-than-thou view of small scale IT work. There are a whole lot of problems to be solved at this level, many of them created by the people working the positions you're currently interviewing for.
Yeah, this echoes my experiences interviewing. Spent 6 months looking a few years back
It’s just incredibly demotivating to hear all the self-professed hot shots shit all over your past 10 years of delivering unambiguous value because you don’t know that [] === ‘’ is true in Javascript.
I finally found a position that’s financially great, but it’s more in spite of their dev process than thanks to it.
Is there anything you're passionate about? If so, why not spin up a website on that subject?
Django is pretty easy to learn. Model view Etc in Python instead of Ruby. Not rocket science.
Building something you care about will force you to dig into the details and become enough of an expert in a few weeks to get in the door somewhere where your skills will be appreciated.
That probably won't be Facebook, Google, or the next Silicon Valley unicorn. But there are a lot of other places and other Industries where interesting things are going on.
It's a numbers game, learn from mistakes and continue to the next interview. Eventually you have seen them all and you will pass the gatekeeping. Steel in forged in fire. After hundreds of bullshit interviews, nothing surprises me anymore and it's just all automatic process now.
I haven’t had anything quite that bad, but I’ve had an interview where I was being tested on SQL, but the interviewer didn’t actually know the SQL keywords I used.
It happens. It’s a strong sign you want to work elsewhere anyway. The problem is one of finding the right Elsewhere.
This sounds exactly like a job I interviewed for a couple of years ago, a Django shop. I'm skilled at Python but the questions were ridiculous. I feel like you probably dodged a bullet and don't want to work there anyway.
I’m spending some time in Constantinople right now, if anyone wants to spend some time lamenting the fall of the Western Roman Empire together. That is, after the weekend plague curfew. Email transitively in profile.
> Google kills products that make customers and engineers happy and doesn't spend enough effort to make them better.
Small correction here: The non-paying users are not their customers. So it’s understandable that they kill all products where they don’t have any ROI. As another user here put it recently: Ads are like a hose where money pours out. And they’re desperately looking for another such hose.
And yet, there are still so much value one can create with software... A lot of it is even outside of the reach of the spy and divisiveness as a service companies, it's the kind of thing that if they touch it, they destroy it.
The late years of Rome is actually a great metaphor. We are suffering from human capital loss, and have signs of institutional collapse. A shock can destroy our institutions and throw us into something like the early Medieval period: much less wealthy at the beginning, and messy too, but fast growing and with a much higher ceiling than the previous age.
This doesn't feel new to me. I entered the industry in the mid-90's, so I have no reference from before that period. But I'll cherrypick a few items:
> Microsoft is building VSCode for the cloud. Few people own desktop computers anymore.
I heard the same thing in my early years about these newfangled HTML email clients. Email should be consumed using Pine or Eudora, just as God intended.
> People job hop for promos, raises, and resume fodder, not because there's an actual interest in the product.
Oh yeah. I did this for the first 15 years of my career. It was faster to get a promo by changing jobs. I didn't care where I worked, as long as the company name had prestige. I kind of still do, but I transfer internally. Same effect, but I get to keep my vacation accrual.
> Companies are trying to hire more outside of California
In my early years I worked for a company that used Russian developers for some non-critical parts because it was cheaper to fly someone out there once a quarter than it was to hire the staff in CA. This was before the massive rise of outsourcing in India. See the Dilbert cartoons about Elbonia for more.
> The web is turning into shit.
Heard the same argument about MySpace. And Geocities before that. And AOL before that.
There are so many pieces of software that are latency dependent. Aspects of them can be in the cloud, but I doubt we will ever truly lose track of bare metal. Right now I'm hoping for a real time OS that has enough of the common apps that most people are happy, but that satisfies the speed requirements necessary for digital audio, lighting controls, and other tangible and interactive behaviors. Hopefully the natural world's fundamental interactivity and tactility in real time is something that we all consider going forward enough that the cloud / thin client model becomes only a part of our human system.
I've tried out Google's beta with assasin's creed, and the results weren't promising. I had gigabit fiber and while it worked pretty well for the most part, I still got quite a few gamebreaking lag spikes and fps slowdowns. It stuttered like a youtube video: freezing, then resuming in 144p quality which made the in game text completely unreadable on my screen. And that's on a beefy internet connection, imagine the situation for the median American or someone reliant on a mobile data plan. People can scarcely tolerate playing a game with high ping as it is.
I've ran my own cloud gaming VM on AWS and with an enterprise connection (1ms latency to the AWS datacenter) it's been good enough to play multiplayer shooting games and maintain a positive kill/death ratio against those who play locally.
Maybe the problem isn't that it's impossible per-se but that the consumer-grade services underprovision their machines/bandwidth, or that consumer-grade gigabit fiber isn't actually that good (or problems in the "last mile" like using Wi-Fi instead of good old Ethernet)?
People can scarcely tolerate playing a game with high ping as it is.
People who classify themselves as "hardcore gamers" perhaps, but those people will also drop upwards of $1000 on a graphics card. They're not the majority in gaming. Most people will happily play a game even if there are a few problems if it's cheap and entertaining.
Anyone will throw a controller across the room after putting a whole clip into someone taking no damage, watching them rubber band across the map, and pistol whip you in the head. That's your life on a crappy connection in most FPS games which are some of the best sellers every year.
The technology to "move gaming to the cloud" was around at least a decade ago, when Gaikai started doing zero-day "play this game in your browser via Java". It worked well then, it works well today (HN had a article several months back by a sort of follow-up to the Gaikai concept). The problem is convincing gaming companies to actually use it(they have some good reasons to be concerned).
I think the real issue remains latency. Gaming companies are using it but the users don’t want it. Try playing call of duty or doom over the network and it’s going to be a terrible experience.
Doom is on there, but I wouldn't say the experience is great. I've played it both locally and on Stadia and while a quality-inelastic buyer might be OK with it there it just doesn't match up for a serious/invested consumer. And that's totally fine; not all things have to be for all people. But it's a worse experience once you know what you're looking for, and will stay so.
And, as a TO for fighting games, there's no substitute there for the barest minimum latency possible (to the point where older games legitimately feel better because you can play them over analog connections to a CRT).
The optimist in me says that cloud gaming will expand the category, not move it from local to cloud. Cloud gaming can't beat the laws of physics, and cloud hardware isn't free. So action/fps games will always have a home on local hardware.
But cloud games have an advantage too and maybe we'll see new kinds of games/experiences that are not possible with local PCs.
> Employees aren't excited by what they do: People job hop for promos, raises, and resume fodder, not because there's an actual interest in the product.
Welcome to the other 99% of humanity. Work sucks, but someone has to do it.
>Few people own desktop computers anymore. Apple is locking down MacOS to signed binaries. Soon we'll all have thin clients and will write software in the cloud for the cloud. Few will be able to learn how to engineer at home anymore - you'll have to go to a university or trade school. Building a simple website will require JS package management, kubernetes, and AWS. The "free tier" will fall away.
Building a simple website is easier and cheaper now than it ever was.
When I was a kid, I dreamed of being able to have my own domain name and an account on a shared server where I could run CGI scripts. Now most people who can afford a laptop can afford to host their own website on a virtual server.
You can arbitrage AWS with your own servers as long as network costs don't eat you. Run say a TravisCI type service on your own hardware?
The big lockin is network pricing. No egress fees when their data is already in S3. You have to run where the consumer has their data or you eat that network transfer as overhead for your SAAS.
I see GitHub slowly charging for egress downloads as the next lockin. You "save" by paying for builds on Azure.
We have people who claim to be engineers but start thorwing a fit when they're required to do unit testing. (Aka the anti-vaxxers of software engineering)
Yeah, I burned myself out really bad trying to go above and beyond for a few years at various companies. Just ended up frustrated, making no more money than people coasting in the same position, and still got laid off during downsizing instead of the people who spent time playing office politics and going out to happy hour with the supervisor.
I feel kind of guilty now though, because I actually managed to get hired at a really good company a few years ago, but I can't work up the motivation to put in as much effort as I did before. Now I'm the one coasting (still not schmoozing though), and see other new people making the same mistake I did.
In my experience "going above and beyond" tends to get you more work and responsibility for roughly the same pay. I did get the occasional 5% annual raise instead of the standard 2-3% that most of my coworkers received. Even then the raises were usually more dependent on how well the company performed vs how well I performed.
I've noticed this a few times in my career and have had to start slowing myself down at times. If I deliver in a day instead of the expected two for example, I don't get that second day off, I get twice as much work and get paid the same for it. The harder I work, the less I make. If they want me to bust my ass and sacrifice sleep I need to be given hazard pay.
You're right, and as a result I try to work no more than 4 hours a day, preferably less. I take every possible opportunity to extend timelines, create buffer, and reduce scope. I'm highly incentivized to farm as much time as possible, so that's what I do.
I try to target obscure projects that I already know how to do, where there's an assumption that nobody really knows how to do it because it's obscure. Complexity and obscurity are great cover. Picking up legacy projects on old tech is a good way to do this. "Oh no, PHP sucks! Nobody's touched this code in years! Not to worry, give me a couple of days I'm sure I'll figure it out." Now my estimate is 3x longer than it would be if I was working in the areas under normal development.
I've also got my notifications pretty dialed-in so I never appear absent when someone needs me. I prevent slack from marking me idle. I turn my notifications to a more aggressive setting when I want to take a nap.
Nobody knows how long it takes to get a piece of code working, not even other programmers, so who cares if it takes a week instead of a day. Sometimes I keep a local branch that's represents my actual work and a second branch for pushing to the team. If I get in "flow" and want to get something done in a block of many hours, I can drip-feed the commits over a couple of days instead of dropping a PR at 2am and having everyone think I'm free to work on something else tomorrow. With a little shell scripting, I can make commits and push on a timer too, which is sometimes useful if I need to "work late" because everyone is stressed.
When something blows up in prod, I put in the extra hours with a good attitude. That helps create the perception that I'm the go-to person for things and a team player, so it's not surprising to anyone if I'm running a little late on a deliverable because I had to drop everything and help with something important (another way to add more buffer). I also try to pair sometimes, especially with new coworkers, so that they can see me working in short bursts. Pairing serves as a psychological anchor that I must work that way all the time. After all, I don't want people thinking I'm lazy.
Sometimes mistakes happen and I do get stuck working an 8 hour day, but those mistakes would have been 16 hour days if I wasn't actively avoiding doing as much work as possible.
As much as I can stomach it, I try to use the extra time to socialize with coworkers to help raise my visibility and build allies. That's the smart thing to do. In reality, I mostly play video games, do housework, and anxiously wait until work is "over" for the day so I can detach from my notifications.
Has tech turned me into a sociopath? Maybe. Do I feel like a prisoner in my own home? Certainly.
But if I don't use this strategy, I'll constantly be over-committed, burned out, salty, and missing social connections with coworkers that are more valuable than the actual work.
I can't wait until I have enough money to be financially independent and never have to do this nonsense again.
I've started my first dev job earlier this year at a small company, around 10 people. And it scares me that I already do this.
I used to deliver as quick as possible and working my ass off and finding that the only thing it got me was a little praise and that more was expected from me the next time. Now I'm browsing HN during work time still delivering within deadlines, just not a week ahead, and most importantly, I feel like I'll be sane doing this work for more than a year.
What brought me to do something similar in a former job was, that I realized it only hurts my coworkers when I do more than the average.
The management would say to everyone with performance below average something like: "How can we help you to improve your performance? What do you plan to improve your performance?"
The result was that most people stopped working once they reached their goals because otherwise they would only increase the average^^
>I can't wait until I have enough money to be financially independent and never have to do this nonsense again.
There are a lot of people operating on that plan. Mostly it doesn't work out for them.
Play this forward ten years with a family to support and a mortgage which committed you to personal inflation and a track record of ...? You can absolutely fool people for a week or a year, but a decade of non-experience will stick out like a sore thumb. Experience compounds, and the one you describe is compounding down. Do this for ten years and you will be much less accomplished than you could be.
> Play this forward ten years with a family to support and a mortgage which committed you to personal inflation and a track record of ...?
Being an excellent employee?
I understand your point, but I actually have been doing this for about 10 years now, and I consistently have improved my "career trajectory" by switching jobs when I start to feel that my coworkers are overachieving and throwing me under the bus. I look at it like a forcing function to switch jobs and get a raise.
I already had a decade of pre-work experience just from being a lifelong hacker, so it's not like I'm relying on my job to learn new technology. I don't have a fear of falling behind. If anything, I've noticed a huge decrease in SWE competence over my time in industry.
Some of my most "successful" friends at FAANGs are bad developers that just devote more time to playing the system than I am willing to do. I find the social con-man stuff to be really draining and I hate doing it. I also hate interviewing, which limited my career more than I'd care to admit.
Also, I've opted to not support a family or carry a mortgage. I'm doing something similar to FIRE. I'm hoping to be FI with a total of 15 years as a tech employee.
"But do you really hate working so much that you would sacrifice having children!?". Yes. Very yes.
It's also likely that tech workers are "overpaid" right now, as we're compartmentalizing more work, lowering the skills required to join tech companies, and remote work is now the norm. It's a race to the bottom, and I want out as soon as possible.
I SO agree with this comment! Nowadays the only place in which I'm incentivized to deliver as quickly as possible at my personal project/micro-ventures. But at work I also work 4 hours or less, and those 4 hours are after I have worked and given my most productive/creative time to my projects.
So, if less than 4 hours and whatever is left of my brain is enough for my company, that's all they'll get
This sums up perfectly why I’m pro universal basic income. How many people do this? Think of all the collective brain cycles wasted. We’re stealing from our future. You’re clearly smart and capable. Work you don’t find rewarding stole your motivation. If you could work on projects that reflect the world you want to live in you would create something much more valuable top society than whatever it is you’re half assing now.
I agree, but I think the reason we're unlikely to see something like this no matter how much evidence we present that it is better for everyone is that people with money and power generally got there because they craved money and power. Owning people's time, even if that time isn't being spent productively for them, is as close as they can get to owning people themselves and they desperately crave the power to own people.
I'm not for UBI but I totally get & agree with the reasoning behind it; including yours here which I think is pretty dead on as to why it would be beneficial (in theory). In fact the "stealing from our future" part jumped out at me as similar to the way I think of societal debt cycles (the kind Ray Dalio talks about in his books - short-and long-term [~10yr; ~100yr] cyclical sine waves of waxing & waning [in/de]flation). You probably would avoid taking on a ton of debt during the peak of a given credit cycle (when rates are at their highest %), especially if you know you're simply fking yourself that much harder than if you were to take on the debt at some point in the future, when rates are much more likely to be low, and thus save you a ton of money in the long run.
Same thing with putting in extra effort at work. No reason to actually take on the extra hustle if it pays off minimally when all is said & done anyway. Better to say no thank you, I'd rather not take on a burden of effort-debt yet and wait till it makes significantly more sense to do so
Working hard for a raise/promotion is a losing strategy. Working hard so you can change jobs every 18-24 months with big salary jumps is rather easy to do consistently.
Trying to get a promotion is deciding to compete for one position in one company with essentially every qualified candidate in the world. It’s easy to see how looking for a better job every so often has better odds for success.
I don't think so at all. I have worked hard, and had a lot of fun at now two of the FAANG's. Sure the reward has not been like winning the startup lottery, but if you told myself 20 years ago I would have this impact and earn this much money I would not have believed it. I totally suck at politics, and have seen others rise quicker, but doing good work does get rewarded in my experience.
Back in the day you wanted in to get shares before they went public. Then the dream was to cashout and using your google money you can create something. Then people stopped getting stocks but used it to get funding. Then there are the people who get in any position for less than 2 years and use that expereince to get a CTO job at a smaller org.
Why do you consider it your endgame? Top salary? Interesting problems? Making a difference?
This is an interesting question. I moved into to IT/Security from another sector, and I'm trying to figure out my endgame. At least at my company, there aren't any jobs I covet. Most of the higher ups don't impress me, and they don't seem to know what's going on in their company very well. It seems like if I moved into leadership, I'd have to spend a lot of time lying-via-powerpoint. (that is, taking a complex problem, and both simplifying and misrepresenting in a powerpoint which shows "progress" happening.)
I wasn't a loser in my old career, and I don't want to be a loser in tech. But, it seems like everyone is a loser here. IT/Security is seen as a well-paid janitor; someone you need, but not someone you really care to learn about. Worse, becoming "important" in a company seems to be useful only in so far as you have sway at that particular company. ie, it's a lot of work for some very local, and very useless prestige. And worse, there's no external meaning other than your own status. Why do I care if I have a little fiefdom within company walls? Nothing worthwhile is being accomplished, it's just more sales.
I think endgame is considered differently by different people, i.e. endgame for me is financial independence through micro-ventures thus FAANG, which I'm considering right now would just be to pay the bills and create a comfortable financial buffer until I can leave them taking with me the ex-google/facebook/netflix badge and cash on hand.
I honestly think you can do it if you want even not knowing much about you. People there are not all special. If you want some tips or a referral let me know, email is my username @ gmail.
I guess this observation doesn’t really apply to the FAANGs quite as much. They have such an insatiable demand for labor that it’s much easier to work your way up to more money consistently over time.
I guess you just find the level you want to coast at. I haven’t won the start up lottery either. But I have been able to be fully employed as a contractor with a very good hourly rate for quite a long time. Which probably means I’m coasting right now. But I still manage to bump my rates up every so often, so maybe not.
Seems like you are doing pretty well. Coasting means different things to different people, do what’s right for you. Just make sure there are no regrets later, life is too short for that.
Sometimes that means coasting and spending more time on your hobbies or with your family. Can’t see anything wrong with that.
I honestly think this is a myth propogated by managers to discourage negotiation
They know the game, no employee ever is going to stay if they're being paid half their market value. "Commitment" my ass lol. But more to the point in order to replace you they have to pay market value for your job. They can only find someone cheaper if your job is beneath you.
Parlaying offers is fine as long as the work they need doing is worth that money. Who are they going to replace you with? Hiring is expensive even if they find a sucker. The only risk is if your market value is higher than they need to pay to get your job done.
maybe, i'm not saying employees shouldn't negotiate but there's a lot of ways it can backfire so you might be better of hopping to another company at that point, rather than waiting around to have the rug pulled out from underneath you
I agree, but it's still cheaper to counteroffer than to hire someone new if the demand is market price for that job. There's big overhead in replacing you.
Fundamentally the operative variable is: "can they get your job done for less than you're demanding." That's what matters, more than the impression of commitment.
When I was a hiring manager at the previous company I was at, I gave an interview where I gave an exact description of what I wanted coded. No algorithm tricks (you could solve it faster with a paradigm, but it wasn't necessary) actually this is a problem I remember having to solve for homework in intro HS CS class 25 years ago. I was checking to see if the candidate could
1. read documents.
2. ask questions.
3 identify corner cases.
4. identify why the problem was hard
5. actually try out their code instead of just thinking about it.
One candidate used a very troublesome technique to try and solve it, and proudly declared, "I am sure this works". I knew it didn't - but it took me one hour to find the bug, and in order to find the bug I had to write a property test. This is SUPER dangerous behavior IMO. Code Reviews will not catch everything, so if you have a dishonest coder you can wind up in trouble. He got hired for another team "this is literally the best hash table I have ever seen".
Unfortunately all of the candidates were clearly folks who had practiced their leetcoder skills. Nobody completed the problem correctly. However, I was okay with partial answers that fulfilled some of the softer qualities I was looking for The other folks who were interviewing gave one of the candidates who bombed my part rave reviews. I got steamrolled into hiring him onto my team, and sure enough he didn't read documents, he didn't try out his code. In the month that I worked with him he did not push any code. I left.
This is really interesting. On a previous company my coding test was "build a contact manager application with python and Vue.js" and I really loved that! It was something I could do in less than 10 hours or so. The role was full-stack web dev and I got it.
I've been considering screening companies based on what their hiring process is. How do you think that could be assessed, say, companies that eveluate real-life experience vs. leetcoder skills?
One company (fairly well known) gave me a homework assignment to write the snake game in JavaScript. It was pretty enjoyable, and feedback was that the hiring manager/team loved my coding.
Then I got invited to the onsite where I was subjected to multiple stereotypical leetcode rounds. Got rejected.
one of the companies I interviewed at had a question where they showed me a bug in what looked to be an old version of their UI and I had to debug it as a pair with them piloting. I didn't get the job (probably in part because as an "almost totally backend" it took me a bit of time to decide to look at the web console), but it was literally the best interview I'd been on. It really exercised everything you could possibly want to know about a full stack dev, and was done in 25 minutes.
I wish companies like that would be easier to find!
From the feel of this thread it seems to me that a company that explicitly states on "Who's Hiring" that they don't do leetcode, but do actual pair programming for evaluating candidates would have an advantage above the rest!
My PL of choice is Elixir. I had zero interviews with leetcode questions, but there was one where they asked me to verbally describe how a hash table works under the hood, they didn't seem to care too much about the answer so long as it was ballpark and you said "O(1)" or I think I said "fake, amortized O(1)".
This is inconsistent with my experience in my most recent round of interviews.
I interviewed at a few places at a senior/staff level, and most of my interviews were behavioral, architectural, or discussions about past work. The few leetcode-style or coding questions I had were easily prepared for from my ~40 hours of interview-specific coding prep.
There is zero chance I would have gotten those interviews or passed them without excelling at my job. My resume would have looked terrible if I didn't go above and beyond at my last role, and I would have given weak answers to some of the questions I was asked if I didn't have real experience with the subject matter or a relevant situation.
I think I understand why you have the perspective you have. Indeed, many modern software interviews can feel far removed from the actual job, and we all know that even well-executed interviews sometimes result in decisions barely better than a coin flip. However, unless you really enjoy leetcode, I can't think of anything more depressing than studying for interviews all day. Also, it is hard to prepare for interviews at higher levels (senior/staff) without actual experience produced by doing a good job.
I completely agree with his, as someone who has recently completed several interviews for senior level. I used to think everything depended on Leetcode questions, but I was surprised to find out how much of the focus was on design, past experience and leadership.
Leetcode is "easy" to crack with some (considerable) amount of hard work and they know that. But you can't make up past experience in behavioral interviews as you get found out very quickly.
Me too. I interviewed at a few places in March for senior roles and there wasn't any algo gotchas. Some coding, I think mostly to make sure I could code. But a lot more emphasis on architecture and team skills.
So maybe there's the gap between senior roles and mid/jr/new.
But my question then is, how are senior folks training/picking folks to replace them? It must not be happening in the interviews, maybe on the job?
I've noticed the more experienced I get the less technical the questions are. My last interview was just a general chat about type systems, the good and bad of Haskell, why I have been using common lisp recently in my spare time, etc... No coding questions, no leetcode, no code walkthroughs -- I really enjoyed it.
Yes, but in my experience you need both. If you are not willing to put in some time at leetcode it might not go well. Of course you can still get lucky, but better to be prepared.
Oh, you definitely need both. But there is a misconception that Leetcode skills alone is enough, but for more senior roles you get judged on more than that.
40 hours seems low to me if one wants to enter FAANG. Even if you’re familiar with the process and have prepped before. I’d expect 100 hours minimum for most candidates. Only exception would be those who interview regularly, do competitive programming regularly, and those who have to do algorithmic work regularly.
Most people I know spend nights and weekends prepping for at least a month to a quarter.
I'm obviously biased because I don't consider FAANG to be a goal at all, either as a stepping stone or end game. There are much better things in life than a lot of money.
> There are much better things in life than a lot of money
Sure - but if you want to live in silicon valley, you will have to join FAANG or have startup riches (much more difficult) to have a "normal" life that you'd have elsewhere. You're not going to own a house in good school district with startup income.
If you live in BFE then whatever - maybe the 100%+ raise in income wouldn't affect your lifestyle. For most of us in SV, it has a very substantial increase in quality of life.
I did it over 4 weeks. I have two kids, so I spent about 1-2 hours per day. I usually did some reading or a couple leetcode problems in the morning before starting work, and a couple in the evening. Honestly, once you do about 20-30 problems, they start to feel the same. I found that if I treated each problem like an interview and slowly walked through a solution (versus just diving into code and mashing Compile over and over until I get it), the problem ends up being easier.
OK, so taking the usual programmer's working hours then add 10 hours a week to that. That's some opportunity cost there, just to be able to jump through a hoop that has little to no bearing on a real world programming career past the intern/junior developer level.
oddly (if you see my sibling comment) I just got a job where they didn't ask me any technical questions. They just asked me about my coding philosophy. I guess they just looked at my github? Dunno.
I'm only four jobs into my career, and the two that didn't ask me any technical questions ended up being either boring or a quagmire of non-technical leaders attempting to manage technical processes. Hopefully yours turns out better.
Absolutely. I work at Stripe now. In fact, I wish I only interviewed at Stripe (hindsight is 20/20), because I would have done zero leetcode prep. It is well known that Stripe interviews are much more practical than FAANG interviews. The leetcode prep was definitely necessary for some of the FAANG interviews I did.
> I feel investing anything more than the bare minimum to get your assigned work done is worth less than just grinding leetcode and otherwise studying for interviews. Doing an actual good job, above and beyond, is not going to be worth much when you're looking for your next job.
I feel precisely the opposite: if you work somewhere with people you like working with (and who like working with you) then you will start to get hired through your network, not through your mad leetcode skillz.
That's what networking really is, not "networking sessions" or various going through the motions you'll hear described in a seminar. It's simple human connections from people saying "Hey, I'd like to work with decafninja again" or "Oh, you need a frobnitz expert? You know, I know someone called decafninja who might be able to help you."
No dude, I’ve been burned by exactly what that poster described. Being well networked just gets your application opened. The leetcode is what gets you hired.
The people who would hire me without leetcode were either trying to take advantage of me or have never been my coworkers.
As another commenter said: Leetcode, leetcode, leetcode.
I think it really depends on how and where you get referred. Bigger companies are likely to be process heavy and inflexible.
My last three interviews and job moves have all been from referrals or old colleagues. None had coding challenges and all resulted in job offers. But that was a small satellite team for a big org and two early stage startups.
It’s also a consequence of timing and luck though. I’d definitely be prepping harder for job hunting.
I've gotten lots of referrals from old colleagues and bosses, but as the previous poster has said, all that has resulted in is opening the door to an leetcode interview.
Also timeframe is significant too. I'd say 5-10 years ago, fewer companies (especially outside the tech industry) were leetcoding candidates. Now, many of those same companies (including my current) are all leetcoding candidates.
I have a (metaphorical) rolodex filled with contractors who I've enjoyed working with, which I will always check first before even thinking about ringing an agency.
I have a friend/ex-colleague who I would describe as a master networker. He has connections all over the NYC investment bank and hedge fund IT department world, and can literally call a few people up and get "a" well paying job at a hedge fund in a matter of hours. Some of these connections are billionaire CEOs/fund managers.
The caveat to this is that he has to be extremely unpicky. Said job can be very undesirable other than the compensation - stuff like feeding XML feed files or working with VB, etc. But because they are at hedge funds, they all still pay well.
This is what I did for the first half of my career. It worked well for me because I worked in the same domain for my whole career. Shifting into consulting was easy because I had an address book of people who knew and trusted me.
I'm not sure if it would still work though as I've been working for myself for 22 years. It seems hiring has turned upside down since I last interviewed.
Yup, I jumped into the if you can't beat em, join em camp with leetcode. I Did 160 problems (likely low for many people) before my last job search, and I now make 3x what I used to. I gotta admit it's a hell of an ego boost to crush coding questions in interviews; being completely in the flow and cranking out flawless code.
It makes me wonder how much money I left on the table the last 10 years, because I went the route of great software engineer -> great interviewer, instead of great interviewer -> great software engineer.
Also, I have to say I really came to enjoy doing leetcode, and learned (really re-learned) a lot of interesting things.
Did you just start off doing leetcode questions online and learned from the solutions? I'd study leetcode stuff if I could even start getting interviews to show my skills :/
Yes, and I went against the standard advice to not look at the solution until you solve it yourself. I think for the first 50-100 problems it's best to not think too hard about it before looking at the solution, gaining a full understanding, and writing an implementation or three (building that muscle memory so to speak).
At this point, you'll have many more tools in your kit (graph traversal, search, dynamic programming, queues, heaps, stacks, etc.) and you can work on coming up with your own solutions to new problems. But I found it to be a waste of time staring at a problem for hours when I didn't already have the fundamentals in place to tackle it.
The other thing I did was watch youtube videos to get a better grounding in some of the data structures that I struggled with. I mostly did this wish graphs, as I was always terrible at graph problems and never had to apply them in my career. I found this series of videos to be extremely good.
That part of just following the solution for the first 50-100 problems is spot on. It resonates very well with my experience learning math by first following the "solved" examples, fully understanding them, then solving similar "simple" problems, repeating them till they fit into muscle memory and only then attempting the challenging ones.
First challenge I faced with leetcode is they do not have a concept or technique map. Similar to the chapter index in any math textbook, each dealing with a specific technique, concept or pattern. For example the idea of using a hash to store a running sum is useful for a class of problems like finding the longest sequence that adds to a specified sum, longest sequence of equal no of 0s and 1s. Yet, there was and still isn't a page or resource where such a pattern was described.
Solving leetcode feels like swimming upstream, one problem at a time, looking for patterns. Some are well described (Kadane for example) but most aren't. I looked around the web but couldn't find any resources that helped me with this.
I wonder if we could, at your experience, list some concepts and techniques that can be repeatedly useful. I believe that could cut the prep time by a good degree.
Second related problem to this is retention. With this master technique map, it would become easier to review and revise quickly. (I tried spaced rep, not useful) The most effective strategy for me has been to put everything in one book.I have multiple index pages with lists of similar problems pointing the page numbers with the solution.
I have been able to get better at data structures using this approach now I'm at the leetcode phase.
I completely agree about leetcode lacking a technique map/graph/tree. This would be immensely useful. In my studies I found that I naturally gravitated to classes of problems I was already good at, because that way I could avoid the mental pain of learning new techniques. I really needed a roadmap that lead me to what I actually needed to study, and that showed me where I was strong and weak. But as you said, they never make it super clear which techniques a problem uses, and how those techniques build on and relate to other techniques.
I'm really glad you bring it up, because I had actually been pondering ideas for making a better programming training site based on the idea of a skill graphs (similar to an RPG), repetition to build muscle memory, clear progress tracks based on the graph of skills, and greater insight into your strengths/weakness/progress with metrics.
As far as enumerating techniques, I'd need a good deal of time to work on that. I think there are two classes, the macro, being data structures/algorithms and what type of problems they apply. And the micro, which is more implementation specific techniques. Things like using a loop with two pointers into the same structure (ie: find a cycle in a linked list).
Well thanks for your comments. Feels assuring knowing I'm not alone (although clearly in the minority) waving my hands at how crude and ineffective the common advice to "do leetcode" really is. That training site idea sounds exciting, much better than what exists today.
The key perspective shift from me was from
- "I need to solve 200 leetcode problems before I can approach interviews with confidence"
to
- "Here are 50 techniques. Most solutions use a combination of these"
I started my journey splitting things into buckets (Arrays, Strings, Binary tree, BST, Stacks, Linked List, Matrix, Graphs, DP). I went through EPI and Leetcode populating those buckets. I started solving the easies for a month. Built a repo of questions and links so huge, it would take me years (really, years) to get through it sequentially. That was depressing and with no sense of immediate reward, gave up.
A few weeks later, I decided to reduce scope and focus only on Arrays, Strings, BST and Graphs. Turns out that isn't a great approach either as there are a lot of overlaps between Array and String problems and by the time I got to the string problem that used a technique similar to what I had used in a problem in Arrays, i'd forgotten most of it anyway. Repeated this a few time and it gave me the impression that I couldn't remember shit, I wasn't cut out for this and gave up, again.
My latest attempt is to focus on data structures (properties, strengths and tradeoffs) and techniques. This has been liberating so far but is a lot of work which drove me to look for resources adopting such a perspective and I found none. I believe its probably a lot of work (like you mention) but I wouldn't know unless I get through more problems. ¯\_(ツ)_/¯
Yeah, it's really easy to get overwhelmed by the raw amount of stuff to study. I found I just needed to be consistent, and get through 3-5 leetcode problems a day, while trying to force myself to hit the problems in areas I was weaker. If I tried to enumerate everything, I quickly became very overwhelmed like you describe.
I think if you hit a balance of problems that touch on arrays, strings, linked lists, trees, graphs, stacks, queues, heaps, and also some dynamic programming you'll be good to go. I found that companies really love to ask graph problems in disguise, and once you know how to recognize them and the basic DFS/BFS implementations you're golden. And if you get good at graph problems, trees and linked lists are simple, so I think it's a great area to put extra focus.
I found the dynamic programming problems particularly hard for my brain to grasp, and I had to spend a lot of time repeating the basic problems and slowly building up my skillset. A ton of practice, and I never even got asked a single DP question in all the interviews!
Thanks solid advice I can related as I did follow the same after wasting lot of time on LC problems I cant solve. I have started getting good at LC. Since you landed job at FAANG, I would really appreciate if you can share tips on specific question says finding max path in a matrix it is graph problem but how can you master it so code flows in 30 minutes or less. Did you actually solve same problems multiple times?
If you want the code to flow easy, it's all about putting in the hours and working at the right level of difficultly. Not too hard, so that you're not making any progress, and not too easy such that it's not stimulating your mind. Think of it like hitting the gym, it's just you're building mental muscle (and stamina) instead of physical.
And yes, many problems I solved 3 or more times. If you go to the discussion section, you'll see a number of different popular solutions by users. Try to understand and implement a few of them to get a greater understanding of the problem. Once you feel like you know the problem well, delete all your code, see if you can re-implement it in under 10 minutes, then try again for 5. Keep putting in those reps, you'll get faster.
Think about how fast you can write out a simple for loop. You probably don't even think about it, the code just "flows" out. That's because you've done it hundreds or thousands of times, your subconscious takes over. You can get to that point with more complex things like breadth first search, depth first search, dynamic programming, path finding, etc. you just need to get the reps in. It's a lot of work, but if you put in the time (try for a couple hours a day) you will see the results. And, once you start getting better, leetcode can become addictive like a game, which makes practice much easier.
Can you give some specifics about salary, previous & new role, and location? I see these sorts of stories a lot on here but it seems like they're all concentrated in SF or NY.
And what about job satisfaction, not doing an actual good job and spending miserable time doing leetcode is not going to add much worth to my day to day happiness.
I instead always suggest to do a good job regardless (note that doesn't mean doing long hours just working with care).
There are more important things than career ladder like integrity, honesty, work ethic and meaningful work.
Don't let societal policies compromise your inner values.
I can't over-stress how important this is. Societal trends come and go, and unfit ones eventually go. Stand your ground, and do the right thing, always. You won't necessarily win if you do, but you will lose yourself if you don't.
It is such a tragedy for our industry. Personally, I don't participate. And encourage everyone to opt out.
I want, and do, spend all my efforts in delivering best performing, most secure real products, making customers happy and the infrastructure and code maintainable. I have as much impostor syndrome as anyone (or probably more than most) but very slowly over many years and long string of managers who gush about my performance and always give me highest possible reviews, I've come to accept (if not actually believe) that I'm very good at what I do.
And yet, no way I could ever "pass" one of these whiteboard algorithm monkeydance interviews. A company wants to judge based on nonsense that has nothing to do with the job? Then you don't get to hire me, a proven expert with a track record of success. Enjoy hiring a team of people who've spent their life doing artificial exercises and (as a consequence) haven't put much effort into building actual products.
I do what I can to improve the industry hiring. I do interview lots of candidates and will never do so via whiteboard monkeydance. I interview based on their experience doing real work, based on the resume. I encourage everyone to do the same and put and end (at least slightly reduce) the leetcode nonsense that's killing the hiring culture.
I go "above and beyond" all the time, but not because I think it's going to get me "somewhere". It's the type of person I strive to be, and that's good enough for me.
As much as I sometimes wish I could be rewarded just a bit better for going above and beyond, I have to agree with you here. I appreciate your philosophy.
Ultimately, intrinsic motivation won’t always make us rich, but it might help us be happy and fulfilled. And in the rare occasion that health, wealth and happiness all align, what a good life we can enjoy.
This is so sad to read. I made my way into a tech career in what would properly be described as “hacker” in the traditional sense, though I never applied the term to myself. I came into a ton of formal knowledge and became quite talented through paths that opened with recognition of my experience and skills. I’m going into the job market for the first time in a few years and this is exactly what I feared.
That said, I’m still very talented and I’m not going to let it shake me. Y’all can have the rat race, I’ll go find myself a place I can be productive.
Hoping the best for you. I'm hoping to either follow a similar path, or dodge computing entirely as a career path, find an interesting job, and keep it as a hobby where I have the chance to work on interesting problems. Don't know that I would describe myself as talented though, but definitely driven.
> Hoping the best for you. I'm hoping to either follow a similar path, or dodge computing entirely as a career path, find an interesting job, and keep it as a hobby where I have the chance to work on interesting problems.
I’m at the point I’m seriously considering this, and I’m just not sure I can do it. Everytime I run through the possibilities in my head nothing adds up. The only viable careers for me to switch into are a) not interesting or b) pay depressingly little and would require me to obtain expensive credentials.
There is a point to "staying current" beyond chances in future interviews. Imagine working at a company that has basically found its niche, is doing well, just not growing much so only hiring really slowly. Everybody around you has been there for 20+ years. Everybody working like 20-30 years ago. This kind of bubble is dangerous, not just for the employees' future chances on the job market, but for the company itself. To find the best solutions to the problems in their market, the company needs to stay cutting edge with its tech too. Otherwisr they will get outcompeted in no time.
And by doing so, it profits the employees too. If everybody has been around for 20+ years but stays really current, even just for the sake of the company, their employability stays high too! It's a win-win.
These rants about "I'm back on the job market and now have to re-learn coding" tend to be a strong sign of complacency. "I already went through this and now want peace and quiet, why am I being forced to learn something new?" Well, because the world is evolving. Keep evolving with it, or gradually disappear in obsolescence. If you don't then that's not just bad for your job chances but even for your company. You'd not want to work at a place that still uses VB6 just because it was hip 20 years ago when everybody was hired.
FWIW I work at a company where we are strongly encouraged to stay on top of the game so that we stay competitive in the market. That automatically keeps everybody employable.
I don't think it's a strong sign of complacency. I think people just don't do toy problems involve coding breadth first searches or determining bipartite graphs. How often to people really write dynamic programming algos in 45 minutes. They don't - they think and tinker.
Algorithms can be beautiful to code but most of the time is not spent on this sort of thing. It's fixing null pointer exceptions or parsing json requests or whatever javascript front end engineers do.
Please. Neither the original article nor my comment where about interviews asking to implement a breadth first search. That's a different topic.
This was about him having to learn C# since it wasn't really around 20 years ago. And having to polish up Python cause it was very different 20 years ago. And other programming practices. You definitely need to stay up to date on the stuff that's relevant to your job. Not because of interviews, but because .. it's your job. If you prepare for an interview and notice that's what's holding you back, then you definitely started to grow complaceny in your job. And maybe your environment made you become that way, then it's not a good environment.
If you are up to date on this, then writing a BFS from scratch or debugging a null pointer issue or even json will be a piece of cake. Interview questions are an excuse to have a technical conversation, not to see if you remember some algo from school.
I switched jobs just a few months ago. I interviewed for a couple places. Nobody cared about what I previously did. It was either all algos or architecture.
> Doing an actual good job, above and beyond, is not going to be worth much when you're looking for your next job.
After you've been in the industry for a while, you are likely to be referred for jobs by former colleagues, or even invited by those former colleagues to come and interview at their new companies.
If you excel at your job, your former colleagues will be more likely to do this, because they enjoyed working with you and want to work with you again. They very likely have no idea how good you are at Leetcode-style problems.
> If you excel at your job, your former colleagues will be more likely to do this, because they enjoyed working with you and want to work with you again. They very likely have no idea how good you are at Leetcode-style problems.
Then, once they put your name in, you get a Lettcode-style interview. That's the way every company I have worked for has worked.
This is a truly remarkable take I've never heard before. I honestly wonder if it's true.
If it's actually true--and if poor quality of work and reputation mean nothing, just leetcode--it seems like that is just a side effect of extremely rapid expansion and/or churn.
Because no employer would willingly hire people like that. That'd be absurd. So the only reason that would be possible if the hiring manager never got wind of someone's work ethic or quality. And it seems like that's only possible with enough disjointedness in the people network, combined with hiring practices that don't care about it.
It does sound distopian. However if it's really true then employers only have themselves to blame. Potential employees are reacting to the incentives in front of them.
I currently produce average to slightly above average quality work while being a "Professional Leetcoder". All my performance reviews have been positive. I could produce significantly better and/or faster work by going "above and beyond", but other than a sentimental feeling of self satisfaction, why bother?
> I feel investing anything more than the bare minimum to get your assigned work done is worth less than just grinding leetcode and otherwise studying for interviews.
I totally see the logic. But the problem with this is on day 1 of the new job where you've moved up a level by successfully completing Leetcode-style interviews, you're now expected to do more and know more. And that's hard if you've only invested the bare minimum in your previous job and haven't maximized your learning.
So now you need to not only give more than the bare minimum at your current job, you need to also constantly keep your Leetcode skills up to date.
I understand where you are coming from, but I honestly disagree. I always try and do the best job possible, but I don't do it for the company, I do it for me. I think of it as training to make myself better. I am always looking out for my skills and experience, so when the next opportunity comes around, I'm ready to take it. You could say that it's resume stuffing, but I don't think of it and mean it that way. I want to see how things work and practice what I know. I want to incorporate that knowledge and associate it with my past experiences to figure out new things.
I've been where you were at too. The problem is, no matter how good of a real day to day job I've done and what practical real world skills I've learned, "when the next opportunity comes around" as you say, I wasn't ready to take it - because I got burned by leetcode interviews that have nothing to do with the above.
I too, want to do everything you mention, but until I get past the leetcode gatekeepers, it doesn't matter.
I've never done that and only focused on doing as great a job as possible, and landed jobs at multiple companies many would consider "endgame" without knowing the k-nearest neighbors algorithm. Some companies or at least hiring managers are wise enough to look for what makes a productive individual rather than someone who chases the metric.
> I feel investing anything more than the bare minimum to get your assigned work done is worth less than just grinding leetcode and otherwise studying for interviews. Doing an actual good job, above and beyond, is not going to be worth much when you're looking for your next job.
Does it mean that CV credentials like "developed requirements for a complex system, built it from scratch and overcome significant technical challenges in doing so" don't mean anything, in your opinion? Because in my experience interviewing, things like this get a lot of attention, are discussed in depth and leave impression on the interviewer. I think that my results interviewing would be significantly worse if it was just "fixed bugs and did incremental improvements" instead.
But again, I have very little experience (or desire) interviewing at FAANGs of the world, may be they do things differently?
I worked my ass off at nameless orgs that were willing to hire a no-credential computer science graduate. Always going "above and beyond", built a reputation for getting things done, almost always delivered stuff on time, took ownership, covered up for changing and incomplete requirements, entertained last minute pivots, did what a team lead and architect should be doing even though was always paid as a dev.
This basically meant I spent late nights and weekends at home or office getting shit for work done. I've also on many occasions, put fires out in my own and other teams. I always got flattered in all my appraisals, with all my superiors including the CTO of our org.
Almost 10 years in, I feel fooled for not seeing the forest for the trees.
What a waste of time it all has been ! I get paid the highest that a non FAANG org is willing to pay for my skillset. I always get handed the harder, weirder things and it never ends.
I cannot clear these crazy interviews at these endgame orgs without a heavy investment of time grinding stuff of negligible value. Prepping now is an investment that will take months balancing family time and work load.
All I had to do a few years ago was just stop. Take a deep breath. Leetcode. Leetcode. Leetcode. Get into the weeds of my favorite language. Build a compiler. Get some research published in some journal or write a book or give some talks. Contribute to open source projects enough to get my name in. Schmooze a bit. Market myself more. And let the projects at work go fk itself ( They did end up that way anyway )
Would have paid off more than what my full time jobs have paid me for the last 10 years.
Edit: some comments seem to suggest they learnt a lot of their skills "on the job" and would not have landed their current dream job without it. I am strongly biased to believe there are more blue winged raccoons roaming around in this country than such people who got hired at FAANGs because of what the learned on the job at non-FAANG orgs.
All non-loss-making, salary-paying orgs use standard stacks with standard components in two or more enterprise-y languages glued together with a shit ton of in house coded garbage running in production with some standard relational DB. Go try to make your resume sparkle and stand out with that experience.
You spend enough time in these ecosystems in production and you see yourself keeping a safe distance from anything that is new, look at any new platform with skepticism and quickly realize how painful that upstream swim is to make fundamental changes in such environments. I still have scars to show from the time (among other fun times) I tried to get cassandra into our production systems only to later be told by the cassandra folks to "RTFM, before doing anything fancy" Its a full time job to keep those up and running not some skill a dev would pick up "on the job"
Thanks for sharing! I can relate I am also on a same boat and realized now leetcode is the way out then serving non FAANG org which I thought will serve me well for my loyalty and hard work I gave so far.
Unless you're close to retirement and don't really need the money, it's unlikely you'll know when you're there. Companies change and/or get into trouble, managers change, projects get canceled, etc. I've been at companies I spent quite a few years at and I still came close to quitting for various reasons (and eventually did). I'd submit there is no predictable endgame over more than a 2-3 year time horizon.
You're right that "endgame" is different from person to person, and also in the same person's lifetime.
My current company was something I would have considered endgame at the start of my career. Now it's not.
A company I'd consider to be currently endgame (say, FAANG), may not be 10 years later.
For the sake of discussion, as I mentioned in my original comment, I would simply define an endgame company as one where I'd be satisfied staying for a while without further ambition about finding the next great thing. Where I'd be content doing a helluva great job and not even think about leetcode.
My best friend ended up at one of the FAANGs a few years ago and is doing exactly that. Although he is now afraid that his leetcode skills have atrophied and he'd fail interviews horribly if for whatever (involuntary) reason he ends up having to look for another job. But he has no short term intention of leaving and thus hasn't been grinding leetcode for a while.
I confess that, as someone who has never been primarily a developer (done a number of different things over time), I find this whole leetcode thing beyond strange. I have never in my life studied for interviews other than reading up on a specific company I'm interviewing with. ADDED: And every job since the one out of grad school decades ago has been directly through someone I knew.
You're not the only one. My wife finds the whole thing bizarre. As do my non-techie friends.
My wife's best friend thought it stupid (actually, I agree - it is stupid). Then she started dating a SWE, who is apparently also leetcoding in his spare time.
Early this year I got good at these problems and the ones I would actually encounter, above the average (based on time to solve, efficiency), as well as the system design interviews and I honestly think the behavioral interviews too, but decision makers just do not want to pay me over $180k. Whether thats salary at a Series B, C or midsize company or big tech companies whose total comp would be closer to $400k alongside a slightly lower cash comp
I questioned my competency, how I come across and everything. I subsequently let recruiters push me at the $125k range and I got a lot of offers. It was like a totally different and endearing experience, just like I had seen earlier in my career at those and lower comp ranges
So instead I created and sold some digital currencies for 7 figures
I think I would still like the validation of doing a year or two in the big tech circuit, especially because I could earn the shares and write calls on them without risking my prior capital, while being less likely to incur liability or bring attention to myself like in entrepreneurial endeavors
But I really hate that people are not able to value my contributions accurately. In fact I dont think they are valuing that at all, it felt like people were expecting a different kind of person: more stereotypical unsociable programmer at the higher comp and experience ranges. But regarding experience I also did a resume variation with less years of experience.
You created the digital currencies and sold them? So you came up with your own coin then? When was this and how did you convince people to buy it, unless you had an active project for it (or you were intentionally fleecing them)?
You could possibly get away with that a few years ago when people were throwing a bunch of money away on vaporware ICOs, but it's getting cracked down on more now.
The key for US compliance is to build a form of consumptive utility before the sale and never talk to your actual or potential buyers about the things they want to talk about (future prices, exchange listings). Look at IMVU’s no action letter for the kind of guidance US lawyers have been giving but nobody has been able to talk about. The SEC publicly agreed and I can confirm it matches the guidance given to many projects.
Huh. Okay, I'll take your word on it, I haven't done the research. Is this still a project you're actively working on, or have you moved on to other things?
Its really hard to reply to your leading questions when you're looking for controversy, or put your past troubled experience with token projects onto me (or trying to rationalize a pivot)
Token projects are just SaaS businesses with limited memberships that inherit transferability and settlement on a distributed ledger.
They're also extremely lucrative to sell in the primary market and the blockchain component sells itself.
I don’t understand this line of reasoning at all. There’s only so many tricks available in these interviews. I’m sure I’m biased, but if you know how to program, programming interviews are pretty easy.
I think if you are becoming a Professional Leetcoder, you’re still learning how to do basic programming.
I mean why not both? I worked hard and do my best in my job, but I also do leetcode and others a few times a month just to make sure I can still get another job if I need to.
I am not professional leetcoder, but good enough if I need to in addition to my experience that has been good enough so far.
Because leetcode is way more boring than making things? Also you learn a lot more by trying to do a good job and working with smart people, they are just not that easy to bring out in an interview.
That being said if you think it’s right for you, go for it.
Because it's not the latter that gets you the next job in many cases.
After you've been in the industry for a while, you are likely to be referred for jobs by former colleagues, or even invited by those former colleagues to come and interview at their new companies. If you excel at your job, your former colleagues will be more likely to do this. They very likely have no idea how good you are at Leetcode-style problems.
At which point you’ll have to do leetcode problems in the interview you got via the referral.
Former colleagues in most cases can just get you out of the application lottery - that’s it.
This is less true in PMish roles where there really isn’t a technical leetcode style interview or at the exec level where the friend is the hiring manager or ultimate decider.
In most cases though? Leetcode still gets you the job.
IF yopur #1 skill is grinding leetcode and continually jumping by being an expert interviewer, when & why would you ever stop? Have you not in fact discovered that this is your endgame? The parallels with how we envision hell are obvious...
I did that and found that I hated it. There's a lot of bullshit that you have to deal with in a small business: incorporation papers, taxes, staying away from the zillions of people who try to scam or extort small business owners, sales, finances, etc. If you're wealthy enough that you don't really need revenue and can pay people for that, you'll likely find that being wealthy just exposes how money won't make you happy anyway.
I feel like the people who say money won't make you happy need to have their eyes checked. Sure, piles of money don't do anything, but money among many things gives you opportunity to have experiences with other people, and a buffer from stressful situations, and imo that is the crux of happiness.
Now you can take that flight to see your family members regularly. You can now have a house large enough where if you have guests over they no longer have to sleep on the floor. You no longer are held hostage with the fear that you will be bankrupted by your aging parent's health issues. You can afford to bury your loved ones. You no longer have to make compromises with your children's lives that you wish you didn't have to make. Your basic needs will always be met. You are de facto exempt from physical labor since you can afford to pay others to maintain your life like a prince.
Sure, money in itself doesn't buy happiness. But it buys you a lot of opportunities to be very very happy, and serves as personal insurance towards things that might put the average person into a tent on the sidewalk.
I think when people say that they are assuming you have reached a level where you can meet your basic needs. We are talking about programming jobs here, not cashiers in the local supermarket.
A better endgame might be finding the job that you actually enjoy doing, moment to moment, so that while you're working it doesn't feel like you're working. Never have to work a day in your life and all that...
They’re designed to trick you into acting against your best interests. To push you to spend money you don’t have on shit you don’t need to impress people you don’t like, to quote a witty whoever wrote this.
At one end they exist to inform and offer you a service. I've clicked on ads and purchased and have been better off for it. No tricks involved but it did save me 1/2 off the original price I normally purchase from another store.
Who I am impressing with my canned milk buy?
Ads that show a lifestyle that tricks you into believing you can become something you are not is a small segment perhaps larger on social media. I don't see any of that or if I did it doesn't register. But I do see can of milk for sale.
I go through fliers and get coupons. I get email ads on products I purchased for discounts.
Even those store displays with toilet paper are a form of advertising. I don't mind them and often buy a pack if on sale.
Imo it's not that all advertisement is evil, just the ones that stoop to manipulation by taking pages from psychological research, turning our primal instincts against our own self interests to spend more of our limited money on dumb things or vote for a dumb thing to make someone else money.
Unfortunately for the majors in advertisement these days, that's their bread and butter.
I recently retired after working 29 years in software development. I was always very well paid but a notch below the FAANG-level. I always focused relentlessly on achieving financial independence by saving and investing as much as I could using Boglehead techniques. I can now do whatever I want.
I got a PhD so I started a bit late but I do not regret spending my 20s as a grad student. At least when I started working, a PhD came in useful. I should note that this was a long time ago so my advice may be less relevant today. In general, my advice is to save as much as you can early in your career. Thanks to the power of compounding, $1000 saved in your twenties is worth a lot more than $1000 in your forties.
Thus we're now seeing the rise of Professional Interviewers or Professional Leetcoders. I am ashamed to admit that I too, am one, and probably will continue to be one until I make it into such an "endgame" company.