Now that I am 51, I feel annoyed that all of these stories of interviews involve asking questions about algorithms that rarely come up in real coding, and if they do you should NOT be rolling your own code, you should use the established, battle-tested solution that is out there on the internet if you spend 60 seconds looking for it. Much more important is to have the experience of how code complexity accumulates, and how to mitigate that. I cannot spend hours and hours studying up on these algorithms, there are much more important things (real coding-related things) which I need to learn about, to the extent I have time to do that. What should I choose, pytorch or keras? React or Vue? Go? Kubernetes? Spark? All much more important questions than how to do a breadth-first search.
So, was I wrong then? Or am I wrong now? Perhaps both.
My frustration isn't exactly like yours (my time is probably a lot less valuable). I feel that the questions are all geared at puzzle solvers.
If you're a puzzle solver, you love answers. You love digging into the details. You love finding out the basic components of a system. I think these are the people who excel in academics.
Almost every other intern I met once I got to the bay area was a puzzle solver. They were also competitive and had amazing grades. And these people LOVED algo questions. Over lunch, they could go through half a dozen questions.
I slipped through the cracks I guess. I'm bored by puzzles, have awful grades (and in a worse program), and not so competitive. What I do enjoy, however, is building up. I like modeling and being about to think at greater and greater levels of abstraction to solve problems that aren't puzzles, but instead open ended questions.
Anyway, I think both of these types of people have a place is software, and only one is given attention
In my opinion, you will do well if you focus on building your own business sooner or later.
I'm no expert but I know a logistics company that has the 30 workers 1 puzzle guy setup. He maybe writes 20 lines of code a week but its on stuff other people cant figure out. However if he was the only type there literally nothing would ever get done.
I've been out of college more than 10 years now, do a mix of hardware and software (so am not coding all day everyday) and I can hack together algorithms like BFS if I spend a couple of minutes thinking about it.
I get that there are many awful interviewers out there and that hiring is pretty broken, but BFS seems like a pretty reasonable interview question, so long as the interviewer talks through what it actually needs to do and isn't only looking for a memorized answer. The question is well contained, doesn't require the candidate to know any specific API or framework, and can be implemented in pretty much any language. Probably the biggest downside to it is it's such a common question that many candidates study it ahead of time which makes it a worse filter.
BFS is not something I thought about much in the last 5 years, and quite frankly could care less about. I got stuck when I knew I needed 'something' to finish implementing BFS, but couldn't remember and the google interviewer offered no help. What I couldn't remember was the queue.
But, if you explain what it is in words, and have them whiteboard how to turn those words into pseudocode or somesuch, then it could be a appropriate, sure.
> was I wrong then? Or am I wrong now? Perhaps both.
Neither, I think. The Algorithm interviews are bad for 90% of the positions out there, and experience matters much more than trivia, so you were right then.
And today, everyone is trying to hire "senior" (and above), so there's no concept of "will learn, lacks experience" - and the algorthm questions do badly at identify THAT, so you're right today too.
It turns out that interviewing is hard, and we don't know what works well. Most of us think "we" are the ones that can obviously see what's wrong and everyone else is interviewing poorly. Most of us are wrong.
But even besides that, we need to focus more on getting newer coders that DON'T have experience. We'll spend years looking for people that have experience...longer than it would take to grow that experience. We want seniors because we want people that will grow without being mentored, because we have far more work than people...but we skip one of the ways to reduce that workload.
I'd much rather have an interview that was teaching something new, and see how the person processed it. That's not a good interview either, but at least it is trying accomplish the correct goal.
And when we do interview for senior and above, experience will count a lot more than building a frickin' linked list.
Cowen’s Second Law: There is a literature on everything. Hiring is no different. Why do so many of us that say “of course you shouldn’t reimplement timsort, stand on the shoulder of giants” either make up an interview process based on gut feeling or cargo cult one based on what we heard google does?
1. The first interview must not be a technical assessment — identify shared interests, look for collaboration opportunities. You need to understand if the person in front of you will be someone you would work with for the next 10 years, their current technical skills have little to do with this.
2. At the end of the first interview, right before the logistic questions, assess how they position in the junior-senior axis — either with direct questions or by pushing them to the topic. Once you‘ve done that ask an evil surgically difficult question — the correctness of the answer is not what you‘re looking for: pay attention to how they present their (eventual) missing knowledge, or how the address the answer by giving context. A senior developer doesn’t know everything, but must know enough to manage gaps in their knowledge.
3. Search for young and talented people — search for the fire in their eyes. You want someone which, eventually, will reach goals by their own.
I know this is off-topic, but you can't go wrong with Keras. "Deep Learning with Python" by Francois Chollet (the creator of Keras) is a Kernighan-level book. A book like this comes around once a decade (or two). If you decide to go for it though, make sure you don't follow its instructions about the amazon cloud deep learning VM's; you'll end up paying $10 per day, even if you stop the VM.
What would you recommend as the alternative for someone without nvidia gpu? Google colab?
Me, I tell them in the first phone screen, "I'm a Systems/DevOps guy, I don't do algorithms and whatnot so I'm just letting you know in advance in case you ask me to whiteboard something like that." So far I was only spurned once out of half a dozen screens employing this statement.
If you want to screen liars, there are a million ways to do it. Truth is, folks, most interviewers don't read resumes in depth, and they're not clever enough to interview for honesty.
But I might try to do some algorithm type interview, but wouldn’t feel bad if I bombed it. In fact, the only algorithm type interview I have done in the last 10 years, they made me an offer but I declined it for another job that asked more architectural questions.
The way I see it, if I could write 65C02 and x86 assembly language programs in the 80s, I think I can handle the needs of your software as a service CRUD app.
Usually, I'm just looking for one thing the candidate does well. There's really not much room for lying and if they claim to have some crucial skill and then I discover after the fact that they don't, that's grounds for dismissal.
Everybody here seems to assume they are trying to filter for the good candidates...but what they are actually trying to do with these kind of interviews is filter out the bad ones!
Because the damage when hiring a bad candidate is much higher than the damage from missing out on a good one!
I get that this is the conventional wisdom in a subset of this industry, but in my experience this "truth" does not have as much objective support as the people who keep repeating it think it does.
The top companies with these leetcode tests probably don't care that good people being rejected or avoiding them because of the amount of preparation required. Middle sized companies and startups doing leetcode tests are missing good people and probably can't afford the same number of false negatives as someone like Google with an endless supply of candidates.
I would much rather spend a weekend doing a take home test and showing how I actually work than being asked to write irrelevant code on a whiteboard. I think leetcode style interviewing is driven by time constraints of the interviewer and some more effort and thought needs to be put in on how to choose people based on the specifics of the actual role they are hiring for.
I think the counterargument might be that at our age, you should have a network of people who will hire you just based on your stellar performance on previous jobs, if you're that experienced and sophisticated.
If you somehow don't, well, maybe you need to brush up on your tree balancing skills...
This is exceedingly rare... so you wrote a HashMap implementation in Java?? None of the custom maps discussed [here](http://java-performance.info/hashmap-overview-jdk-fastutil-g...) were enough? It must be a really rare problem you're working on if there's no library that provides an acceptable solution for it in Java.
> I would rather work with someone who knows how neural networks really work rather than who knows pytorch or keras
I would rather work with someone who knows general programming (which is not the same as algorithms - there's so much more to it!) and software design... but if working on a product that uses a framework heavily, good knowledge of that framework can be the difference between getting things done in minutes VS weeks (of painful and time-consuming battling with the framework to do thing the way you think they should be done, rather than how it's done within the framework).
More mundanely, when I was starting out at a small shop (I'm around your age) my coworkers hadn't mastered undergrad algorithms, and it made a significant difference in what we could do.
It's unfortunate that attempting to test for this seems to have encouraged too much memorizing of known tricks relative to better mastery of principles.
That's so right. But that is experience, so I think when you know most the candidates don't have it, you end up looking for other stuff to test, and then your interview process gets infected, and eventually when you are interviewing for positions that should have experience, you get a lot of the same bullshit questions.
There are plenty of stories here of novice programmers doing some passion project, and 6-12 months after learning to program they are busting out some fairly complex algorithms that to someone that took the long route of getting a CS degree can look somewhat amazing, and frankly, humbling. But I think what's going on is that's the easy stuff to get a hold of, because all it takes is some judicious googling, or more likely, asking some professionals from help, and you're pointed in the right direction for the tool that solves your need, so you use it. Getting amazing progress on a new project isn't really hard.
Getting sustained progress, or being able to fix your problem a year or two in once you realize a major architectural change is required, and not being bogged down for months and losing interest, those are amazing, and those take experience or constant mentoring to achieve usually.
Or maybe I'm just projecting what I currently value.
This then becomes representative of your experience in spite of that fact that you are never likely to be confronted with that kind of problem with that kind of timeframe. Whatever's on your CV, and whatever you can say about what you've learned over the years, becomes totally irrelevant in the face of that.
I think it's offensive and I don't like how the industry has standardised on basically assuming everyone's a bullshitter. What's worse is that you'll have to repeat this over and over again for any company you interview with.
To that extent I'd much rather see the formation of a professional body that offers a trustworthy credential, potentially one that you need to renew every couple of years to ensure you're still current. That comes with challenges of its own but I'd rather have something that is both verifiable and can be reused.
Don't think this is true. At most tech interviews, the algorithms portion is more of a technical bar. It's usually the CV, years of relevant experience, and performance on the architecture/system design interview that determines what leveling you are.
>To that extent I'd much rather see the formation of a professional body that offers a trustworthy credential
Every company values different things from their candidates, so I don't think a formal interview process will ever go away. That said, there are companies like Triplebyte that try and standardize the interview process - they usually don't ask algorithm questions either. It's not quite a certification, but they'll fast-forward you through the interview process at companies that use them.
I completely disagree with you, because how do you define rare. In my case as a JavaScript developer many cases commonly considered rare are in fact exceedingly common and important, but considered rare due to tooling and people hiding from them. When the reality is invented here syndrome every problem is either a configuration or rare. I make it an important point to attempt to discover this distinction when I am interviewing for a new position or interviewing new candidates.
I have often seen weak developers promoted to senior because they are good with tools, trends, and configurations only to struggle in the face of an original problem. You can't simply hope to download your way out of every development problem and hope to be taken seriously as a senior. That reality is something many people are unwilling to accept at great emotional peril.
In the UK I've interviewed at dozens of companies and never once been asked to code a breadth first search or something like that. Nor have I ever heard of a developer being asked to solve such things in interviews over here.
Are "real code-related things" really much more important if it only takes hours and hours to learn something that might get you an offer at one of these companies?
Perhaps those hours and hours are actually far more valuable 'financially' speaking than a lifetime of studying code that is valuable 'technically' speaking. I don't doubt that some of the big name companies use rarely-used algorithms with battle-tested solutions on purpose JUST to see if you prepared for battle. They look for non-technical smarts because they have no shortage of technically prodigious applicants.
At Google, with over 400 applicants for every position, they have no shortage of technically-competent engineers. They look for people who think way outside the box and try new things, sometimes resulting in industry defining inventiveness. It's ~10 times harder to get hired at Google than get into Harvard.
https://www.forbes.com/sites/stanphelps/2014/08/05/cracking-...
An alias for so-called 'algorithms' is 'imperative style' for 'functional programming style', or 'procedural programming' for 'object-oriented programming'.
They are too arcane to read, hard to modify and error-prone. Most of them require mutable data structures, intermediate snapshot for a special optimization purpose, make everything much harder to reuse.
It mostly requires you to instruct every piece of code, every step of execution. Instead of just describing what you need, and let the code find a way to fulfill it autonomously, in a declarative manner like Haskell or Prolog.
And 99% of software companies do not really have the need of requiring their employees having a deep grasp of algorithms, while most of them need their code somehow more maintainable. Those of the Leetcode oriented interviews are just really bad.
Personally, I believe business sense and culture stuff are very important. As for skill part, a lot of concepts could be more useful than algorithms like understanding of domain and relation modeling, immutable data structures, lazy evaluation, reactive design etc.
Not all of them are bad though; I had an interview that had me implement a basic data structure in accordance to the specifications given. It didn’t require memorization, practice, or any “Leetcode grinding” — only fundamentals in communication and programming. The time I had was about an hour so this is definitely a plausible substitute.
> Much more important is to have the experience of how code complexity accumulates, and how to mitigate that
That's part of the reason. The average developer knows how to pick a popular library and throw code at it until it works. When entire teams do that you end up with endless complexity.
That's why Google and Amazon are known for [re]inventing their own solutions.
Granted that you only need a vague idea about the algorithm. But going from a vague idea to working code is also a valuable skill.
Wow, that’s amazing! Congratulations to the author because this demonstrates they have genuine talent.
In contrast, I’ve been a programmer for 10+ years, and I cannot pass the technical interviews in the companies mentioned above. At first, I thought the reason behind my failures was a lack of formal education in Computer Science, so I started reading more books. Then I thought, maybe it’s the fact that I spend more of my “productive” hours in my job just doing lumberjack web development, so I started participating in competitive programming (LeetCode, Code Golf, HackerRank, Code Wars, among many others).
Finally, I realized my brain needs more time than the average programmer to find patterns in this type of problems.
I gave up on my goal to land a job in one of these big corporations.
However, I don’t feel bad about giving up, in fact, thanks to all these books and competitive coding exercises, I was able to find two of the most exciting jobs I ever thought I would have, for 4+ years I worked in the software security industry doing Malware Research and building infrastructure tools for other security researchers. Most recently, I entered the game industry, and finally, I can use my algorithms and data structures for non-trivial projects.
Interestingly, I’ve been recently getting more messages by recruiters who want me to work for some of these companies. I politely decline the invitations because I know I cannot pass the technical interviews, but I promptly refer to some of my colleagues because I can see my younger self reflected in them, and I want them to have the experience that I couldn’t have to work for one of these companies. Even if they work only for a few months, as many people burn out, having the company’s name in their resume will grant them dozens of new opportunities.
I often think what would Google/Facebook would be like if they hired in some experienced engineers that may not be able to whiteboard a BFS tree or can tell you Djikstra's algorithm, but have proven business track records of getting projects done, on budget, and on time. Real, pragmatic, get-it-done types of engineers. (That's not to say whiteboard expert engineers can't also be this way - it's just that whiteboard interviews don't hire for this in particular - technical expertise comes first)
There was an excellent comment on another thread yesterday (that I can't find) that basically said something along the lines of "If I'm asked about BFS trees in an interview I'm going to tell them I'm just going to google a library that can handle it - I've got more important work to get done"
> I cannot help but think that these big tech companies (FAANG, et. al) are missing out on diversifying and increasing their engineering expertise by passing over developers like you.
I think this is certainly true.
> I often think what would Google/Facebook would be like if they hired in some experienced engineers that may not be able to whiteboard a BFS tree or can tell you Djikstra's algorithm, but have proven business track records of getting projects done, on budget, and on time.
Well... how do we find these people? By looking at their resumes where they claim this? By contacting references who will attest to it? By trusting the intuition of subjective evaluators of the candidates?
Practically speaking, FAANG companies do hire such individuals, they just do it through acqui-hires. If a person works at a company that is good enough to be worth acquiring, then we have a good signal that they are effective employees even absent a direct evaluation of their technical abilities.
Those people generally also do well on those whiteboard questions.
I think this happens less than people think. I've been at two big tech companies and interviewed people while at both (and obviously was interviewed myself).
I think what trips people up is that many questions have solutions that are given by "named" CS algorithms like the ones you listed, but also have simpler solutions that are fine too. And honestly, candidates that invoke named algorithms and (maybe eventually regurgitate the textbook algorithm) are often not the good ones (to me at least). Most problems like this often have simplifications that good candidates take advantage of to do something custom (and much simpler) than the "named" algorithms.
Basically, if I'm interviewing you and you regurgitate a famous algorithm... well I'm not going to ding you if you do it correctly, but in my experience, I'm much more likely to give a good review to someone that methodically works out a simple solution instead. Often the people that successfully dig up a named algorithm and apply it can't talk about it very well.
So, I suspect that a lot of the people that complain about not knowing a famous algorithm in an interview simply failed to work out a simpler solution to a simpler problem and didn't realize it.
I think the phrase "jack of all trades, master of none" is overused and doesn't hold a lot of truth. It's very possible to have a lot of experience and skill in many different areas. Maybe there's even a positive correlation between being a very good programmer that can pass whiteboard interviews, and being a pragmatic, get-it-done type of engineer.
There is still so much stupid money out there that it doesn't pay to do this. Literally immaterial, and it's more cost-effective to hire for a narrow-but-consistent set of requirements.
I bet you're quite good at something (perhaps multiple things), but they don't value it. Their loss. I'm glad you found something that works for you.
Why? It's not so clear to me that it's not working right now. These companies seem to be doing completely fine.
If hiring programmers who aren't good at programming puzzles is a competitive edge, I would expect to see other companies hiring these programmers and succeeding.
It seems more likely to me that there is (at most) a very marginal loss from hiring this way. It's not the fairest way to hire, it's not the most equitable way to hire but the evidence doesn't suggest to me that it's not working for these companies.
Um.. have you looked at their stock? Investors would probly want them to continue coding puzzles if they knew about that.
That's a great way of putting it. Hard to see any other explanation.
Well, maybe not even the "average" programmer, but just the elite of the elite Google-tier programmers ; ) I feel the same way. When I was young, I thought that absolute mastery was within my grasp but after 25 years, tons of self-study, a couple of college degrees and yet still a lot of surprising rejections, I have to concede that while I may actually be very good at what I do (I'm among the most respected and most sought after everywhere I've ever worked), there are still people out there WAY better than I am, and that's OK.
You're better off following your own path and making your own things happen.
You have no idea how diverse people are in terms of talent at big companies. This is a myth peddled here at HN that FAANG employees write CRUD apps and are one dimensional. The best perk of my job is the random lunch scheduler where I've met a former Olympian, someone who is on the Rust core API team and a professional ballerina + software person.
The same was the case when I worked at Mozilla..
But I've always felt the interview process at these places extremely arbitrary.
I'm the same way. I'm really good a identifying solutions to a problem. I'm really good at identifying the costs/benefits/issues with each of the problems. However, I take a while to get there. I may figure out one (suboptimal) solution quickly, but it takes me a while to pick out a variety of them and identify the one I think is the right one for the current situation.
In school would usually (ok, often) get highest score, but took the longest to finish.
Maybe we are just not good enough.. And maybe it's sour grapes for having been rejected by them, but honestly I don't feel I would be a good fit for Google or FB ideologically. I value user privacy and freedom too much. In my eyes they are both evil-corps.
> Finally, I realized my brain needs more time than the average programmer
I also came to this conclusion. I accept it and focus on my strengths as a team lead instead.
Your experience allowed you to move toward doing work that excites you. Even though you didn't meet your goal, you still had great success.
Just progress an inch at a time.
I mean yes, some engineers are going to be better at interviews than others but we gotta go by some signals. We had to flunk a few because it was "we see the depth of knowledge the person describes, but we have to go by the signals we saw, otherwise we're just randomly picking people".
Point is it is tough. However it does say something that our interviews are just a bunch of quizzes and studying for a month will make a huge difference. When hiring the goal is to find out if the person is good, not if they crammed, but cramming does work quite well.
I'm not arguing that it shouldn't be the way it is, and I'm also not arguing against.
Claiming "Finally, I realized my brain needs more time than the average programmer to find patterns in this type of problems." feels a little bit like you've given up and that in itself strikes me as the worst sign.
I haven’t applied lately. Working in one of these big companies was a dream of my younger self. Nowadays, I prefer companies where I can work at my own pace. Moreover, while the salaries at these companies are exaggeratedly high, especially in San Francisco, I feel that my current compensation package is good enough to live a kind and peaceful life.
Nobody aces those interviews in the way you probably think; by just magically knowing every detail.
In reality it's more often than not a role-playing exercise where you are pretending to be coworkers trying to solve problems together. Sure you'd be the one leading the problem solving, but being capable to explain your thought process effectively, having the ability to exchange ideas with the interviewer, and just being able to come across as a good teammate is probably more important than getting that last 5% of optimization.
This is especially more true for senior level position interviews where there are more design/architecture problems with relatively open answers. Out of these companies Google felt most impersonal and "test like", which I guess is not a surprise considering they mostly don't hire for any specific teams/positions (and we can debate the pros/cons of that all we want), and they try to eliminate human factors by the way of having hiring committees (which leads to other pros/cons).
In the end even though most still comes down to the technical skills, walking in with the right mentality and attitude actually really helps one to emphasize one's strengths.
Oh one last thing, showing confidence is also super important. But too many people mistake arrogance for confidence. In my personal experience there is no better way to demonstrate confidence than being comfortable (not to be confused with complacency) with what you don't know, and showing intellectual curiosity/eagerness to learn.
I had this same experience too. I went through the 4 technical interviews onsite which were all whiteboard problems. Not once did we actually talk about my past experience or rather anything software engineering related.
Unfortunately(?) I didn't receive an offer despite making it to the hiring committee. Two weeks later they called me back and wanted me to fly back out for another full round of interviews for their internal applications team! I was so burned out from studying and had a wedding coming up so I passed.
I felt a little insulted I was being asked to go through the gauntlet again when I _just_ interviewed.
I had 5 rounds instead of 4 because I skipped phone screen, but I was pretty sure at least 3 of my interviewers didn't even look at my resume before the interviews haha.
I also did a lot of interviews for Google when I was there, and I can totally see why that's the way it is, but at least I tried to see each interviewee as a person with their own unique experience and I made sure to at least read the highlights of their resume beforehand.
Agreed. A lot of times the interviewer will give you hints in the right direction without holding it against you. They usually want you to succeed.
Obviously, people who can't finish a problem correlate with people who aren't good candidates in general. But that's not necessary. You can have someone who shows very good problem solving and reasoning, but just doesn't make it to the end.
I've interviewed at FB twice and got offers both time, and I'm pretty sure I've not gotten the final answer to at least a couple questions.
I would only accept a position at Facebook, which seems to be building a fundamentally destructive product while going out of its way to behave unethically in many dimensions, if it was an absolutely last resort to pay the medical bills of some dying loved one or something.
Why would anyone be willing to work there if they had offers from companies that make products that help people and don't treat society with contempt?
EDIT: for a good primer on this subject, read this essay by Matthew Yglesias called "The case against Facebook": https://www.vox.com/policy-and-politics/2018/3/21/17144748/c...
At least Facebook actually provides something of value to the hundreds of millions people who use it.
But, I dont consume much news from facebook (outside of reputable sources, like NPR), nor do I pay much attention to it in general, and I'm VERY cautious about what I post, to avoid anything that could create controversy or waves of any sort.
However, there's some value in "running towards the fire" so to speak. Facebook does not seem to me to be fundamentally evil, just willfully blind to the problems it causes. It's probably worth a few years of someone's life to try to steer that ship in a better direction.
In the end I didn't take the job because the position eventually offered was too low to do what I described above effectively. But I bet there are other folks here who might get better positioned if they took the time to interview.
There's no reason to believe that as a job seeker you can have some insight for a given company into how impactful your actions may or may not have on the things they are doing that you consider harmful. An honest assessment I'd argue should assume your impact will be minimal if not zero given a large enough organization, unless you are coming in as a high level manager.
As such it's hard to not take it as a self-rationalization given the incentives to create cognitive dissonance on the part of job seekers in order to take a high paying job working on interesting technical problems despite the potential negative effects it has on others. This doesn't mean there aren't good reasons to go work at such a place, it just means that if you're telling yourself that you're able to look past any ethical concerns you might have since you think you can be an influencer towards correcting them, I think it's worth reflecting on if you're not actually going to be put into a real position of power to do so.
The challenge with Facebook specifically on this front is that power is extremely centralized onto one person, so even if you were joining Facebook as, say, a VP, it's hard to know in advance just how much influence you're going to have over the direction of the company before you've learned where the boundaries of that influence are.
The WhatsApp founders had more influence that an engineering plebe would ever hope to have and still failed to change facebook's wicked ways.
That's just, like, your opinion, a random HN reader. And the vast majority of FB users do not share it.
Here is an excellent explanation of some of the most robust arguments against Facebook.
https://www.vox.com/policy-and-politics/2018/3/21/17144748/c...
Yglesias, a very smart writer focused on public policy, comes to the conclusion that it would be in the public's interest for Facebook to completely cease operations immediately.
He wanted to ONLY have all project status come from him - but he went on vacation, and I was required to get project status from the team involved - and when I did, I factually represented what I was told - that they were behind schedule - and I was let go.
Showing any interest in any area outside of my primary role was frowned upon heavily.
You could say the same thing about google, who are better at invading people’s privacy, and controlling the information they consume. The rest of them could also be seen as ethically objectionable in one way or another.
If you’re considering the sophistication of their engineering, and the benefits and remuneration you receive, then they’re very comparable. If you’re evaluating them ethically, then which ones are better will come down entirely to what you value as an individual, because each of them could receive some perfectly valid criticisms.
As far as pay, interesting things to work on and work environment, FB is in the top 3 of the world.
I have someone who just went there. Because of money, basically.
2. As you can see among other replies, people can find ways to justify anything. It doesn't matter that you deliberately create an addictive product and aid authoritarian leaders; if people use your product, that must mean what you're doing is good for them and for society.
And the answer to your question is that Facebook pays a whole lot of money.
They pay at the top end of all of the top tech companies, and this is impressive.
I feel like there is something wrong with the industry. Here is a person applying to do mobile development and they need to spend weeks and weeks drilling binary tree inversions and trapping rain water (https://leetcode.com/problems/trapping-rain-water/) etc.
I was interviewing at AWS and I don't think most of the people I talked to even looked at my resume and asked about the projects I worked on, happy customers etc. It was mostly palindromes, buckets of water and various trees, and parroting back Jeff's 14 leadership principles. Now obviously these companies are around and lots of smart people are working there and delivering great products but it just seems so strange.
This is age discrimination disguised as "technical proficiency" exercises.
Which is one of the things these problems really test: determination and effort. Look at the author of this piece - they said they studied a lot and did a ton of interviews over months. That alone is a huge positive signal that they would be someone I would want to work with.
Also, it's not like these types of problems are irrelevant. Being able to understand things at a lower level (data structures, algorithms, etc.) means that there is a very high likelihood you'll be able to "dig deep" when encountering tricky technical problems on the job.
I'm not saying these technical interviews are the end all/be all for what is needed to succeed on the job, but in light of how in vogue it's become to bash technical interviews (often without a viable alternative), I think it's important to point out they have a useful purpose.
I'm reading this as a guy with a wife, kids, full-time job, and rusty whiteboarding skills. My inability to make this kind of time investment makes me feel trapped at my current position.
Whether I could get ready is an open question, I don't want to claim I necesessarily would have passed had I studied intensely for a longer period of time.
But yeah, I have kids in school, a job, I was a baseball coach at the time, there's homework, music lessons, all that.
Honestly, I do wonder if maybe part of the purpose of the interviews is to filter out people like me who can't drop everything to prep for an interview. I'm not trying to be glib here. My inability to prepare for a white board exam at this level actually does tell you something about how much time I am able and/or willing to devote to work.
But yeah, it's a bad feeling, I'm with you there.
Here are a few of things to be aware of that may make you feel better:
- tech companies in the bay area have extremely high churn rates (2-4 yrs is not uncommon)
- unicorns often hire constantly and in high volume (e.g. Facebook increased head count by some 8k people last year alone), so the likelihood that all hires for all unicorns are all "cream of the crop" is far lower than most will admit.
- many companies here are willing to spend significantly more on hiring process than companies in other cities/countries: I've been flown in for on-sites from Toronto on multiple occasions and when I accepted my current role, I received a generous amount of money for moving expenses ($7500) for my family of 4, in addition to getting legal support for visa/immigration procedures. This makes physical location a much smaller hurdle than one might expect.
- not all roles have algorithm-centric interviews (e.g. in my experience, interviews for web-related roles tend to be much more about day-to-day experience), and even for more "traditional" roles, there may be variations in interviewers' expectations (this is exacerbated by the high churn rate from point 1)
- interviewing doesn't need to be that intensive or stressful. I only did a few passively over several years. An interview process typically starts w/ a 1 hour phone screen, so you don't necessarily have to commit to whole-day interview marathons right off the bat. In that one hour you often get a chance to ask more about the role and get a feel for yourself if it'd be a good fit (it often isn't!) Doing this kind of fishing every once in a blue moon is fairly manageable.
yeah, well these companies don't want you. I mean they do but they need to make sure you have the same availability as a college hire. One way of checking that is to have you block time like that for a while.
I don't know your specifics, I only know mine.
I've recently started volunteering / D&D 2 nights a week. It's been good for me and the family. This spurred some interest from me in doing work when I'm sitting in the kids room waiting for them to fall asleep.
This came after I switched jobs and started working on the bus, which cut down on my total amount of time away from home.
He also did this for a month, you might have to do 30 min to 1 hr for 3 months. Set a goal and go for it. The important distinction for me was that my goal board now includes being a good dad. Part of that was realizing I wanted my kids to see someone reaching for goals and doing it.
Anyway, good luck and don't hold yourself to others ideals, shoot for your own goals. I had a short term goal to re-center myself and let some mental baggage go. It meant a lot of video-games. But now I'm onto the next goal.
And no, I'm far from a genius programmer - it's just that I spent ~30 years working in this field, and reading a lot along the way.
If you can, go out and interview. Just to see what it's like. If you really want to find a job, start with companies you're less interested in and use their interviews as free whiteboard training.
If you're using the term "trapped" to describe where you work, I'm inferring that you want a change. It's hard to get specific without knowing all your priorities, details, and life choices, but it's almost certainly worth taking a step back and evaluating if there's ways to get what you need by an alternative path that doesn't involve slotting yourself into a process that's optimized for smart single twentysomethings.
So you don't get to work at a big name tech company, big whoop. Go find one of the myriad of companies that are still doing great work, pay well, and where overtime isn't expected. There are literally thousands of them, you just won't get any name recognition from them.
Besides that, I work with plenty of people who are married with kids. Sure, at the end of the day, there's some amount of luck, but they didn't get in because someone felt sorry for them.
Yes, you probably are. Just in case you were interested in a realistic answer based on the rut most family men and women themselves in.
Yet 70% of the companies didn't even give the candidate a chance to interview. It's incredibly sad that a candidate that is able to get offers at Google, Facebook, and Apple can't even get 70% of the companies to let them in the door to interview. Interviewing is clearly broken.
Also everyone knows recruiting is broken. This works in both directions too. The FAANGs can afford to make hiring mistakes and carry dead weight for a year. A lot of smaller companies cannot.
I used to maybe get a 10% response from companies with a 90-100% success rate on in-person interviews. Now several years into my career it's maybe 40% & 60% (I've started ending interviews for dealbreakers). Things change depending on the role and where you are in your career.
I'm a data scientist and every firm I've ever interviewed with has told me about how important analytics is to them, how they take it seriously, how they're investing so much in it, etc. But the recruiters are amazingly incompetent and shockingly bad at getting their details right - I know there's a reason that the recruiters aren't data scientists themselves but I've terminated my candidacy at places off of phone screens because of such poor experiences with the recruiter.
My favorite vignette comes from interviewing for a machine learning position. The recruiter asked me what software I used, I told her that I was more familiar with tensorflow than PyTorch but was familiar with both and prefered to use Keras as the interface to both when dealing with structured data. She wasn't familiar with any of those packages and went on to quiz me about the SAS procedures I was familiar with.
I sometimes think of quitting my job and becoming a head hunter / recruiter. I don't think I'd be good at it, but willingness to use emails rather than phone calls and familiarity with the tech stack has to be a major differentiator, right?
I see the validity of both points, and I’m sure they are true.
But people, please, some perspective.
The author spent a couple of months studying and practicing material in their spare time and got offers from top companies in the comfortable 6 figures.
That happens in no other industry, ever.
Look at what lawyers, structural engineers, accountants, and most especially architects ... not to mention the obvious one: doctors, go through to be qualified to make good money.
The author presumably graduated with a bs, worked for pay for 2.5 years, did some online learning, and makes a great living?
A doctor would still be in (very expensive) school.
I suspect there’s an element of IQ-ish testing with these puzzles and it sucks if your brain doesn’t work that way and you are permanently excluded as a result of that.
But if you have the capacity but can’t be bothered to learn a bunch of material over a fairly short time frame to handle an interview, why should these companies want you? You obviously just don’t care that much, because the investment is tiny.
Maybe I missed it but I didn't see where he discussed what the offers were like compensation wise.
Which would seem to further substantiate the observation that the modern interview process seems to be (strongly) calibrated not towards finding folks who are good at real-life problem-solving and engineering and long-term collaboration in a team environment, but rather folks who are good at ...
... killing it at the whiteboard and on phone screens.
I believe if I set the goal of getting hired at one of these places, I would probably be able to get a job:
- 10 years professional programming experience
- half-life, Quake, Starcraft, Warcraft II modding experience growing up
- Avid reader ( ~50+ books/yr )
- tons of self practice and continuing education. I just like learning new things and find programming fun
- Have had success in most of the roles I have occupied
- have a personality people make friends with
- edit: Also a computer science degree from a good college!
But anymore I just do not want to work that hard. I've been doing the start-up thing for a few years now. I am TIRED. I am BURNED OUT. I am not particularly interested in writing GoLang or Python to sell ads. Lately I have been trying to think of a part-time or EASIER job I can phone in on with my programming chops so I can go home and hack on my side projects.[0]
I want to go home, read, work out, cook dinner with my partner, hack on toys and open source stuff. I do not want to empty my tank every day working for the man. How hard do these places work you? What do I actually get out of it, other than learning how to write websites and a good salary and perks? Where do these jobs fall in the reward/bullshit ratio?
0: Which are probably better career development than fullstack/devops work anyway...
People very regularly wfh for all sorts of reasons, time off whenever you want that people actually take, probably a little bit less then a 40 hour work week and every sprint my manager is usually making the case for how we don’t want to take on too much or over commit ourselves.
I’m thinking about leaving because frankly it’s maybe a little too slow and relaxed, I sort of think I work well in a more intense environment, but if that’s what you’re looking for I can pass your resume on to recruiting haha
FANG companies? Standard 8 hours a day.
But not every company is the same, and not every team in the company is the same and not every project is the same. I don't think you can generalize the working hours of an entire company filled with 100k employees.*
*With the exception of Apple. I hear most employees there do work long hours and sometimes even weekends.. but again, depends on the team.
How depressing. A big part of software development is knowing how to get things done with people you don't agree with or like. A good chunk of the rest is about communication. You know, organizing thoughts into something coherent and actionable, speaking, writing, and most of all listening.
Is big tech hiring that broken that a person's past history of shipping quality software under severe business constraints matters so little?
Or is it perhaps that too few people at large tech companies are capable of evaluating candidates on any other basis than cooked-up on-the-spot brain teasers?
I've been doing this for 16+ years and I have never asked the type of questions you encounter in these books. Not even once.
I try to avoid those sorts of questions, but it's hard for me to come up with better alternatives.
They are a ( maybe unintentional ) dog-whistle for coming a wealthy background which means you will fit right into the cultures at these sorts of places.
Learning to program takes a lot of privilege. Look up the stats for how many google SWE's do not have degrees / where they come from.
Congratulations to the OP, I have EPI as well and it's certainly a challenging book.
I would bet that with time and repeated practice the process becomes less stressful and draining, but I have no intention of testing my hypothesis any time soon.
The below is taken directly from my "Job search - 2017" Trello board. (I always use Trello to organize a job search because without it there's no way I could keep track of every company I've applied to.)
Companies I've decided not to pursue due to obvious red flags: 15
Companies that have rejected me explicitly (without regard for stage of process): 15
Companies that have ignored my application entirely: 25 (including all of the so-called "top companies")
Companies that have invited me for an onsite interview: 8 (of which one was a remote-mostly team that did a video conference interview in lieu of onsite)
Offers received: 4
Of the 4 offers, one was laughably low; another was for a management position that would have precluded any programming (bad for my career); and the remaining two were both attractive and presented a difficult choice. This was the first time in my career of 15+ years when I had more than one offer to choose from.
This job search took place after I got laid off unexpectedly, and took two months of job searching on a full time basis. The various phone calls, meetings, interviews, etc. took place in a solid chunk of time from 9am to 5pm, sometimes seeping into the 7-9pm time frame whenever I was doing a call with a busy person on the West Coast. Somehow I also managed to do half a dozen of take-home projects, the longest of which took me two weeks of all-nighters to complete.
To summarize: I wish someone would show me which bus to take to the parallel universe where folks get to choose from six different offers. Here and now, I feel incredibly lucky to have my current job, and dread the day when I might be forced to seek another.
I bet you can get a really nice offer when you get six big tech companies to bid over you.
Turns out that he didn't:
"It’s a very loooooong process relative to the rest of the companies I spoke with, so I definitely had to keep everyone updated on where Google was. I also had to let Google know where I was with everyone else."
The concern is that priorities shift and this person might end up on a C++ backend in a year and you want to make sure they're good enough in general. The inability to forecast the existence of a role a few years down the road is a sign of incompetent planning. And having software generalists everywhere instead of domain experts is a great way to get good but not great software.
Many engineers at big companies end up changing roles entirely (android -> iOS, iOS -> backend, engineer -> engineer manager, engineer -> PM, backend -> ML, etc).
Big companies don't just want someone who's knowledgeable about a single platform, they want someone who's also a skilled critical thinker and are able to break down hard/complex problems.
> I was very impressed throughout the entire interview process with LinkedIn from both a culture perspective and an engineering perspective. They rose the highest on my mental list of iOS Prestige™ from the start of the process until the end.
It’s much easier to compare multiple offers made to the same person, rather than comparing isolated offers on websites like Glassdoor.
Does an elevated heart rate during an interview count towards one's daily fitness goals? :)
1) [Leverage]. The interviewer can negotiate down salary expectations based on the performance of the interview. You can ramp up requirements until the candidate breaks. Then, you get the upper hand in the negotiation process.
2) [Responsibility]. Nobody wants to take responsibility for the bad decision. In the formalized interview you can blame the metric. If the metric is external (Google/Facebook/Amazon do it), then there is nobody to assign the blame, so, no responsibility gets redistributed.
3) [Effort]. Treating people as they are different is hard. Reading their CV or learning more about their projects requires time effort and expertise in the field. This is expensive. Much easier is assessing people through a generic process.
4) [Loyality]. Someone, who spends their free time for a year preparing for the interview is bound to be more loyal than somebody who prepares only for a week.
5) [Initiation]. People who go through a difficult initiation process tend to value their group more. That builds tightly knit teams.
Overall, I think that the process is difficult, somewhat irrational and inhumane. But I have no idea how to really fix it.
I'm impressed with this person's ability to write a blog that BOTH:
— feeds people's curiosity via the current interview experience at several of the worlds biggest companies all in one read
— Incorporates (advertises) his own personal work ethic and credibility throughout, to where I would bet he's getting all sorts of significantly higher paying offers around the area.
The latter was likely the motivation to write it, which is great. I'm surprised more people with similar stories don't use their ultra-blog-worthy experience as an opportunity to humble brag and display their value. Might as well, right? Small risk/big reward
Can you guess which group is better at technical interviewing and I've found more capable of handling the responsibility of screening talent in the past?
Right?
Honestly, I think I’m a horrible programmer. My current gig is developing an api for a survey app, as well as an environmental sensor data app (which me and my partner built from the ground up).
It’s tough though. I don’t know many algorithms, and I have to do a lot of research. That said, I still get shit done and deliver.
I have no formal education and have taught myself.I would most likely fail these kinds of interviews.
How I got my current gig? No idea. Maybe my honesty won them over. Yes, I can do front end development. No I don’t know that, but I can learn.
Seems to have worked out so far.
That made me laugh. I have to wonder if the author is somehow so naive that they don't understand what they observe or what to ask. It's also possible that the sentiment is the only lip service they could pay that hellhole, with a straight face.
Maybe these whiteboard interviews also filter out people who don't really want the job enough. If someone spends a lot of time brushing up on algorithms and practicing interviews, then it shows that they really want the job, so they're more likely to be a high performer.
I'm surprised they were able to get job offers from Google and Facebook, while their application was just rejected by Stripe. I also got rejected by Stripe without a phone call. I have some really talented friends who were also rejected after an interview. I'm starting to think that Stripe's hiring bar is just much higher than Google or Facebook.
1) Write blog article on interviewing 2) Promote on hackernews 3) Use as leverage for salary/equity negotiations
I'm completely fine with interviewers expecting you to solve some problems in front of them and knowing basic algorithms + data structures, but if it's becoming standard to dedicate this much time to studying and applying for jobs something is really, really wrong.
I think a day or two to refresh your knowledge you haven't used for a while and practice a few problems to get you warmed up is reasonable but when you're talking weeks of preparation then the interview is testing the wrong thing. I can't see in the article how much preparation was done but it sounds like months of work.
I never got an offer though and the only thing I can say that differentiates me from this person in terms of how we studied is the part where you practice with other peers. I've done this maybe once or twice a few years ago. I think in order to get to these companies you need to practice with peers. Preferably with ones who have made it through. Unfortunately, in my experience, it can be hard to find peers willing to do such things. I'll continue to make half (or less) of what I could be making if I was at some top public company. And this area will continue to be out of my reach financially because of that.
How do you find out if someone can make good long term decisions in a short amount of time? It seems inherently contradictory. Some people say by giving homework problems. They're not wrong, that might give valuable insight, but I know that I would hate that, so others might too.
Can there be a good answer?
So, when "small picture" people think "competence", they think in minutiae, which in software development means the smallest distinct units: algorithms.
I've been in the industry long enough to see it everywhere, and it's not necessarily a bad thing. Most people prefer tactics to strategy, and you only actually want a small percentage to be strategists anyway; too many chiefs and whatnot.
But when it comes to the technical interview, it's frustrating to deal with a tactically minded rather than a strategically minded person.
Yes, this, so much.
> Don’t get discouraged. There were multiple interviews I had where I didn’t know the solution and interviewers had to shepherd me towards a solution. I still got offers from everywhere I interviewed.
And this, so much, particularly for those with imposter syndrome. You miss all the shots you don't take. If you're unhappy, and have done your best to find a way to happiness in your present role, start looking. Don't keep telling yourself "in another year I'll be ready" or "once I learn X and Y".
It doesn't cover:
- how many hours a week will be worked
- how much stock options are on offer
- what other benefits there are
- what's the total compensation package like
- what skills will be gained
- what is the office environment like
Most of those "top" companies can be skipped over as places to interview at because they aren't very good on the above topics.
For example, interviewing at Facebook in 2018? After the Cambridge Analytica scandal? (which was in March 2018 according to Wikipedia https://en.wikipedia.org/wiki/Cambridge_Analytica ) Even millions of dollars of compensation wouldn't be worth interviewing at Facebook during that time, not until they get their house in order. Even Google has privacy and ethical issues that make it a less-than-desirable place to work at.
Amazon also has a culture of working a lot, maybe that's fine for someone just getting started in their software development career, but for most people, it isn't great to be working so many hours.
So 3 of the interviews didn't even need to happen; he could have concentrated on acing the other half of interviews (Apple, Yelp, LinkedIn)?
Also, fundamentally, he's interviewing for jobs where he will be told what to do and will either have to job-hop to get better salaries and better positions or spend 3-4 years at minimum to work up the ladder. So selecting Apple, Amazon, Google, etc. is actually a tough choice because you have to kinda plan for the next 5 years if you want to ensure you aren't wasting time and are actually advancing in your career!
It's a great start for an article but feels like a dime a dozen at this point (I've been reading about SV startups since highschool and Paul Graham's essay): if you want to work at a top SV company, no matter which is at the top at the moment, you'll have to jump through the algorithm interview questions hoops.
~40 hours, but most of those big companies only care you get your work done so it can vary from person to person (less or more).
- how much stock options are on offer
All companies mentioned are public, they're stock grants (RSUs) not options. If OP was an L3 it would probably ~40k/year, L4: ~75k, L5: ~150k.
- what's the total compensation package like
L3: ~180k, L4: ~250k, L5: ~350k
- what other benefits there are
- what skills will be gained
- what is the office environment like
These are all easily researchable, and most big companies are actually extremely good in these areas.
Also, the focus on "top bay area companies" seems misguided at best. If you work more on identifying what type of work you want to be doing you might find there are GREAT opportunities in other regions or at smaller scale companies.
Maybe I am just not the type of person who resonates with this approach, but I cant imagine this being healthy for most people.
Outside of a handful of the big well-known bay area tech companies, I can't really see what many of them do that other non-illustrious companies do as well. If you are simply a web services developer I don't think I'd waste my time - there's not much you are going to build at Facebook that you aren't going to build at no-name company X.
I don’t know how they managed to do 6 in 6 days, that’s almost hard to believe. Most companies aren’t so flexible on the days they can host you.
It would have been very interesting to see how the offers compared and which company they went with. I’d also be interested to see what the negotiations did for their final TC.
Congrats to the author for their success!
> I was interviewing for my second job out of college with about two and a half years of experience without any particularly notable internships or employers on my resume; I went to a very small school that had zero known software companies at their “career fair”;
The issue is that this is taken to the extreme.
And that is the main reason big companies like google, facebook can't make good products. Instead, they pay billions to buy successful products made by those who were rejected in their interview.
- Upbeat and To the point - Helpful relevant information - Actionable advice with multiple references
Thank you Bay Area Belletrist!
Some famous dead dude once said something along the lines of "by failing to prepare you're preparing to fail".
However, times have changed. Since late 1990s, the industry has become a lot more aggressive. While the CRUD shops exist, there are more and more companies who produce products that need engineering from ground up. Some of these are truly innovative but many simply reinvent solutions. The kind of funding these new age companies with NIH syndrome get allows them to afford quite a bit of reinventing of the wheel, a wheel that suits their purpose specifically. In this scenario, one needs to know fundamentals of CS, so having interviews of this nature is justified. The candidate must be aware of the sort of company they have applied to and know what to expect. There is no point ranting after they fail.
That said, I do have my objections to these sort of interviews. I am in my mid thirties and what I do is 50-50 in terms of over all architecture and low level details. I am currently looking for a change and every time I see ds-algo mentioned in the job description I feel disappointed.
Firstly, the cargo cult interviewing is quite enraging. I mean, just because a mega corp with NIH syndrome does tough algo-ds interviews because they arguably need it, the CRUD shops following suite is ridiculous. They are glue job companies with CRUD jobs that need glue job engineers whose need to know CS fundamentals will be limited to reading the label on the libraries they use, if they advertise the ds and algo they use in their implementation.
Secondly, even if its a NIH mega corp, I dislike how the interviews automatically filter out experienced good engineers. The sort of questions asked can only be answered by three kinds of people - recent graduates, those who have written ds-algo libraries at their job before, or those who study them just for the interview. I feel the third kind is a sham as its worse form of rote learning without applied knowledge. People like me who possess a lot of knowledge through real world experience on a lot of things and can build a lot of things from scratch, basically generalists, but can't write code to balance a binary tree on whiteboard in 5 minutes feel almost discriminated. Why can't where be a middle ground where we discuss the solution strictly qualitatively without having to answer it as if it were a college exam? I think this is how it ought to be for mid career engineers.
I have had my share of both kind of interviews that has left me extremely disappointed. I have realized that people like me are best suited to work at medium sized product companies whose name not many have heard of. I used to work at one such and had tremendous success, and I am exclusively looking for such now.
Is there really a reason why software jobs can't hire in a blue-collar fashion where there's a background/experience + sanity check and a subsequent trial period? Even looking beyond that, is there any similar profession where interviews like these take place?
I'm starting to think this may be in part be related to the phenomenon of bullshit jobs. Basically that people in administrative roles need to have something to do, and as such, the interviews themselves have over time expanded to as much as multiple days.
It's really surprising to see how hard people fall down on even the simplest part of this exercise. People with lots of experience, people who work in big-name companies (including the ones mentioned here), you name it.
This experience has really caused me to soften my erstwhile stance of "tech hiring is broken and inhumane", because it really makes me suspect that no matter how simple or common the problem is, many people will fall all over themselves attempting to solve it. Even if the problem is nerves, how much can you really ease someone's nerves over a video chat?
This is basically the lesson of FizzBuzz.