I'm honestly curious. I have never had to really do either of those things in order to get great jobs that pay quite well. Granted, I don't work for a FAANG, haven't even interviewed for one, but I don't feel any less successful even so.
I'm tempted to think you come off as difficult to get along with, but this is entirely based on your writing style here and may be entirely unwarranted :). I've always found that being agreeable helps an awful lot.
I made the mistake of working for a company for 27 years, and the culture changed drastically, during that time.
I am a very good person to work with. My LI profile is filled with testimonials as to what kind of person I am. I just believe that humans are very important, and that seems to be an "outlier" philosophy, in today's tech scene.
Things have changed. https://www.youtube.com/watch?v=L9EKqQWPjyo
What you can keep in mind is that there are very large amounts of money at stake for software engineering jobs. So it is magnet for every kind of faker you can imagine. So don't take it personally, just be thankful that you are qualified for a job that many people wish they could do.
And yes the whole thing is a game. The people who are good at the game are most likely to win. So just learn to be good at the game.
This is exclusive of any level of seniority, which I like to be flexible on where I can.
While I wouldn’t say this is fraud per se, the candidates were obviously using a shotgun approach to apply to any job in the industry.
I never gave one single test, and I could usually weed out the spammers from a quick glance at their résumé. I often hired folks that didn't "hit all the sweet spots" on their CV, because I found them to be eager, energetic and curious.
Had a couple of bad decisions, but very few.
Much less extreme, but I've also seen many people who looked very similar in their resumes but were worlds apart in how the coding interview went. Some of them could quickly flush out specifications, asking good questions, talk about why they want to solve the problem the way they did, and fluently write code, while many others struggled in different areas or sometimes all of the areas. This is also really important for figuring out which of them we want to hire, and how badly we want to hire them.
How the interview is run matters a lot, and also what sorts of problems you choose. I think it's really important to choose problems that aren't essentially spending 45 minutes on one narrow knowledge test (especially of the "have you already seen this before" variety), but instead test as many aspects of the person's skills as possible. I want to see how they handle incomplete requirements, simple design, thinking about how to create an output format that is maximally useful to a consumer on another team, naming things, thinking about the runtime of different approaches, thinking about big-O space usage, thinking about back of the envelope space usage in bytes, coding, thinking about edge cases, etc. If I had more time I would want to check code reading, testing, and debugging as well, since these are so important to being an effective programmer, but they're unfortunately much slower to evaluate.
[1] I've interviewed people like that as well, and within the confines of the interview I've been asked to run the best I can do is note that I don't think we're able to evaluate them well this way.
I'm spoiled. In my open-source work, I've done some fairly significant (but still below-the-radar) stuff, and got used to basic, simple, respect; without people trying to wrestle me into some kind of subservient role. That's not to say that we didn't have disagreements. Quite the opposite, in fact. I've done Service for some of the most disagreeable people that you can imagine, and left them happy and enthused.
So I actually looked at a few startups. I have a fairly unique conflux of skills and experience that could make an enormous difference in small teams. What I found, is that they imagine themselves to be "mini-FAANGs," and treat their prospects pretty badly. I know that startups tend to have rather chaotic, personality-laced workplaces (see "working with difficult people," above), but if they can't keep that crap out of their triage interview, then the place, itself, must be a nightmare.
I'm working for free, for a friend. I stepped in, because I watched him being set up by contract houses that were obviously going to do very bad work, for lots of money (they barely hid it; I guess because he's non-technical, and doesn't know better). Since he's doing an NPO, and looking at grants for funding, he can't afford that kind of object lesson.
Instead, he's getting a platform that would make a lot of "big houses" green with envy. For free. This is something that I have a lot of prior art in. It's already pretty awesome, and I've only been working on it for a month.
There's a lot to be said (and gained) by simply treating people with basic respect, and motivating them. The workplace is not the military. If we treat our employees and co-workers badly, they won't stick around. If we treat them well, they could do some pretty amazing stuff.
I'm a native Swift developer, with over 30 years' experience programming Apple devices, but I have also written a lot of PHP (backend) stuff, and Web sites.
A few years ago, I spent a few months, learning Android, and decided I didn't like it, but I do have Java and Android Studio in the mix.
I often get recruiters, trying to match me with Web design or C# (nowhere in my stack) jobs.
I'll still get pinged by recruiters for a senior network engineering job in Idaho or some such.
If you don't mind my brusqueness, how are you feeding yourself?
The rest of the country has high variance. It will also depend on the company you're targeting. A lot of target companies have a leetcode interview style (I presume every other interview style has too high of a pass rate).
Here's how I spent today:
I woke up at 5AM, like I always do, and did my two-mile walk. During the walk, I sorted through today's job. I'm working on a social media app, and I'm setting up the baseline (admin) stuff. I needed to add the capability to convert "standard" users to "manager" users (and vice-versa), and I'll also need to add UI in the app (native Swift iOS/iPadOS/Catalyst app) to manage permissions.
I figured out how I would do it. It was a combination of work on the backend (I needed to add some functionality to the admin user layer), the SDK (I needed to add a couple of methods to funnel the UI requests to the REST API), and the app, itself (I needed to add a button to the user edit screen). The tricky part would be the backend work. I needed to do this in a manner that would not invite any security compromises, and would catch errors. I also wanted to leverage the current structure, as opposed to introducing new structure.
Also, I was a dumbass, and used Git submodules in the backend (it's a "layer cake" model). That makes modification a pain.
I don't write stuff down, if I can help it. After my half-hour walk, I knew what I needed to do, and, by 7AM, I had the basic framework in place on the backend. I couldn't test it until I also had the work done on the SDK, so I started that (it wasn't much code).
Since I wrote the backend a couple of years ago, I also spent time, groping around, re-learning it, and getting my head out of "Swift Mode." The biggest mistake I make, is forgetting to end lines with semicolons.
This is where my extremely disciplined coding standards pay off. 99% of the time, I'm the poor schlub that needs to relearn the code, so I make sure that I structure and document very well.
By 9AM, I had the whole stack in place, and there were a number of bugs. I like to test, so I was able to figure out where they happened. Most were in the backend, so I spent a lot of time with Charles Proxy, examining the exchange. Some of the bugs required a fairly substantial architectural change. That's pretty common, so I write in a layered, modular fashion with lots of hooks. Makes that kind of refactoring go smoothly.
By 5PM, I had it all working, but I need to make the app UI better. It needs a confirmation alert. Otherwise, it's pretty much done.
Tomorrow, I'll add the confirmation, and do a lot more testing. This is fairly critical stuff. I can't afford any security lapses here, and I need to make the UX as smooth as possible. Because of the nature of the work, I need to figure out the best way to provide instantaneous user feedback, while waiting for the server to do its work. I'll hammer that out in tomorrow morning's walk. I still need to do the permissions UI, but I won't get started on that, until I'm satisfied that the privilege swap works 100% (I don't move on, until I'm satisfied that my work is at "beta" level, or better).
And I spent absolutely no time at all, practicing LeetCode.
if you're struggling to find even a non-FAANG job but no one wants to work with you - perhaps you aren't as good as you think you are at the things you've mentioned.
not trying to be hostile at all here, just giving you my honest take.
I am trying to go through every possible interpretation I can think of in which saying something like this to anyone isn't hostile, and I'm coming up empty.
Could you elaborate how it isn't?
If a person is consistently upset about not getting what they want, but also not willing to change what they are doing, that person needs a breakthrough. "Maybe you're not achieving your goals because you're not as good as you think you are" can be really useful feedback for someone who is stuck like that. I've both received and given that feedback in an athletic context, for example. It's rarely welcome in the moment, but that doesn't mean it is intended to cause harm; quite the opposite, usually.
I've found people who want to work with me, working towards laudable goals, and I do work that I love. I won't starve to death, and there's the very real possibility that what I'm doing will end well. I'm pretty good at what I do, and what I do, is make stuff that works.
It gives me the luxury of saying "Guv! Why's that chap in the crown starkers?".
Whenever there's a back-and-forth about LeetCode tests, it eventually gets down to "Well, I was hazed, so you get hazed, too."
That sounds like a sensible baseline for selecting engineering staff.
I like coding. I want to enjoy what I do. That's the single most important thing in my life. I spent thirty years, dancing to the organ grinder. I spent most of that as a manager, which wasn't fun.
As for how good? Feel free to look for yourself. I am an open book.
Feel free to write me off. You probably wouldn't like working with me.
I am mediocre at them. Most represent stuff I haven't done. A lot of it is common sense, but I'm solving them for the first time, so my approach is usually sub-optimal (I tend to start with naive approaches, then refine, if necessary). The testers are usually looking for a formulaic approach. A lot of my approaches are orthogonal to the "classics." I started as an EE, so I'm pretty good with things like drivers, SDKs and APIs, but they aren't really something that you can do in a 50-line test.
What's really insulting, is that when I'm asked, I usually send links to relevant gists or repos; often focused on the exact method that addresses the question asked.
It's ignored (so far, 100% of the time -the "faker" comment was made by someone that was explaining why they ignored it).
I also would have been quite willing to work for a fraction of what people that don't have my chops would want.
The worst was working with recruiters. They are downright insulting. Quite jarring.
Whiteboard/LeetCode tests are a flat-out insult to me. I won't do well at them, and I'm quite aware that people spend huge amounts of time, practicing for them, so I don't have a chance.
I do have a few hundred thousand lines of code, dozens of blog articles, dozens of repos, and a decade or more of checkin history. I've been told that I "faked" it, which would be hilarious, if it weren't so insulting.
In the end, I just decided to stop looking for work, and I'm working in a small startup team, writing some fairly powerful software, for free; because I enjoy doing this stuff.
It's pretty odd that the current scene is actively hostile towards folks like me. I feel that it's fairly self-destructive.