When I was a new college grad, I felt trapped by the fact that everywhere I looked they wanted several years of experience, and I had none yet. How can I get experience if it's required to get the job?
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.
I just graduated, so I'm not dealing with constant internship interviews anymore, but at the time I absolutely hated it.
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
I agree with you. The puzzle solver ABSOLUTELY hate it if you somehow say that the question is flawed. Ie if you think outside the box and render their hypothetical situation flawed. It’s as if they didn’t spend enough time to realize that they are missing the forest for the trees.
"It’s as if they didn’t spend enough time to realize that they are missing the forest for the trees."
In their eyes, they have given you a problem involving a tree from the graph theory and you are insisting on an "out of the box" solution involving woodpeckers.
Let me elaborate.
Usually hypothetical situation is just a way to talk about an abstract problem.
It's easier to visualize and to talk about an egg falling and breaking (or not) than abstract measurements.
Now what you call 'thinking outside the box' is just attacking the irrelevant details of an imaginary situation which is there purely for convinience and can be replaced with another hypothetical situation corresponding to the same abstract problem.
To be fair, almost everyone hates it when you show them they are wrong. Especially in the setting where they are supposed to be judging you, remember? And even in normal settings it pays to think about how some critique will be received by the other side. It's a slippery slope in the interview... For me it would raise red flags if the flaw was pointed out in an inappropriate manner. After all, this is the person who would be involved in code reviews where sensitivity to other people's feelings (and egos) is very important.
It's actually supposed to be mutual judgement. But I agree: be respectful if you decide to drop a remark about the relevance of the question. There are enough reasons to treat people with respect even if you can afford to turn them down.
I like solving puzzles. I like algorithms. Every once in a while I even get to use them at my job! Solving these kinds of things is at most 5-10% of a developer’s job, and that’s probably a stretch in reality. The number of times I’ve seen things like dynamic programming come up in a real world application are vanishingly small, and rarely will you need to roll your own implementation rather than using a third party library. Even if you’re working on a library like that, considerations of good software design principles, infrastructure and the like will consume a large portion of your time.
I am like you. For me, the solution has been build something and show it off. Building a great and useful app rarely requires Herculean feats of logic and puzzle solving.
Years ago I was rejected by Google for a permanent position, then a year later employed at a much better rate as a contractor in the same building I'd interviewed in. I'd built a relatively cool app (full stack, from Linux to Tornado to JavaScript to UX), like Secret or YikYak (but a few years before either).
The people in Creative Lab were impressed with the ride range of knowledge I had, the SRE guys who rejected me got stuck into me for mixing up some VMware terminology.
>> "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."
In my opinion, you will do well if you focus on building your own business sooner or later.
But building something from scratch, even if non-profit, is the easiest way to get a job you really want. And at the same time you can find out that you like doing actual business and smoothly transition. It's a win-win IMO.
Honestly, it sounds like you may be geared more towards software architecture rather than software development. If you like the sound of the bigger picture more than the details, it might be something you could look into.
Is it possible to even get into software architecture without pretty significant experience? From my experience in the workplace anybody making purely architectural decisions without having to implement them is a team lead or higher in the organizational architecture.
Not sure it would happen that way out of choice, but the role can get unexpectedly thrust upon someone, experienced or not (Think startups, desperate to make ends meet with a handful of inexperienced engineers...or even at medium sized companies, remember back when Google had "20% projects"?). At startups especially though: they don't have money to go out of their way to hire an overpriced "experienced software architect"...
It goes something like: "Hey, new Engineer, I need you to work on experimental feature X". - Then the engineer builds system Y to provide feature X, probably poorly architected and not scalable, not expecting it to go anywhere. Some months later, app containing feature X gets distributed to thousands of users, or goes viral and hits millions of users.
Congratulations, like it or not, you have now become the lead architect of the now-widely-deployed "experimental" system Y, and you are going to either crash and burn or become a damn good software architect by maintaining it out of sheer necessity. Later, you find yourself putting "Lead Software Designer" on your resume, having earned that role and title.
A lot of successful software was originally designed "by mistake" and grows far, far greater than its original purpose. And in contrast, you get the well-designed software that was properly architected, but never goes anywhere because it never saw the light of a successful deployment at scale.
I think you’ve accurately described the vast, vast majority of production code that’s hasn’t been through a second wave of engineers/management and rewritten. If it works, and requirements aren’t changing, then your MVP has become the gold standard
Which makes sense right? Same reason a military general doesn’t start as a general. Architecture takes experience in the weeds to give a breadth you can leverage as you reason through architecture. Architecture isn’t aslways black and white decision making based on some specs which is where experience can help a ton.
What's your disagreement? 1st Lieutenant vs 2nd Lieutenant? Lieutenant is commonly used to refer to both.
Or are you saying that you start of at O-1 and not a higher paygrade? If that's the case, the OP was pointing out that you start off outranking enlisted service members, not that you start out above O-1.
I like roles where I get to do both! I've found that a lot of problems come from these being different roles, and the developers not really understanding or buying into the vision of the architects (who might be able to see the big picture, but can often make decisions that make no sense due to being removed from the details of the existing implementation).
Of course in really large companies I suppose having these as a seperate role is a necessary evil. But I still think there should be much more collaboration and interaction between people in these different roles than I generally see.
Not really, not at all. Software architecture is a lot about wisdom - how to anticipate future changes. Often user interfaces need to be carefully and gently designed so that the user has no surprises. Diligence from the user should not be assumed, the user interface must emphasize tricky parts and make choices less onerous, etc. Scalability is preferrably achieved by simple code + hardware/vms rather than overoptimized code which depends on "irreplaceable" programmers - what if they fall sick, or leave the company? etc. I think all of this is experience accrued over many years, and with facing many failures.
I have found that the data structures that you need are often simple trees and hashes. Database design is probably more important. I often shake my head at students doing hours of dynamic programming to crack interviews. In the past year, how many problems in your company have you solved through dynamic programming? I suspect, not many.
In the real world software architecture is rarely about “data structures”. Software architecture is about teasing out the needs of the customer - whether that be internal or external - and knowing how to design systems that are maintainable, scalable, fault tolerant, etc.
Yes but unless you are actually working on creating the system that other people implement, you are just using work made by others. You don’t need to know the ins and outs of various gossip protocols.
2) Turning those requirements into data structures.
I think a lot of companies will separate those into different roles, but I strongly believe that's a costly mistake in most situations. There's a feedback loop. Requirements inform your data structures, but your data structures help you contextualize (not pollute) your requirements. If you're working with an existing system, you also want to understand current structures in order to guide requirements. By guide, I don't mean to ignore pain, but if you're building a system to support multiple clients / users, then the real trick is to figure out how to do that in a cost-effective and elegant way.
When these roles are separated, and the requirements are gathered without knowledge of the structures, I believe you're setting yourself for failure in the long term (spaghetti code / everyone gets something different).
Getting these to gel is the puzzle I'm personally passionate about. I don't mind what I would call the math side of programming / code puzzles, but it simply doesn't give me the endorphin rush that building a system that elegantly ties things together does. The best is when you're working towards that or have achieved that and inspiration for further possibilities, improvements, efficiencies start popping up.
I'm not sure how you test for this as part of the hiring process, at least not efficiently. I do think we get better at this with experience, but I doubt it's exclusive to seasoned developers.
But still “data structures” in the context of most businesses are more Domain Driven Design “Domain Contexts”, “Aggregate Roots”, type structures than any type of complicated CS type data structures.
That depends on what is meant by software architecture. If you mean the structuring of a system to achieve good or (particularly) consistent worst-case performance, maybe you are right. But if architecture is used to mean the design of a system to satisfy users (and present a clean, extensible, meaningful interface) then it's really a conceptual job that has more to do with design skills than optimized algorithms.
Being able to make a clean interface, as in a clean API, or useful one, is a data structures/algorithms problem and often a distributed systems problem. Many API's are technically impossible to use correctly. For example they might not let you do two things atomically that need to be. Or they might suffer enormously because they don't version their information properly, resulting in client/server disagreements over the nature of reality that are impossible to avoid. Or you get components that are impossible to interrupt cleanly or shut down safely.
It's not the same thing as some piddly twenty minute problem -- it's harder, requires some experience, and it has the same kind of aptitude. Consider it a rule that people that can't handle data structures problems are going to create systems architecture problems.
In my experience, architecture requires broad but not deep knowledge of data structures and algorithms. The best architects have both, but even very good architects struggle to remember algorithmic tricks on the spot and write detailed code without tools or references. People who can do that easily are often the last to think of things like fault tolerance.
You don't have to be some string algorithms weenie, but the kind of people who "absolutely hated" algorithms problems in my experience, some of it personal and some of it vicarious, are bad at making architectural decisions with far-reaching consequences. It's overlapping subject matter which uses the same kind of aptitude. It's not that to be good at architectural decision-making you need to be prepped for an emergency Google Code Jam.
A more charitable interpretation is that they absolutely hated "constant internship interviews".
In my experience, algorithm interviews aren't even very good at measuring aptitude for algorithms. Recent study and aptitude for the format have too much influence. Asking candidates about architecture has been much better at predicting their aptitude for architecture.
I don't necessarily disagree with that -- what kicked off my reply was the statement, "Honestly, it sounds like you may be geared more towards software architecture rather than software development." (And, you know, rereading that sentence removes any doubt I had about the correctness of my initial response.)
If you can rigorously ask architecture questions, and don't let people get away with hand-waving, that sounds fine. I've been asked good architecture questions and I've been badly asked bad architecture questions too, so... it depends on the question, and how you ask.
Designing something on an architectural level really isn't always a data structures and algorithms problem. Take the web, for example. REST isn't complicated, but it does the job and it opened up more possibilities than any other invention since timesharing.
As other commenters have noted, choosing an architecture for a system may have more to do with vision, common sense, and even imagination. And the web is such a great example of this, maybe the classic example. As you probably know, it's possible to write a webserver without having a clue about fancy data structures or algorithms. It's the imaginative composition of pre-existing features that creates the architecture.
Another example would be the extensibility of Emacs through elisp. Consider the notion of hooks which essentially allow utility functions to be customized by the user. It's a purely architectural concept.
Or the Unix philosophy: small utilities that read and write text, linked by pipes. Really no algorithmic complexity to it at all.
It feels problematic to me that you are saying to someone that they "need to stay far, far away" from some aspect of computing. It's a kind of gatekeeping. Sure, an outfit like NASA needs to make sure that they don't have amateurs writing their systems software. But in the industry more broadly, people have to be given permission to pursue whatever interests them. It's important, for diversity and the invention of new applications, that "differently able" coders aren't told, by intimidating stereotypical computer science types, that they don't have the aptitude to architect a useful system, or that it's "a rule" that people with their skills will just create problems.
Vision and a perspective that differs from the norm are a lot rarer and potentially more valuable than the ability to apply software engineering principles. Architecture, in the broadest sense, is precisely the area where these "outside the box" contributions are likely to be valuable. Consider the invention of the Wiki. It came out of the pattern language world, it was a hugely beneficial innovation, and it has almost zero data structures/algorithms complexity behind it.
I'd even argue that the examples of pitfalls that you list are more clerical matters of systems programming than cases where architectural design principles are lacking.
>t feels problematic to me that you are saying to someone that they "need to stay far, far away" from some aspect of computing. It's a kind of gatekeeping. Sure, an outfit like NASA needs to make sure that they don't have amateurs writing their systems software. But in the industry more broadly, people have to be given permission to pursue whatever interests them. It's important, for diversity and the invention of new applications, that "differently able" coders aren't told, by intimidating stereotypical computer science types, that they don't have the aptitude to architect a useful system, or that it's "a rule" that people with their skills will just create problems.
Calling an idea problematic is a tell that he's not really concerned by matters like whether it's correct or not.
Web servers and clients, for example, are a case where I've seen bad architecting cause months of damage. An Emacs function hook or advice system, likewise, requires care in terms of when the hook is called, and what the rules for their scoping are. It's a bad software architect that thinks they can just slap callbacks on something.
The puzzle solver obsession in SV has always confused me. Seems to me that you would only need a handful of those type of personalities at any software company. The majority of the work is just shoveling so to speak.
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 think the opposite would be true; research might benefit from puzzle solving, and software engineering is precisely the discipline of building up and reasoning about layers of abstraction and components of a system.
Is BFS really that hard, especially if the interviewer is willing to talk it out with you and doesn't care a lot about finding the most efficient solution possible?
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.
You and a lot of other commenters are getting hung up on the BFS example. It's just that - an example. There are dozens of algorithms that are "common" enough to be asked about and diminishing returns to having them all memorized.
Except all of these questions can be grouped into a category of the same kinds of problem and it is in fact spending time to find out that pattern and which category from sliding window, nested intervals, recursion and dynamic programming it belongs to
Sure, but that's my point. So long as the interviewer is telling you what they'd actually like you to do, you should be able to just derive the algorithm you need to do it. At some point the algorithms become difficult enough (particularly if you add lots of constraints like efficiency) that it's pretty unreasonable to expect that in an interview though, and at that point it's a bad question.
Rather than memorizing a thousand algorithms, I generally focus on being able to solve problems simply, quickly, and elegantly, which will help in actually doing most jobs.
You're still not getting it. Even for BFS, which is not a hard problem, the current state of the market is that enough people have memorized the BFS recipe so that the interview doesn't allocate much of any time to it. You're not going to have/be given time to "just derive the algorithm" or "solve problems simply, quickly, and elegantly." You're competing against rote speed, which, if you don't implement BFS all day or haven't recently done interview prep, you don't have and you're definitely going to fail.
I've heard people actually defend these useless interviews on correlation grounds, like people who are docile, follow the herd, and "prepare" are good hard-working workers who also tend to have done well in school or look polished in other aspects of life. That's what these interviews are really looking for. So, if you're not a well known expert, suck it up, be a servile cog and follow the script.
It seems like there might be a middle ground, like being willing to play the game, that doesn't imply being "a servile cog?"
The trick seems to be knowing when the game is worth playing. There are certainly situations where competition is too fierce and requires too much preparation, so it's not worth doing if you don't really enjoy the game.
I'm not sure getting hired at a large tech firm is quite that competitive, though? They do hire lots of people all the time.
My first reaction when inplementing anything more than a very simple algorithm is to google the best way to do it.
Of course, I could probably come up with a way to do it by myself. I could probably even come up with an efficient way if I spent an afternoon/day on it.
But why do that when I can google it, and get 3 blog posts and 2 stack overflow answers detailing the different options and the trade offs between them, most likely even with an implementation I can base mine off of?
That's why these interview situations are stupid. They're like school where copying is cheating, whereas in real-world situations copying is a great way of doing something.
> But why do that when I can google it, and get 3 blog posts and 2 stack overflow answers detailing the different options and the trade offs between them, most likely even with an implementation I can base mine off of?
A lot of resources out there are wrong, inaccurate, or not reasonable for your particular context, and it requires a reasonable amount of algorithmic intelligence to be able to sniff out what's appropriate.
If I had a dollar for every high-upvoted SO post that misstates a problem or doesn't offer proper caveats... but I can make that judgment because I've already thought about a related problem in the past.
It's like asking why one should learn how to write properly when Grammarly and spell checkers exist, or why mental arithmetic is useful when we have calculators—at some point those your tools will be inappropriate or unavailable. Search tools are force multipliers, not replacements for personal knowledge and intuition.
> A lot of resources out there are wrong, inaccurate, or not reasonable for your particular context, and it requires a reasonable amount of algorithmic intelligence to be able to sniff out what's appropriate.
Right, and having that algorithmic intelligence is key part of me being a good developer. But testing how someone implements an algorithm in time-scarce circumstances is not a good test of that kind of intelligence because it is likely to favour people who have been exposed to that particular algorithm before (even if they only rote-learnt information about it - as many interviewees seem to do in practice) over people who have the capability to think deeply and reason correctly about it, but have not previously been exposed to that problem.
I'm a data scientist, and google asked me to sum all values of nodes at each height of a tree. I had to implement the tree, bfs, and the algo (which was easy once you have bfs) in a 25 minutes, minus any talky time.
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.
>I'm a data scientist, and google asked me to sum all values of nodes at each height of a tree. I had to implement the tree, bfs, and the algo (which was easy once you have bfs) in a 25 minutes, minus any talky time.
THIS is the problem. The (unreasonably) timed nature of the exercise means that the only people that will do well are the people that prep heavily for this specific skill, in much the same way that people about to take the LSAT are likely to do better than it than actual fucking lawyers with proven experience.
Now take this analogy one step further: why aren't lawyers asked stupid timed LSAT questions at every job interview? Because they take a really challenging professional exam called the bar, which is a strong base level guarantee of actual knowledge and competence. Software Eng. have been fighting this kind of credentialing because somehow tech is "top innovative" for such standards. Hence the status quo, and why companies like TripleByte see opprtunity.
> Now take this analogy one step further: why aren't lawyers asked stupid timed LSAT questions at every job interview?
Because which law school they went to is on their resumé and the average LSAT scores for each school are trivially available, tracking very, very closely with school prestige.
Time (and being watched) do make it very unrealistic, but the other thing missing is that programming now is not like in the 1970's, you don't need to memorize much of anything. If you forget something, you look it up, it takes 30 seconds to remind yourself, "oh, yeah, the queue", and then you go. Testing if you can do it without looking it up is not testing the skills you actually need in order to code well.
you are right about any tree traversal would have done, but its not a lot of time and if you end up stuck you dont have a lot of time to backtrack.
a lot of great data scientists dont even know how to use python, let alone implement a tree and tree traversal. there is so much more interesting and pertinent stuff I spend my cycles on learning / keeping in my head than undergrad cs bs.
If the interviewer is willing to talk it out with you, then it is totally a different situation. But, it came up in a recent other HN discussion on tech interviews, and it is an example of something that, if you memorized it, would have a vanishingly small improvement in your ability to get the job done.
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.
Bfs is just one of examples. I can ask you a question you will not be able to answer without knowing the answer. There is a reason it took researchers years to find those optimal solutions
Sure, you can come up with an algorithm question hard and obscure enough that no one will be able to answer it in the time given and no one will have bothered to memorize it because it's so obscure.
That doesn't mean all "implement X algorithm questions" are categorically bad.
Cakes have existed for centuries and I'm sure most people on HN have made cakes at least once in their life.
But put them in a room and say "Make us a 2 layer red velvet cake" with no access to a recipe, and you're not going to get a red velvet cake. It's an easy recipe that most people easily recognize with just a glance, and anyone could make it if they have a recipe on-hand or make red velvet cakes with abnormally high regularity. But most people, even if they're great chefs otherwise, will fail.
Recognizing that a concept exists and implementing a relatively complex concept are different things.
This strikes me as an analogy that does not work in your favor.
To know how to make a novel cake (not a recipe you've memorized), you need to have a good understanding of how the different ingredients interact. You probably even have a good sense of why they're there.
Those seem like exactly the qualities you'd want to look for in a cake maker. Sure, they'll probably be going from recipes in their day to day job. But they'll be able to tweak them intelligently too.
Most tech companies aren't looking for people to reimplement a dozen new variations of quicksort everyday. I mean, some companies really do need people who have countless algorithms ready to go in the back of their mind and the ability to apply them to new and interesting situations all the time, just like some people do need bakers who never need to consult a recipe and can devise new cakes for important events on a whim.
But most restaurants are looking for someone who knows how to cook and use the tools in the kitchen. A chef who doesn't specialize in cakes will still probably be fine if you give them 5 minutes to look up a recipe and make one. In the same way, the overwhelming majority of tech job openings are in need of programmers with some degree of specialization and the ability to know how to look up what they don't know and the experience/knowledge to know how to put that info to use.
The state of programming interviews for the past few decades has been to find people who've memorized all the "recipes" of CS. Most of the jobs, though, are about using some Javascript flavor of the month library and making it work with some other popular library and writing a bunch of interface code. Someone on the team might have to write an implementation of breadth-first search in their toy language, in which case they look up "bfs" on wikipedia and just rewrite the algo given.
Companies are testing employees on how to make cakes when their job will be all about making burgers to order.
But an algorithm or more generally algorithmic thinking is not a collection of rote memories. It's concepts that can be applied broadly. Much in the same way that I'd expect a pastry chef to be able to cook a 2 layer red velvet cake because they know that a red velvet cake is just chocolate, and a 2 later cake is just 2 one layer sheets with icing between. Someone who understands a relatively small set of fundamentals well will be able to perform as well or better than someone who spends weeks memorizing every cake in the dictionary.
I disagree. I don’t know based on what you are making claims, but based on my anecdotical experience knowing fundamentals help low level coders to pass interview but has little to do with performing well. Based on my experience (currently responsible for a huge chunk of a major gaming platform, with hundreds millions users), inflexibility, emotional immaturity, inability to think outside of the box, inability to listen and admit failures, lack of emphaty, not understanding basics of sales(to sell own ideas) are major things that contribute to a bad performance reviews.
Our strongest engineers will not pass google interview without preparation (me included) and it is telling. Especially given the fact that we have higher profits per employee than google (we know what we are doing)
>Especially given the fact that we have higher profits per employee than google (we know what we are doing)
I'm dubious of this claim. Google/Alphabet has a PPE of ~$150,000. Activision-Blizzard has a PPE of ~$33,000, EA had ~$95,000, and Ubisoft ~$15000. I think the only possible major game studios who could meet your claim are Epic or maybe Valve. Unfortunately, those numbers aren't public. So I'm going to assume you work on Steam, since Epic's new platform is likely too recent to have lots of users, and also I don't think it was competently designed.
(the other thing is that this metric isn't particularly meaningful. Google invests a huge amount in unprofitable things with the goal of profits 5 or 10 years down the line. Google devotes thousands of engineers and billions of dollars to things it knows aren't profitable. That doesn't make Google more or less competent, it just implies different priorities than one that's entirely driven by immediate returns).
>Based on my experience (currently responsible for a huge chunk of a major gaming platform, with hundreds millions users), inflexibility, emotional immaturity, inability to think outside of the box, inability to listen and admit failures, lack of emphaty, not understanding basics of sales(to sell own ideas) are major things that contribute to a bad performance reviews.
All of these are important, but they only become important once you have the baseline level of competence. If you have two equally competent people, then yes indeed the softer skills like flexibility, creativity, humility, and communication skills start to matter, and eventually they matter a lot. But those are only good things if you assume a baseline level of competence.
Consider two options. One is that you screen solely for competence. You get only competent engineers along a wide range of interpersonal/soft skills. Some can grow into leadership roles, some can't (or at least it takes longer). But even the most convincing, best "salesperson" has great engineering talent. Then the alternative: that great salesperson is a bad engineer. The ideas they promote aren't always good ones, sometimes they're bad. That's not just "not good", its actively harmful.
>Our strongest engineers will not pass google interview without preparation (me included) and it is telling.
What does it tell? You seem to be suggesting that Google is optimizing badly, and that's possible. But that is by no means the only conclusion. Here's an alternative: "The most profitable things are not always the most technically challenging". Every once in a while you'll see people on HN commenting about how they wired up a shopify store that provides some significant passive income. That's not challenging. It would take an average engineer a week to do, if that. It's still profitable. But that doesn't make you qualified to work at Google (or Valve).
Maybe there’s a problem with which computer science is being taught if it’s so difficult for so many people to derive those solutions from fundamentals, and instead have to resort to brute force pattern memorization through Cracking the Coding Interview and Leetcoding.
I don't understand your comment. Was the parent suggesting BFS (or the like) is an exceedingly difficult concept to grasp? And if we're going to claim understanding BFS is like understanding zero, then wouldn't that just mean it's just as silly to complain about a question on BFS as it is to complain about a question on zero?
Yes, my understanding is that the parent comment is complaining that since it took people with phds years to derive an algorithm for the first time, that we should never expect anyone to implement one in an interview.
But, as with a concept like 0, making the cognitive leap to understanding that there should be a way to represent the lack of something is counterintuitive (indeed, consider Tony Hoare's billion dollar mistake. The "right" way to represent the absence of an object is a hard problem). However, once you've been exposed to it, it's not particularly challenging to rederive the necessary pieces.
So yes, complaining about BFS is, imo, akin to complaining about being asked what the result of the arithmetic operation `35 - 12 - 23` is.
And it's not like it took people with PhD's years to come up with BFS. You see people make a similar argument about Dijkstra's algorithm, when he picked it as an example of a particularly easy problem to solve.
Absolutely! I don't write the algorithm every day, but I interact graphs, trees, and other such structures on a daily basis in my job, and traversing them is something that I work on. Every time I run `rm -r` for example!
I'm not asked to implement BFS every day, but the concept of a tree traversal is incredibly common.
Even more explicitly, a lot of my recent work has been involving automated refactoring tooling, so there's lots of work with abstract syntax trees and control flow graphs, which are trees or graphs, and therefore need be traversed.
Ok, here is the question for you. I’m from gaming company, so it is relevant: given a matrix of 0s and 1s where 0 is a wall and 1 is an empty space, write function that finds path between provided coordinates. It should be suitable for real time game, no gooogling.
Go
I'm not clear what your point is. Sure you can come up with questions that are difficult or obscure.
Yes I can probably implement a sufficiently fast maze solving algorithm, depending on exactly the environmental constraints (for ezple, given the problem as stated I'd assume something like a* using a precomputed mat heuristic would be fast for most mazes of reasonable size, I promise either didn't google that).
But I wouldn't expect someone to answer that in an interview. Hell, I don't ask dynamic programming questions because I think they're too obscure and tricky (in the riddle way). My most common interview question involves a problem I've faced multiple times at work, has multiple valid solutions, and which I had to implement myself in various flavors before eventually coming across a relatively obscure standard library implemention.
Although before I was able to identify that implementation, I had to solve the problem 2 or 3 times, see the different flavors, and identify the common themes and the theoretical underpinnings.
I don't expect a candidate to do that without help, and most don't. But it sure sounds like you think that I'm somehow a bad engineer for asking a question that tests on the job skills I've needed, and the ability to break a problem down into component parts and implement them cleanly.
But oh no, it uses an algorithm. It's a terrible question and I should just ask a question about software engineering that doesn't use any algorithms. Because obviously people will always be able to identify the standard library implemention (no candidate I've interviewed ever has, in fact). So colore dubious of this whole argument about whiteboarding questions being a bad test.
Neither BFS the concept, nor 0, the concept are particularly hard to understand. That's why I used the word "concept". If you disagree with that, I'd be interested in what you feel is exceedingly difficult about the breadth-first search algorithm to understand, or if you prefer, to explain why the time it takes to discover or first write down a concept is strongly correlated with its age.
Consider that BFS was first published in 1945, while the turing machine was published almost 10 years prior. Is BFS an implicitly more complex concept than a turing machine? That seems like a strange argument to make, but I'm certainly interested.
I share both of your concerns (while I was very lucky in getting initial experience, I know of other beginners that haven't/arent, so I'm very sympathetic.) . Started coding for work in '95.
> 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.
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.
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?
Because of Cowen's First Law: there's something wrong with everything.
So no matter if you've read the literature and implemented a process, there is something wrong with it.
That's why there threads persist. Every process has something wrong with it depending on who you are. Funnily enough everyone eventually manages to sort themselves into the right category.
The system isn't broken any more than armed conflict is broken as a way of settling disputes. It's works, it's just a little terrifying and awful.
As I see it, the difficult algorithm interviews screen for people who are motivated enough to spend 100s of hours studying for an interview, or know this stuff for some other uncommon reason. Both types are acceptable hires.
Wouldn't it be better to hire somebody who thought that was lame and who spent 100s of hours learning performance testing, new libraries, design patterns, or just working on projects?
Personally, I'd rather not work somewhere that hired based on drilling fringe information - what will the job be like? Maybe I'll feel differently in 10 or 20 years
It's interesting to me how many people value personal projects. From my personal experience, a confusing Github account with a number of small, questionable projects pushed in one commit half a year ago hurts you more than helps you. Personal projects are fine, but I think many people have the mentality of "getting a TODO app in Angular will help me waay more than implementing algorithms in C, that's useless!" which may not necessarily be true.
> Wouldn't it be better to hire somebody who thought that was lame and who spent 100s of hours learning performance testing, new libraries, design patterns, or just working on projects?
I would hope so, because I do all those things and, after over a decade writing software, find the ability to solve puzzles almost completely useless for most coding I've ever done. But reality doesn't need to make sense. So, if you want to work for Google or Facebook, learn puzzles anyway :)
I really think it depends on the quality of the project. If I'm looking at a candidate, and see 3 projects, each pushed in one commit, each project has 3 classes in one package, and I see pushed compiled classes as well as source classes, that's a clear sign that this person doesn't know what he or she's doing.
That may not be necessarily a bad thing, depending on the position of course. But projects are not the be all end all, at least not in my company, and where I interviewed.
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 really try hard to apply the principle of charity, but as a 67 year old developer who is still working, I'm afraid it's hard to read "search for young and talented people" without thinking of it as illegal age discrimination.
That said, I do like the interviewing approach we're replying to, other than that "y" word... :-)
Hey at least older people have laws that protect them.
Did you know that it is perfectly legal to discriminate against young people?
Yeah sucks to be them, I guess. Apparently nobody cares about discrimination against those people.
Old people are among the richest people in the world. But I guess when things are made fair, and neither young or old people are discriminated against, that appears like "discrimination" against those who are now being treated fairly.
I think the hidden agenda here might be that big corps also test for the candidate's a) motivation and b) obedience. Are you the sort of person who's willing to learn whiteboard programming on your spare time, and then tolerate abuse from the interviewers? The type of unethical business most of the big corps do works best with subservient, diligent code slingers.
Is your experience that interviewers "abuse" candidates? I interview candidates about once a week, and I always try to make them feel at ease and comfortable, no matter if they are doing well or not. I would be curious to learn about other people's experiences.
I personally have only anecdotal evidence, but I've read now many stories where the interviewers of these giants refuse to engage in a two-way, human-to-human conversation with the candidate but instead make the ordeal deliberately prolonged, stressful and unconfortable. I'd call that abuse.
Even though I'm sure there is a lot of variance between interviewers, I can't help but think that the abusive style of whiteboard grilling must "work" in that it results in able workforce, and that might be because of the reason I suggested.
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.
I don't have a good answer to that (i.e. that I personally checked). However, FastAI lists some solutions in their latest version of the "practical deep learning for coders" course [1]. The google cloud version for example [2] was calculated to cost only about $40-$50 for the duration of their course (2 months), which is way, way better than the $10/day on AWS that I tried.
Reiterating my view, I feel like the interviewing grind has become akin to gymming - you go to your mental gym, build up your 'muscles' by doing pointless repetitive tasks AKA algorithms you'd never use in real life (probably like how bodybuilders would never need to deadlift 125kgs in their daily life). It doesn't directly help you do your job but you know bodybuilders have higher than average fitness levels. So in the same manner, devs grinding leetcode probably have higher 'fitness' levels (mostly a type of muscle memory for programming) than devs who don't.
But, if I'm a scout for a football team, I don't want to see you in the gym, I want to see you play football. Maybe, ideally, I'd like to see both, but seeing you play football is by far the more important thing.
So tons of open source contribution in relevant areas with quick high-quality, low-bug-count, beautiful code check-in and demonstrated knowledge in breaking down problems into sub-problems and come up with elegant algorithsm? (something you can see in the field?)
Some analogies make sense, some probably don't map well.
Google prefers to hire Devs with strong CS foundations because they assume these Devs can contribute in many areas.
If they were only to hire someone based off something that they've done before and excel only in that area, they'd be like other companies who only hire selectively based on specific skill-set (e.g.: Java Dev, or 3D/game devs).
No competent team makes decisions based solely on the Combine. It's a data point that gets combined with college game tape, private workouts, and some other special events like the Senior Bowl. Also, a significant number of players who end up getting drafted or signed as Undrafted Free Agents don't go to the Combine.
I didn't make that assertion. I was simply pointing out that the NFL has a set of skills tests that aren't football. Further, the effectiveness of the combine is as widely debated as the effectiveness of algorithm questions.
Except lifting weight has a DIRECT affect on increasing muscle mass. Doing pointless algorithms don't have any direct affect on your coding skills. I know plenty of college grads that can memorize all sorts of algorithms, but are shit at real world code. If I'm a company hiring to do REAL WORLD CODE, I'm going to ask questions pertaining to the position I'm willing to fill. The problem with these companies, is that they are hiring more than they need, therefore they aren't asking questions pertaining to any REAL job they're looking to fill.
It is also a form of “proof of work”. If you are willing to go to the lengths of learning these things, maybe you’ll be able to learn other things that are harder to assess during an interview.
Honestly, there are so many posts like yours on HN, it's a surprise companies don't change this ridiculous algorithms thing. Hiring managers here complain that candidates all lie and they need to weed them out. However, algorithms bias towards younger people, recently out of college, math hobbyists and people with a lot of free time.
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.
I’m a software developer first and foremost, I am a software architect second these days specializing in building stuff on top of AWS.
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.
As a hiring manager I would be impressed by your background. Unfortunately most will never read that far back. Or worse, not have enough experience to understand someone who can do that can handle the needs of their software as a service CRUD app.
There's really no need to screen for liars. Generally speaking, I'll try to ascertain how the candidate represents the skills on their resume. Some represent their skills well and can describe in detail their approach to solving a problem or some such. From there, it's not hard to assess things like passion, determination, etc.
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.
This all comes down to what the company is optimizing for.
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!
> 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.
In at least one aspect, the adage becomes facially untrue -- you can fire bad employees, but you cannot get back good candidates rejected by means of a degrading exercise. You probably lose them forever.
In companies where opportunity cost and hidden losses are nobody's responsibility, this sort of mediocrity is well accepted.
You can fire the bad ones, sure. After you document everything and cross i's and dot t's. Even if you don't CYA, you still lost team productivity while they onboarded the new person, and that time is lost. Plus the hit to team moral, and possible negative affects to team culture of dealing with an under performer or toxic individual.
What's the cost to team morale when the team members have to put in extra time to meet deadlines because the team is shorthanded? What's the cost to the company when the team doesn't have the bandwidth to take on work and projects start slipping? How does team culture fare when someone on the team always finds some reason to reject every candidate they see, and this continues for weeks or months on end? What is the loss of productivity from having to conduct all these extra interviews until just the right person walks through the door?
The answers to both sets of questions are very situational, yet some people treat them as if they have universal answers.
Just to be clear the kind of strategy we discuss here only works at FANG like companies that have enough candidates applying so that missing a good one doesn’t hurt their hiring goals.
Of course it sucks for the individual...but such is life
Truth, and also especially so for a company like FB or Google where they probably have an abundance of qualified applicants, for a variety of reasons. For most companies, copying what FB or Google (or Microsoft or whoever) is doing, is probably a bad idea, in tech interviewing or many other things.
Nope. They're neither filtering in good ones or filtering out bad ones. They're filtering for people who find a way to hit whatever arbitrary metric the Company sets up as "success", and these people will have many more chances to practice this "skill" in subsequent self reviews and metrics hacking. They also end up running the Company and hiring more like themselves.
As someone recently interviewing I targeted roles where I didn't have to jump through these hoops and it worked out fine. Contacting people I had worked with before who could vouch for me made it much easier to land a job.
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...
I wrote a custom HashMap for Java, used BFS and DBS on graphs, wrote a top down custom parser, custom string searching algorithms to solve real business problems. I would rather work with someone who knows how neural networks really work rather than who knows pytorch or keras, because they can be learned rather easily. In some industries knowledge of algorithms can be more valuable than knowing a myriad of frameworks that change every few years any way.
> In some industries knowledge of algorithms can be more valuable than knowing a myriad of frameworks that change every few years any way.
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).
I agree that these problems are rare, but they do come up, at least they did in my experience. As you alluded general programming and software design is not the same as knowing how a particular framework works. The former is much more valuable, but at the same time if someone is able to understand in depth a complex technology/framework he/she is most likely great at general programming and software design.
You're not wrong, but that one time you see a place for a new algorithm for a specialized problem can make a big enough difference to be worth it. If nobody in your group has the range, it's not likely you'll know when it'll pay to call in the research department with the PhDs exactly when they're needed, either. There's no bright line between coding and invention.
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.
Udi Manber's Algorithms: A Creative Approach looks like a promising book to work through. There are lots of great resources that didn't exist when I was an undergrad.
But how do you approach them? What prompted my comment was all the times people comment online about "memorizing algorithms" to prepare for interviews -- learning about algorithms will include a lot of them sticking in memory, yes, but approaching it as cramming a textbook into memory the way students cram for a final exam seems... disappointing.
> Much more important is to have the experience of how code complexity accumulates, and how to mitigate that.
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.
Algorithm interviews are good for people that will be writing algorithms. Most of us are just plumbers, even so a solid knowledge about what algorithms are available and what their strengths and weaknesses are is as important as good knowledge about the tools is to plumbers.
This is my main beef with tech interviews: you get given a test, or an algorithm, or put under the spotlight in a pairing session to solve a problem in essentially the least efficient way possible. It's usually under the guise of seeing how you think, but it's pretty damn hard to do that without also judging how the code looks and how much you were able to write.
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.
>This then becomes representative of your experience... 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.
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 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
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.
There are career stages.
For candidates just out of school or with little experience asking algorithmic questions totally makes sense.
For more senior candidates (who actually progressed to the next stage, not just spent a lot of years), the questions become more real-life, more open ended and with more than one (or sometimes none) “correct” answer
Are algorithm puzzles really that ubiquitous in the US?
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.
I might be wrong but I don't think that larger tech companies get that many more applicants for jobs than smaller companies do. Beyond FAANG I don't think there is really much more "status" around working for a large company vs working for small company. Most people understand that just because the company you work for is large one doesn't mean your job is any more challenging or technically advanced than it as at a small company.
Also a company hiring a mid-level developer (say around 3 years experience) doesn't really have that much of a pool to chose from. Most good developers are already in jobs and pickings are slim, its a buyers market.
Larger companies usually have more brand recognition == more applicants. Many smaller companies are essentially unknown to the public and need to rely much more on talent agencies to bring in applicants.
In my experience they typically ask you questions about the experience you've listed on your CV. If you say you have experience working with AWS, then they might ask you something like "explain what a VPC is and why is it useful?". Other more general questions are usually along the lines of "tell me about a solution to a problem you solved and how you designed the solution to that problem".
The few times that I've been asked very specific technical questions they have always been related to the job I was applying for. Example: a ruby on rails job interview I was shown a few ActiveRecord models and asked what is wrong with them and how I would improve them - the answer was that they were all really polymorphic models but that was not how they were implemented in the code. Or for a frontend role, they might ask you "explain the javascript prototype chain to me".
Again, in my experience, its always seemed like the interview was more of a personal test rather than a technical one. Will the person be easy to work with? Will they be communicative or will they bottle up their issues and resent the team for it. Are they willing to learn? Will they be able to hande occasional pressure and stress? I think its generally accepted that its extremely difficult to accurately gauge a person's technical abilities in an interview. Also employees always start on a probationary contract in which they can be fired with 1-2 weeks notice, this usually lasts between 3-6 months, so if it turns out the employee was blagging it in the interview then it will become apparent pretty quickly and they will likely not make it past the probation period.
> 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.
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.
Reminds me of the old phrase, re: academia: "The competition is so high because the stakes are so low." There is something really weird, at least to me, in working so extraordinarily hard to prove yourself worthy of serving someone/some company. But that's just me.
Money, I can understand. Under bayesian analysis, your better off going into medical studies, though. Prestige...well... In my dads day, working at IBM would've earned great prestige. On graduation day for me, working at Microsoft would have earned prestige the same year Google incorporated. So...fuck prestige.
Really, that's not far from the truth. If you've worked at other well known "good" companies and worked on hot/important stuff, and that info is on linkedin, you will probably get approached by a google recruiter at some point. And unless you fuck up your call with them to make sure you're interested and a real person, that basically guarantees you a first round technical phone screen, which is the hardest part of getting hired at Google. You can study as much as you want and be the best engineer possible, but that won't matter if you don't get to the first round interview.
You basically "build" a linkedin profile that comes up when recruiters search for technically hot things, and then they will come knocking
yes, bypasssing the int4erview is hard, what I'm saying is that you can go directly to the first round of technicals without hazards if you play it well
I found essentially most 'algorithms' code is just terrible code. A lot of people spent a lot of time learning algorithms other than more broad techniques write terrible code every day.
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.
You are so right. Im 55 now and have developed on tools, a lot of ERP/Manufacturing stuff, compliance, integration tools. Have never had the need to reach for Knuth so that shows either I am pig-ignorant, arrogant, or there is no real need in general. It is good to know algorithms but these are not the main stuff of the real world. Learn about design patterns, user experience, product philosophy, and invest time in learning about your company (who, how and why started, markets, competition) and you will go further and faster than being able to ace a whiteboard interview on the foibles of event processing in Vue. And yes i still cant write good javascript - because IT IS NOT IMPORTANT so i have avoided until this year and Im now learning it as a hobby, not a need.
While I agree with you on the non-algorithmic coding skill being more important in most of the scenarios that an coder deals with at work, I feel having basic understanding of algorithmic skill is important as well for coder success. Interview should test basic algo skills along with other important skills, but when I put myself in interviewers shoe I realize how difficult its is to test on real coding challenges as every company has its own sets of tools and techniques that they use and prefer. Testing it would require first detailing coder on companies present tech culture which is a difficult for a code to get in short duration.
As someone who is interviewing for internships, I view all of these algorithms interviews as a necessary evil. While they may not reflect the day to day job demands of programming, they are certainly easier to measure and serve as a benchmark for candidates.
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.
Ex Amazon here. We never asked silly puzzle questions, but asking questions about algorithmic complexity paid off when hiring strong, senior engineers.
> 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.
Have you considered that they aren’t necessarily looking for a particular answer or even a correct answer but rather your thought process while working through problems and how you engage with a peer?
> If it’s of any use: 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”; I started preparing in late April and started applying in June/July; and, lastly, a few months in, my job is everything I could have possibly dreamed of.
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 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 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"
The technical interviewing scheme is not great, but I haven't seen another system that works.
> 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.
> Practically speaking, FAANG companies do hire such individuals, they just do it through acqui-hires.
there's a huge pool of employees that are in companies which aren't potential acquisition targets.
> Well... how do we find these people? By looking at their resumes where they claim this? By contacting references who will attest to it?
internal references? if you've got a couple of internal folks who are doing good work, and they all worked with and vouch for old bob, maybe that's better than anything you're going to find out from <8 hours of whiteboard scribblings?
> By trusting the intuition of subjective evaluators of the candidates?
even the faintest whiff of implication that FAANG interviews might not be subjective is hilarious.
I've had internal referrals at a few FAANG myself, I have one of the "unique" (no degree, some high school, ops/coding since 12 so about 15 years on/off) backgrounds and the people who referred me would be on the team that I'd be joining and all seemed incredibly excited to get me on board. I work on FOSS projects with them already.
At each place it was people from other teams completely unrelated to that team who interviewed (or would interview) me and eventually turned into a decision panel where everything about me would be considered by these people who really knew nothing of my character/skills aside from the resume and white boarding.
Between that and the amount of times I heard "Stanford" tossed around in a way that put down other schools (while not having a degree at all myself) I decided to give up on ever working at any of these places without being an acquihire. It just seems like a far fetched pipe-dream and I'd never check the required boxes that they expect for someone to sit in the same building with them. And honestly, none of that sat well with me.
It was an interesting time and I got to finally experience SV and realized it's likely not a place for someone like me.
First of all it sounds like your interview experience was unpleasant so if this was at Google I apologize.
Secondly, I can totally relate to feeling like I don't belong having also come from a nontraditional background (No college degree).
> At each place it was people from other teams completely unrelated to that team who interviewed (or would interview) me and eventually turned into a decision panel where everything about me would be considered by these people who really knew nothing of my character/skills aside from the resume and white boarding.
This sounds similar to what we do at Google; people who know you actually aren't allowed to interview you because they will be biased. We try to make the interview as objective as possible. Note that information from anyone who knows you or referred you will be shown to the hiring committee though so it's not as though that feedback is not used.
> Between that and the amount of times I heard "Stanford" tossed around in a way that put down other schools (while not having a degree at all myself) I decided to give up on ever working at any of these places without being an acquihire. It just seems like a far fetched pipe-dream and I'd never check the required boxes that they expect for someone to sit in the same building with them. And honestly, none of that sat well with me.
I understand why you feel this way but that's definitely not true! I don't think you necessarily should want to work in FAANG but I strongly think you should believe you are capable.
One of my recent FAANG interviews was ENTIRELY whiteboarding. It kind of shocked me.
It's weird that it's that skill, and only that skill, that gets evaluated. I did another interview at a different one where there was at least a design interview (though I flubbed it and wound up being incoherent).
It really feels like they aren't even trying to evaluate anything other than whiteboard coding. Accepting that it's not a great signal and yet fully investing in it.
It's such a weird skill and it's so easy to perform badly; I'd be kind of shocked if the test/retest validity wasn't very low.
Also... I mentioned that working on teams with other women was important to me... but every technical onsite I've had has been given by a man. They've pitched teams led by women, and my HR/recruiting contacts have been nearly all women. But for the interview itself? All men.
Trust me, companies would love to have at least one woman on every interview slate, and not just for women candidates. The problem is that the ratio of women engineers at the FAANG companies is such that this would put an incredibly unfair burden on women engineers. They would have to spend all of their time interviewing, or at the very least a disproportionate amount of time.
>I'd be kind of shocked if the test/retest validity wasn't very low.
It's absolutely very low, and they're okay with that. One of the things recruiters at these companies will tell you if you get rejected is some variant of, "Don't worry, you can always try next year." These companies fully understand that they're rejecting good engineers. They don't care, because, historically, the number of engineers applying has been so high that they could reject 75% of the good engineers and still have enough to fill their headcount.
We'll see how that attitude towards interviewing changes when high Bay Area/Seattle housing prices make it more difficult for them to recruit.
> internal references? if you've got a couple of internal folks who are doing good work, and they all worked with and vouch for old bob, maybe that's better than anything you're going to find out from <8 hours of whiteboard scribblings?
At big companies this is hard to scale because you have to protect against nepotism at the top layer. This forces policies protecting against the bad outcome.
Provided references are at the core the worst way to judge if someone can do the job and the laziest way. If you want to rely on references you have to get them yourself through background check or the risk of gamification is huge.
Get a sense of the projects they have worked on if those skills relate to the position. Make a decision based on that.
Random coding tests, whiteboarding, buzzword dropping are only helpful to a point.
Good points - provided references are shit, simply because they can be gamed. If you work for me and I dislike you but don't have the courage to pull out the fire hammer, I can give you a great reference. If I really like you because you're extremely good (and make me look good), I can give you a horrible reference and hold onto you.
However, OP was talking about internal references. This would be a situation where I work at Company A, but I know you and trust your work. Therefore, I refer you to Company A, big up you a little and suggest that they pursue hiring you.
The difference is that if you suck, it reflects poorly on me (and quite likely kills my dreams of upward mobility). Normal provides references don't have the same motive to be truthful!
What? Is this just conjecture? If you give a bad reference to an employee you are directly putting you and the company in harm's way in terms of litigation. Usually, you just don't give a reference other than confirming tenure existence and duration if you won't go into positive detail.
Which of the FAANG specifically have you experienced acquihire technical interviews at?
Just curious, because again, I’ve only ever heard this from friends that got bought by Google. I’m not saying others don’t, just haven’t heard of it from folks getting acquired at other places.
- If they decline, you usually get a very generous severence package
- While sometimes technical, there is usually significantly evidence of your abilities from the acquired company's records.
- In my experience it's usually a cultural test more than any other.
- Interviewing is part of the evaluation. If the hiring company thinks everyone is grossly incompetent they can reevaluate the acquisition or call it off entirely.
> 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?
While not perfect I wonder if a person's projects are a good signal for this. There certainly are those who have developed a significant open source project but who get rejected by the FAANG companies, the author of Homebrew being a recent infamous example.
One unfortunate side effect of being at a FAANG company is that most of your best work is probably proprietary and you will never have the chance to show it to anyone outside the company, nor will you have much free time for personal projects.
As an interviewer, I can definitely say that GitHub has become a bigger part of helping to evaluate people.
Every time the interview story of the guy behind Homebrew gets brought up, there’s the reminder that he interviewed for a software engineering position while he would’ve been better suited for a product manager position — he also mentions this as such.
The author of Homebrew was rejected for software engineering at Google, which was perfectly reasonable given what he has said about his own skills. He has demonstrated very good product management aptitude on the other hand; it would be far more concerning if he were rejected from a PM role.
> I wrote a simple package manager. Anyone could write one. And in fact mine is pretty bad. It doesn't do dependency management properly. It doesn’t handle edge case behavior well. It isn’t well tested.
But ultimately, should Google have hired me? Yes, absolutely yes. I am often a dick, I am often difficult, I often don’t know computer science, but. BUT. I make really good things, maybe they aren't perfect, but people really like them. Surely, surely Google could have used that.
> I am often difficult, I often don’t know computer science, but. BUT. I make really good things
Having worked with people who are dicks but make really good things...I wouldn't want him on my team either. There are plenty of people who make really good things and aren't dicks.
> There certainly are those who have developed a significant open source project but who get rejected by the FAANG companies, the author of Homebrew being a recent infamous example.
It’s always possible that Google felt he wasn’t what they needed. And keep in mind that Howell ended up being hired by Apple and working there for a while.
>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?
I mean... Yes?
This system, backed by "trusted recommenders" is exactly what academia uses, and they seem perfectly capable of discovering Higgs Bosons and whatnot.
They physics communinity does not seem to have the issue of being able to judge merit from resumes. When you see a physics PhD with a list of academic references, chances are that the person knows what they are doing; with computer science it’s somehow likely that the person might not know their way around the command line or when using an array might be a bad idea…
>The technical interviewing scheme is not great, but I haven't seen another system that works.
I would argue that pair programming or take home projects do a far better job than the standard Whiteboard Algo interviews. In fact I don't think it's even close but SV engineers have been captured by this Whiteboard Interview Stockholm Syndrome/Hazing and continue to perpetuate the insane idea that there is no better way.
Many people on HN also complain about "I don't have time for pair programming, take home". They don't like interviews. People just expect to be paid top dollar on their word.
> Many people on HN also complain about "I don't have time for pair programming
How does one not have time for pair programming? It's the exact same time commitment, from both the interviewer and interviewee, as a whiteboarding session. It's just a different format for the interview.
This is probably the only part I'll give you as far as your comments on this thread, but even this is inane and you're projecting. First of all, the problems with take home tests are the time commitment, which I can understand with the caveat that you do a lengthy pair programming exercise in person. I haven't heard that many complaints about pair programming, but I'm sure I exist so I'll give you that.
I don't think it's the case that people don't like interviews. I think you're making a strawman. I'm not going to go and say that you're part of the cycle of SV engineer being hazed, reproducing it and exhibiting a sunken cost fallacy/bias towards the way you've done it, but it's possible. I don't think this is the ideal way to interview.
What's more, I've been seeing actual improvement on the state of the art in this area. Platforms like Karat et al (not sure if Karat is the best in this area but I did have a good experience with a company that used them and interviewed me well) are actually incentivized to minimize false positives and negatives rather than just one. You might be surprised at how much better a good technical interviewer can be than an average strong engineer.
Please provide a rebuttal on the comments individually if you care to disagree. This comment was just alluding that any technique is ever good enough for HN. People just want word of mouth and their resumes to be enough. That doesn't work when resumes lie.
> No one makes a neuro-surgeon perform a surgery before hiring them.
True, but I also know that a neurosurgeon graduated from an accredited school, did an internship at an accredited hospital, and then passed a standardized licensing exam.
If we had that for engineers we wouldn't need to test their skills either.
When I was doing hiring, I would see resumes of people with 10+ years of experience who couldn't write a simple loop in their favorite language. If you've been coding for 10 years, you should be able to write a simple loop. That's the problem we're solving for here.
An engineer that did 4 years of college at an accredited engineering school isn't enough?
What you are asking for, is a surgeon to retake the boards every time they change hospitals. Or a licensed professional engineer to retake the PE exam everytime they change jobs.
The algorithms asked in interviews are rarely implemented in a job. All they prove is how much you studied and the author of the article proves that.
What our industry is missing, IMHO is required certification and training. Doctors and nurses have yearly training and related exams to keep their certification. That's why a hospital can hire staff based on a license...Not becsuse the items you mentioned. But our industry would never go that route, which is a longer rant.
Also if peope who can't write for loops are passing your phone screen... You might want to update your phone screen.
> Or a licensed professional engineer to retake the PE exam everytime they change jobs.
Yes, just as you retake your driving exams every five years, you should retake your engineering exams (unless you are an accredited engineering instructor, in which case the license becomes permanent) every ten years.
> When I was doing hiring, I would see resumes of people with 10+ years of experience who couldn't write a simple loop in their favorite language. If you've been coding for 10 years, you should be able to write a simple loop. That's the problem we're solving for here.
While I agree with this, the FAANG interviews take it too far. Simple fizzbuzz is enough to weed out these completely incompetent engineers. If they pass that, accomplishments and experience are going to be a much better indicator of engineering ability imo.
> True, but I also know that a neurosurgeon graduated from an accredited school, did an internship at an accredited hospital, and then passed a standardized licensing exam.
> If we had that for engineers we wouldn't need to test their skills either.
I think we will, eventually. Other fields of engineering already do, of course. Software is new and not that many people have been killed by bad software (unlike bad buildings), but I think we'll get there.
Google allows you to write code on a Chromebook instead of a whiteboard (don't know if it's for everyone or some people). Is that pair programming? Or do you mean actually working with your preferred IDE/text editor, terminal, browser to look stuff up?
You think people that pass technical interviews can’t be false positives?
I think they weed out a few, but completely ignore practical development skills, work ethic, soft skills, design and architecture skills, etc.
Of course maybe this explains why most of the big tech companies have seemed pretty stagnant for the last decade, largely failing with products and decisions that have poor execution and market fit outside of the products that made them big in the first place.
Has anyone actually studied the best way to hire devs? Like a real, independent study that measured and compared results across, perhaps, a wide array of metrics?
> Has anyone actually studied the best way to hire devs? Like a real, independent study that measured and compared results across, perhaps, a wide array of metrics?
I don't know how you would ever strive to do such a thing when people can't even agree how to measure productivity.
> Of course maybe this explains why most of the big tech companies have seemed pretty stagnant for the last decade, largely failing with products and decisions that have poor execution and market fit outside of the products that made them big in the first place.
In most large companies these things have nothing to do with programmers; the decisions are made by management and products are designed by PMs. Hell, you can't even necessarily blame buggy products on programmers: I've been on projects where everyone realizes things suck but if you don't get funding or agreement to work on infrastructure projects what can you do?
> I think they weed out a few, but completely ignore practical development skills, work ethic, soft skills, design and architecture skills, etc.
This is the whole point of the non-coding portion of the interview, and while it’s not possible to get a full picture of this in the short amount of time allotted, it is generally enough to throw out the obvious ones.
> maybe this explains why most of the big tech companies have seemed pretty stagnant for the last decade, largely failing with products and decisions that have poor execution and market fit outside of the products that made them big in the first place
I think this is unrelated to hiring and more a result of corporate policy.
> I think they weed out a few, but completely ignore practical development skills, work ethic, soft skills, design and architecture skills, etc.
Tech interviews are not solely whiteboarding. Even at FAANGs there are system design and hiring manager interviews designed to ask about those sorts of things.
People always say this, but is it true? It’s easy to fire someone. It’s really hard to find someone who can ship (something you won’t get from a whiteboarding challenge).
Engineers who don’t perform well for extended periods of time tend to drain resources from the rest of the team. They require active management; laborious code reviews, they also introduce more bugs and contribute to less robust designs. As for firing, it is a painful process for a manager as it comes with a variety of liabilities and HR involvement.
Seems costly to fire, not just because of HR and management process overhead. People are trying to build successful teams, and regular firings distract from goals, ruin morale, and create an unsafe environment.
Regular firings imply a pretty bad hiring process. There's a spectrum between "regularly fire bad hires" and "regularly reject good hires".
Also, what evidence is there that these high-false-negative practices are actually reducing false positives by a significant degree? In these kind of threads I read the same arguments and assertions, with the same lack of evidence, as I hear from people trying to defend airport security theater. I should start calling these practices "interview theater".
It's technically easy to fire people, but it's emotionally draining on the team and on the manager in particular. Every time you fire someone, the team's morale takes a hit, and if you were firing people often, folks would begin to feel insecure and you'd struggle to keep good engineers.
Smart, good people want to work with other smart, good people. If you're constantly bringing in bad hires (even if you later fire them) then your good engineers will get fed up and leave.
The net value of a bad hire can easily be negative, if you consider the high onboarding costs to get a new engineer ramped up and trained. (Of course, the very best engineers basically sit down and start coding as well as your existing good engineers, but these true outliers are by definition uncommon). Not to mention the cost of the bugs and rework that bad hires produce.
If you use a recruiter, you're typically paying a large fee that you can get refunded after N months (details vary, 3 seems common), so you'd have to be making your assessment in the first N months; that's a lot better than trying to make an opinion on the first day, so if all of the above wasn't true, in the abstract, it would be great to be able to hire aggressively and fire likewise. However, good engineers balk at the concept of a "trial hire"; understandably, as personally I'd refuse to work somewhere that didn't have conviction that they wanted to keep me.
I imagine the relative significance of these points varies between companies and stages; all of these points are from early-stage (<25 person company) startup life; YMMV.
> (something you won’t get from a whiteboarding challenge).
I agree with this point, though I think it's orthogonal to the question of false positive vs. false negative cost optimization.
It's because they are basically just testing IQ. It's not actually programming knowledge they care about. If a person has a CS/EE degree and has been professionally programming for a few years they probably have enough domain knowledge regardless. Then the rest of the interview is testing soft skills.
I think it’s exactly that, willingness to conform, and a very effective filter on age.
I know Google does a lot of metrics on hiring. Have they correlated their practice with IQ anywhere? Guessing nothing public as that would trigger a firestorm.
At the end of the day it’s just the cognitive elite trying to hire the cognitive elite.
They used to interview using the kind of brainteasers found in books like the ones Mensa used to make. The algorithms approach, I suspect, is just a CS proxy for an IQ test just like their old approach was. It would also filter for youth, which they semi-openly advertise as well (see chess literature on brain age for what I mean).
This is because it's actually not allowed to use IQ tests as a screening mechanism for most jobs (you need a valid reason and "software engineer" probably isn't good enough to justify the liability). By using algo questions they can select for something that might correlate very well with IQ, that also makes sure the candidate has real coding knowledge, and which has much less liability
These company simply want the best of the best. They want people who can whiteboard BFS tree AND also have proven business track records, yada yada. Not just either one of this.
I think companies are trying to find superheros. I would say maybe 5% of the people I've worked with are worlds smarter and more productive than the average programmer (like me).
Those people generally also do well on those whiteboard questions.
Have you considered that there are enough people who can both whiteboard a BFS tree and get stuff done that Google doesn’t need to hire people who can do the latter but not the former?
> 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
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.
But you are expected to find the most optimal solution to a problem, and not just a brute force one. And usually an optimal approach would require advanced knowledge of algorithms and data structures.
> But you are expected to find the most optimal solution to a problem, and not just a brute force one.
I'm not talking about brute force solutions. For many problems, there are things in between <famous algorithm> and brute force. Some problems offer simplifications over more general problems where <famous algorithm> is strictly worse than a simpler, more customized solution (same efficiency, but simpler to write and understand).
Can you give a few concrete examples of how a deep understanding of BFS that can't be googled and read in 10 minutes at the time you need it can help you ship profitable software products faster than your competitors?
Do you spend 5-10 minutes googling and reading about the Linear Search algorithm[0] every time you iterate through a list and have a conditional to do something if an element matches some criterion? BFS, or a generic graph search (could be BFS, DFS...), is essentially just linear search except each element can have 0-n direct next elements, instead of 0 or 1. It's not this hard thing that never comes up...
Indirection is great in this trade, a lot of what I "know" is just an index key/search strategy to go look it up again. But a lot of what I "know" I know directly. According to this old paper[1], for many fields including software you need to directly know about 70k±20k random things in the field to be in the running for expert status. Proficiency is also related to how many things you know directly. Thus you can't do an index lookup for everything unless you have no constraints on time and/or don't care about improving your level of expertise.
I'm not sure I follow your question, what are you referring to with "solve this?"
I usually find DFS/BFS applicable when I'm dealing with data that forms relations like "children" or "neighbors" or "connected". Sometimes that's explicit because the data is already in a tree or graph structure, sometimes it's not. And often rather than looking for a particular element, I want to iterate over all the data connected by the relationship to do something with after as a list/set/map of the data or some of its properties.
A concrete example from a side project (it's more fun than Real Work examples, and people have given other examples in the thread anyway), I was writing a client for the board game Go. If you're not familiar, the data is just a 2D grid (easy to interpret as a graph), black/white stones get placed on coordinates like (3,4) marking intersecting lines. A single stone forms a connected group with another stone if both are the same color and separated horizontally or vertically by one. Groups have a count of "liberties" representing the number of unoccupied points the group can expand to if a stone of its color is played there -- a single stone by itself in the middle of the board will thus have 4 liberties, if you connect a stone then that group now has 6. If you cause an opponent group's liberties to go to 0 by surrounding it, the whole group dies, and its stones are removed from the board with those points becoming unoccupied again. Suicides (causing your own group to hit 0) are ok only if they capture the opponent first, otherwise are invalid moves.
Handling the game rules is easy with DFS/BFS. All you need to start with is a function like get_neighbors(position) which on a grid is trivial, being the 2-4 surrounding points depending on whether position is an edge/corner. Then you can use DFS/BFS (doesn't matter) and several lines of code later you've got a function like get_group_member_positions(start_position) that gives you every member stone's position no matter which one you query first. Now you can make a function count_liberties(group_positions) -- which can be solved as another depth-first traversal problem over the neighbors of each member of the group that are empty and haven't been counted already.
Even less code this time though; have you ever had to write 4 lines of code like "for el in list, for child in el.children(), if child blah, do something"? That's a DFS, just not a general one since you know how many layers there are (or that you care about), and it assumes children aren't shared between els.
From all that you can then have a function like get_stones_captured_by_move(move) that tells you what (if any) stones need to be removed if move were to go through: for each neighbor of the move, if any are the opponent's color, count the liberties for that neighbor's group and if it's 1 then those will die when the move is played (takes the last liberty). If it's all one big enemy group around the move you'll have to account for duplicate positions to remove, but those are minor optimization details. Similarly the fact that everything is recalculated all the time, that could be optimized with more storage.
You won't be able to Google it, because you never ever asked to BFS by name.
You will be asked to find the biggest file in folder structure, find largest modúle in dependency tree or the person in data structure that has no department and thus caused null pointer exception.
You also won't google it, because it is simple and ylnormal programer don't need google for this.
No problem will present in such an easy way as "oh just apply BFS". As part of a big project you often have to use many different algorithms for sub parts, often modify them to suit constraints.
I think the HN crowd is heavily inclined to web apps and also front end. I can't tell you how important fundamental CS knowledge is for backend. I bet you can't use a library or API for how caches work or when paging happens. Knowing these things makes you a well rounded engineer ready to tackle different problems. I can trust you to write a mobile app or work on some part of a self driving car because you have the building blocks to do so. Most of the comments in such threads have no interest in interesting and diverse jobs because "why bother, when will I use this". To any new grad, yes the interviews can be better but please spend time on these things at school. They are an investment in your career's stock.
I mean, I've built and released multiple mobile apps (commercial and enterprise) on both platforms for multiple companies. They've all been mostly successful at doing what the company needed them to do. They look fairly nice as well.
And I don't have this kind of fundamental, "what do you mean 'google it' are you a complete and total fucking moron!?" attitude about anything in software. I routinely browse through google results (mostly SO/Medium) about very basic concepts just to read the words again and re-warm those caches in my brain.
It’s possible to have to solve issues like this even inside of app development. Think back to every time your app has performed poorly: has there been any cases where you didn’t know how to make it faster without giving up in the way you had designed it? Maybe the app was reading from the disk to populate your data model, and that was too slow? Maybe you were performing an O(n) operation for each row in your table view?
I was recently asked to identify pages in our 10 million line application that use a certain piece of business logic. It involved parsing the page and their nested subcontrols into a tree with by doing a modified BFS on the linked files, doing a modifed BFS on the tree to identify the related code behinds, parsing the C# from the codebehinds into a tree, and traversing the C# tree (again with a modified BFS) to find if the code path was hit.
These questions come up all the time. You just need to be proficient enough with algorithms to identify them.
You are essentially looking for patterns in text, your solutions looks not ideal and it takes a lot of time to develop vs just using some linux tools and piping output from one another. 10 millions line is nothing... (commenting based in your gist)
would go even further and say that you could easily have installed something like https://oracle.github.io/opengrok/ in three commands for your organization and extract a lot more value while resolving the issue.
It feels like OpenGrok should be able to do this, but I'm not seeing it. How do you search for a method call in a code path? E.g how do determine i function A calls function C? function file1.A(){file2.B();}, function file2.B(){file3.C();}
Heard back from the OpenGrok developers and they said they don't support the use case I needed. My gist was just a very small part of the overall process (and yes, for that small piece it was trivial to use a linux util instead of csharp).
Right, but you used libraries to do it, right? You didn't actually need to know how BFS works, did you?
10 million lines of code fits in RAM pretty easily. You could use the worst algorithm in the world and still complete that whole task with just a few seconds of compute time.
I think that's the point. You don't really need to know about BFS in most cases, because in most cases you can solve the problem with any old search in just a few seconds.
I can tell you really don't know what you're talking about because you can't just "use libraries to do it". You can use a library to parse a given input, but you need to traverse the tree in a specific way. Here, I'll give you an example of the first step of the problem with proprietary info stripped out. https://gist.github.com/tohsa/2d906942f8712abdfc7df72128479c... You plain and simple need to know BFS to do these sorts of things. You're acting like its some act of algorithmic wizardry when its not.
It's not a question of speed. It's the fact that tree traversals are the best way to analyze parsed text. Although, it was quite resource intensive and we ended up distributing the workload among multiple computers so we could scan all pages at once. Luckily this was easy because pure functions are trivially parallelizable.
Ok I see where the problem is. I read through your code and didn't think "BFS", I just thought "knows how to nest for and while loops". I suppose you could consider this "knowing BFS", but I would consider this table stakes. I would never ask about something like this in an interview.
I thought you were talking about actually using BFS on a data structure, in which case I'd use a library to do it so I don't have to reimplement all the loops and because there are modern libraries that would take care of the parallelization (like this one[0])
I agree with you that my gist demonstrates "table stakes", but I think that is the level of tree traversing most interview questions require. I don't think any interviewers are asking people to implement distributed algorithms like the one you linked. They are asking for algorithms that just combine a few of the basics. With that said, I'm inclined to believe our fellow commenters are arguing about the utility of what I shared. For example people siding with me gave examples of finding the biggest file in a file system and constructing a dependency graph to refute the idea that tree traversal are useless and mentioned that there isn't any "deep understanding" in BFS because it's so simple. It reminds me of the tweet by the creator of Homebrew[0] about not being able to reverse a binary tree that so many people bring up when this topic arises. To me that's just table stakes.
On the topic of my example not constituting "knowing BFS", the BFS I shared is just a slight modification of what most students are taught and is close to the second method for level order traversal of a tree on geeks for geeks[1]. If you don't like the BFS usage because it isn't on an explicit tree (although nested HTML templates most definitely form a tree), the result of parsing an AspxFile in my gist returns an explicit tree data structure[2][3] and the helper method[4] at the bottom does a standard preorder traversal[5] on that linked structure. That feels like "actually using DFS on a data structure".
> Right, but you used libraries to do it, right? You didn't actually need to know how BFS works, did you?
For BFS? Almost never, no. Libraries are generally useful for reference implementations data structures and algorithms that work on collections; I have yet to find an algorithm that works well for graph problems or when you need to subtly tweak the data structure (for example, a binary tree that counts the number of elements on its left and right). The issue with libraries is that they are built for the general use case, and a lot of time in the real world it is non-trivial to transform your problem into the format that the library will expect, so you end up having to do this yourself.
No but I can give a few examples where I refactored code from these antique pointer-based trees (inspired by classic CS books, half century old now) towards something more cache friendly, and improved performance by an order of magnitude.
> All it is is look at your siblings before your children.
...And how you are keeping track of that and other such minutiae. What data structures are you using and why? And how about if X which would invalidate your approach.
Also, it's not about "knowing" it. It's about implementing it in such a way as to please the interviewers.
Programming is exactly about handling such "minutia". It's a totally fair question.
As for pleasing the interviewers, of course it is about pleasing the interviewers. They're making the "buy" decision on the talents you're "selling". Of course the seller needs to please the buyer to close the sale. I don't know how it could work any other way.
> And how you are keeping track of that and other such minutiae. What data structures are you using and why?
This is a good question, IMO, because it tests “I need to do this, which data structure would work well for it”, which does come up often in real life.
BFS is common sense. It’s what you use when you’ve lost your car keys for example.
Quickly check each room in the house, then if no luck go one layer deeper in each room.
Two different approaches. Each have their adherents. But when someone can’t find their phone or keys that that just had, they probably don’t start by ripping one room apart top to bottom.
That's definitely now how I do it. I go deeper into each room, the depth (as well as the order) being decided by (roughly) how much time I spend in each room every day. E.g., Go waay deeper in living room, less so in bedroom, lesser still in bath room and so on :-). This I'd imagine is "more" common sense than than an un-informed BFS?
I actually thought this through a bit :-) Neither is it a DFS, unlike in DFS I'm expanding nodes at different depths. E.g., I'm shallow expanding bathroom/kitchen compared to living room. Only when I've exhausted living do I return to kitchen again to do a deeper search. I wonder if this kind of search has any other use. Debugging seems like a similar activity. Go deeper into logs, if nothing turns up then examine metrics, read code, return to logs again etc.,?
Sorry, past midnight here after a busy day at work :-P
Heuristically guided search. :) For some nodes you go wide, for some deep, sometimes you retreat back up a few levels instead of exhausting a subtree (but you might come back to that subtree later), all depending on what the heuristic says is more likely to get you to your goal the quickest. A* is a well-known base algorithm for this, widely used in game programming to efficiently find the shortest path from A to B in the presence of obstacles etc.
A DFS would be you check your living room, you check under the cushions of the sofa, you tear open the cushions and comb through the insides... all before glancing at your bedroom when you didn't quickly see the keys in the living room.
This is actually not how I search. After the first search, if I am getting frustrated, I do what I was told when I was a child: "start picking up stuff until you find it". So I guess that's kind of a depth first search after going over the top layer.
> If you're stubborn enough to not spend 10 mins on this the best of luck
I know. These people are expecting to be paid way above the average salary - I'd expect them to know the fundamentals, or (more importantly) be able to figure it out.
"BFS?? I'd use a library for that" - well, thanks for that... instead of hiring you I'll just download some libraries instead.
What if you had to choose between someone with a proven track record of building high quality software used by millions of people who has also shown they're capable of leading groups of people in successful projects but hasn't memorized the specific algorithm you asked about and another candidate who doesn't have as good of a track record but can totally nail that easy algorithm you asked for?
You think every candidate who comes in is like this. There are anomalies and outliers. The truth is resume padding is so common in the valley. Everyone can just say all these things. It's very hard to hire like this.
I don't work in SV. I assume it's like everywhere else where a potential employee who feels their skills are weak will take credit for things done by their teammates even if they were only tangentially involved.
My above comment was strictly related to the idea that DHH shouldn't be considered for a job over anther candidate who is an unknown quantity simply because DHH apparently is not good at algorithm problems in interviews.
Total cop out answer but if DHH and people like Jeff Dean are both interviewing for a position with me you can be sure I'm doing everything I can to hire all of them. Even if it means starting entirely new departments.
I'd totally fanboy and hire Jeff though if it came down to just one though.
I don't mean to diminish/belittle DHH. What he's done (web framework, productivity SaaS, self-help books, sales/marketing, conference speakers, racing) it's not what Google does (web-browser, OS, AI, maps, search, scale, etc).
I also don't get why people like DHH is assumed to be a "miss" for not being hired by some of these company...
DHH is a unique individual with his own way of thinking. He wouldn't be DHH if he works for someone else (or under someone).
You don't generally hire people like that to work for you on something specific. You hire them with a very broad goal and give them the resources to accomplish the task how they see fit. With a bit of nudging here and there you should end up with a very marketable outcome wether it's a product or a prestigious research division or widely used piece of software that everyone knows is associated with your company.
What DHH does could absolutely be incorporated by Google. Angular => RoR, GCE => Saas, conference speakers => conference speakers.
Anyway the point is that even at a company like Google there's plenty of room for people that haven't memorized algorithms and data structures but companies that only interview on these sorts of things are missing out on them because they seemingly don't care or haven't figured out how to interview someone substantially different from what they normally hire.
I find the skillset required to build Basecamp differs greatly with building AWS/GCE portfolio (with over hundred different services that can be combined to deliver solutions for multiple ranges of companies...)
I don't think Google was looking for someone to build RoR or Angular. Those were merely side projects that came out once every few years. No offense but some of the key components of RoR were implementation of Martin Fowler's Enterprise Application Architecture patterns.
I wouldn't hire someone who cares so little about getting a job that he didn't spend the most basic amount of time studying for obvious questions that he was of course expected to be asked.
Such a situation would show me that he either does not care about getting the job, or is so arogent that he automatically expected that people who throw job offers at him.
That shows that this person has horrible personality problems and that I would not want to work with him, no matter how much he has accomplished in his life.
I didn't know about "BFS trees", do you have any references? I tried Googling but I could only find breadth-first searching (which I do know well, though apparently not the acronym BFS), but that's just a traversal algorithm.
There's actually a thing called BFS tree. It's a tree that depicts the order of node expansion/visitation when a graph is traversed BFS. Even I wasn't aware of it until I recently read Peter Norvig's AI book. However, I'm not sure if the author referring this.
These interviews do filter out any engineers that can't solve these algorithm problems on a whiteboard, but they don't necessarily filter out people who have a proven business track record and can get projects done on time and under budget.
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.
Yeah honestly, I think those are the type of engineers that are more suitable for managing other engineers, and the really heavy ones are more suited for strictly engineering.
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.
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.
Programmer distillation. Companies need to admit that only trying to hire a single type of person is not going to work. It's just like with petroleum: there's nothing wrong with the other products you get from the mix. You just have to appreciate what there is and make the most of it.
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.
> Companies need to admit that only trying to hire a single type of person is not going to work.
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.
"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."
You're begging the question. Other companies do hire people who are excluded by a certain class of employer, and that's exactly why some get outraged by the types of quizzes that are used. The difference between the standards creates cognitive dissonance over one's ability and status. It's effectively a caste system, and it involves persistent blind spots about discrimination, whether towards protected classes or not.
I can't pass an Amazon or Google phone screen - both of them invited me to try, and they then made me feel very out of place. I'm not a software engineer per se and I didn't get my CS degree from a top school. Yet I have worked for a company that Google outsources important work to, proving I can do useful things that Google needs done and maybe isn't even able to do in house.
I don't go around raging against Google hiring who they want, partly because I'm probably better off not working there anyway. But I understand where people are coming from when they do get angry, even if it is the sign of an imperfect character.
From an employers point of view, they just want to grab the employees that are suitable for their goals and jettison the others. But from a potential employee's perspective, it seems like if I'm not good for one job at a company, I should be good for another. Rejection seems unreasonably total. If, by analogy, you deal in second hand cars, it's a reasonable business model to buy virtually any car so long as the price is right and you know who to sell it to. But not all businesses are run like that of course. It aggravates people that there is a narrow vision for who is useful.
> If, by analogy, you deal in second hand cars, it's a reasonable business model to buy virtually any car so long as the price is right and you know who to sell it to.a
Very good analogy. And true. My dad used to own a used car dealership back in the day. He bought pretty much anything he could get for a good price that was in decent shape. If he only bought cars that were in perfect shape, he'd have pretty much no cars on his lot.
And I've worked for companies whose bosses are so damn picky about who they hire that they would go without hiring a single person even after conducting hundreds of interviews themselves over six months, as the rest of us were struggling to keep up with the workload.
It got so bad one time the higher ups eventually had a recruiter just pick a few people and said "Here, these are your new employees. Get them up to speed." and he just had to accept it.
Been there. At my actual job (a small IT firm in Europe), my boss spent almost half a year searching for somebody to hire. All the times it was like "they are too old", or "don't know enough", or just for a different POV.
In the meantime, collegues are leaving the gig, making my level of stress go up.
It's really hard to argue with money printing machines that anything they're doing now is wrong. I don't even want to bother much myself if I can help it... Sure, maybe if they changed some things they could print money a tiny bit faster, or set themselves up to survive the next phase of the economy in some years when it's no longer so easy to print money (lots of companies die over ~15 years, which also corresponds to the global economy's doubling rate...). But also any change has an element of risk, so the money printing could slow down or put it in a worse long-term position. When something is working great right now, you're reasonably going to be more risk-adverse about changing things.
We do see other companies hiring differently, and being rewarded in the market, in part, for it. Most of the time it's a marginal reward. Sometimes though we get a new FAANG, staffed by people who wouldn't have made it through FAANG's ringers.
What we're probably seeing is that the FAANG's have acquired so much fame and wealth that they can afford an enormous false negative rate in hiring that would sink a smaller company.
Its the difference between fracking the shale for every precious drop because that's all you've got where you are vs. being able to just sink a short pipe in the ground and stick the sweet crude that gushes out into barrels.
How many people have gone through the full regiment of training for interviews described by the original linked author and failed at every major tech company?
> my brain needs more time than the average programmer
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.
If you want my opinion, these companies aren't looking for awesome talent. They're looking for people who will put up with their schedules, demands, management. They don't want creative thinkers with experience in multiple fields. They're looking for one-trick ponies that will do what their told and will be happy to get stabled by 40.
You're better off following your own path and making your own things happen.
"They don't want creative thinkers with experience in multiple fields"
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.
> Finally, I realized my brain needs more time than the average programmer to find patterns in this type of problems.
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.
> 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.
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.
It's contextual. I've worked at a big, cool company before, and the things I had to be good at to survive (mostly non-technical) simply were not important to me, nor very useful outside of work. They were core requirements for long-term success there, though.
Mostly the highly-significant role that social relations play, far beyond what I have experienced at <100ppl companies. This was also in vidya, so it was extra...I don't know if I'd say "vicious," but competitive for sure.
I was a programmer for 10+ years and I couldn't pass the technical interviews for these companies either. I started down the path of trying to self-learn Computer Science but reading books wasn't enough for me so I wen't back to school for it. Around the end of my CS bachelors I pivoted to hardware and stuck around for a masters in ECE. Now I work at one of the companies mentioned. It is much harder to learn CS on your own than it is in a structured environment.
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.
The truth is that it is a tough problem. Everyone wants to figure out if you're smart and can figure problems out. I have, however, seen 10 year engineers have trouble reading a small data structure and writing 2 nested loops. So I think the biggest issue is just nervousness.
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.
Don't you think you're taking a bit of a fatalistic approach to things? I applaud the linked article's can-do attitude and pro-active approach to studying for what to be honest is a slightly silly interview process.
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.
have you tried lately? it seems like it’s gotten a lot easier lately since the market has been heating up. Source: tried a few months ago and got all the offers also
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.
I don't get some peoples fascination with working for FAANG anyway. As you said yourself, you've had some amazing jobs outside of FAANG. People seem to hold such prestige for working at a household named software house but that doesn't mean the work is going to be any more interesting than at any of the countless other technology companies out there that are on the bleeding edge.
It’s the same reason high school students apply to Stanford and MIT; there are amazing programs everywhere but top-level universities carry prestige and may have higher quality opportunities.
I did cover those points. As I said, the prestige is misguided (in the case of FAANG) and you don't need to go down the FAANG route to have access to higher quality opportunities.
Those companies sure want you to believe what you're claiming because it means they get the first bite of the cherry but the reality is very different (from my experience anyway).
> The prestige is misguided (in the case of FAANG)
I strongly disagree, and I'm not sure why you would say that. I've heard that working at Google is a golden stamp on your resume, and you will be able to easily get a job at any other company. You'll probably even be able to skip the coding challenges in any future interviews.
> You'll probably even be able to skip the coding challenges in any future interviews.
Is this speculative or does this actually happen?
As a team leader I'm involved in hiring and I certainly wouldn't treat one applicant any different from another regardless of their previous postings nor experience (except when I'm headhunting someone I've previously worked with). My own experience interviewing has taught me it's easy for people to put stuff down on CVs (eg they might have legitimately worked at Google but through an acquisition rather than hired by; or not even with the team they suggest they have). So I would consider short-cutting part of the interview process in the way you described to be grossly negligent.
I don't dispute that your CV is more likely to get short listed however you can certainly still sell yourself without having FAANG on there.
My general point is that while I don't disagree that having FAANG on your CV will undoubtedly look good, however a good engineer shouldn't have any problems getting awesome jobs with or without FAANG. Thus is the prestige attached to FAANG really equatable in the real world or is it perhaps disproportionately hyped?
Maybe this is just one of those differences between how people are hired in SV (where I haven't worked) and London (where I do work)?
Purely speculative, but I would hope that it is true. I think it would also depend on your role at Google.
I think it would be pretty rude and unnecessary if you asked a high-level Google employee to do a whiteboard algorithm puzzle, or a take-home assignment where they have to build a little todo list app. Especially if they are a Distinguished Engineer or a Google Fellow. I don't know where the cutoff is exactly, but at a certain point no-one should ask you to do any more coding puzzles. You'll still go through interviews, but they shouldn't need to test your basic programming skills.
I agree if you're hiring someone with a notable reputation then you wouldn't run them through the same kind of coding challenges but I'd expect that would be the case regardless of whether they had worked at FAANG, open source, start ups or wherever else. Thus we come back to my point that a decent engineer shouldn't have any problems getting hired regardless of having FAANG on their CV. What I was wondering was whether having FAANG (rather than reputation) allowed an applicant to shortcut parts of the interview process.
To be honest, judging from your last post I suspect our opinions aren't that far apart. :)
In Silicon Valley, everyone knows that it is fake prestige and the fact that you worked for a FAANG doesn't really mean anything. I both know excellent and mediocre candidates coming out of FAANGs. It literally carry no information besides the fact that you are probably more attracted to prestige.
Oh, that's interesting! I think "fake prestige" might be a bit harsh, and I'm sure that doesn't apply to the very senior engineers who earn > $500k per year.
A few years ago I was contacted by a Google recruiter, but I realized that it was going to be a very junior SRE role, so I wasn't interested in that. I could have put Google on my resume, but that probably wouldn't have been very impressive.
Do they though? I think that they majority of people at FAANGs are actually taking a salary cut compared to what they could get somewhere else. (anecdotal data from all my friends interviewing).
It is simple offer and demand. The supposed prestige of FAANGs also mean that more people wants to get in and unless they really want you, they would be stupid to overpay you.
You can have higher quality opportunities everywhere; it’s just that it’s often easier at those companies. Just like going to certain universities means it’s easier to find professors who lead their field, recruiters from better companies, and more access to be with smart people.
But is it actually any easier given you have to also factor in going through their painful recruitment process and actually getting employed by them in the first place?
Maybe my things are different in London than they are in SV but I've never had any issues. Quite the opposite in fact; I've been turning awesome jobs down.
Don't forget a lot of it comes down to compensation as well. It's not unusual for FAANG company to pay 2x more compared to another public company for example.
That really depends on your basis for comparison because there will be a lot of variation between wages for different jobs within the same company; let alone different jobs in competing companies. It can even vary depending on how good your recruiter is, how generous the management for the vacant position are, the type of job that's on off and how important that position is to that company (are they desperate? Is it an area of strategic growth? etc).
Anecdotally I've really not seen the 2x trend you described and I have spent a fair amount of time negotiating peoples wages. Plus engineers who are really concerned about maximizing their income will generally turn to contracting rather than permanent work anyway (at least that is the case in London where contracting is common place).
Suffice to say, I'm pretty unconvinced that FAANG pay people twice what any other business would. Maybe if you're looking for jobs outside of tech hubs (like smaller towns away from expensive cities) but other tech firms in London (and SV I'd guess?) would have to pay competitive wages else risk not attracting any talent.
I've seen total compensation packages of $100k for senior engineers in SF/SV before (really low side), FAANG comparatively would pay $350k+. There are plenty of public companies in SF/SV that pay senior engineers $175k total compensation.
I also want to clarify that I didn't mean they always pay 2x over the competition, I meant that it's not unusual for them to. Also when I say FAANG - I kind of included similar large companies (Microsoft, LinkedIn, Salesforce, etc). There's also a lot of large companies that come close, maybe 80-90% of FAANG pay.
>Plus engineers who are really concerned about maximizing their income will generally turn to contracting rather than permanent work anyway
I think it's pretty difficult to get steady contract work that pays more than what FAANG does. I charged $175/hr when I used to contract and it was decently steady, but that only comes out to around the same I would be making at a FAANG minus all the perks/benefits. Also when you get to higher seniority levels, your pay at FAANGs start to reach into the 6 or 700's, meaning you'd need a contract rate of $300+/hr to compete.
Usually when companies need that high level of technical architecture/leadership - they'd normally hire someone full-time rather than use a contractor, so it would probably be difficult charging that rate while getting steady work.
> Also when I say FAANG - I kind of included similar large companies (Microsoft, LinkedIn, Salesforce, etc).
Ahhh I was including those sort of companies (baring Microsoft) as part of my counterexample. If the discussion was "any large / reputable organisation" then my comments would have differed a little.
In any case it sounds like London is very different to SV. It's very common for senior engineers to contracting and that's precisely because the difference in pay between permanent and contracting is night and day (the polar opposite to what you were describing in SV)
I bet a contributing factor in this is that you think other people are "faster". They're not, we're not. The only difference between you and someone who's good at these interviews is that the good ones accept that uncertainty and are willing to work through it and you aren't.
Nobody aces those interviews in the way you probably think; by just magically knowing every detail.
I joined a game studio as a Generalist Programmer, I started writing infrastructure tools and doing things that nowadays people refer to as “Development Operations (aka. DevOps)”. Then, I continued collaborating to game-specific projects, improving bits and pieces here and there. Thanks to my background in C++ I was able to make significant contributions. I also have built a few mobile games for my children to play with, but I’m not a game designer and don’t have artistic skills, so I try to stick to the algorithmic part of the projects.
As someone who has interviewed with 3 of those 6 companies and gotten offers from all 3, I think the best way to approach these interviews is to not walk in with the mentality that it's a one sided "test" where you are put on a spot to defend yourself.
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.
> Out of these companies Google felt most impersonal and "test like"
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.
>Not once did we actually talk about my past experience or rather anything software engineering related.
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.
I interview at Google and I never look at resumes - to avoid bias. I don't want to be biased by whether you went to Yale or UT Austin. My question is always a standard algo/DS question anyway.
I say the following having worked at multiple "big-5" including G.
Do you not feel any of the twist in your stomach that I feel when reading your post? That we're discarding any vestige of track record and accomplishment (that I pragmatically see as having correlated better than any other variable with effective coworkers in the past) for a readily gamable trivia question that I take some perverse pride in not having wasted time studying over the last decade? (Personally, I've spent my time doing far more actionable and applicable things such as running large distributed systems and learning how to do so more effectively while developing better patterns in that scope)
To be clear, this is not some defense of bias. This is a statement that your stated approach seems to throw the baby out with the bathwater. If I think to myself of what this interview process incentivises, it's not behavior that would lead me to be the engineer I am today, nor the behavior that I would chose in a coworker.
I'm just curious as to if there's any amount of dissonance inside G any more as to whether this is an effective way to get the people they want. Maybe it is, per their constant trumpeting of data driven hiring, and that's probably a great signal of why I didn't really feel at home there.
> That we're discarding any vestige of track record and accomplishment...
It's not your job as one of the five interviewers at Google to evaluate anything except the candidate's performance in your interview. The Hiring Committee (HC) then takes the feedback received from all the interviewers and combines it with the interviewee's résumé, any recommendations they've received, etc.
Realize though, the unfortunate result of the way this is implemented results in an interview process that ends up being perceived as quite coarse and unfeeling, and seems to filter on often capricious tests of algorithmic knowledge; Some highlights in my personal experience, writing an RB tree, and "write a regex to capture the comments in code;" simply put I never felt that my experience was even slightly under consideration. I realize the typical response from a Googler (including my friends there now) is that these things specific instances are disallowed/not recommended, and I trust they're not lying with those statements, but for whatever reason _those did happen some years back_, and I continue to hear similar attestations both here and at work.
Feel free to write off all of my frustration as a selfish fear that I won't be able to pass these gates in N years with the heavy focus on algorithms-under-pressure; it's certainly hit and miss now, and I'm open that I've been both accepted and rejected at all the places I've worked to call out how much of a crapshoot this process seems to be.
I fully acknowledge that an org of G's size has needed to make certain tradeoffs/processes, but that has tradeoffs for candidates, which can be hair-pulling when we do/have done isomorphic work at a high level.
(I should probably disclaimer that MSFTie, I have nothing particularly against G in this and all opinions are my own, but highly algorithmic interviews are a topic I've always been selfishly unsettled about)
I can't speak for GP but I'm guessing they don't feel that taking the big picture view is their role in the interview process. In some companies the interviewer is just there to be another data point for the people who make the decision, and if their role is to just ask whiteboarding question it seems like looking at the resume could be the wrong thing to do.
That is a good way to eliminate bias, but in the end, is that a good way to make sure each position is staffed by the best candidate possible?
I always pondered about that when I was at Google. We had mostly smart people, but I argue not all of them were the perfect fit for the position/skills needed.
Sure some bias are best eliminated such as what school they went to, but if work experience in general should not be discarded completely in my opinion and you can only get so much out of standard algo/DS questions, especially considering these days everyone is studying for those like standardized tests.
I literally know some CS students who just did hundreds and hundreds of practice problems and they'd ace most big company algo interviews but that doesn't really tell me if they'd be good engineers in practice at all.
That reminds me of a conversation I had with a friend who works at Amazon in Seattle.
He says they have to fire guys in his team frequently because they ace the interview process by practicing it ad nauseum but are terrible software engineers.
Sadly that’s the trade off when you want a common benchmark to measure students, but then students optimize for that benchmark instead of something else — basically Goodhart’s law.
As a current student studying CS, I find all of this “leetcoding” disheartening since it unnecessarily takes away time and deprives some people of passion.
I've found that I get a lot more signal out of asking people to actually solve a problem by writing a program than by asking them about past experience. Hence I spend most of the interview time on the former. It's surprisingly common for people to be able to talk about something in a way that sounds impressive, but then after seeing their actual coding skills you realize they were likely not a star performer on the team and were just summarizing the work that others mostly did (which they understood well enough to talk about but likely not to have done). Like, it's easy enough to learn one really kick-ass rock song on guitar, but it's another thing entirely to have written said song.
I have the opposite experience. I get more out of talking to them about past experience, mostly by asking them what they would do differently if they were approaching the problem today. This way, I know they are familiar with the problem space (they've worked on it), and I get to see how they thought about it and what lessons they learned from it. This also gives an opportunity to talk about how they think about software (discussions of failure or at least what could have been better are much more informative that successfully demonstrating some algorithm).
I don’t have that impression at all. If someone is talking about something impressive, a few deeper questions generally poke holes in whatever inflation they are doing.
Of course there should be some coding question, but I definitely look at their resume and it’s discussion just as much.
> 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.
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.
How is it "well known"? Do you have a source with concrete data? Have you asked both people who were hired and not hired if they completed/not completed their question, over a big enough sample?
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.
Thank god. I interviewed with FB, moved through the first question in 15 minutes, and assumed that it was 3 questions with 15 minutes allotted each. When he didn't give me a third one after another 15, I assumed I had spent too much time struggling with the second and he had just given up. I got the job though, just wish I had known then. I start in a few months.
I find it shocking that Facebook would still be considered as a peer to these other companies in terms of desirability as an employer.
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?
There is a robust debate about whether or not facebook provides negative value to its users. In my opinion, it's charitable to say that the question of whether Facebook harms its users is open to debate. There seems to be a clear correlation between use of facebook and negative mental health outcomes. The fact that people use a product is absolutely not evidence that it provides value to its consumers, especially when addiction is involved. Whatever "value" someone got out of cigarettes when they first started smoking, most addicts wouldn't say they smoke because they get something out of it beyond the assuaging of cravings.
This assumes that FB is harmful to everyone, instead of a subset of people. I don't think that's very well proven. The mental health studies also have a bit of a correlation issue, similar to drug use.
I think sugar is a more apt analogy than smoking. Facebook, like sugars, provides a source of a required human input. (Calories/human connection). Overdone, both are harmful.
Tobacco is a much more charged analogy, and is more extreme in terms of positive/negative balance. I think it reveals more about the biases of the person making the statement than it does about social media.
The degree of harm is correlated with the degree of use, just like cigarettes. If you smoke a handful of cigarettes a year, it probably won't affect you much at all. But if you use cigarettes multiple times a day for years, you'll do real harm to yourself. That's exactly true of Facebook. Yes, if you occasionally check in and are diligent about how you use facebook, you might escape harm. But unlike sugar, this slight-of-hand language they use of "human connection" doesn't prove that any facebook use is beneficial.
Sure, candy technically has calories. But the fact that human beings need calories isn't a good argument for eating candy. You can also get calories from healthy foods, and you can get "human connection" from, you know, talking to people, or sending text messages, or reading reputable news sources. Not coincidentally, the idea of a "social connection" was and is also a big part of apologizing for smoking as a habit.
> The degree of harm is correlated with the degree of use, just like cigarettes. If you smoke a handful of cigarettes a year, it probably won't affect you much at all. But if you use cigarettes multiple times a day for years, you'll do real harm to yourself. That's exactly true of Facebook.
That's also true of just about anything humans can consume. For example, sugar.
To refine your analogy, Facebook is like someone whose business plan is "Hey, there's this nutrient called sugar that everyone eats. Great! Let's put heroin in it and give it to kids."
I like this analogy and I'll steal it if you don't mind. (Assuming that customer value is the same as product use, with cigarettes being a brain dead obvious counterexample.)
Facebook gives me excellent tools to keep the family members I dont want to talk to at arms length, while letting them feel involved with my life, yet taking none of my time to do so - its preferable to the alternative, which would be breaking off contact with those people.
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.
Really? There are people who feel the same way about extracting money from rich VCs as they feel about the harm Facebook does worldwide? Seriously? Who and where are these people? Where can I see their widespread and articulated stance on the equivalence of those things?
I recently considered a role there, on a security team no less. I've never had a Facebook account and agree that the product as-is is fundamentally destructive.
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.
What does it mean for a company to be "fundamentally" evil or not? The "fix things on the inside" argument for going to working at a place that you think is harming people has always struck me as based upon a mostly unfalsifiable assumption: that the organization has the capacity to change and that you can actually bring about that change. This is especially unknowable until you've actually worked at an organization for a long enough period of time to understand all of its internal pathologies and the motivations and character of the people involved in them.
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.
I think these are all good questions. They're certainly things I mulled over when considering whether to take the job.
Regarding being fundamentally evil or not, I've worked around groups which were constitutionally amoral or immoral-- the mandate of the group was simply incompatible with common-sense notions of good and little effort was made to reconcile the two. Facebook does not seem to belong in that camp, but does belong in the grey wasteland of groups that are well paid to develop a peculiarly self-serving sense of ethics. The reason that's important is because amoral groups will simply not accept ethical arguments as valid arguments to make, while groups with peculiar ethics are responsive to them but sometimes their logical toolkit is filled with double-ended hammers and crescent screwdrivers. I've found that to be an important distinction in previous roles.
As you point out, there is an ethical hazard here. If I worked there for five years would I find their ethical blind spots so obvious? Is the environment corrosive in a spiritual sense? No idea, but early indications both during my interviews and speaking to current employees were mixed. It was definitely something that gave me pause.
In terms of whether you can actually have the requisite influence, I probably would have taken the job if I could have come to confidence on this. In the end I don't think I could have and I didn't take the role.
Of course, it's difficult to disentangle the compensation from the levelling, so I may just be lying to myself and saying that if they'd paid me more I would have pretended. To attempt to guard against that I asked friends and former colleagues who I thought knew both me and something about the dilemma and listened to their thoughts. It's not a perfect system but I think it yielded a set of thought experiments that were useful to me in making sure I didn't fall into that trap.
I've never seen 'fundamental evil' in real life. Just people who don't care, who care too much, or who are not clear headed. That's enough to go pretty deep into the pit without adding 'evil' to the mix.
My experience has been different. I'm fairly confident I've moved the needle on security and privacy at other large companies and I don't think it's irrational to think I might do so again, given the right role.
If you do some quick research, you'll find that the harmful nature of Facebook is the subject of a vast public discourse in the United States and Europe. Lots of academics and public health professionals continue to research the negative consequences of facebook use. It's not an opinion, but I suppose it could still be considered a subject of some controversy. The best evidence I've seen, and that the commentators I trust have seen, is that Facebook is destructive to its users.
Here is an excellent explanation of some of the most robust arguments against Facebook.
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.
Facebook's only real "fault" is that the "wrong" person got elected president in the US. The rest is just a politically motivated pile-on with tenuous evidence IMO, which wouldn't even be a subject of "vast public discourse" if someone else won.
>> negative consequences of facebook use
Do those "academics" also research the positive consequences as well? I'm in touch with my high school and university friends to this day thanks to FB products. I value those friendships highly, but I now live on the other side of the globe, and I can't physically be there myself. My parents (and my wife's parents) are active users of WhatsApp and Instagram. My brother (who's also on the other side of the globe) communicates with me mostly via FB Messenger. I'd say my mental well-being benefits significantly from less isolation. I'd also say there are millions of other people like me, who can still easily keep in touch in spite of vast distances separating them from relatives and old friends.
Would alternatives exist if there was no FB? They likely would. But I don't have a problem with FB, as long as it's used moderately. I my view, however, it's a personal responsibility to moderate use. Part of being a functioning adult, so to speak.
The role of Facebook in events like the Rohingya persecutions is a lot harder to write off than opinions about US electoral results. [0] There is a good argument that Facebook--like many--failed to foresee the misuse of social networks but for business reasons then failed to act on that knowledge once it became more obvious.
That's not an argument against FB per se. That's an argument against anything social-network-like in general, because there's nothing that makes FB uniquely suitable. If anything, because of its vast resources and investment in AI, FB is better positioned to respond to adversarial use.
Doesn’t that provide a rationale to promote many different social media networks instead of one big one that could be used for such nefarious purposes?
If they're not federated, I don't see how they are useful as "social networks". If they are federated, I don't see how having many of them would solve the problem.
plenty of people have been talking about the negatives of facebook long before the 2016 election w.r.t privacy, mental health, and whether we actually benefit from having this kind of tool as part of our culture
There's no such thing as "our" culture as a homogenous, averaged mass. I benefit from FB. If you don't, that's fine, don't use it. But don't tell me what's best for _me_.
Cultures aren't homogenous, but there are things that are bad for communities but good for individuals. Successful thieves, for example. Pretty much any tragedy of the commons, really.
>> there are things that are bad for communities but good for individuals
Non-sequitur. I don't agree that FB is necessarily "bad for communities" in the first place. Besides, _which_ communities specifically do you claim it is bad for, and do you have any supporting evidence? Vox and Buzzfeed are not evidence.
Because all persuasive essays are "unbalanced" and it cites a number of reputable sources? Because its argument is compelling, clearly stated, and its author clearly has no vested interest in the argument apart from his professional focus on public policy? Because limiting one's reading diet to "balanced views" will almost certainly foreclose most interesting writing on subjects of controversy?
If you stated reasons for your opinion instead of saying, there's a robust debate, and plenty of reason for there to be a debate, and let's be charitable, there's a debate, and did you see this correlation, and why don't you suffer the experience of reading this essay, written by a journalist hack to persuade Vox-reading plebes with a shoestring of an argument, then you'll understand, maybe you'd be a bit more persuasive.
Edit: Here are some citations to support my argument. Read all these and come back when you're done:
You seem to very creative in coming up with flimsy excuses for facebook :)
Which other fault-free organizations can claim to have settled with the FTC for privacy abuses, had their CEO forced to testify in front of the US congress and be questioned in a case of election manipulation, facilitated genocide, purposefully manipulated people into feeling depressed and many others?
There's an entire book written about the tremendous negative effects of companies like facebook on society - surveilance capitalism.
When comparing all of the above with the benefit of allowing various average joes to stay in touch with their family, which can very well be done over e-mail, phone, or any of the gazillion other social networks, it makes the latter mean precisely nothing.
At this point facebook would have to literally cure cancer for them to make up for their negative effects.
I could argue HN is pretty bad for my productivity, and that of many others. :-) But sometimes I unearth the kinds of things here that save me months of work. As bad as SNR is here, it's worse elsewhere.
Have you ever been to the "job rumors" forums like econjobrumors and PSR? It's like HN on steroids. Polite because it's semiprofessional and everyone's pseudonymous but can get easily outed from details (I mean come on how many people have been in strategy consulting and done graduate work on symplectic manifolds?) but also everyone's mean and competitive.
HN is less toxic than PSJR because the field it covers is much larger and positive-sum; academic job rumor forums are much more fish-eat-fish.
Ex FB since many years ago checking in. Welcome to 0.01% club. Believe me, we are a tiny minority. Majority of people are happy with FB and continue being heavy users.
In my short contract stint at facebook, my experience was that everyone I interacted with was overly territorial and wanted to be the "big swinging dick" as it were - their unwritten ethos on how to manage projects was bullshit, and after following my managers requirements to a tee - I was let go "because I was to engaged in the social events" (I literally played dogeball once. Never went to any other events) -- but I caught a VP in a baldface lie inadvertantly - and when I reported that his office project status was behind schedule he flipped his lid, and I believe had me fired.
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.
>Facebook, which seems to be building a fundamentally destructive product while going out of its way to behave unethically
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.
They have some really interesting projects going on. For example, they have recruited some top researchers in program analysis and compilers (among many other areas).
I think his point wasn't that Facebook isn't doing neat stuff, just that at the end of the day, the result of everything they do is objectively horrifying. It boils down to:
"Give people just the right amount of dopamine and fiddle with their psyche in all the right ways in order to maximize the amount of time they spend staring at their phones."
I find funny that people say Facebook is evil because of this quote:
"Give people just the right amount of dopamine and fiddle with their psyche in all the right ways in order to maximize the amount of time they spend staring at their phones."
And yet, that's basically what every entertainment driven person/business wants to do. Every app, TV show, news media, magazine or even the guy playing the guitar in the subway, all they want is the money that comes from constant attention.
There's the kicker, no? A lot of human technological progress was made under unfortunate (to put it mildly) harm-filled circumstances, and a lot of that wouldn't have been made at all otherwise because the option to make it with a cleaner conscience simply wasn't there. However if you do ever take such a role, despite its context, even if you have a clear conscience, I'd ask to try to have your work expand and live beyond the patron so that it can one day benefit all humanity. There is so much still buried behind the walls of corporate research that's worthwhile to a much broader group, but efforts need to be made to bring it out. Even more so if there aren't many other vertices of the company trying to pull in a better direction. (Ed: And I'd like to add that despite everything, Facebook engineers seem to be doing remarkably well at this. I won't ever join them but I'm not going to blacklist any interactions with them or worse aggressively target them.)
Not really, for almost everyone who works there. I know a few exceptions. A rare few.
Look, I'm not arguing that we go string up all facebook engineers from the nearest tree. I'm merely saying that it is in fact quite reasonable to say that you shouldn't work for a company that is actively causing harm. And that there is "cool work" being done there does not obviate that.
And yes, good research is sometimes done in bad places. That isn't a justification for joining bad places so you can do good research. Your logic is all messed up there. It's better to instead do good research at a good place.
The simple matter is most of the people who work there, are there because of the relatively high compensation, and have plenty of other better options to do equally exciting work at more ethical organizations. But maybe not quite as well paid.
So. Let's stop sugar coating that.
Look, selling out is a thing humans do from time to time. Sometimes people are even in places where making that choice is totally justifiable. But don't tell me someone isn't doing it when they are. And you shouldn't let them tell you that either. Because if we don't let them tell us that, maybe they'll have more trouble telling themselves that, and honestly, that's what's really going to be important in the end.
> It's better to instead do good research at a good place.
I don't disagree. My logic is that sometimes the only place to do good research you're interested in and where you can have an impact is at one of these not-good, or not-so-good, places. If you can go elsewhere, of course, do so. But if you can't, I'm not going to tell you off.
I don't really disagree with much of anything else you wrote either. Most FB engineers aren't working on React/HHVM (or now Hack? That's thankfully been something I haven't had to follow but I have recognized its broader impact)/the next of these things or some other cool research project in program analysis or whatever. We aren't in disagreement that for most of them, they have no excuse if their conscience is bothering them. They do have plenty of opportunity to leave and contribute elsewhere. If we have any real disagreement, it's probably that I don't see Facebook as a net-negative (I do see some negative-pulling vertices of course), let alone "fundamentally evil" as mentioned above. My own conscience wouldn't allow me to work there even at a much higher salary than I currently have, but that's more to do with my feeling that as a business they aren't selling an "honest product". That's my own thinking, though, I don't expect others to agree with me exactly on what constitutes an "honest product", or its worth in the moral calculus, and indeed they might think what I do is dishonest in comparison.
"Selling out" is probably the wrong phrase for some FB employees, at least without clarifying what it is you're selling. Sometimes it's your soul, sometimes it's your ethical principles, sometimes it's just your desire to not work on web software. And sometimes it's nothing, because many FB engineers have a clear conscience, despite it all.
Love, you just don't realize how the other tech companies are like. They are all about equal if you dig in. Not as bad as media makes you think, and in some ways not as good as the media totally misses the mark on other things.
As far as pay, interesting things to work on and work environment, FB is in the top 3 of the world.
> 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?
I have someone who just went there. Because of money, basically.
All of those companies are problematic to a certain degree. Personally, whether I'd have an issue with working for one of those companies also depends on what I am working on. Let's say that one of those companies pays you to work on an open source project. Would that really be that bad ethically? What if you worked on Facebook's security team securing the users' data? Is that really worse than working for LinkedIn implementing some new dark pattern to get the users to receive more email spam? At the end of the day, you'll have to make compromises, unfortunately.
"The assertion from senior government officials, therefore, that the ban on Facebook put a stop to the violence is inaccurate. Data scientists and researchers have flagged that the block on social media did little to deter the mobs, who found their way around it with ease. While not entirely blameless, Facebook also became an easy scapegoat."
Covert user activity tracking, links to outfits like Cambridge Analytica, troll farms, "disappeared" groups, and all under the pretext of targeted ads - in what sense is any of that a clean, free-range Internet?
> It's a communication platform. You want a censored internet.
It's a communication platform designed to enflame and enrage, because outrage gets the higher engagement metrics therefore higher AD revenues. Facebook designed themselves out of any legitimate argument they are merely a benign platform.
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.
If it shocks you, then you haven't been paying attention. How do you think the USA behaves in general to the rest of the world. Have you seen who's president?
No offense, but that’s because you lack perspective — and maybe that’s because of the bubble that entrapped HN and SV alike. There are tons of people who would take a six-figure job at FB, people who make less and people who others wouldn’t take chances on.
> Leetcode Medium, Leetcode Hard, Cracking the Coding Interview ...
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.
No, these tests are carefully devised to target young college graduates who will excel at these types of interviews because the material is still fresh and they have the free time to study.
This is age discrimination disguised as "technical proficiency" exercises.
This is the only industry that punishes senior and more experienced workers. I don't get the impression that this happens in other industries like healthcare and banking.
News to me students have the free time to study considering the hiring season is mid-semester during some of the hardest classes. Not to mention if they are working too
try having kids (after school activities, birthdays, etc), spouse (anniversaries/dates), elderly parents and in-laws, a huge network of friends/colleagues whose relationships require constant maintenance (you don't see them at class everyday), fitness/wellness ... i mean, is any of this sinking in yet?
haha guess what, the second piece of the puzzle is that you have to be rich enough to have time to study AND a place that is close enough that commuting to college and work doesn't mentally wipe you out everyday. why do you think silicon valley isn't seen as a place with actual opportunity for everyone even though everyone inside it thinks it's wonderful?
I disagree. I've been out of college several decades, and if I wanted to go back into a programming job I would need several months to study these problems.
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.
They really are irrelevant to the vast majority of software jobs. It's nice to be able to go deep when necessary, but that is very different from knowing a bunch of algorithms off the top of your head that you'll never have to implement.
I guess I'll answer from a different perspective: When I hired folks that knocked it out of the park on those kinds of technical interviews, I didn't ever have a problem with those employees from a technical skills perspective (other types of issues, like work ethic or interpersonal skills, sure). On the other hand, when I had folks who were borderline iffy on those types of questions, but we hired anyway due to success in other interviews, I came to regret that hiring decision fairly often (definitely not all the time, and some of the folks in this bucket were stellar, but certainly noticeably more technical aptitude problems on average).
"After about a month of consistently practicing problems each day (maybe 2–3 hours/day, more on weekends)..."
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.
That was a factor for me when I applied to Google. I asked for 4 weeks to interview - I should have asked for 4 months. I hit the algorithms textbook and I did CTCI questions, but I just wasn't ready.
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.
I'm the same as you (wife+kids, full-time job and rusty whiteboarding skills), PLUS I lived in Canada, PLUS I have no CS degree. I landed a job at Uber's San Francisco office 1.5 year ago.
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.
I did have one whiteboard session on my onsite, but it was about high level web architecture, no code, no algorithms. None of the sessions were specifically about classic algorithms, although there was an "algorithm" session that was about writing some fairly realistic asynchronous code (which for web is something I myself consider required knowledge).
Since I've started participating in the hiring process myself, I'm not aware of people doing whiteboarding (AFAIK it's strongly discouraged because it leaves no digital record), and only the bar raiser session might ask something algorithmic-ish at their discretion (but most do coding exercises to gauge meta stuff like communication skills or methodical approach rather than things like algorithmic complexity).
Training material for tech hiring discourages looking for rote memorization of specifics and instead recommends looking for signals via an open ended exercise.
> I'm reading this as a guy with a wife, kids, full-time job, and rusty whiteboarding skills
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.
Eh, that's borderline conspiratory. I work at one of those companies and know for a fact that many coworkers have kids and sometimes have to leave early or get in late due to kids' doctor appointments and whatnot.
Besides, in addition for it being illegal to discriminate candidates based on marital status, in my experience nobody that does interviews ever thinks of considering that as a hiring criteria.
GP and GGP are not saying there is an overt conspiracy especially among interviewers; they are attempting to point out that the interview process itself is discriminating.
I'm sure the people that perform interviews are not discriminating and I'm certain a number of bright, older, time-squeezed people make it through. But maybe I would imply conspiracy since I'd imagine the people at the upper levels, that designed the process, have at least noticed that it's biased in favor of young, recent graduates able to give extra time to the company.
It happens all over the place all the time, if you don't stay late you're "not a team player". Of course your employer isn't going to say you're fired because you're a parent, unless their attorneys are bored. That doesn't make it any more moral to discriminate based on proxy metrics, like how much of your life you're willing to donate to an entity that cares about you only to the extent you're making them profit.
I mean, nobody goes to an interview and asks "hey how late do you work in your current job?", so I don't understand how it is possible to discriminate by proxy metrics at that point in the process.
Maybe you're arguing that people leave their jobs after the fact due to thinly disguised rationalizations of these proxy metrics affecting raises, but that's a huge stretch. I've seen plenty of cases of bosses and coworkers being understanding of personal circumstances (and I'd go as far as saying that is more so here in SF than at previous jobs in Canada) and I've yet to see these alleged backstabbing evil brogrammers. Saying that a company likes this or that is also anthropomorphizing something that isn't sentient and strikes me as a strawman.
they don't need to - your github/ side projects tell them all they need to know & you're probably required to submit them to even be considered. you think someone with a full time family is going to have the same output in code as a single person with nothing but their career going on?
discriminating is trivial if they just have your name
No offense but there's a lot wrong with this comment...
While having a github presence can help recruiters find you, you aren't required to have such presence at all; the vast majority of people I interview don't (and the same goes for coworkers).
Measuring lines of code written is another fallacy that gets thrown around easily, but that any engineer worth their salt knows is a stupid metric (1MLOC of shit code is a pile of shit). One only needs to look at their most recent perf evaluation to realize that absolute code output doesn't actually factor in - it's high level impact perception that does, if anything.
Being single doesn't in any way correlate to more dedication; plenty of singles clock 9-5 and spend free time on non-coding activities (games, TV, exercise, etc), and plenty of family people work late by choice. It's not even an either-or proposition either: there are married people w/ no kids, single people that need to pick up their dogs at daycare, people that work so late so often that they become unproductive due to fatigue, etc.
The idea that someone will take your name and go dig up all your personal info and discriminate you and cackle maniacally is just flat out absurd. As someone who's been both an outsider and an insider to bay area tech, I honestly don't see evidence of discrimination, deliberate or otherwise. I feel like the occam's razor in this discussion is that armchair speculators seal themselves in an echo chamber of delusional conspiracy theory out of self pity or to feel smug. I also noticed that there are people who have had asshat bosses/coworkers at companies w/ dysfunctional cultures and think that experience translates to there being asshats everywhere.
I think Occam's razor applies here. I don't think it's intentional, but this is the effect. I think what started off as a way of screening out completely incompetent people just turned into this arms race to be more and more selective without considering the fundamentals of the selection process.
I think these sorts of posts give people a warped view of interviewing for SWE positions. Most companies don't ask whiteboarding questions of the difficulty discussed here. If you want to work at one of the biggest corporations in the world, thats one thing - but there are plenty of good jobs out there for people like you and me who don't want to put in this sort of time commitment to interviewing.
mom here. same 2 kids, one a baby... they dont sleep man. I practice at night, about 1 hr before bed. Sometimes during lunch break at work. It takes much longer and its hard to remember all the algorithms. I hope to land a better job too. I am confident in my abilities and I've always been well liked and done great work, but I am not quite confident with interviews yet...
I have a wife, three boys (one who doesn't sleep through the night), and a full-time job as well. Usually I just practice after putting the kids to bed. It's possible you just need to carve out some time even if it's an hour or two a night.
I have an IT YouTube channel where I discuss being a self-taught developer. I studied for years each night after getting home from my full-time non-IT job. Wife, 2 kids and mortgage as well.
Now, twenty million people have watched me and I have been in the industry for 10 years as a senior software engineer. I wouldn't pass Google's interview either I bet, but they invited me to an educational convention last year.
Hey man I feel your pain. Wife, two kids and not a ton of time.
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.
It's going to be harder for you, and this is one of the reasons there is an implicit bias towards younger people in these companies. But it can be done! While this guy aced all rounds, as a member in the hiring committee for a large company, I can tell you that this level of performance is not necessary. If you do ok in the coding rounds and hit it out of the park in the design rounds, you'll still be considered.
It depends on what you know before, as well. When I interviewed the last time, I read "Cracking the Coding Interview" on the flight up to the Bay Area, just to be sure - and that was that. (And I did get an offer)
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.
Putting in a couple of hundred hours of work for a large, permanent jump in salary? That's a fantastic ROI. The study is a side gig with an expected monetary benifit, not an idle hobby.
It really does seem like these companies over time are converging on an interview process that (inadvertently or not) selects for "outgoing 'bros" with a lot of time on their hands to study and prep so they can "crush it" on the whiteboard. And then we're surprised at the monoculture emerging everywhere.
The whole process is a roll of the dice. The more senior the role, the less fair that roll of the dice will be. If you can accept this fact, you don't have to be "trapped". That's how I think of it anyway: I never spend more than 2 weeks (_very_ part time) preparing. I do get rejected sometimes, but I get plenty of good offers too.
I've been in a ton of debriefs at this point. I no longer feel bad about any rejection I've had from any big company. "Dice roll" is a perfect way to describe it. The number of things that someone will raise an arbitrary red flag over is endless and largely down to personal bias / mood of the interviewer.
I've seen people discredited for not setting up some large inheritance hierarchy for their whiteboard design question. What's "Doing it Right" for one person (me: avoid inheritance like the plague), is someone else's "this guy couldn't code his way out of a paper bag".
As one of my university professors said before exams: "I know which parts you don't know." Meaning that if he wanted someone to fail, he could easily arrange that. This was his way of motivating students to attend the lectures.
There's really no way to prepare for the full set of eventualities, and unless you do something spectacular (chances of which are slim in a high-stress situation), their opinion of you is formed in the first few minutes of the interview anyway.
Yeah, I agree.. Doing enough prep to get a hundred percent acceptance rate is not worth it. And it is a level I couldn't achieve anyhow. I've done fine on my career with 50 percent or lower acceptance rate at interviews. It's one of the things I'm the worst at in this industry, but you only need to change jobs fairly infrequently.
I also question a lot of these "I landed every offer" claims. People often exaggerate their victories.
It's easier to land offers for entry level positions. "Landed every offer" probably means entry level. Companies are hungry for decent devs who don't yet know their real market value.
I was able to land a couple of solid offers but you have to be really persistent. I kept chugging away a hour or so a day and 3+ on weekdays when kids slept in and basically made algos my thing apart from work and family (which worked out for me since I was able to come up with the Aho-corasick algorithm for a question I was asked). After a while I started enjoying the prep process since I was learning quite a bit too.
It may be that your situation and priorities do indeed restrict you from making the time investment to get good at whiteboarding and FAANG-style interview practice. It doesn't necessarily follow that you're stuck hard doing what you are now.
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.
You're unlikely to hit $300-400k+ TC at those though.
Pay is a huge reason why people join them. The pay scale is completely different and (practically) necessary to compete in the bay area housing market. Checkout levels.fyi.
I only studied 3 hours a weekend for 3 weekends. Even for more normal interviews I did a few hours of prepwork so it wasn't anything too crazy but everyone is different. I just assumed you hear about the people who study a ton more.
The time commitment is not as bad as people make it seem. You don't have two hours to yourself every night? How about 1 hour during the week and doing 2-3 on weekends?
You just have to sacrifice other leisures like tv and video games to make it work.
It's not necessarily fair to read those charts that way.
The radio time could be while commuting to/from work. Quite a few folks have TV on in the kitchen while they prepare dinner. Social media time is frequently a minute or two at a time scattered throughout the day. etc. etc. etc.
The chart even indicates "Some amount of simultaneous usage may occur across devices".
Interestingly, I find that most employees and applicants in high tech accept this, that they've made their choice and will live with it.
It's the tech companies that seem bitter about accepting the consequences of their own hiring practices. They have hiring practices that, by their own admission, result in a very high rate of false negatives. This is their right, they have their reasons, but there are downsides. It means their processes are designed to make hiring hard. It creates a culture where developers are disinclined to pursue new jobs, as the transition costs (intense interview exam prep) are high, and the outcome is uncertain. I actually think these practices may cause talented people to leave the field, and may deter other talented people from entering the field in the first place.
Interestingly, these companies don't seem to accept their role in creating the "shortage" that they constantly decry.
(the solution, it appears, is for the government to grant tech companies power over who is allowed to come to the United States and the conditions under which they are allowed to remain here).
It's only in the tech industry that having a family isn't a regular, normal thing people do.
Maybe it being a choice with a negative association is more of a cover for the fact that most of us who choose this industry are extremely poor communicators and that an out-sized number of us _will not_ get married or have kids (and not by our own choice).
And I say that as someone without such attachments myself.
Or maybe we're okay with being exploited by employers who want us working extremely long hours for their benefit and the choice to keep the engineers away from the older, more normal folks with families is deliberate.
I would bet if you were to sample the average mid-career folks in non-tech groups at FAANGs, you would see normal (or even above average) numbers of people who have families and normal hours.
> It's only in the tech industry that having a family isn't a regular, normal thing people do.
Getting divorced, again, is an occupational hazard of getting to the top in law firms or in finance as well. There are plenty of people with really good jobs that sacrificed family for it. I doubt it’s actuallu the norm but it’s hardky unusual.
Your source does not support your thesis. All of the professions with the lowest rates of divorce require high levels of intelligence but they’re not all very well paid. Clergy certainly aren’t and veterinarians generally have other, much better paid options. Looking at the low end of divorce professions it looks more like a combination of intelligence and systematic thinking being protective against divorce. The only people on the list that might not have degrees are Military Enlisted Tactical Operations and Air/Weapons Specialists and Crew Members and Graders and Sorters, Agricultural Products. I’ve no clue about the second but the first seem very likely to be the kind of people who do very well on the ASVAB and get assigned to nuke tech or aircraft mechanic.
The highest divorce rate professions aren’t particularly well paid by any measure but there are plenty of other professions with lower pay and lower divorce rates.
Clergy are such an obvious and well-understood exception that it's intellectually dishonest to use them as a counter-example.
Also veterinarians make extremely good money. Nearly all of those low-rate professions are well paid and virtually none of the high-rate professions are.
Everyone who chose to become a veterinarian could have made more money, by going to med school, law school, pharmacy school, getting an MBA, etc. No comment on the non-degreed, not particularly well paid group that’s highly selected for high intelligence with very low rates of divorce?
Not really sure what the point of your comment is? Are you asking the NH community to feel sorry for you? You made some life choices about what's important to you and that's great. The OP made their life choices and decided to study and work their way into on those companies.
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.
> 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.
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.
The candidate's experience shows how flawed Bay Area recruiting is. This candidate was clearly strong, as they had a 100% offer rate on companies that they interviewed at and almost all of those companies are top tier(Apple, LinkedIn, Amazon, Facebook, Google).
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.
A lot of companies post jobs that they aren't really looking to fill. Either they're trying to portray a picture externally that doesn't reflect the reality of their financial situation or in order to play shitty visa games.
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.
Agree with the caveat that it's a recruiting problem not an interviewing problem.
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?
It's possible the candidate was overqualified and some of those 70% knew it wasn't worth their time if there was a 99% chance they were going to Google or similar.
The article said they went to a small no name school, had no impressive companies on their resume, and had only a few years of experience. I don't know what would make them think they were overqualified.
I see so many people talking about how irrelevant algorithm skills are for real world coding, and lots of allegations of age discrimination.
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.
It's more that the unfortunate reality is that programming is so amazingly powerful and relatively easy to do (i.e. compared to becoming a doctor or lawyer) and is so scalable that companies make so much money off developers that it's not a big deal to pay them six figures.
It is critical, in my opinion, to either whiteboard problems with someone or mock a phone interview with someone. Not critical as in “very important”, but critical as in you should consider it an absolute requirement when studying.
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.
Isn't the author doing the rational thing though? If I knew ahead of time that BigTechCo's final interview would be a test of my juggling skills, I would definitely spend hours honing my juggling. Whether or not it's an appropriate measure of my skill as an engineer is irrelevant to my goal of "getting a job at BigTechCo"
The author’s doing the rational thing, but BigTechCo that requires juggling certainly isn’t. It is left to the reader to decide whether this is relevant to the industry’s interviewing practices.
I would say, that out of all the companies I've interviewed with so far, Apple was the best, no bullshit interview experience I've ever had. Very to the point, incredibly specific to the type of work you'll be doing. Most of the interviews are with two people, that are from team you'll be working with. Also very refreshing was a lack of competitive programming type questions...
I've always been curious about working at one of these companies.
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...
I work at a medium sized public sv company that’s competitive with the ones discussed here and work life balance is amazing, things are very relaxed and definitely don’t feel burnt out at all.
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
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.
Implied but not explicitly stated in the post is the idea that these interviews are mainly about solving puzzles given during interviews.
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 gone through the same. Only google makes you write code on the whiteboard and only Google gives you A lot of puzzle coding interviews. With the others there is way more discussion and system design going on. It's much nicer as a candidate.
The specific questions don't have a hold in real life but the patterns behind them do. Most problems to be solved in computer science, with enough abstraction, have already been solved. I joined a new software development scrum at work and have been helping optimize how long our application takes (it can be thought of as an encoding engine) we've seen huge leaps in improvement with very simple solutions, 75% of the time the way we're seeing that the best way to solve a problem is via a hash table. That's also an incredibly common core solution to most interview problems.
The patterns _can_ have a hold. It's always fun to optimize slow engines, but it always feel more to me like rote/busy work than actually building the system from scratch and engaging in product engineering. But, I guess that's kinda your point -- very simple solutions that revolve around simple, common core structures can lead to huge leaps in improvement. But this kind of real world optimization has medium breadth and depth. It's got a lot more breadth than many algo interviews I've gotten, and yet less depth. I've found that's been the real structural weakness in weak algo interviews I've had -- they just overindex on deep knowledge of algo optimization and underindex on communication, reading and design ability. I'm drawing from a pretty small and outdated sample, though; the last time I had the patience to interview with a BigCo was more than five years ago.
Change your mindset, instead think of it as convenient way to get a job for a multiple different company using basically the one generic approach. It doesn't really matter whether it has no hold in real life, in fact well I argue it does have a hold in real life, which is to get you that job.
Do you have any resources or suggestions for better types of questions to ask, especially for individual interviewers without control over the overall process?
I try to avoid those sorts of questions, but it's hard for me to come up with better alternatives.
- there's no trick, it's just a matter of being thorough
- it's pretty concrete (modern languages have that in their standard lib) and/or might actually come up someday in your day-to-day job
And in my opinion, what matters even more is that your full round of interviews shouldn't be just 5 slots of algo questions. One or two should be enough. I like combinations of a take-home challenge (keep it short!), pair programming sessions and architecture / systems design discussions.
Getting a computer science degree from a fancy university would prepare you for these types of questions.
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.
Whaa? It takes a computer. Beyond that hurdle, I dunno what privilege is involved. It'd say it takes persistence more than privilege. I grew up quite poor, bad family, dropped out of college (due to bad family), learned cs on the internet, now work at a FANG corp.
Thinking there's some wealthy background bias is bizarre to me. When you've got 300k+ people in an organization, you acquire people from all walks of life / countries / backgrounds.
But doesn't this article specifically disprove that point? The author came from a non-fancy university and non-fancy internships. He prepared only using free or low cost materials (leetcode and books) and was able to meet the hiring bar.
To me this reads that the questions are intended to narrow the candidate pool down to people with an abundance of time to devote to studying, which is certainly one type of privilege, but is not necessarily the same as a wealthy background.
I'm working on preparing for an interview gauntlet but in no way would I do 6 interviews in 6 days. A full day of interviewing is such a draining experience mentally and physically, after interviewing with Google in 2014 I just wanted to get a glass of water for my parched throat and go to sleep.
Congratulations to the OP, I have EPI as well and it's certainly a challenging book.
After my full day of interviewing at Google, when my recruiter asked what I was planning to do for the rest of the day I let him know I would probably just be sitting at the park with my dog looking at the trees.
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.
I interviewed with Google a few months ago and it was the worst. I was dying by the end of the day. It is so intense that I just wanted to give up by the last interview. I don't think I will ever apply there again, or if I do I will care less about going 100% for each interview.
I did two onsites in one week on two different occasions, and it was killer. I would not recommend it. It didn't help that mine were in different cities (and two of them were 1.5 days long).
Whenever I read job search war stories such as this article, I keep wondering if these are sent from a parallel universe of some kind. Six job offers? That's incredible! I mean that literally: I have a very difficult time believing such stories because they never jive with my own experience.
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.
Would love to see specific numeric information on offer packages, negotiations, counter-offers, and final accepted offer, if the author feels comfortable disclosing such information.
I bet you can get a really nice offer when you get six big tech companies to bid over you.
You can probably negotiate toward the top of each pay band, but that's about it. I'm assuming the OP was an L4, you can research the pay bands for that level.
Salary is restricted to pay band, but RSUs are not, at least not at my company anyway. I've heard of some pretty insane RSU grants well beyond what would be typical for a given pay band (absent negotiation).
I was surprised that he got an offer from Google after a single interview during his 6 days of interviews - it took 3 months and several interviews before I got an offer from them.
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."
Probably means a single on-site day (with 5 interviews). The hiring process can be slow for factors outside the candidate's control, due both to general coordination delays and the need to have a hiring committee evaluate the candidate after receiving interview scores.
These big companies (including Google where I work) have so little idea of where they're going that they go way too general with interviews. If you want a good iOS engineer then ask them all questions about the platform and have platform experts interview them.
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.
A lot of big companies (FAANG) do test platform domain knowledge, many also do platform-specific coding sessions. The reason why interviews aren't solely composed of platform questions, is that they want some measure of how good you'll be overall too.
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.
This is a total guess, but the author does seem to hint a preference for LinkedIn:
> 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.
The heart rate info that he provides for the onsite interviews is a funny and interesting thing to include (around 100-122 during interviews, with a resting of 60).
Does an elevated heart rate during an interview count towards one's daily fitness goals? :)
I started an 'exercise' on my fitbit right before my last onsight started. Fitbit claimed that I burned ~6K calories that day. My 3 week running average is somewhere around 4K.
Im a recovering chunk monster. Im down 80lbs in 6 months and now I've got pretty decent cardio (6 miles in an hour on the treadmill 5 times a week), but still weigh 250lbs. If you're fat but move a lot you can burn some massive calories, or at least my fitbit says so.
The way I see it, there are several reasons for such an interview process:
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.
> It was exhausting and it meant that most of my lunch breaks were just interviews for multiple weeks. I had to start going into work very early so I could leave earlier to take calls at home. Making sure I was still meeting all of my commitments at work was a challenge, too, but I made sure to prioritize that over interviewing, rescheduling when necessary. I wouldn’t phone it in for the purposes of interviewing. It makes you look bad, it’s unethical, and if you don’t get a job, you’re now a lower performer.
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
Paraphrasing a comment I left elsewhere in this thread, but I've been seeing actual improvement on the state of the art on the much maligned and polarizing algo brain teaser interview. I'm not sure if Karat is the best in this area but I did have a good experience with a company that used them and interviewed me well, but I like that companies are actually incentivized to minimize false positives and negatives rather than just one. I try to tell other engineers that they'd be surprised at how much better a good technical interviewer can be than an average strong engineer, but that goes in roughly two directions: one group can see why the dominant mode exists but is curious about a better way that remedies the shortcoming of the dominant mode; one group defends the dominant mode and gets fairly defensive about criticisms of it.
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?
Just goes to show you that software interviewing exactly captures the entire experience of being a working software engineer and always tests you on the things that all of us reading this right now already know.
It seems that LeetCode and HackerRank have become the SAT and ACT of the SV Big Techs, and FAANG et al are becoming the workplace Ivy Leagues. If so then where are the Khan Academy, Coursera, Udacity, and local coding boot camps of the world?
I can’t help but wonder how I would do in these interviews.
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.
Though I empathize with senior people of the software industry, I will like to add some other perspective to this discussion.
I am from the Oil and Gas industry in Operations domain, nothing to do with software. Previously I have worked for IBM as a software engineer. Hence, I have the perspective of both industries.
From this discussion thread, it seems that senior people are looking for exclusivity and immunity. I can correlate it with seniors of my industry. My company is government owned. Here, seniors people (by age, not by rank / +1 rank but the same job responsibility) command juniors (by age, not by rank / -1 rank but the same job responsibility) and seldom do any work. They come to office late, leave office early citing family issues everyday.
When I bring up the topic to my boss, he says I need to understand they are like that, can't help. Sometimes he says "Learn from them, how to get work done by others". Those others are younger people like us - 22 to 40 age groups.
> Although every company loved telling me that “it really feels like a startup!”, it rang the truest at Amazon.
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.
This is really impressive! I will keep this in mind if I ever apply to any of these big tech companies. I've sent a few applications over the years, but I never got past a phone screening, and I didn't realize how completely unprepared I would have been.
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.
> After about a month of consistently practicing problems each day (maybe 2–3 hours/day, more on weekends) I moved on to doing primarily Leetcode’s “Top Interview Questions”
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.
If the OP was already good at algorithms, then a day or two of refresher is probably all that'd be needed. It's made clear that he didn't have a fundamental grasp at doing harder algorithm questions, hence why he needed so much studying + practice.
Done this whole process as well. Every year, in fact. I've interviewed with quite a few top Bay area companies with quite a few going to onsite.
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.
So people are complaining that whiteboarding is the wrong way to interview. That we don't discover if they can write and maintain complex software system, instead focusing on 'trivia'. I don't disagree (I think that the trivia being tested can be important - a team with no one that has deep knowledge of data structures of algorithms is lost), but I also don't know a good way to interview that finds out what we need to know.
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.
One big problem is that the people interviewing are rarely "big picture" people, because in general there are few "big picture" people as a percentage of any population.
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.
> Companies don’t hire people based on the knowledge they were born with.
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".
I get messages from recruiters from some of these companies time to time and I always decline it. Because I know I can't get through the technical interviews without spending at least a month preparing for them.
This only covers getting the interview and potentially succeeding at it.
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.
If I were giving a technical interview, after asking some basic fizzbuzz style questions, I would just ask a candidate to bring a personal laptop and "do something cool", i.e. show me what you're good at that is also valuable or useful. Could be spinning up a website, could be some cool parallelized data science or processing job, could be setting up a simple REST server infrastructure, as long as it's done de novo. Has anybody ever been an interviewer or candidate with this kind of interview?
IMHO, this is the worst possible approach to finding a job. The opportunity cost of doing this over working on interesting problems and letting that guide you to pay seems extremely high.
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.
I'm with you. I get that people chase the resume builder companies, even years later it'll be a highlight on a resume that HR folks salivate over.
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.
It's early in his carreer. I think getting some years of solid experience at a company like this will probably improve his skills a lot, and then he still has plenty of time left to find the really interesting problems.
Those are some awesome statistics: 6 out of 6 successes, practically unheard of. But, it sounds like you know exactly how to study for it: that whitebaording tip probably helped.
I had 4 onsite interviews in 5 days once. It was brutal, so exhausting. I felt like a machine though. A lot of the questions were recycled (behavioral), and so were some of the tech questions.
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.
The interviews are certainly difficult. I tried a few times years ago and never made it anywhere in the process, which was frustrating to say the least. I was working at a startup doing everything under the sun to keep the technical side of things going, but found that I was using so many different programming languages in my day to day job, that I couldn't whiteboard a reasonable solution to anything. It was shocking.
What was your portfolio, I'm talking the existing examples of work?
> 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”;
So the hiring procedure is to optimize for people who adhere to the advice of a specific training manual that's not actually mentioned in the job posting? You just have to want to work there so much that you find out about it? What is it about that kind of candidate that makes them desirable? Obsequiousness?
The problem is actually that due to the plethora of tools, languages, dev stacks and other variability, it's hard to diagnose software engineering skills effectively. So it makes sense to go back to basics and use things that everyone should know like data structures.
If I subtracted <this article> - <code> the vector would be almost exactly equal to <what I did to study for pathology boards> - <pathology>, except in the path boards, there's no opportunity for "if you know more, show it."
The article is, unfortunately, lacking in substance. For example, the author applied to 20 jobs and got interviews with 6. This is an incredible success rate. I'm guessing he had referrals from hiring managers and didn't just apply through a CTS.
I wonder if it's possible to get a job at "FAANG" with just studying interview questions !? It would however be a proof that you are dedicated and willing to learn, kinda like a engineer degree, but one year instead of five.
Way to go young'un! My advice would be, though it may seem attractive to work at the large behemoths, I'd advise you to go to a startup or a medium size company for greater satisfaction and less bureaucracy/politics.
That is still an impressive response rate given it sounds like the author cold applied w/o a referral. Generally it is much easier to at least get to the phone screen with a referral from someone within the company.
Seems like it would make a lot of sense to outsource hiring interviewing and vetting. In this guy’s case if he could have just been interviewed once and it probably wouls have suited all 6 companies.
the problem of interview in large companies is no one want to take responsibility of recruiting the wrong guy. So they just use some "standard" process to screen and test the candidates. If they still pick the wrong guy, no one will be blamed, since other big companies use the same process.
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.
it really is a different skill that you need to invest time in and practice. it sucks, but there are also plenty of high paying positions that have more practical interviews
I was preparing for a few months and interviewed at 0 of six top companies bhahaha.
It seems like they are very reluctant to hire guys from overseas even if you are already in SV for interviews.
When I see engineers in their late 40s, 50s etc being harsh on algorithm interviews, I often wonder is it because they failed to keep up with changing times and are now playing victims. I mean, IT industry is nothing like what it was in the 70s and 80s when these people started out. Back then, it was still rather nascent and almost all business problems could be solved by gluing together existing tools (I was born in the 80s so I am only speculating based on what I have read). May be that's how it is even now. They were all essentially glue engineers doing some type of CRUD job. For them, the more tools they knew the better they were at their jobs. It is a bit amusing how this glue job is usually oversold as 'architecting' or 'system design'.
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.
It's interesting that software interviews have degenerated into literal auditions. Just as with auditions, you need to train specifically for them.
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.
Would you want to work with someone who's just a warm body that claims to have experience in the field? Especially in such a high paying field where any random is highly incentivized to just pretend they know how to make software even if they can't pass fizzbuzz?
Clearly interviews are flawed. But I've worked with warm bodies hired through h1b-abuse programs and no matter how much they claim to know about something, a lot of them are just bullshiters. I would never want to work at a place where people with their level of skills could join the regular teams as peers.
I see whiteboarding simply as a logical statistical filtering mechanism. Do they filter out people that are lazy or have difficult personalities? No. But at the difficulty level of places like Google they filter out people who are really bad at programming (which there are a lot of) every single time. They also happen to filter out people who are good at programming too, but enough pass the whiteboarding that the organization can hire to meet their needs, so they don't care that maybe applicant X didn't pass. High false negative rate, low false positive rate
Why would that warm-bodies scenario even happen? I think there's an assumption here that these tests actually provide a lower false positive rate than a solid experience check or whatever non-puzzle interviews do. After all, one stark difference to an audition for a ballet, is that you can't fake your ballet skills, however, memorizing CS stuff may actually be possible. Furthermore, the hard part to memorize are the things that would be asked in a good non-puzzle interview anyway.
Clearly there's room for pragmatism for such as interns, newly graduated, relocations etc.
Honestly, I think they're primarily filtering out based on themselves as the target image.
From what I've heard from hiring managers, when you open a position and interview applicants without the use of headhunting, the majority of applicants are wildly under-qualified, even if they do have some relevant experience.
Also, I see no reason not to combine both a background check and a technical interview. You have no way of knowing what someone's actual contributions to a previous software project are, even with a background check; maybe they were about as productive as an observer even if they understood the project at a high enough level to explain it.
I agree that it would be hard to know an individuals specific contributions, but I can't see how a person can pass a good work-related interview if they're wildly under-qualified.
> is there any similar profession where interviews like these take place?
Based on some conversations with friends it sounds like Big 4 consulting is similar. The behavioral questions are the same, and instead of coding they have "case questions".
>No consulting interview would be complete without case interview questions that test a candidate's ability to think strategically about problems...make it a conversation, and explain every step of your thinking/process along the way. Again: showing that you can arrive at a solution after thoughtful questioning and analysis is far more important in these questions than being able to throw out a brilliant new strategy on the fly, so focus on the process, and allow it to lead you to a solution.
Why would anyone with an existing job ever take another job with a "trial period"? You are basically excluding your most desirable hires with this system.
If I were looking to leave my job, I'd not sign with another employer if I wasn't quite sure I'd want to stay with them, trial period or not.
Is it different outside of western Europe in terms of trial periods? We (afaik) always have a trial period: in the Netherlands it's typically 1-2 months, in Germany it's typically 3-6 months; either way, there is always a period where both parties can fire the other with zero to two weeks notice. It is not the norm to be fired in that time, but it happens (from my limited anecdotal evidence, I'd estimate one in 10-30 hires, and most of the time both parties agree it's not a good fit).
About trial periods, there are places that do those, and a lot of people hate it. There is a lot of risk involved in leaving a permanent gig to "try out" for another one. If they let you go at the end of the trial period then you're out on your ass. I personally would never do this if I were already employed- there's nothing in it for me but downside.
But more broadly, lots of places try these different avenues for hiring and inevitably some large portion of potential employees hate it.
Try doing take-home tests? Well, those are biased toward people with more free time, so obviously you're discriminating against people who have children. Interviews using Coderpad? Now you're discriminating against people who get anxious in the moment and need more time to think.
Sanity check for me is what every company in almost every field do. Basically the main reason for interviews to exists. To confirm that what's on the CV and so on seem accurate using an in-person interview.
Assuming that you're American, what do you even mean by the risk of a trial? Aren't you guys on a permanent trial period with your labour laws?
At this point I've conducted dozens of screening interviews at a SV tech company, which is in the ballpark of the ones mentioned here. Interviewees choose the language they'd like to work in, and the questions are of the shape "given a list of data and a simple criterion, find an element of the list". This isn't exactly depth-first search: finding elements of collections that meet some criteria is, like, extremely common in day-to-day work.
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?
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.