Hacker News new | ask | show | jobs
by logicslave12 2140 days ago
I was working on a “startup”/kinda just unemployed for two years. I studied leetcode hard, and got hired into a 300k a year job at FAANG. I know nothing about testing, git, software process, roll outs, dev ops, etc. I barely know how to do software engineering. What an idiotic hiring process.
7 comments

Interviews are only partially about testing your body of experience. They're also supposed to test your aptitude and ability to grow in the future.

If you were capable of studying Leetcode so hard that you mastered the interview process at one of the most selective software companies in the world in only a few months, it's not much of a stretch to imagine that you could apply that same aptitude, ambition, and ability to learn quickly toward picking up the basics of git, dev ops, and so on.

Arguably, this is one of the benefits of Leetcode-style interviews. They focus on core software engineering aptitude, while not arbitrarily excluding people because they didn't use the right VCS at their last job.

Err, but why do you have to prove it for every next job?...

In reality, it's a legal way for:

1. Ageism - not many seniors are desperate enough or have a free time for Competitive Programming preps.

2. Making switching jobs harder - for every next job one has to prepare again, because nobody is using Competitive Programming stuff during real work, so you forget.

Keep in mind that CP != CS.

And CP is not everyone's cup of tea. It is a separate discipline/subject with its own trivia knowledge & tricks. CP uses Computer Science the same way as e.g. Physics or Biology use Math.

> why do you have to prove it for every next job

Obviously, each company can't blindly trust the interviewing practices of everyone's previous employer.

> Ageism - not many seniors are desperate enough or have a free time for Competitive Programming preps.

In my experience, senior developers don't need anywhere near as much prep as junior developers for these interviews. Leetcode problems are difficult when you're a new college grad with zero years of programming experience. They're significantly easier after you've been programming for 10 years.

> Making switching jobs harder - for every next job one has to prepare again

Companies aren't going out of their way to make it harder to hire good employees into their own companies.

Leetcode isn't an industry-wide conspiracy. Companies are using it because they believe it's a good filtering mechanism for candidates. When the Big N companies have higher rejection rates than Ivy League universities, they can afford to be selective.

> Keep in mind that CP != CS.

The problems are designed to test CS skills.

How else would you suggest reorganizing the interviews to test for CS skills?

> Obviously, each company can't blindly trust the interviewing practices of everyone's previous employer.

Yet, they copycat each other on this.

> after you've been programming for 10 years

...as I said, you're not desperate enough, so you become picky how you spend your time.

> Companies aren't going out of their way to make it harder to hire good employees into their own companies.

Lowering the churn rate has a higher priority.

> The problems are designed to test CS skills.

No, these problems are designed to test CP skills. Even Norvig admits it has nothing to do with being a good dev/hire: https://www.youtube.com/watch?v=DdmyUZCl75s

> How else would you suggest reorganizing the interviews to test for CS skills?

How Caltech, MIT, Harvard, ETH, etc... test for CS skills? Certainly not with CP riddles - unless you take a CP course, which indeed is a separate [optional] course at some of those universities for interview preps specifically.

Very few companies to need people that have very strong CS skills. CS skills are mostly useful for doing CS. For example designing and analyzing an algorithm that’s more efficient than any other algorithm at sorting integers with an average of 10^40 digits on a three tag Turing machine.

While CP skills also aren’t terrible useful for most companies, they are closer than CS skills. What’s really needed are software engineering skills but unfortunately our most prestigious institutions think it’s beneath them to teach that.

I've been programming for 10 years and I'm pretty good at it, at every job I've had I get lots of praise and recognition and accelerated promotions. But I have a hard time with leetcode problems and have failed several interviews because of them. It's not that I can't learn the leetcode tricks, it's that I don't have the motivation or the time to drill for months on them so that I can retain all the tricks.

I don't have a CS degree so I think that might be the difference, I didn't get to spend four years thinking about algorithms and data structures. Leetcode interviews are a form of gatekeeping that CS degree people use to filter out non-CS people.

I also don't have a CS degree, and got hired at a FAANG company. If you want to quickly get up to speed on the data science basics, check out "Cracking the Coding Interview" by Gayle Laakmann McDowell. Her YouTube videos are also useful. Certainly, there are other methods, but this is one that I found useful.
>Obviously, each company can't blindly trust the interviewing practices of everyone's previous employer.

But even two teams within the same company often don't trust each other's interviewing practices though.

Transferring from one team to another often requires doing the same algorithm interview that new hires go through, even though you were good enough to get hired in the first place and are ostensibly a better engineer than when you started with the company.

#2 doesn't make sense, though: If I'm company B, trying to poach from company A, it would be in my best interest to make the leap to applying/interviewing less difficult, not more for employee's of company A.

Unless you're implying a set of companies are all in league with each other to reduce churn/competition for talent

> Unless you're implying a set of companies are all in league with each other to reduce churn/competition for talent

They have been caught doing so in the past. [0]

[0]: https://en.wikipedia.org/wiki/High-Tech_Employee_Antitrust_L...

FAANG don't really want to poach each other that much, as a sibling comment says, they had been already caught in the illegal non-poaching collusion. But even without any such collusion active they undestand that people would jump back and forth between these comapnies, ratcheting TC up every jump.

What they need is that somebody who passed the interview believed it was a lucky break and would not tempt fate trying a similar interview at another company. If they considered the interview just a filter, they probably would not be so lenient with letting people to apply many times and even encouraging this.

> Unless you're implying a set of companies are all in league with each other to reduce churn/competition for talent

This is a proven reality, and has been out in the open for a long time.

Then a few links to those proofs should be easy to produce?
> If you were capable of studying Leetcode so hard that you mastered the interview process at one of the most selective software companies in the world in only a few months, it's not much of a stretch to imagine that you could apply that same aptitude, ambition, and ability to learn quickly toward picking up the basics of git, dev ops, and so on.

So by that logic, why not just create some game for candidates to master. If all you're testing for is "how much they want it" and how quickly they pick up on some arbitrary system that they'll never use in their actual job, then the subject shouldn't matter, right?

> So by that logic, why not just create some game for candidates to master. If all you're testing for is "how much they want it" and how quickly they pick up on some arbitrary system that they'll never use in their actual job, then the subject shouldn't matter, right?

You have reinvented the Chinese civil service examinations, congratulations. More generally the higher stakes a test gets the less the subject matter matters. If you make admission to Harvard or Cambridge based solely on interpretation and knowledge of pre 2000 rap it won’t be long until the same people who would have done well on a test of English literature are intimately familiar with Tupac.

They already have. And at the time it was being developed and gathering momentum, some plausibility as a thin defense of it was helpful. Why go through that process again now when the existing system is already firmly in place?
There's no reason to believe that being able to learn leetcode tricks is a better sign of aptitude then being able to learn good software engineering practices.
> it's not much of a stretch to imagine that you could apply that same aptitude, ambition, and ability to learn quickly toward picking up the basics of git, dev ops, and so on.

But you already have your reward, right? I’m not sure how much ambition is left after you actually get the job.

Promotions can double your salary or more from that level so people are plenty motivated.
So can job hopping. In fact, IIRC staying at the same company earns you less money than finding a new job every two years or so.
That’s definitely not true at companies without incentive systems.
How did you get past the resume screening? Or are you from the US, because then it's much easier to get past the screeming, or so it seems.

I have yet to be invited for so much as an HR call when it comes to FAANG (bachelor/master CS from a Dutch university). Maybe I'm not getting past the application tracking system?

Having a current employee add your resume to an ATS as a referral is the most efficient route. Around SF at least it's not particularly hard to find someone willing to do that even if they hardly know you. This sort of networking is likely harder elsewhere, but perhaps not by much.

Simply uploading your resume to a large tech company's website will rarely get you anywhere, is what I've heard from recruiters.

Ah, so that's what I've been doing wrong for 18 months. Thanks! I'll be putting this to good use :)
Second this. Internal referral is the most reliable way to get in the door in my experience.
Most likely you either don't have 5 years of professional experience or they are filtering you based on visa/citizenship status. The industry is very broken.
The recruiter just reached out to my LinkedIn profile. My understanding is it’s really easy to get the interview
Your profile must have been pretty solid to get those interviews though. In my experience, just having some proof of knowing Python scripting is not enough. Would you mind discussing the other pieces of your background that you think may have helped in attracting recruits?

I almost wonder if throwing “leetcode” in your skills section would get you interviews at these companies...

Let me ask you this: Do you think you are doing OK, or even great, comparing to your peers at your company? If yes, then I would say the hiring process is more smart than idiotic.
Can you share some tips on how you achieved this? What did you do if you got stuck on a question you just couldn't solve? Did you look at the answer and memorized it? How many questions did you solve? Were they mostly mediums or hards? What about system design, any specific resources you used?.

I keep coming back to leetcode every few months but I always get stuck on mediums so I'd appreciate any tips you can share!.

Were you not asked to do system design, or leetcode did enough for you on that?

Edit: assuming it's not your strong area based on the list of things you claimed not fluent with.

Do you think it's unlikely for you to learn those skills quickly? People who have all those skills earn over $300K at those companies.
To be fair, a lot of people who have none of those skills also earn well over $300K at those companies. Just like grinding leetcode can get you in the door, the skills you need for advancement are not necessarily the same ones you need for making good software.

I hope the parent makes the best of it and becomes good at the craft, it will make the job a lot more enjoyable even if it may not be the fastest way up the ladder.

> the skills you need for advancement are not necessarily the same ones

Exactly this. I suggest learning how to fabricate (or at least exaggerate) "impact" to get promoted. It's the fastest way to make money once you're in the door. Show how much of a team player you are to deliver cross-team, impactful results specifically by stepping on bodies to get there--it'll make you rich!

Could you elaborate more on that or perhaps give specific illustrative examples of how one may do so? This will benefit a lot of us at FAANG. Thanks!
My experience of FAANG interviews outside the US is that the salaries they offer are really disappointing compared to the US. Other industries like finance were a better deal compared those companies. If I can get paid £90-110k in the City why bother working for Facebook were they were offering less than £90k? Note, I don't consider bonuses or equity to part of salary.
Why would equity or bonuses not be part of the salary ? You are almost certain to receive it and the stocks perform quite well on average.

They still pay better than finance all things taken together or am I wrong ?

Bonus is not guaranteed so why take that into account?

Stock maybe but you can't pay the bills with that or get a mortgage even can make it more difficult.

At Google more than 97% of engineers gets the bonus, only people close to getting fired don't get it. If you think there is a risk you might be in that bottom few percent then yeah, but most people never fail to get a bonus.
> Bonus is not guaranteed so why take that into account?

Bonus is not guaranteed only if you're about to get fired. Even lowest ok performance grade at google (CME) will get you 15+% bonus. But it's not a whole lot of money anyway. Stock is where you make bank.

> Stock maybe but you can't pay the bills with that

Only at private companies. FAANGs are all public and their stock is as good as cash. You can trade it for raw cash any moment the stock market is open (except during trading blackout windows before earnings) and pay your bills with it

The bonus is pretty formulaic with fixed performance multipliers - if you're doing poorly enough to get substantially less than the target bonus, you're at risk of losing your job and comp is the least of your worries.

And you absolutely can pay the bills by selling the stock when it vests. Agreed on the mortgage part though.

What's the typical vesting schedule? The companies I spoke you would get the equity after four years. Not even a part each year. The offered 0.00[0]5 equity is not great.

I think the packages in US are just much better compared to UK/Europe or maybe they just gave me shitty deals. My offer at one of the FAANG in UK was £85k + 50 stock + discretionary bonus (they didn't give details).

You sell the stock when it vests and pay your bills ?
“ Note, I don't consider bonuses or equity to part of salary.”

Depending on the company and how much the stock appreciates this can easily be +50% of your total take home so I’m not sure why you’d discount it.

> Note, I don't consider bonuses or equity to part of salary.

Tell that to the tax man

It’s been really stressful. I know python, but not really any other languages. I’m able to get work done. But I’m really nearly the same as a fresh grad. But really, I was just bumming around, then studied for four months and destroyed their algorithms questions, so much so that expectations for me are really high. But all I know is leetcode, literally nothing else...
Being on other side of the interviews like this , trust me most interviewers know that .

The logic being if you can pick up leetcode in few months you can pick up most things on the job fast.

Understand that interviewers are first and foremost are looking for ability to learn and understand complex topics , it is not all that important which specific topic it is.

nobody really knows what you will be working on by the time you join or 6months later , even if the interviewer wanted to it he is not able to ask the right questions beyond the basgics.

Also university education in IT is woefully behind the industry. Functional programming, or dev tooling is barely covered in most places . Maybe they teach MVC a bit , I don’t expect most kids to understand CQRS or event programming .

Similarly I would be pleasantly surprised if you have setup a simple app, I wouldn’t expect you to know nuances between different cloud vendors , or have experience with zipkin,istio, helm , grafana or similar tools or be able to grok a explain analyse and fine tune a 500GB dB.

it is unlikely a fresh grad has production experience at best they may already know some frameworks and maybe developed a few small apps of their own, however working in large project with 1m+ lines and complex tooling is a skill that takes time to learn , there is a lot of gotchas in every area you will learn only when you see it .

So all I am left with is, does this candidate know the basics , can he understand and learn fast .

That is why these questions make sense for junior developers and never for senior devs.

N = 1 but here we go. Let's look at the CS bachelor/master offered at the Vrije Universiteit Amsterdam [0]. The truth is probably somewhere in the middle and I understand that university programs are heterogeneous.

So let's look at my university experience and use your post as a checklist, for funzies! :D

Functional programming: covered

Dev tooling: covered to some extent through electives where you'd teach it yourself (I also call it the Magical Course) [1]

MVC: Magical Course

event programming: never heard of it :) Reading the wikipedia page, the following courses will probably help in aiding understanding:

+ Hardware interrupts: kernel programming, binary and malware analysis and hardware security

+ User events (e.g. via JavaScript): The Magical Course and Computer Graphics

CQRS: never heard of it :D And while I get the need when reading the article from Martin Fowler, I do not have a backlog of knowledge where I've encountered this before.

Simple app: computer graphics, the Magical Course, Distributed Multimedia Systems (the practical assignments were in HTML5/JS).

Cloud vendors: nope, I learned about that when I started teaching for a coding school

zipkin, istio, helm, grafana: never heard of it :D

be able to grok a explain analyse and fine tune a 500GB dB: No. We did learn SQL though and how to model relationships with UML and entity diagrams.

it is unlikely a fresh grad has production experience: I do, because my thesis was harder than whatever production experience I was acquiring. Going to work as a web dev and web dev instructor was my form of fleeing for my much more difficult thesis. Also, computer graphics taught me volume as my OpenGL engine was 10K lines of code. The Magical Course allowed me to produce an app that I sold for 2000 euro's.

Diving into a 1 million line codebase: We did that way too briefly (the Linux OS) for just 15 minutes, unfortunately. The startups I've been at had about 100K lines of code for their complete product. In other words, a lot of companies don't have a 1M+ codebase.

Anyways, when you have someone from the Vrije Universiteit Amsterdam, you can have some idea of what they do learn ;-)

[0] My knowledge of the curriculum is a bit stale, so it could've changed.

[1] Whenever I use this sentence, I happen to refer to one course where the teacher decided not to really teach but coach and the goal was to teach yourself whatever you wanted. I happen to have learned a lot of practical stuff that otherwise wouldn't be covered. So did many others. What did I specifically do? I created an iOS app by following Hegarthy's Stanford-based iOS course online ( https://www.youtube.com/watch?v=gI3pz7eFgfo ).

Firstly, thank you for sharing :)

Yours is above the par learning experience than most fresh graduates I have encountered. When we hire in Eupope I would very interested to try and convince some of your juniors to join!

> The startups I've been at had about 100K lines of code for their complete product. In other words, a lot of companies don't have a 1M+ codebase.

Most large companies who are also large employers sadly do have such complexity. In a startup it may not a single repo at 100k+, however overall 100+k lines for the product is very low for Saas product over two-three years it easily goes beyond.

My N=1 in a startup: we went from one monolithic 300-400k+ L repo to a ton of repos with each one perhaps < 100k . Traditional large codebases are not designed for releasing 4 times a day, even builds can take a lot of time [1], Smaller repos does not mean complexity goes away, developers need to still document, read and understand how it works. It applies also when you use libraries or third party services, while number of lines have become less, you need a lot more domain understanding.

> be able to grok a explain analyse and fine tune a 500GB dB: No. We did learn SQL though and how to model relationships with UML and entity diagrams.

The reality is that most jobs are not developing new apps from scratch, it is lot more likely to work on older codebase that has its fair share of kinks.

That means I am going to throw you deep end into large sized DB. Schema perhaps has evolved over time as product vision keeps changing, a dozen 'architects' have messed about it. In a typical job, you will be fixing bugs more than developing new features, handling tech debt - it doesn't matter stupid mistakes were made before, you still to work with/around those mistakes as someone will have to work with yours.

Even on theoretical level NoSQL is not well taught in universities. Purpose built dbs for graphing, Time Series, KV , document DBs, search indices are all important to really understand. Each has solutions to specific problem set and come with their limitations. In a typical basic storage stack there is going to probably be something like Redis|PostgreSQL|ElasticSearch: all of them solve more than one type of storage problem in more than one way.

This isn't to say the that is it all bad. Education is evolving , universities are more open to longer internships, while most don't think software engineering (not CS) should be treated as vocational course, there are positive trends. Alternative learning avenues have opened up like Coding Schools and Bootcamps who do lot better job at focusing on job skills.

[1] https://news.ycombinator.com/item?id=18442941 This is infamous post, and of course the extreme example, but you get the idea.

Ha! I remember the source you mention [1]. 25 million lines, haha. Man-made software mountains :)

Thanks for reading my comment by the way. I wish I had more time so I could write succinctly. If you're ever in the position to hire people from my uni send me an email if you'd like some introductions to professors and what not.

> Alternative learning avenues have opened up like Coding Schools and Bootcamps who do lot better job at focusing on job skills.

Ah, got you there! ;-) *

* Probably not, but it's fun to imagine that I did for a second.

My first job out of CS was being a web development instructor. You might think I wasn't qualified, since I never touched NodeJS in my life and wasn't super familiar with JavaScript. I told them this but my teaching skills were really good so they gave me a unique challenge.

My challenge: make one NodeJS app in one month. I pried a bit what they wanted me to showcase, and they'd be happy with a custom blog that had user login, CRUD on blog posts and user registration.

In that month I made:

- A voting app for the game Werewolf of Miller's Hollow / Maffia

- An online sentiment analysis app based on my bachelor thesis

- A simple CMS designed to list all the hackathons in The Netherlands (though you could also retrofit it into a job board or party calendar)

- A blog app with the extra feature of adding markdown to it (what they actually wanted)

When I showed all this to them they asked me: you learned this in a month?! The thing is, I think most of us CS grads would have. And I think a lot people with a master in CS wouldn't be surprised that I created 4 apps within a month instead of the blog app only.

It's all function calls, for loops, if-statements and variables in the end. Sure, JS has closures, but we had compilers in class, so understanding on a high level the JS engine internals work, it isn't that hard. The same goes for callbacks, promises and all the other fun JS stuff that makes JS quite unique. *

* I use the debugger a lot when I learn a new language. I do think this is a super power since not many programmers seem to do it, but it gives a lot more context. It's the only way how I was capable of getting a foothold to understand X86-64 in binary and malware analysis. I'm pretty bad at simulating code in my mind, but now that I've seen it 1000's of times in debuggers, I'm a lot better at it.

Moreover, even in 2017, the resources available to self-teach how to do it were available and I self-taught everything via the official NodeJS documentation, code school and random YouTube tutorials.

So, in my case, I've seen both sides. Ironically, I became one of the best JS teachers by virtue of my CS education (and my upbringing, had to teach family members a lot of stuff). I know what coding schools teach, IMO the CS education I had was superior to that. Maybe not in time effectiveness though, but of those 6 years I spent on it, I'd say that 1.5 years was super useful, 1.5 was useful and the other 3 years is where I got C's anyway and did other things to enrich my life (such as a course on Buddhism) :)

Take the same energy and apply it to learning to build testable and understandable code. If you can go from nothing to smoking an algo interview in months you’re a fast learner. You’ll be fine.
I think that's what these leetcode type questions are good at. You're either naturally adept enough to do well, or internally motivated enough to memorize/learn them. Either way, it's a decent signal for a company that needs someone to learn their internal, proprietary techstack
> You're either naturally adept enough to do well, or ...

I'm personally very wary of using algorithms questions as a proxy for how "adept" someone is at software engineering. If I were running a business, I'd personally want to make sure people could manage technical debt and build decoupled systems.

I have had multiple positions at FAANG companies, and despite being "adept" according to these algorithms questions the systems built by these highly-paid (and, around me, generally experienced) people are pretty awful in terms of quality and maintenance.

Learning a proprietary stack also hampers effectiveness in future positions if wanting to opt-out of FAANG later on.

I have observed this problem and usually it’s not because the people are incapable but that the incentives are to ship things that move the needle to quickly get promoted. The financial rewards at these companies from promotions are huge.

Where the managers have incentivized quality and stability my team mates have moved mountains and I’ve seen some really good stuff but otherwise not.

Why do you suppose these hires aren’t good at learning engineering best practices? I see comments like yours here all the time. Is it some kind of arrogance, perhaps amplified by a false signal sent by getting hired off leet code questions in the first place?
I partially agree but this point of view has become very polarizing and controversial and I get the other side of it too. People who have spent ages getting better at their craft feel undervalued. However the two need not be mutually exclusive. One needs to learn to do their job while also navigating the system. That is part of the job just like selling your work is also work.

But having worked at both FANG and non FANG you can see the rigor of the interview process reflected in the quality of your colleagues. That’s something that is hard to deny having experienced it.

You know algorithms (not leetcode). Most people struggle a lot with algorithms. It's the reason a lot of people flunk out of CS programs. That's why they hired you. If you can solve these problems on a white board, you can write the code in a programming language.
What was your prep strategy?
That’s because at FAANG those problems are already solved. And there’s a team of experts working on each of them. Maybe multiple teams.

Your job is to be a clever code monkey. The Process will take care of turning your coding into engineering.

Leetcode interviews are great at testing for just that. A high IQ willing to solve arbitrary puzzles just because someone said “solve this”

Even at my mid tier company we have processes around the crucial but (to me) boring parts of the software industry, which involve building, deployment, version control, access control, connection drivers, requirements gathering, provisioning of resources, maintenance...

The list goes on and on and if someone doesn't do any of these things, the whole operation will grind to a halt. And absolutely none of these procedures involve reversing a linked list or traversing a binary tree inorder (maybe git does but that's an implementation detail hidden from me ^.^)

But people are taught the basic boring skills required to deliver value in a big org in the first few months and very few fail to learn them in that time, they are by far the easiest skills to teach in software development so it doesn't make much sense to test it when hiring.
Correct. And as far as I can tell, devops folks don’t do leetcode interviews. Most SREs don’t either.

At my last interview process (in June) I was being hired into a more seasoned role where experience matters more than code chops. There was an algorithms question but the biggest weight was put on the “Can you design a distributed microservice infrastructure with good tradeoffs and solid relational modeling”

Series A company so it’s conceivable that I’ll be involved in all parts of the stack.

If I just did well on algorithms (I didn’t) and nothing else, it would be a hard no hire. But they were very impressed when I said “Eh for this load, you don’t need horizontal scaling except for redundancy”