This is surprisingly better than the usual "You won't believe what happened after my article got on Hacker News" post (yes, that's a genre) so I'm going to put it in the second-chance pool [1] after turning the knob down on the title.
> I want to turn this system into something that's open to all users who want to take time to review stories. We'll make it a form of community service that will be a new way to earn karma. However, it's still an open question how to pull this off without simply recreating the current upvoting system under another guise.
Have you guys looked or thought about this any more since then? I'd love to see such a community service become reality.
Still thinking about it, still want to, haven't worked on it yet, will at some point.
Edit: if anyone wants to be a story reviewer, find 3 submissions that got posted to HN but didn't get attention, which you think the community might like and which gratify intellectual curiosity (i.e. aren't interesting just for sensational reasons). Oh, and which you're not personally connected to. Then email them to us at hn@ycombinator.com.
For examples, you can see a partial list of stories that were picked in this way here: https://news.ycombinator.com/invited. Those are ones where we invited a repost because the original submission was too old to re-up, but the criteria are the same. We'll publish the full list at some point.
I'm just a QA but it makes me wonder if perhaps part of it is because software engineering is so young that we don't really know what a good software engineer should be. Or perhaps it's more that we're still trying to figure it out. Compare it to civil engineering or medicine that has had centuries if not millennia of accumulated knowledge, and who's principles haven't changed much since over time. The Hippocratic oath for instance is nearly 2300 years old and yet is still foundational to modern medical ethos. Computers have been around for the last 50 years, in every day use in the last 30. Barely a turn of the head in terms of length of human history.
I wonder if then at some point we see computer engineering becoming more standardized like the others, with a bar that someone must meet before they are able to call themselves a computer engineer with all of the responsibility that entails. I wouldn't say that it should restrict someone from programming professionally without this accreditation, but rather it would be a symbol of proof that someone has at least been judged by their peers to be at a given level of skill and knowledge. What this would look like ultimately or whether it would come to pass, I haven't the foggiest idea though. Like I said, I'm just a QA guy, not an SE.
I am pretty sure principles of medicine and engineering changed a lot over years. Even Hippocratic oath does not have all that much in common with ethical expectations in medicine. Most of what is in not is not expected anymore and most of current medical ethos is not in it.
No doctor is expected to share money with his teachers nor is expected to teach sons of his teachers. Abortion is allowed and lately euthanasia too. Current doctors can perform operations and are not required to treat all sick people.
Glad to hear he hasn't given up. I agree with his basic thesis that much of software engineering hring is a cargo-cult shitshow. But I haven't given up hope and have worked on developing a hiring process that is human, efficient, and effective.
I've outlined it here before. Been using it and tweaking it for the last 3 or 4 years. I keep bring it up because it's a tested alternative to the usual death marches and dumpster fires and it has been a success for the teams I've led and our applicants.
The principles I've defined to guide our process[0]:
- Hiring cycles will be structured and as short as possible.
- When we start a hiring cycle, we will finish it by hiring the most qualified applicant who accepts our offer.
- Every applicant will receive a response within 48 hours and be updated on the status of their application at each step asap.
- The hiring process will be as transparent as possible.
- Objective and fair-minded measures will displace biased and bigoted ones.
- Every applicant will appreciate their experience, even the rejected ones.
- The process will be agile and adapt over time to improve and meet the specific needs of the organization.
- Onboarding will begin with hiring.
One problem I'm confronting at the moment. As our company grows, we've brought on a new HR lead who wants to jam the process we've been refining over the last couple years into a new ATS (Applicant Tracking System) that could significantly screw up our meez. We'll see how that works out. I'm doing everything in my power not to let it fall apart.
If you have the power to improve the situation, please do so.
Sure. We start by noting in our job description that there will be a coding challenge -- on a laptop, not a whiteboard.
Most of our work is on web applications, primarily Rails. So, for that role, the challenge is to fix an issue in an implementation of Fizzbuzz on our sandbox Rails app. We give the candidate about an hour to work on it. It's not as trivial as the common Fizzbuzz exercise but it's a pretty representative sample of the kind of work we do.
As part of the phone screening, we check to make sure the candidate understands there will be a code challenge involving Rails and that they're cool with that.
There's a handout we present before we turn over the laptop that explains the issue and clearly defines requirements (e.g. create a branch with this name). We read a brief intro section then give the candidate time to review the requirements on their own and ask them if there are any questions. Candidates are reminded to read the README included with the project and encouraged to use the browser to Google stuff.
One tweak we made was to add check-in stages to the challenge to make sure candidate doesn't get stuck for a half-hour trying to open up the text editor or something. Every 15-20 minutes, a team member will check in with candidate and if they haven't hit a certain milestone (e.g. has started local server or had reproduced issue), we'll assist them in getting to it. At the second or third check-in, it usually turns into more of a pair programming exercise and at the end we'll review the solution with candidate so they understand why the problem is relevant to the job.
There's not a definitive pass or fail for the challenge. The candidate's performance gets scored on a simple 1-5 scale alongside the other competencies we're evaluating as part of the interview. We're pretty thorough about preparing the code challenge and consider it a good example of our "onboarding begins with hiring" principle.
An unusually good thread, considering how worn the topic is, and how indignant people tend to get about it. (Indignation makes for boring threads once the coals cool down.)
The top comment is brilliant and sums up the brokenness in the best way I've ever seen.
I think one of the major takeaways here is, stop asking algorithm questions [1]. Everyone. Just stop it.
In my opinion, and modest experience (I've done several dozen interviews, so there are plenty more experienced then me, but I'm at least not new, plus nearly all interviews were for my team so I had to live with the results!) it isn't that hard to come up with small sample questions related to what the job actually is doing. From there, in addition to the mere fact of whether or not they were able to complete the task, you can learn about how they did it, look at their practices, stop them for a moment and discuss the implications of something they just did. You can add a wrinkle to the task ("what about unicode?" "what about cross-site scripting vulnerabilities?"). I also find being this kind of flexible, rather than being stuck on "did they solve this algorithm challenge in the proper manner" also gives me room to be human, to take a moment to try to calm the candidate down in what is inevitably a stressful situation for them (even if it's basically just Tuesday afternoon for me in my current position in the world). I think of an interview as "I want to find all the positive I can", rather than as a process of locating all flaws, and you can't do that if your candidate is frozen in the headlights the whole time.
Interviewees are pouring forth a wealth of information. The idea that the only way to find out how good they are is by asking this one narrow set of questions is absurd.
And the interviewers are pouring forth a wealth of information too. Consider what message you're sending with a rigid adherence to something we all know is broken.
[1]: Unless it really is relevant to the job! I expect that if I'm hiring a senior level machine learning researcher that you better be able to describe gradient descent to me, for instance. We may not implement it literally in the interview but I have a reasonably case for saying the researcher ought to convince me they could get there. But in a lot of cases, what's more relevant to me is that you know the characteristics of algorithms rather than exactly what they are. You can know the runtime and weaknesses of quicksort or RAFT consensus even if you can't spew the actual algorithms on to a board.
Actually, my parenthetical here almost makes me want to rewrite this whole post, although this thought is still fresh and I'm still chewing on it. Is that perhaps the error we are making? Are we conflating knowing the algorithms for knowing the characteristics of the algorithms? The latter is legitimately important and I see screwups based on failing to understand characteristics of algorithms all the time. Knowing the literal, actual algorithm to the point that you could simply open up a terminal and bash it out yourself is rarely important in this era.
I left Google in 2009, quite unhappy about the difference between a startup and corporate politics. After that I worked at 3 startups (5 years), 1 telco (1 year) and at McKinsey (3 years).
I ended up interviewing at Google again in 2018, after deciding that a) I liked programming more than management consulting and b) my comparative advantage was in programming. I definitely could have felt entitled after 1) passing Google interviews once before, 2) having had three somewhat successful startups and 3) proving I can also handle the corporate side.
I was asked multiple questions that could be interpreted as 'algorithmic' (and I have to admit that after 3 years of not coding I was nervous about them). However, they can also be interpreted differently, more charitably. They all followed the structure of: 1) give a reasonable but not completely defined problem - you should be able to clarify enough of this to show you can deal with some ambiguity; 2) turn that into an algorithm - you should be able to articulate an easy algorithm and be able to discuss improvements to it; 3) turn your algorithm into code - you need to show you can actually program. I definitely didn't have to memorize and regurgitate textbook solutions.
I acknowledge that a) the above may optimize for rejecting all negatives at the cost of some false positives and b) it's still a very basic lower bar and doesn't predict who will perform highly vs. ok. However, I did think it tested for the core skills I expect from programmers.
I've also set up interviewing processes at startups. I did end up emphasizing ownership and 'getting things done' more than Google does. I do think startups should test for different attributes than 100k+ FTE corporations.
You missed a big one - giving them an idea of how you approach a problem and work through it. That's the biggest take away.
If someone just spits out an optimal solution straight away that's not actually a great sign. It doesn't matter if you struggle a little, or need a few hints, but showing you know how to break a problem down into smaller sub-problems and work your way up is an invaluable signal.
This is incomprehensible for me. If someone happen to see your question before it is bad sign? And also, what exactly about my internal process are people trying to learn from "how I approach a problem and work through it"?
I think I tend to make good impression on these ... but I am aware it is interview skill where I somehow picked up social signals I am supposed to send. I am adjusting what I am saying to how interviewer looks like (happy, annoyed, bored, etc). It is social skill, but not same social skill as pretty much anything I do in actual work. In actual work, people are not interested to listen to me work out problems in front of them.
It is even more useless if you know the answer and then proceed pretend to split it into smaller problems and then work your way up or down. That neat thought process is neat precisely because I know the answer and I am performing idealized problem solving process.
In case of actual real problem, you don't do that so nicely. You have at least some bad turns, random guesses, break it multiple times badly and so on.
I’ve been in interviews where I’ve seen the problem before, and know the solution. I’ve always said so if that happens and the interviewer either continues and delves into why it’s an optimal solution, or switches to a different question.
> Knowing the literal, actual algorithm to the point that you could simply open up a terminal and bash it out yourself is rarely important in this era.
Yeah. In a world where Google exists (or even where Knuth exists), what's the value in having algorithms memorized? Knowing the characteristics, sure. I agree that that's important. But the algorithms themselves? Why? I've got better things to do with the memory space.
There's no value in memorizing algorithms. There is, however, a lot of value in the ability to solve algorithmic tasks. I don't think anybody is intentionally structuring interviews to measure how many algorithms a candidate has memorized... interviewers are looking for the ability to solve problems, they just... fail at doing that.
In principle, my interviews, which tend to be a lot more about "take this text from a DB and process it in this way and display it on a web page" are algorithmic too. I mean, if anyone's writing code, they're writing algorithms. But there's day-by-day algorithms where you're basically gluing lots of things together, and there's Project Euler problems. In my 20+ years of software engineering, I've personally encountered maybe 3 or 4 Project Euler-type problems in my real job. (And even those weren't as clean as those problems; I still had to integrate them back into some other real-world code base.) Expecting your candidates to be good at inverting red-black trees recursively when you want them to hook databases to web pages without massive security vulnerabilities or performance issues is silly.
"Gluing lots of things together" is a descriptive term, not a derogatory one. There's a ton of things you need to know to be a good gluer nowadays; security, performance characteristics of all the pieces, we're adding more and more distribution into our systems, higher level stuff like integrating with teams, documentation of your code, how your workflow goes... there's more than enough to interview all day on these issues without ever having to quiz the candidate on puzzles from the back of a Knuth book.
Honestly, I think until FAANG start doing something else, the vast majority of tech/semi-tech companies will just copy them. A few smaller companies might branch out and try some other stuff, but most people hiring at mid and large size companies are just trying to minimize risk more than go grab that great diamond in the rough. If the big guys are doing X, the medium guys are gonna keep doing X also.
I'm actually rather unconvinced that these interviews are positively good at minimizing risk (false positives). This whole 'whiteboarding' thing has degenerated into 100% pointless trivia, with many elements of a popularity contest - I just don't see any reason why we should trust this to yield 'safe' candidates.
Even sticking to the pure 'trivia' aspect, there's just so much of it that people are missing altogether. (Sure, maybe you can write out a nifty algorithm on the whiteboard, but can you sketch even a very rough proof that the algorithm is correct? I don't think many people can do anything like this. I'm not even sure that the topic of correctness comes up all that much in a CS/SE curriculum - which is surprising, since we are supposed to be doing engineering. And yet, someone who is familiar with what provably-correct code might look like in practice will likely be a lot more productive as a result.)
I have a CS degree .. and I find it more difficult to write good requirements and come up with good design (since people are generally changing the requirements and the design should be flexible) prior to programming than to solve some problem on a whiteboard.
I decided to not to do any whiteboard challenges unless the whiteboard has a built in editor, search engine and stack overflow. So far people who interviewed me just wanted to know about the different projects that I worked on during the last 15 years.
I'm lazy and don't have time to prepare for interviews or do home assignments because of family life. I'm going to be frank about this if I'm asked to do anything more than talking during an interview.
> This whole 'whiteboarding' thing has degenerated into 100% pointless trivia, with many elements of a popularity contest - I just don't see any reason why we should trust this to yield 'safe' candidates.
People blindly and dumbly implementing any practice is going to yield bad results. I've interviewed for Google, for a small company with a crappy pipeline and a low need for talent, and for my current job, which needs Google-level talent across multiple specialties[1]. Whiteboarding has played a critical role in all of these. The goal isn't to have them answer trivia questions in marker, it's a basic test of their ability to think critically and program. Naturally, the exact questions differ based on the role: for the second job, it was basic processing of data structures, while for the third, I got a question that involves some degree of spatial reasoning. But in general, this is a pretty fundamental way to test a pretty fundamental set of skills.
I even was lucky enough to get a negative example: I ran the tech org for the second company, which had two non-technical founders. We hired a candidate with no engineering experience on my recommendation because he did very well in his coding interview: this guy ended up being the most reliable, clutch engineer in the company. I also rejected a candidate on the basis of failing the simple whiteboard problems, and the founders decided to hire him anyway based on his years of experience. The founder ended up having to bounce him around from task to task, leaving a trail of destruction wherever he went. His code would bring production down, he'd create weeks of work for others in a couple of days, he utterly destroyed devops during his brief tenure there, etc. He was very sweet, hardworking, had a great temperament... But the inescapable fact was that he was just kinda dumb. The whiteboard interview handily caught this, _which is what it's supposed to do_, and all the HN sniveling about whiteboard interviews only being useless trivia contests doesn't erase that fact.
[1] You can imagine how hard hiring is for us right now...
> I also rejected a candidate on the basis of failing the simple whiteboard problems
OK, but this topic is not about "simple" whiteboard problems. (People can of course disagree wrt. what's 'simple', but a rule of thumb is that anything where the average dev would need to train and memorize whiteboard trivia for an extended period in order to perform satisfactorily is far from simple.)
Sure, I don't disagree that it's possible to do whiteboard interviews badly, but it's possible to do bad interviews of _any_ form. My comment is pretty explicit about the fact that I'm pushing back the popular opinion hereabouts that whiteboarding itself is useless, on the basis of these poor implementations.
> I'm actually rather unconvinced that these interviews are positively good at minimizing risk (false positives).
I was talking about minimizing risk for the people hiring at sub-FAANG companies. If they make crap hires, they can just say "well we're doing it exactly like FAANG". But yes, I also agree there might be better ways to optimize for minimizing bad hires.
There is some minimum level of intelligence and conscientiousness it takes to learn to pass these things. People who have it are at least better positioned than a random selection of the population to learn whatever else is required.
Are you talking about logic problems or Fermi estimation? They are different things, but I'm not sure the people who complain about either distinguish.
The problem is that they are composed as riddles, with the whole thing made so that unless you trained yourself on solving riddles, you might not figure out that it's a fermi problem.
Meanwhile asking questions that are grounded in the actual work you're going to have the candidate do, often gets you people making the estimation even if they haven't heard of Fermi Estimation, ever.
That's what makes them riddles, to me, and mostly useless BS in actual interview.
People often confuse knowing things with being smart. It seems useful to me to ask questions that sound on the face of it like things nobody knows, but can actually be figured out based on knowledge everyone has, because it reduces the elements of chance and bias from testing arbitrary knowledge.
The thing you miss is that your assumptions of "things everybody knows" are not necessarily correct.
Many common examples of interview riddles that are defended as "it's just Fermi Estimation!" end up "memorise, interview, forget" method for many people, because there's close to total disconnect between assumed background knowledge and actual background knowledge (a question I encountered recently asked for estimate of revenue of an MLB stadium. If not for being spelled immediately after, my questioning would start with "wtf is MLB?").
Then there is the other part, namely that unless you don't know (memorise) certain common tropes of a Fermi quiz, you might understand the question as asking correct answer, not showing that you can use random number for most of the input data.
That said, I have been asked things that are fermi estimation problems on interviews that didn't suck and didn't feel like pointless riddles of Mensa wanna-bees. They tended to be based on the work problems, thus allowing to have a real and concrete expectation that the interviewee shares the background knowledge (in fact, part of the reason for the question might be checking if they do share that knowledge!). That kind rarely gets the flak of "how many piano tuners in city of Chicago".
The fact that not everyone knows the same things is the whole point! And if you don't have any knowledge that is related to the interviewer's, then how are they going to evaluate you using any method?
But sure, there are specific, inflexible requirements. You have to know false precision is BS, and I have no sympathy for people who have a problem with that. You have to in general, know what you know and what you don't.
Note that I mentioned asking interviewee for estimates related to the job - that is an understandable assumption, as the question touches on knowledge and experience that is a priori known to be relevant.
OTOH, especially if you're interviewing internationally, using "common knowledge" instead of job/technology area related one? Pretty much a fail, helped along with books dedicated to memorising bullshit questions.
Another issue is that the typical "fermi problem" is stated in absolute, precision way. Ask "how would you estimate X" and you'd probably get good answers even from people who don't memorize interview gotchas.
I have no idea how it may in practice be done badly, because I've never encountered it personally.
But I suspect the reason people widely hate the concept is because schooling pounds into you that there is only one way to get the right answer, and it must be exact.
And so when people complain about being tested on trivia, what they really mean is "I want to be tested on trivia that I know". I would actually like to be evaluated based on something other than knowing trivia, but of course I would not like to take a stupidly constructed test.
I found this a thoughtful and sure therapeutic writing. Also moving to help and to encourage!
At the same time, a great deal in this is the level of expectations about the "greats", finding the right job place at once. I believe adjusting these criteria might open up a lot more chances to get to doing the craft, be on the team, well, interview the others too.
FAANG won't stop, as they put people through hell on purpose. They want them to dread interviewing and switching jobs, so they can have them for themselves for longer and pay them less.
Please don't take threads in this nasty direction. It leads to predictable and tedious discussion. We all know the situation is broken, but the quality needed to discuss it interestingly is curiosity, not bile.
If you wouldn't mind reviewing https://news.ycombinator.com/newsguidelines.html and posting more in the intended spirit of the site, we'd be grateful. Note this one: "Assume good faith." That's not because people do always act in good faith (of course that's not so), it's because the assumption of bad faith leads to crappy HN threads and the assumption of good faith leads to better ones.
When I interviewed at Google for a front end position they didn't ask me a single CSS question. It was all algorithms and easy JavaScript questions. It was just really weird, like at least ask me how to center something. They bothered to ask me how I'd deal with diversity issues if I was in HR, though. I probably didn't get the job because of my answers there...
You should probably be glad they didn't ask you to center something. From my experiences interviewing at Google, the engineers there usually have one and only one answer they are looking for. Used flex box? Too bad, we were looking for margin 0 auto.
Haha yes, at that point, nailing the interview will just come down to how well you are able to gauge what the person at the other side of the table wants to hear. "Hmm, is this a tabs or a spaces guy?"
I'm not a developer, I can do some light code and make changes to existing code, but I am just not a developer. It isn't my particular skillset.
However, I am in consulting, and was on the bench. My manager forced me to do an interview for coding. The questions were absurd. Literally reading vocabulary terms and looking for exact definitions to things.
I continually asked what their problem was, what they were trying to solve, what steps they faced, etc. They just kept asking questions like above. And every time I'd get it "wrong" they'd say "we were looking for... <googled definition here>.
Honestly what is the point? I feel really bad for kids today. I get all my jobs through word of mouth and networking now. Why? Because it's much easier and those ways almost always have better outcomes.
I was interviewing for a position and when they got to asking me in the initial phone screen various diversity questions I politely told them I didn’t think the company would be for me. I’m all about diversity but if you’re trying to project your “wokeness” in the first conversation I’ll pass thanks.
> They bothered to ask me how I'd deal with diversity issues if I was in HR, though. I probably didn't get the job because of my answers there...
Strange postscript that suggests you hold some problematic opinions that indicate you can't play nicely with others?
Did you fail to get the job because you didn't have the tech chops or is it because you said something wildly inappropriate on the behavioural questions?
I'm not trying to start a fight on HN. I just said that you should hire the best people you can. I screwed up a sorting impl. that I never bothered to practice.
Sour grapes, more like. If simply asking how they'd work with people from diverse backgrounds was triggering enough for this person, the process worked perfectly in rejecting them.
I could be very wrong and am no HR expert, but I don’t think that question was actually about what would happen if you were an HR director. They wanted your thoughts on those situations in regards to the position you were apply for.
How much of that 2/3 is college educated in the software industry, and is technically competent enough to pass the bar at Google?
But that's being overly provocative.
Ultimately this started with you saying that a question about diversity could be heard by some as a dog whistle that only leftists are welcome.
I simply don't agree with that premise. I do think there is a percentage of people who think diversity is a left-only issue, but I don't think that's 2/3rd of Americans. Then again, Donald Trump hovers around 50% approval rating regardless of what he does, so maybe I have too high an opinion of Americans.
Ironic, because I work at Google and just found a bug caused by using percent-based border-radius CSS rules on a non-square element - something anyone with even intermediate CSS experience wouldn't write.
> They bothered to ask me how I'd deal with diversity issues if I was in HR, though. I probably didn't get the job because of my answers there...
Aye, diversity has fuck-all to do with hiring. Competency, skills, and the ability to work well with others _does_.
I mean, if you’re left with two equally appropriate candidates whose only material difference between them is one of diversity, fine. Make the SJW pick. But otherwise? The best candidate for the position’s technical and soft-skills needs is the one you should hire, regardless of skin colour or wedding tackle. To suddenly bring in wholly irrelevant filters into the hiring process is to put your company at a competitive disadvantage and make excellent candidates who happen to be “ideologically undesirable” far less likely to apply.
And in the end, putting ideology and doctrine ahead of technical and soft-skill requirements will lead to a company staffed with monkeys (to spindle a pay metaphor).
I think that "apparently very few people actually know how to program a computer" part is more about how many people have "fake it till you make it" attitude or how large ego they have. Or how much they dont bother how they look like during interview and keep trying until they get lucky scoring position. And that actually is how many get to start programming. As in, one of common advice is to be self-learner and absent reasonable guidelines on when you know enough, you get a lot of these - and few people who learn enough to get junior position and are lucky enough to find company that happen to have junior positions.
We tend to praise people who take the risk, fake it till they make it are go getters etc. And possibly these are trying for that.
And maybe it would be pretty cool to see a sociological study about who these people are. What demographic they belong to, what background they have, what kind of personalities and value they have.
It is not only about people who try to get lucky for junior positions. I have seen people who think of themselves as "super senior developers" who were more "business bullshit specialists" who knew names of things but when faced with technical challenges were lost right away. Those people could maybe configure WiFi router with web interface but if you get them to work on industrial grade router with stripped down Linux it is not something they can jump over.
I think these are in the "fake it till you make it" or "large ego" groups. And it is even very likely they have been employed at senior positions - senior by definition of managers that employed and kept them. And often even senior by needs of those companies.
One issue is that average management is not good and management of software projects is not solved problem. That badly affects hiring and promoting in many teams.
But another issue is that tech is wide range of jobs that require completely different aptitudes and skillsets. We are not even starting to classify it all enough to be able to reasonably communicate what position is.
It doesn't seem to be all fakers. The situation as described by advocates of FizzBuzz and the like, is that large minority proportions of people who have already held down jobs in the software development field, actually can barely do things that we think of as basic programming, like implement a very straightforward function. The implication seems to be that there's just too many to all be actual liars; that they're doing some kind of cargo-cult, cut-and-paste, stack-overflow based work to keep themselves in a job, changing things by tweaking them but not actually capable of anything else.
It seems implausible. It's counter-intuitive. But the idea seems pretty persistent.
It's an interesting question for me personally. I'm a mechanical engineer who likes to program a little and I've sometimes wondered whether I could work as a programmer. I haven't got the right qualifications or experience with enough popular technologies, so moving fields would be tough. But I know I can implement basic things from scratch. It doesn't seem like much (and clearly it wouldn't be enough for the prestigious places with really tough computer science interviews) but it would be interesting to know if that actually was enough to clear a certain low bar of competence.
As a programmer who is for-sure well past "fizzbuzz" quality and has been for a while now, I can just about guarantee I've left interviewers with the impression they dodged a can't-actually-program bullet when they rejected me, a couple times.
I tend to basically forget how to use a computer when people are watching. To prep for interviewing I also have to try to memorize a bunch of stuff about some relevant language because otherwise, without surrounding stuff to crib from, I'll straight-up forget basic shit about it, and that doesn't always stick. I'm talking like "what does method invocation look like in this language?" Under pressure it can and does happen for languages I've been working in 5 days a week for the last year. And I guaranfuckingtee if I write more than a few lines I'll end up using the wrong name for some standard library function I don't use daily—again, I drill these around interview time just in case, but it doesn't always stick. I'll also get really timid about using editor features, if I'm using a real computer and not whiteboarding, because I start second guessing every keystroke.
Further, most interviews I encounter don't do this and the ones that do tend to be all goddamn cagey about what to expect so I never know in advance, so I don't have a home whiteboard to spend hours and hours practicing on and if I did I wouldn't know which interviews need such prep and which don't so I'd probably end up not bothering, since it's just a few that do it.
I don't even have significant social anxiety or anything, and I have been told I come off as very confident and competent—unless the whiteboarding algo shit comes out, at which point there's a 50/50 chance I'll look like a total dunce (Nb. I can and do get The Actual Work done, no problem, once hired—that part's easy)
Since I only interview every few years and, again, this problem hasn't stopped me from landing jobs at about the same pay rate as the other ones that rake me over the coals (though not FAANG or near it) I've not spent the significant time it'd take to fix this. We'd be talking lots of hours to prep for FAANG tier, and probably a year. Don't care enough to do that. I did spend the time & effort to improve how I come off in more conversational parts, gradually, over the years, but that was relatively easy and doesn't rust as fast (since, you know, I don't get to practice interview-type coding on the job, but I do frequently have opportunities to practice relating to people).
[EDIT] I don't mean to be whiny or call the grapes sour—I simply haven't put the work in to (as I posted elsewhere in the thread) turn my efforts at leetcode from practice to performance. And again, for the roles I'm applying for I'm not losing any money by occasionally being rejected because they decided to give me a puzzle expecting a recursive & memoized (DP) solution rather than ask me whether I know WTF recursion and DP are and when they're usually useful, so the worst they do is waste a day of my time (honestly, why the hell are places so secretive about what's going to happen on interview day? Fucking Google's not, Jim Bob's Software Widget factory can afford to tell applicants the sorts of things they'll be talking about and the kinds of exercises that may come up)
This is a really common experience. Work samples were supposed to be the answer to this, though I've had really awful experiences with work-sample companies.
Luckily I've also been doing this long enough that for every one that asks for a project or wants me to live-code, there are two that chat with me for 2-4 hours and come away eager as hell to get an offer to me before I accept one somewhere else, so it's not that big a deal. I mostly just wish places were more transparent about this stuff so if they're gonna whiteboard me I could either put in some targeted prep work so I (maybe) don't look like an idiot, or else say "thanks but no thanks" and save us both some time if I can't or don't want to cram that week.
That hit me where it hurts most. I sometimes forget how to declare a class or how to initialize it, because when I working just click to another file and look it up.
I had an interview a few days ago where I came out as a complete moran. I did a take-home test which I was proud of. I expected we will discuss that. It was pair programming. I did some silly mistakes at the beginning and my brain shut off after ~15 minutes. In the end, they said: "We will notify you..."
> I also have to try to memorize a bunch of stuff about some relevant language because otherwise, without surrounding stuff to crib from, I'll straight-up forget basic shit about it, and that doesn't always stick. I'm talking like "what does method invocation look like in this language?" Under pressure it can and does happen for languages I've been working in 5 days a week for the last year. And I guaranfuckingtee if I write more than a few lines I'll end up using the wrong name for some standard library function I don't use daily—again, I drill these around interview time just in case, but it doesn't always stick
Anyone who cares about using the wrong stdlib function is bad at whiteboard interviewing. That's exactly the kind of thing that's easy to mess up in an interview, as well as completely irrelevant to job performance.
I've been writing in C++ for the last couple years, and I'd probably screw up writing a new class from memory 50% of the time.
Yea, I sympathize with the idea that some people freeze up really badly during whiteboard interviews, which is why I'm usually testing competency far below what I need out of the job. On top of that, the signal is richer than binary; it's possible to fail to solve the question posed and still give an example of how you think.
Interviewing is attempting the ridiculous feat of predicting years of job performance on the basis of a few short conversations, so there are going to be false negatives in every interviewing technique. The things I describe above lower FNs to the point that whiteboarding is a very useful tool for assessing candidates.
Everything is broken. To crib from George Carlin, think about how incredibly stupid the average person is, and then realize that people run _everything_. Almost every industry/system/institution/company of a non-trivial size is staffed primarily by deeply stupid people. Practically the whole challenge of an economy is figuring out how to organize these people towards productive ends.
"Dumb people work in software eng" is true, but it isn't a novel or useful insight; you may as well complain that cloudy days exist or that closed systems tend towards entropy. It's the reality that every industry and business operates within, and the claim that it's unique to software is wrong-headed.
> aren’t getting adequately trained compared to every other type of engineer.
Half my comment was about the fact that _every_ field has these idiots. And by what bar are they "not adequately trained"? If someone wants to hire a stack overflow copy-paster, let em. I'm sure their productivity is strictly nonzero.
>> it would be interesting to know if that actually was enough
If the 'people fail fizzbuzz' trope is actually true then you would probably clear that first bar easily and probably the next few as well.
Personally, I think most if not all software devs have some form of tunnel vision (aka limited experience). While they feel the bar they are setting is low, the manner in which they describe the bar may be completely unfathomable to a person not familiar with the same terminology.
Since all technology is just new terminology for old ideas then it's easy to fake competence if you know the new terminology or look like an idiot if you aren't a slave to fashion.
The thing is we want to be surrounded by people who see development as a calling, and not just a safe career.
That cycle has been going on for years. Now, there are so many companies that are essentially writing variants on the same software over and over again that demand is dictating the shape of the field. The shape of the industry. “We” are all industrial designers in a world that just isn’t that enthused.
If we wanted this other world that we keep interviewing for, then it’s not a matter of not enough programmers, but way too many. They’re cheap enough that people everywhere are reinventing wheels instead of assembling off the shelf components designed for that purpose.
I think that the idea that people who see development as safe career are the most incapable is just wrong. Someone stable that does what needs to be done even when it is not fun sounds good to me. Large parts of projects are not fun nor challenging - they are work that needs to be done with good quality.
People who see their jobs as safe careers are routinely good at those jobs.
And conversely, I have met people who talked about passion and seemed passionate and had all the right opinions. And they were not good simply because they would loose interest when it stopped to be fun or somehow never finished anything that was medium sized, were disorganized or demotivated easily.
I don't think we are necessarily in disagreement. What we want and what we need are often at odds, perhaps nowhere more clearly than in the way we select new team members.
I speculated on why our interviews are so insane, and just kept pulling that thread. What I omitted from GP was this thought: I don't know if we are right to want this, or if the world could have ever let us have it anyway.
There are other measures of 'contributor' that we weed out with our interview processes. Some of those are qualities that working programmers are more likely to have.
For instance, work-a-day developers tend to be less susceptible to hubris. Sometimes when you have a problem to solve, you want the no-bullshit person to do it. It's way easier for me to talk someone out of Imposter Syndrome or at least convince their boss to ignore it than it is for me to dial in the degree of Kruger-Dunning my faster-talking coworkers are covering up.
I’m self taught, and have kicked ass at every position I’ve ever had, and rise quickly. Alg interviews suck the very life out of me - nothing is ever relevant to to actually building working software in 2020.
I often look like I have no idea what I'm doing with computers when someone is watching. I also find it almost impossible to practice an instrument with someone watching. Performing is another matter. To do well at interview coding I'd having to drill relevant questions to the point that I was performing rather than practicing in the interview, and I'd probably still be freaked out and unable to do it unless I knew the questions I'd face in advance.
Luckily actually working in software development is a hell of a lot more like practicing than performing, and there's usually no-one watching you, so I'm fine at that part.
I think the whole phenomenon is s Boogeyman. I've only been in the industry for a decade, so maybe I haven't been all the way around the block, but I've never met the mythical "senior Dev who can't code fizzbuzz." I think it's just a scary story we tell hiring managers do they stay on their guard.
Honestly having an interview process that is highly standardized and teachable + learnable is a good thing, so I'm not sure why people complain. You know exactly what sort of questions you will be asked from company to company, and can spend nights and weekends over a couple weeks studying for it.
Most jobs are not like that, and then you get extreme variance in expectation with little communication on how to prepare, which is a waste of time for both the interviewer and interviewee if the interviewee has no clue what will be asked or expected ahead of time.
So what? It's a logic test. And you're still proving that you have enough experience to code well in general language e.g. java, python, javascript, ruby, etc.
It would be way more time intensive for the interviewee to be asked to code up some fullstack project for every interview.
Having to memorize some basic algorithm questions that are maybe 20 lines of code each is way better.
> It would be way more time intensive for the interviewee to be asked to code up some fullstack project for every interview.
Assuming the role is a fullstack developer, memorizing basic algorithms doesn’t show one is fit for the purpose.
Providing a simple skeleton of a fullstack project—in the chosen tech stack of either the candidate or the company—and then verifying a candidate can add a simple feature, or something similarly fullstack, would accomplish that far faster than algorithm answers.
Edit: I realize this risks sounding like stupid take-home interview homework. I personally oppose that crap. However, I recognize why some companies take that route, as I don’t think I’d feel confident that a candidate could work in my company’s stack by asking silly algorithm questions. I’d probably feel more confident watching the candidate do a remote screen share, git clone a starter app, and do some simple to moderately complex fullstack tasks. Of course, the tasks should fit the role, I think—e.g., I wouldn’t ask a candidate who’s being hired to tune DB queries a bunch of fullstack questions. And if I was hiring a backend dev to build out APIs, I wouldn’t bother with a bunch of frontend tasks and questions. The hiring processes I’ve seen and managed always had better results when more time was invested in prepping specific, job-focused interview processes, rather than offloading that time onto candidates because recruiting teams can’t actually do more than ask shallow questions or follow checklists.
>Honestly having an interview process that is highly standardized and teachable + learnable is a good thing
Yes I agree but the current way we have is not even close to that.
He touch that issue in the article. So you spend a lot of time and effort to learn about binary tree, great, you pass with flying colors with company A, then you interview with company B, they ask you trie tree ...fuck.
The closest to a standard (and only for FAANG) is Cracking the Coding Interview, but even that is a large pool of questions to keep in one's head far above what you're likely to do on the job.
Except programming and engineering is about overcoming the unexpected. Adapt and improvise. Not everything is textbook and, at least this is my opinion, the better engineer is the one that can solve unexpected problems. You can really only judge that utilizing past experience. Canned, standardized questions similar to Mensa intelligence questions or any type of "brain-twister" puzzle are pretty crappy. Once you know the tricks they're applying to the question, they're easy to solve. But that's not the same as actually "figuring out" a real world problem.
Ok, but why is that a bad thing for engineers that are interviewing?
If the interview process is largely memorizing 200 or so commonly asked algorithm questions and that is the gateway to a $200k+ job then it's a good thing for applicants, not "dystopian" at all.
Again, it would be much, much more painful and time consuming for the interviewee if they were asked to code up some fullstack project for every interview. That is far more time consuming, and in my opinion more "dystopian" to expect those interviewing to do dozens of hours of work specific to one interview for free.
I think you missed the entire point of these articles. The algorithms you're forced to memorize are, 99% of the time, useless. Instead of hiring someone by their track record, managers are choosing to hire those capable of memorizing trivia.
Part 2, paying someone on trivia instead of capabilities is not sustainable. The company ends up suffering in the long term. Other engineers that are actually capable have to pick up the slack. Longer hours, less family time, higher burn out risk. Then comes the firing period because the company is losing revenue due to rampant incompetence. Putting even more pressure on the capable engineers. There's plenty of articles where trendy startups have some brutal layoffs, even though 12-18 months earlier had massive funding rounds and went into "extreme" hiring phases. The chickens come home to roost, no matter the sparkling bling of big paychecks.
I think you missed the point of this interview style. This style of interview is scalable, predictable, efficient and effective. It is useful in that way.
Interesting factoid for perspective - if you take the US and exclude every metro area at least as big as the Austin* MSA...you still have a majority of Americans.
Damn, you're right. I did the spreadsheet math quickly based on 2018 estimates on the top 314 cities by population in the USA. Apparently 100k minimum population is the marker of "city" according to this. Anyways, ~94m city dwellers compared to ~327m (2018) for the USA. "Big" cities are a minority.
At 284, Boulder, CO is considered a "city". Don't get me wrong, it's a nice town, but you can't compare it to Austin (11), Portland, OR (25) or NYC (1). Top 100 cities comes to ~64.5m (Spokane, WA coming in at 100 with 219k).
I just... wow... I don't know why, but I truly thought "city slicker" America made up like 50%+ of the population. At best it's 29%. Not insignificant. But... not a wide majority.
I think it's best to compare metro areas and not cities per se. I live in a metro area much smaller than Austin, but it's still maybe a million people. If a city proper of say 100,000 people was out in the middle of nowhere, that would be very different.
I don't think so, speaking out of my personal experience.
Colorado Springs Metro, for example, can gobble up a town called Palmer Lake (59k population). The Springs alone is 464k. Even though the Springs is kind of country (meh, not really, lots of defense and tech moved in the past decade), Palmer Lake IS country. Even though they border each other, they don't really vote the same or have similar concerns. Let's put it this way, your stereotypical hipster can live a good life in the Springs. Not so in Palmer Lake... at all. Then take Manitou Springs on the west side of CS. It's a tourist town/trap. Not at odds, but not similar either. CS is very locked in with the needs of Fort Carson, the Air Academy and 2 other air bases, along with defense and a few major tech firms dropped big offices in CS even though Denver is ~65 miles away.
Then take Wilsonville, OR. It's oddly considered a metro area for Portland. It's a good 30min away and independent AF from Portland. Plus the people there are different. More old money or straight up white trash.
Metro is a really loose/gray term. To say surrounding towns are the exact same as a city is a bad idea. Let's take the purchasing decision of a home in those areas. The "value" of location compared to price and are at odds. One person is willing to pay a premium for location, the other is not. Those are two different mindsets as to what that person is willing to deal with in life.
I think it's important to include the general area because people commonly live and commute anywhere within a few miles. Most Americans live in what are technically suburbs.
And the overall lifestyle of a place depends on the population within a reasonable radius of travel, not what is within an arbitrary boundary.
I live in an area of NY currently that has towns similar in size to where I went to school in AZ, but the surrounding area, say a ten mile radius, has maybe three times the population. It's a very noticeable difference, both in general lifestyle and in employment opportunities, education and so on.
Yes. Maybe you can understand some of the frustration coming out of "middle America"? The new American economy is booming in large metro areas, while the rest of the country stagnates. I'm not a Trump voter, but I certainly understand the bitterness at being economically and culturally dominated by a segment of the country that is at the very most, 50% of the population.
The remainder of the country is still relatively blue and urban/suburban. Just because they live outside of the large metro areas doesn't mean they are rural. For instance, the Austin area was around 30th largest on a list I was looking at whereas I live in a MSA that is more like 60th+. But there are still lots of people here, universities, etc. - it's not the middle of Wyoming or Alaska. It's just that the actual cities and towns aren't that large. I don't live in New Jersey, but have you ever been there? You have like flat suburbs that go on and on - individually, I imagine that you can have a large area with a large population, but the towns aren't so big.
According to the Bureau of Labor and Statistics, the median salary for software develors is $103,000. Top 10% earned $166,960 or higher. Take out the cities I mentioned and those numbers are even lower.
If you know plenty of people outside of the major tech big cities (and I should have included Austin and Seattle in that, for sure) making over $200,000 year, they you have a statistically unusual sample of friends.
All the data back up what I'm saying. Go look at the numbers. Look at salaries on monster.com or your favorite job site. Perhaps you and your friends don't realize how unusual it is (granted, you also have higher cost-of-living in those cities, sometimes by enough to eat up the additional salary).
Base salary is only one portion (usually less than half) of total compensation. Also, these engineers that I am referring to do not have the entry-level title -- they are often "senior software engineer" or "technical lead".
Maybe I should revise my claim to "top software engineers make over $200,000 in Austin, Pittsburgh, Seattle, etc.".
The article to which this is a follow-up answered your questions fairly comprehensively. Among other concerns: no, it's actually not that easy to predict what questions you'll get.
Yes, which is not impossible to tackle. There is structured and systematic way to attack it. Tons of study guide and materials on the net to help you. Not to mention tons of people successfully get hired.
As mentioned elsewhere, this is discriminatory against people with families and and commitments that prevent them from spending hundreds of hours in prep. Not to mention it affirms Goodhart’s Law, where a single metric- the ability to answer DS&A questions- overrules qualified applicants from becoming hired.
Not to mention such interview styles can be gamed. Suppose a Flatiron bootcamp for DS&A questions becomes big in response. What then? An arms race for more and more difficult weeder questions?
Such questions aren’t necessarily bad, but focusing on them to the exclusion of all other skills is becoming an anti-pattern.
> this is discriminatory against people with families and and commitments that prevent them from spending hundreds of hours in prep
Maybe but its not the purpose to select people with families or commitment. You choose to have families or commitment, you have to deal with the trade off.
>An arms race for more and more difficult weeder questions?
Its always be an arm race. Why to expect otherwise ?
Because hiring doesn’t have to be this adversarial process. And work doesn’t have to be this dehumanizing race to the bottom that excludes qualified people who are being excluded by bad metrics.
Not according to me, according to many in this thread, in dozens of articles posted on this site, and many more across the industry. There are all sorts of management principles and truisms people take for granted, and this is one of them that’s being called into question.
>Not according to me, according to many in this thread, in dozens of articles posted on this site, and many more across the industry.
Yes, that what said, but I doubt according to the people who do the hiring.
It doesn't matter if you think you are right candidate according to you or other people. Ultimately its the people who going to hire you who is going to judge you according to his/her subjective criteria.
Right, but this entire discussion is predicated upon questioning if perhaps the hirers are wrong. Are their interviewing practices serving their organization? A lot of the employers themselves have expressed difficulty at hiring and dissatisfaction with the process. Are they screening for the optimal qualities? There's no shortage of engineering projects that have gone bad. Could that be because the candidates being hired with current practices are suboptimal?
Hiring is still an on-going debate. Google SVP of People Ops Laszlo Bock has admitted previously that internal studies revealed that the interviewing practices at the time didn't really correlate to employee success:
We're having a debate here. You can claim the current practices are best, that's fine. But you can't just state it and take it for granted without providing evidence.
That article is missleading, the actual statement is this:
> Four meticulously orchestrated Google interviews could identify successful hires with 86 percent confidence, and nobody at the company—no matter how long they had been at the company or how many candidates they had interviewed—could do any better than the aggregated wisdom of four interviewers.
So it isn't that interviews have zero correlation, it is that they fond no case of a single interviewer being better than the aggregate of four algorithm interviews. And as you see, four algorithm interviews combined have a very high success rate.
At a certain scale, intent stops mattering. You need to take responsibility for the incentives in the systems you create. To do otherwise is just negligence.
Families are kind of important. They're usually a large part of the reason people have a job to begin with. To callously disregard the impact of a system on families is exceptionally appalling. You should not do that.
I think a decent amount would trade "no technical interviews" for credential hiring (degree required for job). The degree would be a well-known, long-standing target vs. the vague moving target of technical interview competence.
This isn't unlike other professions, but you would lose self-taught developers who don't have the time/money to afford the credential. That is currently something special about development compared to many other professions.
This assuming you prevent people who can't do something like fizzbuzz from graduating with a CS degree.
1. False positives: you get folks who do really well at DS&A yet who are really bad developers. I mean really bad. I wouldn't have believed it if I had not seen their interviews and then subsequent performance. I'd wildly guess that it's about 20-30%.
2. False negatives: you get folks who are really good developers, and yet for whatever reason, perform badly on DS&A algorithms despite practicing. I think this number is higher than false positives, probably around 50% or more.
If you're a FAANG company, you can afford to play these odds. If you're not FAANG, then you're killing yourself by requiring DS&A interviews, almost inevitably.
Both are contributing to destroying the profession for huge numbers of people, IMHO. I mean, that's good for me, because I'm almost certainly sticking around and generally do OK on DS&A interviews with adequate practice (which is a waste of time, since anything beyond a broad knowledge of the performance characteristics of various DS&As is totally unneeded for 99% of us). But it's not right, and I really don't like it.
Is it really true though? FAANG seem to be doing just fine and innovating new products year after year. Obviously the developers are performing amazingly.
Where did you get all of your numbers? My experience dictate otherwise. Plenty of people who don’t know DS&A and are bad coders, and call themselves senior.
> I am completely depressed because I can’t get a job”, “I will never succeed in this industry
I thought there was a shortage of software engineers right now? Although I just got an email from Glassdoor with estimated salary (in the Bay Area) being 5-10k lower than the last email, so who knows.
A lot of misinformation is pumped out at the cost of those being misinformed for the benefit of those pumping out misinformation.
All of this is well orchestrated by large tech companies in an effort to drive down labor costs. The problem is, there's an assumption that the current labor market is just asking too much.
I think looking at the current labor market landscape, practices in place industry wide (e.g., agile, interview processes, etc.) were starting to see labor market feedback that this simply isn't the case. Development is hard, it's time consuming, expensive, and requires a lot of active practice--no matter how much you want to drive labor costs down.
Ultimately I hope the entire strategy backfires and we turn away talent industry wide to other sectors and then there truly are shortages resulting in businesses pushing these practices unable of maintaining their businesses and forcing them to scale back--wishful thinking though.
In my opinion it isn’t wishful thinking at all. Software is getting more complex each year, yet the time to build complex software decreases due to existence of better libraries/tools/knowledge-base.
So at the end of the day you can build more complex software with lesser amount of developers but there is a catch, and that is developers now need to be much more talented.
Right now a good developer can easily develop what a team of 10 average developers could build 10 years ago. This is especially true in GameDev field. Right now there is a silent revolution going on with procedural art-work so that a good programmer/artist can create huge amount of content in very short-time but procedural art generation is really complicated.
So if you are a talented developer you can compete with mid-sized companies right now!
I believe it will get to a point in future that even a small team of talented developers will be able to out-compete companies with 100s of average developer.
Large companies will have no option but to scale back and change their HR practices but large companies, like large ships, are harder to turn, hence some of them will definitely go bankrupt in near future.
> Software is getting more complex each year, yet the time to build complex software decreases due to existence of better libraries/tools/knowledge-base.
Which, in turn, drives the number of bugs and flaws way, way up, which drastically increases the number of developer hours and money spent trying to fix products that are constantly broken. This situation just gets worse over time because those "better" libraries/tools/knowledge-base make adding new bugs much, much faster than fixing them. Evernote is the best example of this I have ever seen.
> So if you are a talented developer you can compete with mid-sized companies right now!
If you're a talented developer, you can compete with what mid-sized companies were doing 10 years ago and large companies were doing 20 years ago. That's more than good enough to make a niche game that pays well, but it's still an order of magnitude or more off from what mid-sized companies make today, both in quality and revenue.
> Large companies will have no option but to scale back and change their HR practices but large companies, like large ships, are harder to turn, hence some of them will definitely go bankrupt in near future.
Unless they're being propped up. Twitter didn't turn a profit until 2018. They spent 12 years burning cash. Most companies would have gone under after their investors pulled their money when they hit year 5 without making a dime.
“If you run into an asshole in the morning, you ran into an asshole. If you run into assholes all day, you’re the asshole.”
This pretty much sums up my impression of these hiring managers that crank the bar sky-high: they are assholes through-and-through, and are full of shit to boot.
If you crank the bar sky-high, all you will get are two kinds of people: those that interview/test well, but fail at the job, or those who can do both but will put a crater a mile wide into your payroll due to their high demand garnering an equally high paycheque.
Anyone who isn’t quite at nosebleed levels of competency can grow into their roles and skill sets. Yes, they won’t be able to hit the ground running, and yes, they will have a higher than comfortable drag-to-thrust ratio, BUT THAT CLEARS UP IN TIME, WITH SUFFICIENT GUIDANCE AND MENTORSHIP.
But while they are getting guidance and mentorship, they are not being a productive member of the team, taking time away from experienced developers and as soon as they level up they will change companies and the next company didn’t have to invest training time.
I know everyone has to start somewhere but from the company’s perspective, hiring a junior developer doesn’t make sense.
” I know everyone has to start somewhere but from the company’s perspective, hiring a junior developer doesn’t make sense.”
When did “not able to solve leetcode-nuclear puzzles while singing and tapdancing backwards”, become “junior developer”?
The OP is talking about “sky-high” levels of (interview) competency, and you immediately jumped to the conclusion that anything less must be juniors who need training to wipe their rears.
Seeing that in over 20 years and very successful track record of getting jobs quickly that I’ve never done leetCode or had an algorithm interview - how did you get that out of anything that I said?
I’ve met “junior developers” who couldn’t translate simple business requirements into code.
The stereotypical “developer” who couldn’t do FizzBuzz.
The technical interviews I've had are decidedly not fizzbuzz level problems. They're "implement new features in an unfamiliar codebase in 10 minutes while we watch closely and tell you that every line of code you start to write is the wrong approach."-problems.
”Seeing that in over 20 years and very successful track record of getting jobs quickly that I’ve never done leetCode or had an algorithm interview - how did you get that out of anything that I said?”
Well, first...you were replying directly to a post that was talking about whitebord/algorithm questions and how they’re out of control. On an article about same. So my answer is: ”because I bothered to read the post to which you were replying.”
Regardless, if you haven’t done an algorithm interview in “over 20 years”, you either haven’t changed jobs, or you’ve had a unicorn career. Either way, you’re clearly not representative of the vast majority of devs. True or exaggerated, your experience is so exceptional that it isn’t worth discussing.
I’ve changed jobs frequently and haven’t had a unicorn career. You’d be amazed that the interview process for your bog standard enterprise developer/architect roles or your standard software as a service CRUD developers don’t have algorithm style interviews. It’s mostly soft skill and explaining your previous projects.
Not everyone’s career has been the r/cscareerquestions “learn leetCode and work for a FAANG”.
I’ll be even for specific. I’ve worked in Atlanta for over 20 years. Changed jobs 7 times (stayed at one job 6 years longer than I should have), dozens of interviews, maybe two outright rejections, over the last 10 years, 5 jobs, I had two coding interviews. One was a simple hands on coding interview where I had to make unit tests pass (something like a bowling score simulator) and the other a merge sort on the board (got offers for both).
I’ve asked around about my coworkers experience over the years because I had never heard of algorithms style interviews until three years ago when I started reading HN and r/cscareerquestions.
I thought all interviews were soft skill, language trivia, diagramming models and architecture, and explaining past projects.
It is completely reasonable to hire more people when you need more people on current project. Fred Brooks definitely did not said you can never add people to currently running projects or change them up.
You dont have to stop the projects when people on them change jobs either.
I'm really not sure where people got this idea that junior developers that are being mentored cannot contribute to the team.
Are they going to contribute as much as a senior dev? No, but they can still contribute in significant ways. They can still fix bugs and find issues in your system, bring a fresh perspective on design and take ownership over smaller parts of the codebase.
The reason why junior developers jump ship is because companies aren't willing to even promote people. So of course developers (of all levels!) are going to leave after 2-3 years when it's the best way to actually get paid and not taken advantage of by stupid CEOs that would rather have high turnover than a happy workforce.
Career track is a great point. I’ve already seen two organizations that refuse to provide any structured job growth or career track — then they wonder why attrition is so high amongst top performers or why “knowledge keeps walking out the door.”
One even hired McKinsey to analyze the issue. If they had given away the McKinsey fees as raises it would have solved the issues easily.
Another perspective to consider as well: while you are spending the time investing into and training people who needs the training and investment, your competitors are throwing money luring away the ones you have already trained, and leaving you in the dust in terms of velocity.
Turtles all the way down. Once a game shifts into zero-sum, it's not gonna stop getting played until it collapses.
Normally, I would say to avoid entering into any zero-sum games. But the world has made a sharp turn towards zero-sum over the past 5 years, so that advice has rapidly become impractical in today's climate.
Not every business needs to be aiming for hyper-growth. Perhaps some tech startups can take a breather and reconsider whether they need to be engaged in the same zero-sum game as everyone else. Because grow at all costs doesn’t just harm untrained juniors- it also leads to corner cutting and short-term thinking that could bite the business in the back later on.
Or is it? I think this ignores the human psychology factors. Like actually following through with being loyal to employees, training as a benefit etc.
Also if you are going to lose employees because you can’t match competitive salaries than i would say you are losing them if all other things are equal.
In another words this greatly oversimplified version of events here only allows for you to come to that conclusion and dismisses how an organization could adopt different practices, values and foster organizational culture that combats these issues differently which I think training is an essential component.
I actually think this is a good argument for licensure like civil engineers etc have to have, because one thing it mandates is required training hours (among other reasons I won’t diverge into here for the sake of staying on topic)
You can debate what that should look like and I encourage that but I see little downside to forcing employers to acknowledge that all employees may need some time just to train on new things and different concepts away from the day to day work. I know this is a little bit of a tangent here but it’s something I see so often at every level of an engineers career path yet organizations so rarely set aside adequate time for it.
When you are early in your career, it’s quite easy that within two or three years your market rate can easily go up 20-30%, but your HR policies don’t allow more than a 5% raise.
Why wouldn’t a developer leave for more money and more learning opportunities?
1. Not saying they should or shouldn’t and as I noted if you can’t match salary and all other things are equal you may as well take the raise.
2. If that’s HR policy and you request for an exception and it’s denied, that may be a sign to start asking more questions.
3. You’re assuming that’s HR policy. Again, example dictates you have one option without actually thinking through how an organization could position themselves differently. Of couse salary is a component and rightly so, but at a certain point it’s just not everything
Think of it this way: lifestyle, ancillary benefits, “perks” etc can be all valid reasons to stay a place that treats you well and displays real loyalty (which is often displayed in more generous long term planning like big 401K contributions and fully paid health insurance for the family, open source software time etc). Can’t say I would just arbitrarily leave that for an extra 20% because that 20% can be easily eaten in other ways. Not to mention transparently knowing that your job won’t evaporate if the economy gets soft is a win. All this salary gloating is fine until that happens. 1999-2001 was not a fun time to be in the upper band taking pay cuts
Let’s not grossly oversimplify this. I’m never going to say don’t maximize your value, you should, I’m saying there is more than one (salary) way of doing that.
FAANG or not.
Oh and one dirty secret FAANGS don’t tell you? They happily underpay on salary once you’re in, or freeze you into a specific department etc. it’s not all roses.
You’re probably speaking as someone who is not early in their career. But we are talking about junior developers.
I’m nowhere near west coast salaries but just big city America salary for context. At my age now in my mid 40s, married, making about the average salary of a top IC in my market, with the big house in the burbs (again not bragging, any developer with 5-10 years of experience could easily afford it), with the white picket fence and 2.1 kids, yeah 20K more wouldn’t make a difference in my lifestyle.
But, when I was just starting out in 1996 making $33K a year, $20K meant a lot.
But salary compression and inversion are real phenomena where HR policies don’t allow for raises to keep up with the market.
I was working during both 1999-2001 and 2008-2011. In 2000, it was very much just a dot com thing. If you worked in corporate America as a standard Enterprise Developer you weren’t really affected.
2008 was rough, but still there was no such thing as job stability. Companies were laying off left and right. I survived three rounds of layoffs - barely. But even then you could find contract gigs if you were the perfect fit.
Well, your 12 years my senior so age is something else eh? ;) I started out at 19 working at a FANG (because of privacy and such I don’t want to drop which one) not as an engineer but doing support work. Within a year I got the chance to be a junior engineer no questions asked (basically) because my manager at the time was impressed at my grasp to “get it” when it came to application usability.
That is to say I got extremely lucky. I know that. My takeaway since (I’ve been a software engineer for ~10 years now) is that the way I was treated as a junior is what I described throughout this post, and my mentors were the ones that drilled home what the hidden costs were taking jobs based on salary, how to properly evaluate benefits etc. I learned a boat load.
So I want to preach to developers and companies alike that things can and should be evaluated differently and to avoid pitfalls that are easy in this industry
And that’s just it. You worked at a FAANG - a company large enough that could carry the dead weight of junior developer (no insult intended we were all dead weight at some point).
I’ve worked at smaller companies by choice or at smaller divisions of large companies (occasionally). One developer salary is a major cost and can add to their revenue.
If you only have a few openings, you better make them count.
For instance, I know that some features I designed and developed from the ground up was the difference between us getting a client (B2B) and not getting a client. I also know how much revenue that client added directly to our bottom line. I was what is usually called a Single Responsible Individual. When one hire needs to be that impactful, there is no room for training juniors. All of our local software engineers can point to a feature they spearheaded that added measurably to our revenue.
Now the hard truth is, why hire junior developers locally when you can hire people with much more experience overseas for the same price? I know the stereotype of the crappy outsourced developer, but I haven’t found that to be the case.
Anecdotally, I was lucky enough never to be a junior developer[1], I got my first job out of college with a small company based on an internship the previous year. My first assignment was create a networked data entry system in C that was the basis of a new department that they were starting that allowed them to double in size. But I had been a hobbyist programmer for a decade. By the time I got my next job, I was already considered a mid level developer.
[1] yeah that did hurt me later on. I didn’t get any type of real mentoring and stayed an “expert beginner” for a decade.
Because you can mold junior developers into a certain quality. You can’t always do that successfully when you hire experienced developers sometimes. That’s why I was brought into the situation I was: it was more cost effective to get me up to speed than it had been trying to hire experienced developers for the same work, because they had too many pre conceived notions about how the product was to to be built
For what it’s worth I work at a small company now that is a startup and this is how we do things, to great success, the way I described it
To be clear, I do not work in Silicon Valley either, never lived in SV. So I get that part of it
That’s the point. Once you have “molded” the junior developer for a year a two, they can easily jump ship for greener pastures.
I’ve seen the argument about paying them market rates. But honestly, if they are young and unencumbered, their “market” is the entire US. Meaning you may not have been in the position to pay them what they could make if they were willing to move across the country.
To go into more anecdotal detail, I had been programming as a hobbyist since I was 12 in assembly for 10 years by the time I graduated from a no name college in the south. I had two job opportunities - one making an entry level developer salary writing COBOL [1] in a slightly larger city, or working as a computer operator in a major city. I chose the latter job that paid much less just to get to the city. I got lucky and I was the only one who knew how to program so they gave me the previously mentioned project straight out of college. They gave me a raise the next year to that of an entry level developer (I was hourly at first and got a lot of overtime).
But now, three years later, the project was done and with a major green field C project under my belt, my market value had gone up more than 50%. They couldn’t justify paying me that and I got another job.
Now if a similar scenario had played out in today’s market instead of 1999, even if they could have matched my local salary of $80-$100K for a mid level developer, I could have spent a year studying “algorithms and leetCode”, picked up and moved to SV and doubled or tripled my total comp. There is no way they could compete with that.
Let’s look at the current state of affairs. Almost every engineer at my company is between 35-50. They purposefully created the office in the burbs three years ago to attract older developers. They not only get experience, paying local market salary is relatively easy comparatively. The chance of any of us uprooting our families, selling our big, relatively cheap 3000 square foot houses in the burbs with the great school systems and moving to the west coast is slim.
I still think it’s an incorrect assumption that you’ll just lose engineers you train, full stop. There are a lot of reasons being willfully ignored and a lot of assumptions being made that I have not seen nor seen data to the effect of happening en made.
We train developers in popular languages (particularly our stack leverages Vue and C# and a good deal of custom SCSS) we are only ~3 hrs from the valley yet we aren’t losing engineers in droves and haven’t ever for the years we have been in business
You should pay juniors market rates for their positions, period. I don’t agree with that at all
It wasn’t a usual set of circumstances and I had a good manager who basically bet his neck in me being a good fit. I’ll never forget such an act of kindness. I hope to pass that in as much as possible in a responsible way
> I actually think this is a good argument for licensure like civil engineers etc have to have
This logic is sound, but I don't personally agree that bureaucracy is gonna solve any of our problems.
The rest of your comment, I believe if you spend time reading my OP carefully and spend some time noodling over it then you'd find that all of it had been covered already.
I don’t think it’ll solve all our problems but I don’t think bureaucracy per se is the enemy either. I’d need more of an argument as to why it overall wouldn’t be a good thing.
I don’t buy gate keeping either as the number one issue, see the lawyer glut as an example.
>while you are spending the time investing into and training people who needs the training and investment, your competitors are throwing money luring away the ones you have already trained
That is a zero-sum attitude that does not hold up when a company does other things well. If you are training your employees, you are likely to be doing the other things that help retain employees (https://www.bayshorestaffing.com/images/uploads/Blog_Image.j...). And if you are focusing on and actually delivering all ten of those benefits, employees are extremely unlikely to be jumping ship unless they are either a poor employee or have poor character (which you don’t want anyhow), or the competition is paying not only well above market rate, but well above your rates. Which means that they are now at a strategic disadvantage because an inordinate amount of funding needs to be diverted to payroll - much more so than in a company like yours.
Any company can make an end run around zero-sum thinking by fully and honestly employing those ten benefits. Employees can and will rise to the occasion, bringing a competitive advantage to your company that is well in excess to their numbers.
In my experience a great way to hire and train juniors is to have them do tasks that need to be done but you can’t over allocate or reallocate an existing engineer for it. Like refactoring existing code.
Why? The only guidance then a more senior engineer would need to give is during code review and where they may have questions. It’s a great way to get them familiar with the code base and train them up. I haven’t seen this be a productivity killer.
Also, with the shocking frequency I’ve seen, code based need more tests. Have them write tests! That’s a fast way to get up to speed.
One other point: senior engineers in one code base may have an uptick if a “junior” in another depending on existing quality, circumstances etc.
I think organizations are lying to themselves that they can only hire seniors. It’s a myth. Just like 10x developers.
I need hard data to be convinced otherwise not anecdotal evidence. All the hard data I’ve seen points in the opposite direction of any anecdotal information I’ve come across.
There are so many volumes of books devoted to these topics alone that I think most ideas around developer productivity without the firm backing of numbers are mostly hand wavy and myths we tell our selves to feel better
We would have always seniors who are there already for some time to refactor the code. No reason to have it refactored by someone who does not know how to properly code yet and does not know what problems existing structures have or solve. Otherwise you are just switching one mess to another mess.
We had juniors for easy new features, tests, anything that is small and isolated.
How would a junior no what to refactor and not make it worse? In my experience it’s harder to refactor existing code than to start with green field development.
You give them tasks with frames of reference. Not all refactored are monsters. It does require some guidance though that’s kind of the point.
These are just some things I’ve been apart of. I’ve gladly been apart of this before.
You can as I said also have them write tests or as others noted have them write smaller features or other things in isolation.
Also how green are we talking is another question entirely. Some tasks are better fit for people with maybe practical experience in another tech stack but need to get up to speed in a new language etc.
My overall point which may not have been clear is that there is always a way to get an engineer up to speed without killing velocity. It’s a management failure to say you can’t hire junior engineers.
It’s one thing to need someone that’s a domain expert, but often I see “senior engineer” === “No ramp time” and I think that’s just a lie management tells themselves to justify not coming up with a good on-ramp plan for new engineers
Well-tested code doesn't necessarily lead to code quality. Leaky abstractions will eventually show their hand, in an environment that's not as sanitized as a unit test.
Functional tests are a must. I would also say that in this day and age integration tests are also a must. I don’t think there is any domain now where you are commonly interfacing with only your code end to end, some level of integration is happening and that should be tested too.
Nothing’s perfect because we are human, I will say though that having proper functional, unit, and integration tests for a codebase I don’t see this issue crop often and when it does it becomes apparent, and then you write a test for that and then you have coverage for that etc.
Software is an organism composed of changing structures, after all.
If you build a culture where you expect no loyalty, it will be a self-fulfilling prophecy. Sadly this culture now no longer applies to specific companies, but the industry- and perhaps the economy- as a whole.
Definitely the economy as a whole, it started in the Thatcher/Reagan era when corporates starting shedding people. It's no surprise employees show no loyalty when their employers do exactly the same.
Sure, you can't invest a ton in mentoring employees if people don't actually want to keep working there. But one of the best ways to ensure programmers stay is to make sure they keep learning.
And one of he best ways to make sure your senior people always have something new and interesting to tackle is having them mentor junior people to take over the things seniors are bored with.
And why would they stay just to “keep learning” if they could both keep learning and make more money?
Corporate America is infamous for HR policies where they will only give current employees a maximum percentage raise while hiring new people at market rates (salary compression and inversion). Even if you as a manager want to keep good developers who were juniors but have now leveled up, your hands are tied.
As I said, it only works if people want to keep working there. Paying market rates is important for that.
However, most of the people I know who start looking for another job don't do it because they suspect there's more money somewhere else. They do it because they've grown less happy with the job.
If you consider a larger pool of available competent developers to hire as beneficial for companies (thus driving down wages), then it does make sense. But it requires long term planning and investment, which does not mesh with the short term profit over everything business model currently running the economy. Training is a cost that must be paid, and while both students and governments have been made to pay much of that cost for a while, that system may not function for much longer.
There's plenty of work that doesn't require an experienced expensive senior level dev to do it. If you have no juniors you have to have your seniors doing that work.
You see, I've had the opposite experience whenever I've been looking for my next challenge.
I've had recruiters talk to me at length about each of the people I'd be meeting in the on-site, their backgrounds, what they'd be covering. I've had ones give me broad strokes about why previous candidates were passed on. At the end of the day, it's not in their interest to bring too many people to an on-site who will fail spectacularly, because that means they're not doing their job properly.
I'm reading a little between the lines of your comment, but two possible interpretations of your post are:
1) You've had the good fortune to work with good recruiters/HR reps, and
2) You're a qualified candidate for the role they're bringing you in for.
I say that because of an HN comment I saw from a recruiter (maybe Aline Lerner? Don't remember) that they typically send in one unqualified candidate to interview for a role first, no matter what. That's because the hiring committee always - always - has an itchy trigger finger to reject the first candidate. I'd have to imagine that a recruiter worth their salt would learn this lesson as well; you don't get good at something like recruiting without learning similar hard lessons as the other good people in the field.
Point being: the recruiter was trying to give you an idea of what to expect in your on-site, because they thought you were good, and they thought you'd be introduced at a point in the process where you could actually succeed. (The hiring committee having already gotten their itch to reject a candidate out of their collective system.)
Many years ago I interviewed at a FAANG and the VP who interviewed me over a (fairly crappy, 30-minute) lunch was really a pain, enough so I didn't want to work for him. The feeling was mutual.
Turned out he did 500 interviews a year. Five hundred. Unless that's your entire job, I don't see how you could come out of that without becoming an asshole.
At a previous employer, managers were expected to do 200 per quarter (typically for 2-2.5 of the most active quarters). We were told it's better than Twitter where engineers did a minimum of 8 per week (and, allegedly, managers did even more).
From my own experience, that sort of load undeniably turns evaluators into assholes. I think the main problem is that to see any return on investment (i.e. a 'successful' interview) it takes about a 6-12 months assuming the person is hired. Having to do such a repetitive task with such a dearth of feedback I think will make anybody go crazy. That's not even considering any imbalance between time spent on recruiting versus time spent on strategy or other management tasks.
This week I had a five hour on-site interview and then few days later be told they won't give a job offer because they think I will get bored within a few months at the job. Thanks for deciding for me :/
We do interviews in this field like casting calls. Come on over and audition for this role. So basically we're saying 'software engineering' is a talent and not a skill.
I got to the last thread too late for a comment to make a difference, but I'm exactly the person most of you want to talk to or hate.
I'm an interviewer at a FAANG company with >500 interviews in the last 5 years, I teach multiple internal courses on interviewing, and I think the system makes a lot of sense for companies at our scale.
Ask Me Anything :)
I currently have a toddler on my lap, but I'll edit this post later today to address some common criticisms and misunderstandings, but also point out which concerns I think are valid and where we should do better.
edit:
Okay, let's go through the most important points
1) I'm a Software Developer. I interview other SDEs. I ask them problem solving coding questions, algorithmic coding questions, data structure questions, and whiteboard architectural design (not at the same time, but it could be any of these)
2) Our process is REQUIRED for a company of my size. You would not believe the amount of candidates we get. We have a high bar for hiring, but fundamentally we have to be efficient with our time. That completely removes as an option superior interviewing techniques like "spend a day with the dev team working on a small real task" or "do this take home test over the weekend and then the interviewing team will review it with you". Both of these are better at uncovering good candidates than a whiteboard coding interview, but don't scale, and are themselves controversial in the industry from candidates who are unhappy of the time they require.
3) A common criticism of "algorithmic" questions (leetcode) is that they don't reflect the reality of day to day work. If a lot of people even at FAANG are working on typical 3-tier front-end-back-end-database systems, utilizing the tools and systems other employees built before, why bother evaluating if the candidates could build the next generation of such systems if asked.
Because once these people are inside the company, we'd like to think that everyone passed a similar tech bar. That means that if a new database or distributed system does need to be purpose built for a high scale system, and someone applies internally, you can be flexible with the kind of interviewing process you put an internal transfer through - you already know they passed a high technical bar, and are likely qualified to work on the hard stuff.
4) another common misconception is people underestimate the complexity of "typical" systems inside the FAANGs of the world - compared to their prior job experiences. A payment processing integration at Amazon scale is not a payment processing integration at your company's scale. An internal CRM build at Google scale is not an internal CRM build at your company's scale.
The 10,000 foot view is similar, but the expectation would be that the system would be 1/ built out faster, 2/ built out better, and 3/ scale better than a comparable project on a less technically strong company.
5) Coming back to the interview process. What that means, is that when we ask a candidate to solve a hard algorithmic problem on a whiteboard in 20 minutes, or deep dive into the inner workings of a complex data structure, or show how they could combine multiple data structures to solve one problem, we are not validating "Can this candidate write an algorithm in 20 minutes on the job at their desk"
What we're checking is "Can this candidate do something really hard, ambiguous, and time-sensitive in the Computer Science domain, when prompted to." The real life challenges will be different, but if they CAN do the first one, they'll likely be able to do the second one.
Of course we miss out on candidates who are terrible at these skills, or can't code on a whiteboard, or are overwhemled by the interview stress and can't perform. But we are willing to do that because of Point (2) above. We'd rather say no to a "maybe" candidate than hire someone who can...
Okay, let's start with the obvious one-- why do you believe focusing on excruciatingly difficult algorithmic problems totally unrelated to the work you do is a good way of finding people?
Not OP, but it's often not about seeing you get a perfect solution straight away, they're judging your problem solving skills - how do you approach something you've probably never seen before. Do you choke? Do you break the problem up into smaller sub-problems?
I understand the idea behind it, I just don't think "not choking when asked to code in a stressful situation" correlates well to "being able to design and write functional and maintainable software that maps well to customer and company needs".
If the devs at your company need to put out fires constantly, then maybe it's a good test of whether they'll be able to do that.
I think a good tell is that when I want to practice for interviews, what I do looks very little like what I do to actually get better at my job. The hands-down most effective ways to practice for it don't much resemble legitimate continuing professional education (i.e. drilling leetcode on physical whiteboards) and, if they help me get better at my job, it's only marginally so and essentially by accident.
People who say "oh, I just want to see how you approach the super-hard problem" are often the first to comment on threads like this, but the experiences of OP and others seem to indicate that most interviewers expect you to actually finish or GTFO.
1) The companies that do this interview a TON, so there are bound to be bad experiences, and those are the ones that people blog about
2) The questions are supposed to be hard, but achievable. So you get two scenarios:
A/ candidates who are not good enough and are not aware of it. "How am I supposed to know if the hashmap/dicationary data structure in the language I say I'm best at maintains insertion order? I just google that every time - everyone does!". Sorry, bucko. That's the kind of in-depth understanding of your tools that we DO expect you to give a shit about
B/ Immature interviewers with a bar that's too high that are using overly complex questions and don't get noticed right away by the more experienced interviewers.
So ultimately, YEAH, the questions I ask, for me to want to move forward with a candidate, I expect you to solve the problem. But I'm not expecting you to solve it in the most efficient way or GTFO
Because we want to find the best people at solving difficult problems with limited time, and maximum ambiguity.
At a high level that reflects the work that we do. The project scale may be 20 weeks instead of 20 minutes, but the level of complexity is scaled accordingly.
Of course, we miss out on some candidates that could be great at executing on a large timeline but can't demonstrate it in a short in person interview.
But, (see my edit), this is all we can do to scale our interview process, and we don't want to take risks.
this is so wrong i cant believe i am reading it. solving imaginary problems is not the same as being good at your job as an engineer. if google expects people to solve issues at a machine gun rate, it means google wants brick layers that lay bricks constantly. not people who need to stop and think about design issues over time. it wants workers to implement poorly sketched requirements and execute instructions on the assembly line.
i look more after how people approach problems at a high level, where they show how they build the whole system and how they interact with peers and other departments to tell if they can gather data, organise it in specs, and then fine tune nicely build parts of a system. not code monkeys.
thats like saying everyone in the ford factory is hired to design vehicles. some of the bunch are just workers implementing instructions. i interviewed a few ex google, yahoo and amazon and they were exactly that.
It seems to me that it should be straightforward to objectively measure hiring practices by correlating different interview questions and techniques with subsequent job performance (compared to a control.) Has this been done? If so, I'd love to see the studies, if not, then it would be hard to argue that current techniques aren't voodoo.
It has been done, I've seen the numbers and they work. Other companies have probably done the same. Of course this isn't popular, instead people up-vote anecdotes from people who say that they once had an algorithm wiz who performed badly, or how some stellar performers were rejected by this kind of interview.
> Of course this isn't popular, instead people up-vote anecdotes from people who say that they once had an algorithm wiz who performed badly, or how some stellar performers were rejected by this kind of interview.
That's kind of reductionist. I upvote answers that at least attempt to propose alternatives to the current status quo. The employer side isn't the only relevant one, which is likely a stronger reason why a lot of current hiring practices aren't popular. Some only work at FAANG scale with a large enough pool of applicants, some seem optimized to hire people that waste time on code puzzles (that doesn't make them an "algorithm wiz") and others generally put applicants in a position resembling begging for a job, especially for junior roles.
Just because something works well on some quantitative metric does neither imply that it is the only, nor the optimal solution, especially in two player games like hiring.
Right, if you pay significantly less than top companies you probably don't want to filter using their metrics since then you will just get their leftovers. Instead you should try to find the good candidates they miss. However there is really no reason for top companies to change their interviews.
> Right, if you pay significantly less than top companies you probably don't want to filter using their metrics since then you will just get their leftovers.
Not sure where you read "less pay" into my comment but fine, let's go with that and just ignore that quite a few companies immitate FAANG style hiring these days.
> Instead you should try to find the good candidates they miss. However there is really no reason for top companies to change their interviews.
Yeah, I feel like we're arguing two completely different things here, there's plenty of reasons for companies to change processes even if they work on some metric. When a large number of experienced participants in the fields you are hiring for are offering critique on your process it should be at least reason enough to talk about it, which is the whole point of discussions like these.
> quite a few companies immitate FAANG style hiring these days.
My point was that they shouldn't unless their offer can compete with FAANG offers.
> When a large number of experienced participants in the fields you are hiring for are offering critique on your process it should be at least reason enough to talk about it
FAANG are spending billions a year to keep this process running, there are huge amounts of work put into trying to change or improve it. And some things do change, but the signals from doing algorithms is just too salient to throw away.
The short answer is yes, but those studies are kept internal to the companies.
The longer answer is we can only study the people that joined the company and failed to perform rather than those that COULD have been outstanding but our interview process selected them out. So there are flaws, of course.
I'm not sure how you could do the latter unless the biggest companies shared their data and compared scenarios of "Candidate X failed an Company Y interview, but then later got a job at Company Z, and thrived".
Also you'd be working against the bias of "Well, that just means that the Company Z is easier to work at".
There are just too many variables, team to team.
Part of the problem is even within these massive companies there is a huge diversity of types of jobs, and an engineer who thrives on working on Google AdWords might fail on the SpannerDB team (to pick two random examples from not my company)
I’m a former interviewer for a FAANG competitor that had a successful IPO. I had to do over 1,000 interviews in 5 years. The VP of Eng told me I was “highly accurate.” We used leetcode-like programming questions.
I don’t think the FAANG-style coding puzzles have anything new to add to the conversation here. The reason big companies do that is because the questions are prompts are simple to write explain (hence interviewer has to do very very little), the answer space is generally well-defined (so it’s easy to grade, and easy for a Hiring Manager to check if the interviewer screws up), and they almost exclusively select for completion time (which is key in a high-pressure feature house company).
Most of the discussion here seems to be interested in alternatives. Through my experience, I can’t agree enough with the article author who posts:
Not a single person out of several thousand emails and messages came out in defense of the current state of interviewing processes - I’ll let this one stand on its own.
The only people I’ve seen to defend the current process in public are ex-FAANG people who were actively monetizing their experience (e.g. Gayle Laakmann).
These are not "puzzles". That makes it seem like there is some trick or clever concept the candidate needs to grasp that show "lateral thinking".
There isn't.
These are (or supposed to be) fundamental problems of computer science that require good understanding of algorithms, data structures, code performance, and can be solved in <30 mins on a whiteboard.
Yes, these exist, and there are plenty of them. A pretty common and well known one is "HEAD to TAIL" - where you have a dictionary of 4 letter words, and given an input of 2 words find a connecting path between them changing one letter at a time. This isn't a puzzle. It's a problem to solve and approach from different angles and allowing for a large number of solutions of different performance characteristics
> Not a single person out of several thousand emails and messages came out in defense of the current state of interviewing processes - I’ll let this one stand on its own.
Means absolutely nothing. Most of us are not interested in ruining the day of someone who is unhappy with the hiring process by revealing the truth that most likely it just means the person was not good enough. That seems cruel. I'm kind of going further here though because this is the second time this OP is coming up on the front page of hackernews
A lot of people at my company do, but you never hear about this stuff because nobody blogs about a career fair that came with some friendly helpful insights from senior engineers.
Also nobody blogs about recruiters when they are super helpful and give a ton of relevant interview prep material (which ours do), partially because most candidates frankly ignore the material thinking it's not relevant.
The questions are indeed puzzles; that's why Gayle Laakmann and others have made a living publishing books of the questions themselves. And the puzzles are distinctly different from the content in the majority of CSE curricula.
What's more is problematic is that the construction and evaluation of the puzzles is highly subjective and nearly everywhere lacks rigor. Completion time is a key metric while quality of communication is most commonly either ignored or not assessed at all uniformly among interviews.
(Aside: what's frustrating is that companies make candidates sign NDAs for on-sites; these prevent candidates for disclosing or _selling_ the information they might glean in the process, which very rarely happens. In actuality, it's the former interviewers who violate protections for "confidential info" and copyright when they go and monetize their experience post-job, or even on-the-job e.g. Rooftop Slushie).
> Most of us are not interested in ruining the day of someone who is unhappy with the hiring process
That's only true in so far as you, as an employee, are paid to achieve positive sentiment among candidates, no matter how shallow that sentiment may be. That's indeed cruel, and it's well-established that interviewers are widely unaware of the consequences of the current hiring process. That's why we get articles like those from the OP.
A true interest in improving the hiring process includes:
* Making prep materials and courses freely available (helps industry candidates)
* Committing time to CSE outreach to better integrate company needs to CSE (helps new grads)
* Finding questions that reflect real tasks on the job (helps the evaluation have a chance of being predictive)
* Closing the information gap between hiring managers and candidates: disclosure (in aggregate) of hiring rates, salaries, etc.
Playing along and doing hundreds of coding puzzle interviews is a waste of time for all involved.
> quality of communication is most commonly either ignored or not assessed at all uniformly among interviews.
Nothing could be further from the truth at my company
> A true interest in improving the hiring process includes: * Making prep materials and courses freely available (helps industry candidates)
Recruiters share this with candidates. They ignore it.
> * Committing time to CSE outreach to better integrate company needs to CSE (helps new grads)
Go to any university career fair and you'll see companies with booths clarifying these positions working against the mis information of negative blog posts
> * Finding questions that reflect real tasks on the job (helps the evaluation have a chance of being predictive)
They do. You don't have to agree, but they do. The real task on the job is "disambiguate a complex problem autonomously, and come up with a plan to address it." The interview is a 20 minute constrained version of it.
* Closing the information gap between hiring managers and candidates: disclosure (in aggregate) of hiring rates, salaries, etc.
Semi-agreed. I do wish people and companies were more transparent about salaries. But there is already an entitlement complex from a bunch of engineers on this site and many others complaining why some dude at Netflix in California is making 500k, while he is making 80 in Oklahoma writing code for Bank of America.
Appreciate it. For some background it would be nice if you clarify the perspective of your role as one of HR/coordination or a more technical view on participants of these interviews.
Do you feel like current FAANG hiring practices for lower level roles incubate a generation of programmers that trains specifically for the interview process moreso than they do for the actual role you want to fill (and if so, do you feel like that is benefitial to your employer / simply a necessity at their scale / worth changing)?
No, I don't think so. We would not hire a person who clearly only memorized a bunch of algorithms and data structures to solve toy problems, but cannot describe their thought process coherently, does not show a fluent ability to translate their ideas into code, or can't refactor the code or adapt their process when introduced with new requirements, scaling bottlenecks, or system failure scenarios.
> There were quite a few admissions by hiring managers at surprisingly well known companies that the ability to pass algorithm challenges does not correlate with success on the job.
There are a lot of anecdotes like that, but the statistics I've seen has clear correlation between performance on algorithm interviews and performance on the job. I don't think there are any public studies done on this though so if you don't work at a company where you can view it internally you just have to trust that someone has gone through the numbers at these big data-driven companies.
Well, I can say from personal experience that there are interviews when I've aced the algorithm question(s), and other interviews when I haven't. Not hugely different in time interviews, either. So I can say from personal experience that it doesn't correlate all that well with my own performance, or it would be constant.
I expect, though, that the issue is that the degree of correlation measured will depend on the population you're screening with it. If you are wanting to screen out fraudulent or otherwise utterly non-programmer persons, it will show a good correlation. However, among those who are actually programmers, it will show much less correlation, and if you're in a condition of developer scarcity, the false negatives could be more costly than the false positives.
> Well, I can say from personal experience that there are interviews when I've aced the algorithm question(s), and other interviews when I haven't. Not hugely different in time interviews, either. So I can say from personal experience that it doesn't correlate all that well with my own performance, or it would be constant.
Do you even understand what correlation means? There is a significant random element to it, yes, but that doesn't mean that there is no correlation, and the random parts from the same individual can be mitigated by doing many interviews after which you have reasonable correlation. Most interview styles has close to zero correlation, so even if we don't reach anything remotely close to 1 it is still pretty good.
Edit: About the points that it is enough to weed out people using simple problems, that isn't true either. There was significant correlation between job performance and interview performance even among those who did well. The statistics showed no signs of it capping out either, so for all we know we could make them even harder, just that there wouldn't be that many left that could pass them then.
> There are a lot of anecdotes like that, but the statistics I've seen has clear correlation between performance on algorithm interviews and performance on the job.
I can only claim to have personal anecdotes, but the critiques I hear and have are things like asking you to write Bash on a whiteboard an focusing on minor syntax errors (Bash was not the primary language for the job and the candidate was obviously familiar with the language). Or asking about details from compiled languages when the job exclusively dealt an interpreted language. I'm not saying these interviews shouldn't touch on these topics. I do like to see how deep a candidates knowledge goes (sometimes it can mean they're over qualified and would be bored).
I'm not sure if it's interviewers showing off, because they've "always done it this way," or what, but I often see both job posting criteria and interviews focus too much on things well beyond what the job requires.
Of course, I'm biased and think my way is better. Outside of the minimum requirements for the job I never really care if a candidate has an answer to most questions. In fact, when they get it too quickly it seems rehearsed and I don't think it reflects their skill. For me, the technical questions are a starting point to see them talk through how they approach the problem.
Shameless self-promotion: I launched hirecontributors[1] yesterday, which lets you search for people who contributed to several of the open source projects you use.
Shameless nonself-promotion: The Discord "Credentials + Meritocracy"[2]
There is no other sane and effective way to filter the insane amount of FAANG applicants, only DS&A.
Other non FAANG/Unicorns that don’t pay as well as FAANG can drop the practice of asking DS&A questions. But for those companies that pay really really well, there will be insane amount of people that are willing to get a job there, and DS&A is a “May the strongest win” filter (although luck play a very strong role as well, yes there are stories where a junior job applicant get 4 Hard Leetcode out of 5 questions). I happily oblige. I happily will get through 1000 Leetcode and roll the dice (apply multiple times) if I need to in order to get that salary. No I’m not willing to get lower salary than FAANG/Unicorns, that’s why I’m doing this.
For companies that don’t pay as well as FAANG, just drop your DS&A interview practice, or just lower the bar, otherwise it is a waste of time for either the companies or the applicants.
EDIT:
TL/DR. The whole answer to this DS&A debacle is only 1 thing: SALARY. End. Period. No other factor matters.
You lower the salary, no one will bother with DS&A. You increase the salary, every single person on earth and their dog will study DS&A 24/7 to get that FAANG salary. Don't believe me? Head to Leetcode forum and reddit cscareerquestions. Actually we don't even need to go that far, just look at this topic on HN every single time. It is all about SALARY. Full stop.
But there is a way to filter the amount of FAANG applicants!
It is as follows:
Offer ridiculously low pay, such that only basic expenses could be paid for, like basic housing...
Then, see who shows up.
Whoever shows up... really wants a job.
You don't hire them yet.
You implement your own corporate bootcamp, where you give then coding assignments. These start easy, but progress, over a number of weeks, to those that are similar in form and difficulty to the type of work that the corporation does...
A supervisor or group of supervisors reviews their work after every week.
People who do not meet expectations are let go.
What you're left with after that process is your new hires.
That's how you cut down on frivolous resumes.
That's how you weed out the casual job seekers from the purists.
The purists don't care about money as much as working with the right people.
It's not for everybody.
People who need salaries obviously, beyond the most basic of living expenses, would be unable to apply...
...The intended goal is to figure out who is intrinsically motivated (i.e., curiousity, innate interest, desire to learn, etc.), from those that are extrinsically motivated (i.e., salary, money, title, career, corporate position, etc.)
Sorry, this won't work.
1. Too arduous for the FAANG company
2. If the end result is $250k/year salary, then absolutely insane amount of people will stick it until the end. I know I do. Heck, I will live at FAANG office 24/7/365 if I need to, and I know a lot of people will do it. See the current state of Leetcode forum and reddit CS career questions to get the feel of the type A people who flock there. It is go big or go home. Bleed and get up again.
Hypothetical scenario, tell the startups/VCs to pay more for software engineers, just a little bit lower than FAANG, then two things will happen:
1. Either FAANG will even increase their salary even more to attract type A types
2. A huge number of applicants of varying quality will flock to CS as an industry lowering the overall quality, forcing companies to do hard DS&A questions to filter applicants.
I agree, it probably wouldn't work for the FAANG companies...
I posted what I said as a note to my future self, if/when I run a software engineering company... if/when that happens, then that's how I'm going to handle hiring...
You'll suck your own resource doing this, with no end goal in sight, or not even better end goal rather than DS&A interviews. And in the end, you will concede and search for a few DS&A interview questions, tell the candidate(s) to solve it, and evaluate them, and call it a day.
Out of curiousity, why do you think that your intake from the `minimal salary barely enough for living expenses` job posting will contain any talented candidates at all?
1) Offer the lowest compensation to attract the worst employees.
2) Pay them to spend several weeks taking tests.
3) ?
4) Profit
I'm curious what step 3 is?
Also you say that "The purists don't care about money as much as working with the right people." but you're intentionally selecting for the wrong people, so is this intended to avoid purists?
> There is no other sane and effective way to filter the insane amount of FAANG applicants, only DS&A.
Then why do they also apply this to candidates they reach out to? I've never applied to FAANG, only interviewed after (in-house) recruiters or internal referrals. It always seems to be the same bullshit.
No alternative, or AFAIK, no better alternative (yes I've experienced other style of interview like take home test, project, trial work, etc, all bullcrap). Keep doing it. I'm at my 300th Leetcode questions now, I just need 700 more (half joking).
Jokes aside, my point is, you can only get better, and when you get better, a non FAANG interview is actually a piece of cake, and you can just job hop every year until you maxed out your salary band, rinse and repeat.
Repeat after me: It can only get better, and one day you will actually conquer FAANG.
Is it really that rare that companies have legitimate hiring processes and realistic interviews?
Take this with a grain of salt, because my experience may differ from many here (never worked at FAANG, I spent a lot of time at smaller startups in Boulder and am currently in Miami) but I have only been put in front of a whiteboard one time during many dozens of interviews and it was a generic logic puzzle to see how I performed under pressure.
Having been on both sides of the hiring table now many times, there is only one approach that makes sense to me:
1. Speak to them over the phone to make sure they are decent human being, verify again in person.
2. Be upfront with general compensation ability and expectations so that neither of you waste the others time.
3. Do a pair-programming exercise where they build a small piece of software that mirrors something that would be working on as a day-to-day there. Make it clear that finishing is not important, you just want to see their thought process and how they communicate. Ask them to refactor parts of it at some point to see how coach-able they are and how they respond to criticism.
This strategy has worked exceedingly well for me, and when I was on the other end of the hiring table the companies whose process generally looked like this were great places to work with good people.
Algorithm questions are a hazing ritual, and so many junior devs get sucked into wasting hundreds of hours practicing them when they could be building real-world skills. This practice has got to stop, IMO.
Without necessarily accepting the premise of "legitimate and realistic", yes, in some markets it's very rare. I've personally never had an interview without a whiteboard problem.
> Is it really that rare that companies have legitimate hiring processes and realistic interviews?
In my experience, the gap between the HN comments section and the real world is massive when it comes to hiring practices.
In the world of HN comments, most people tend to identify with the candidate rather the interviewers. The interview candidate is the hero, the underdog, and the person we're supposed to root for. The interviewers are bumbling fools, drunk on power and dead set on abusing their power to find flimsy excuses to reject candidates.
In the real world, most of the senior engineers I know have spent considerable time on both sides of the interviewing table. At different points in their career, they've been the ones asking questions as well as the ones being interviewed. This leads to a lot of cross-pollination of interview techniques as well as different perspectives on what works vs. what doesn't.
We can all agree that interviewing and hiring practices aren't perfect, but it's much harder to suggest better alternatives. At one point, I tried directly asking candidates how they'd prefer to be interviewed in a way that best highlighted their talents. A surprising number of people defaulted back to standard interview practices, but I also had a number of "just trust me when I say that you should give me this job" type answers.
These online discussions inevitably skew one way, because no one wants to be the bad guy defending the current imperfect status quo. Even the author of this article artfully dodges any request to suggest alternatives, instead falling back on the safe and secure "we have a lot of work to do" response.
> At one point, I tried directly asking candidates how they'd prefer to be interviewed in a way that best highlighted their talents.
This is really cool to hear from someone else. I've done a similar thing, asking "What do you think you could do during a technical interview to best showcase your skills?"
I too got a surprising number of terrible/generic answers, though it very likely could have been nerves in the moment.
> most of the senior engineers I know have spent considerable time on both sides of the interviewing table. At different points in their career, they've been the ones asking questions as well as the ones being interviewed. This leads to a lot of cross-pollination of interview techniques as well as different perspectives on what works vs. what doesn't.
I'm one of those engineers. The company I currently work at has no problem finding and hiring competent engineers. I also have no problem suggesting something better than what most companies do. And yet, whenever I interview at other companies[0], the most common interview experience I still have are the horrible ones described time and time again here.
The sort of "cross-pollination" you refer to is not widespread.
[0]: A few times a year, just to keep my feet wet.
>but I also had a number of "just trust me when I say that you should give me this job" type answers.
Is that really so far out? In many lines of work, you're expected to be trained into the position. My experience in software is that each company thinks they want someone who already knows X, Y, and Z, and can hit the ground running with no training.
But in reality, the hire will likely spend more time maintaining P & Q, and working on S, and will need quite a bit of domain knowledge as well as knowledge of the company's custom code and practices and internal organization before they're fully ramped up. And by the time they'd even get to work on X, Y, and Z, the company has likely moved on to A, B, and C, which almost everyone there is just learning.
It's a job that requires constant learning, and you're going to need to train your new hires whether you like it or not.
That's why when I'm called on to be the one asking questions, I mostly look for whether they enjoy learning and experimenting, whether they can have fun with old stuff and convey the differences between that and the new stuff (and why they're different), and whether they're open-minded or stubbornly convinced that they know the one true way.
That's the sort of thing you need when your old system has a decade+ of custom code and the dust hasn't even settled on the new system enough for the pros to know the right ways to do things with it yet. What you really need is someone with basic skills that's also open to being trained and learning new things.
Once my Mgr needed to reject a dev who had said something that did not vibe well with another manager, engaged the candidate in another round of tech interview with a L1 candidate who was working as a dev in the same team. (L1 is supposed to be a Mgr but worked as dev to sideline the immigration process). The candidate was asked offbeat Mockito unit test questions with the intention of rejecting. Speak of Hazing, some interviews are setup to reject candidates for the sake of rejecting.
I've personally seen no correlation between people who can solve problems and program when watched by another person versus people who can solve problems and program when left alone with a real problem, and ample of time to noodle on and resolve it on their own.
The same is true for writers: most are likely not to be interested and/or able to do their best work when watched over the shoulder by another person.
The /real/ question is this: should software be like a factory job? If so, let's clearly acknowledge it and define it, so that people can set their expectations and self-select accordingly.
Side note: Most of us work with our hands. We don't think of it that way. But if you break a finger, you'll find out in a hurry that you work with your hands.
The interesting thing is even the FAANG's have work that you might consider factory work, ie changing the tax rate when the customer is Danish and their head office is in Angola and the advert is displayed in Greenland.
Possibly this sort of thing is the majority of the work although not having worked for them I don't really know.
I'd also add that by saying modern factory work is quite different from Henry Ford's day, at least in developed economies. There aren't many factory jobs in the West you can get without a qualification.
> I've personally seen no correlation between people who can solve problems and program when watched by another person versus people who can solve problems and program when left alone with a real problem, and ample of time to noodle on and resolve it on their own.
At most of my companies, we tried moving exclusively to take-home interview problems for this reason. Short problems that could be solved in 2-4 hours of time, as benchmarked against current employees during daytime hours.
Inevitably, some candidates hated this so vocally that they'd ghost us, or some times even take to social media to lambaste us for trying to take away from their free time. Or we had people refusing to do the toy problem (not real work, same test for all candidates) unless we paid them hundreds of dollars to compensate their time.
It didn't matter how much we tried to explain that the entire purpose of the take-home problem was to grant flexibility to the candidate. A large number of candidates vocally hated any interview technique that didn't involve company employees giving 1:1 interview time to them.
We just filtered those candidates out of the pipeline, but I walked away with a clear understanding that interview practices will never make everyone happy.
If in typical work settings people work in groups to solve work problems, then in typical interview setting interviewer should also work in group with interviewee in order to have relevant estimate of interviewee performance?
Such collaborative interview setup also addresses interviewee concern that interviewer may not value interviewee time.
- only after I had a face to face (can be on skype, but not on phone) interview with a hiring manager/engineer, so I know I really want to work for that company. Job ads usually not very useful determinating that (Interview should work both ways.)
- Not used as a prescreening. It should prove that I really know what I'm talking about. Otherwise, maybe I'm just wasting my time (See above)
- No more than 2-4 hour (we agree on that)
- We review my code. It's good for both of us. I get feedback, the Interview gets more inside why I did what and if I really write the code. (Optional, but prefered)
> Or we had people refusing to do the toy problem (not real work, same test for all candidates) unless we paid them hundreds of dollars to compensate their time.
It's otherwise billable time, don't see why you'd have a hard time respecting that from a candidate.
> "It's otherwise billable time, don't see why you'd have a hard time respecting that from a candidate."
Sure, as long as the business gets to deduct the cost of the interviewers' time from that. Not gonna work out in favor of the candidate but respect is a two-way street.
After all, once the candidate (or a candidate, anyway) joins the team, it's their billable time being spent reviewing and interviewing other candidates too.
"interview practices will never make everyone happy."
This is true, but it's not a problem. The problem would be everybody using the same interviewing practices.
Me, I think complaints about spending a few hours on an assignment are ridiculous. All the alternatives are much, much more objectionable to me. The main fallback I have is a contract or temp position, which means my "interview assignment" takes months.
Not a single person out of several thousand emails and messages came out in defense of the current state of interviewing processes
That's largely due to the position taken up in "The dystopian world of software engineering interviews". Had the article been a defense of current interview practices, you would have received sentiments to the opposite effect.
> Not a single person out of several thousand emails and messages came out in defense of the current state of interviewing processes
I agree that this was a cheap shot from the author.
The current zeitgeist of hiring practices is that we're all obligated to chant "interviews are broken" without ever suggesting alternatives. Suggesting alternatives is dangerous because someone, somewhere will come up with a reason why your suggested practice is bad. Even the author of the article avoids suggesting any alternatives.
It's the equivalent of politicians saying that they're "deeply troubled" by something, and then proceeding to do nothing because they are secretly okay with the status quo.
No one is dumb enough to go out of their way to publicly argue in favor of the current hiring practices in this atmosphere. Yet when we're put in the hot seat on a hiring committee, we all fall back on the tried and true methods of interviewing for a reason.
"we're all obligated to chant "interviews are broken" without ever suggesting alternatives"
Nah, there's somebody who hates everything, but there are plenty of things that somebody likes. I'd be happy with both take-home problems at a moderate effort level, and Fermi problems. Clearly many people go out of their way to declaim how much they hate those things, and I don't know where to find companies that hire based on them and pay a lot, but it would make me happy.
What is tragic here is the amount of effort that is now expended by young computer scientists into the game of algorithms. Whereas a young programmer in the past may have spent their extra days writing games in Basic or static web pages, hackers these days seem to do Leetcode until the wheels come off.
We are failing to bring certain softwares into existence by effectively requiring programmers to their effort into the World Wide Nether, finding the Kth smallest element in an unsorted BST for the millionth time, for seemingly no purpose except for it is "how things must unfortunately be done."
Not to mention the huge gap between supply and demand with respect to CS graduates and jobs. It’s really frustrating to hear so many new grads are struggling to get hired despite the gigantic investment in CSE. Articles like these point to the failure of the evaluation process as a bottleneck versus the common understanding that supply is limited.
If you search the article for the string "New college grads" the author indicates he received multiple emails from new grads claiming they couldn't find jobs. Personally I've seen lots of new grads with 4-5 offers and many who were unable to find jobs out of college despite tons of interviewing.
In my 2 decades of making livelihood with programming full time job, I have seen CS grads feeling brain dead while a Starbucks barista writing better coding. I am probably more humble observing people over all these years to admit that anyone can be a programmer given the opportunity and the heart / zest to dig deep be thorough with the solution.
The part of recent grads getting job is more related to market conditions, back in 99 recruiter would be happy to hire anyone who have attended the programming 101 while in 2001-2002 no one even wanted to talk to 5 -8 yr experience candidates right after the market crash
While domestic CS grads can't find jobs , my current manager and other managers who are naturalized citizen want to prefer H1 candidate who are either ethnically alligned or speaking one of their languages. People make fun of having rejected non H1 candidate. Being a naturalized citizen I was hired so I will keep quite with the discrimination and sympathize with H1 as getting job else where is difficult for H1. I did finally file a EEOC case in MD (531-2019-01105) to document the discrimination done by Naturalized citizens. Hopefully when our kids go look for jobs, they don't have to be party to discrimination. If you feel this needs support call a Congress man or senator to take look.
I notice that you mention "computer scientists," "programmers," and "hackers" in your comment. Those are all different types of people, and generally not the kind companies are looking to hire. Most companies are hiring "software engineers." That is, they want people to build stuff in a team with other software engineers, things that are well designed and stand up to the various forces that software systems are subject to.
Ultimately, though, you're right. The problem is that software engineering interviews aren't actually about software engineering. And, that's what really needs to change.
the discovery age is what makes new tech so fun and exciting. I loved the 90s internet because i was a young kid making all kinds of stuff online. very trivial by today's standard but it served it purpose of exploration and creativity. Today's kids are getting creative with the use of snap and tiktok. i guess i cant judge much
> What is tragic here is the amount of effort that is now expended by young computer scientists into the game of algorithms.
This is a funny topic to me. A decade ago, before Leetcode, Hackerrank, and Cracking The Coding Interview, it was common for developers to complain that software developers were losing touch with algorithmic knowledge. HN-type websites were full of discussions about clueless software engineers doing damage to companies by implementing O(n^2) algorithms that worked fine on small datasets but failed in production. It was popular to complain that modern libraries, frameworks, and programming languages were making developers too soft to write good code.
The industry responded by re-emphasizing the value of CS fundamentals and algorithmic knowledge. The training industry responded with easy tools to teach and learn these algorithms. The internet is full of easily accessible materials to teach these principles to anyone motivated enough to Google it.
Now, the popular narrative has flipped. Internet comment sections want to hate algorithms and suggest that programmers don't need to understand the basics. Just rely on the frameworks and libraries to do the right thing. Just Google the solution and weave the libraries together to do what you want.
> Whereas a young programmer in the past may have spent their extra days writing games in Basic or static web pages, hackers these days seem to do Leetcode until the wheels come off.
Young programmers don't wake up in the morning and choose between writing static web pages or grinding leetcode. There are more opportunities than ever before to learn whatever you want.
Have you actually worked with students lately? Leetcode style systems are a lot of fun for people. It's a straight to the point system that teaches algorithms and other fundamentals in self-contained brain teasers that are straight to the point. And it's trivially easy to Google for supporting training material. In my experience, the same people who are self-motivated enough to build web pages and games are frequently also interested in Leetcode style brain teasers.
People aren't choosing between one or the other. That's a false dichotomy. All of the highly driven students I've worked with have a range of experience from toy projects to Leetcode style learning challenges.
> Leetcode style systems are a lot of fun for people.
That’s not true for everyone, especially in such high stress situations as an interview. I like crosswords, but I wouldn’t want to do them in front of someone judging me for a job in 45 min while thinking aloud.
A decade ago everyone was absolutely doing data structures and algorithms in interviews, and had been doing so for long enough that Cracking the Coding Interview had already been out for two years (along with Steve Yegge's post on prepping for interviews: http://steve-yegge.blogspot.com/2008/03/get-that-job-at-goog...). I'm not sure what time period you meant to reference?
Hey, those people still exist. Myself and a few other people I know got their start making terrible games in python.
Heck I was too young when I started learning lisp (clojure). Took a long time to get used to non-functional constructs.
Things definitely changed once I got to university though. Competition for internships meant I had to get good at interviewing. The CS program I am in encourages the career focused so grinding leetcode is popular. One of my interviewers asked me a number, and used that to retrieve the n'th leetcode question from memory.
There does exist a small cadre of people, myself included, who find leetcode and similar interview grinds unethical. I'd rather spend my time having a life or learning/building interesting tech. Interviews are then less of a performance art and instead a genuine 1-1 to work through a problem.
For what it's worth, the emphasis on algorithmic puzzles is a prominent feature of education for software engineers in Eastern Europe. And, well, there's a lot of good software engineers coming from Eastern Europe. Correlation is not necessarily causation, but it's something to ponder.
537 comments
[ 3.0 ms ] story [ 374 ms ] thread[1] described at https://news.ycombinator.com/item?id=11662380 if you don't recognize the term
Speaking of the second chance, from the link you referenced https://news.ycombinator.com/item?id=11662380
In that comment you said
> I want to turn this system into something that's open to all users who want to take time to review stories. We'll make it a form of community service that will be a new way to earn karma. However, it's still an open question how to pull this off without simply recreating the current upvoting system under another guise.
Have you guys looked or thought about this any more since then? I'd love to see such a community service become reality.
Edit: if anyone wants to be a story reviewer, find 3 submissions that got posted to HN but didn't get attention, which you think the community might like and which gratify intellectual curiosity (i.e. aren't interesting just for sensational reasons). Oh, and which you're not personally connected to. Then email them to us at hn@ycombinator.com.
For examples, you can see a partial list of stories that were picked in this way here: https://news.ycombinator.com/invited. Those are ones where we invited a repost because the original submission was too old to re-up, but the criteria are the same. We'll publish the full list at some point.
I wonder if then at some point we see computer engineering becoming more standardized like the others, with a bar that someone must meet before they are able to call themselves a computer engineer with all of the responsibility that entails. I wouldn't say that it should restrict someone from programming professionally without this accreditation, but rather it would be a symbol of proof that someone has at least been judged by their peers to be at a given level of skill and knowledge. What this would look like ultimately or whether it would come to pass, I haven't the foggiest idea though. Like I said, I'm just a QA guy, not an SE.
No doctor is expected to share money with his teachers nor is expected to teach sons of his teachers. Abortion is allowed and lately euthanasia too. Current doctors can perform operations and are not required to treat all sick people.
I've outlined it here before. Been using it and tweaking it for the last 3 or 4 years. I keep bring it up because it's a tested alternative to the usual death marches and dumpster fires and it has been a success for the teams I've led and our applicants.
The principles I've defined to guide our process[0]:
- Hiring cycles will be structured and as short as possible.
- When we start a hiring cycle, we will finish it by hiring the most qualified applicant who accepts our offer.
- Every applicant will receive a response within 48 hours and be updated on the status of their application at each step asap.
- The hiring process will be as transparent as possible.
- Objective and fair-minded measures will displace biased and bigoted ones.
- Every applicant will appreciate their experience, even the rejected ones.
- The process will be agile and adapt over time to improve and meet the specific needs of the organization.
- Onboarding will begin with hiring.
One problem I'm confronting at the moment. As our company grows, we've brought on a new HR lead who wants to jam the process we've been refining over the last couple years into a new ATS (Applicant Tracking System) that could significantly screw up our meez. We'll see how that works out. I'm doing everything in my power not to let it fall apart.
If you have the power to improve the situation, please do so.
[0] For an outline of the process, see https://wiki.klenwell.com/view/Hiring
Most of our work is on web applications, primarily Rails. So, for that role, the challenge is to fix an issue in an implementation of Fizzbuzz on our sandbox Rails app. We give the candidate about an hour to work on it. It's not as trivial as the common Fizzbuzz exercise but it's a pretty representative sample of the kind of work we do.
As part of the phone screening, we check to make sure the candidate understands there will be a code challenge involving Rails and that they're cool with that.
There's a handout we present before we turn over the laptop that explains the issue and clearly defines requirements (e.g. create a branch with this name). We read a brief intro section then give the candidate time to review the requirements on their own and ask them if there are any questions. Candidates are reminded to read the README included with the project and encouraged to use the browser to Google stuff.
One tweak we made was to add check-in stages to the challenge to make sure candidate doesn't get stuck for a half-hour trying to open up the text editor or something. Every 15-20 minutes, a team member will check in with candidate and if they haven't hit a certain milestone (e.g. has started local server or had reproduced issue), we'll assist them in getting to it. At the second or third check-in, it usually turns into more of a pair programming exercise and at the end we'll review the solution with candidate so they understand why the problem is relevant to the job.
There's not a definitive pass or fail for the challenge. The candidate's performance gets scored on a simple 1-5 scale alongside the other competencies we're evaluating as part of the interview. We're pretty thorough about preparing the code challenge and consider it a good example of our "onboarding begins with hiring" principle.
The top comment is brilliant and sums up the brokenness in the best way I've ever seen.
In my opinion, and modest experience (I've done several dozen interviews, so there are plenty more experienced then me, but I'm at least not new, plus nearly all interviews were for my team so I had to live with the results!) it isn't that hard to come up with small sample questions related to what the job actually is doing. From there, in addition to the mere fact of whether or not they were able to complete the task, you can learn about how they did it, look at their practices, stop them for a moment and discuss the implications of something they just did. You can add a wrinkle to the task ("what about unicode?" "what about cross-site scripting vulnerabilities?"). I also find being this kind of flexible, rather than being stuck on "did they solve this algorithm challenge in the proper manner" also gives me room to be human, to take a moment to try to calm the candidate down in what is inevitably a stressful situation for them (even if it's basically just Tuesday afternoon for me in my current position in the world). I think of an interview as "I want to find all the positive I can", rather than as a process of locating all flaws, and you can't do that if your candidate is frozen in the headlights the whole time.
Interviewees are pouring forth a wealth of information. The idea that the only way to find out how good they are is by asking this one narrow set of questions is absurd.
And the interviewers are pouring forth a wealth of information too. Consider what message you're sending with a rigid adherence to something we all know is broken.
[1]: Unless it really is relevant to the job! I expect that if I'm hiring a senior level machine learning researcher that you better be able to describe gradient descent to me, for instance. We may not implement it literally in the interview but I have a reasonably case for saying the researcher ought to convince me they could get there. But in a lot of cases, what's more relevant to me is that you know the characteristics of algorithms rather than exactly what they are. You can know the runtime and weaknesses of quicksort or RAFT consensus even if you can't spew the actual algorithms on to a board.
Actually, my parenthetical here almost makes me want to rewrite this whole post, although this thought is still fresh and I'm still chewing on it. Is that perhaps the error we are making? Are we conflating knowing the algorithms for knowing the characteristics of the algorithms? The latter is legitimately important and I see screwups based on failing to understand characteristics of algorithms all the time. Knowing the literal, actual algorithm to the point that you could simply open up a terminal and bash it out yourself is rarely important in this era.
I left Google in 2009, quite unhappy about the difference between a startup and corporate politics. After that I worked at 3 startups (5 years), 1 telco (1 year) and at McKinsey (3 years).
I ended up interviewing at Google again in 2018, after deciding that a) I liked programming more than management consulting and b) my comparative advantage was in programming. I definitely could have felt entitled after 1) passing Google interviews once before, 2) having had three somewhat successful startups and 3) proving I can also handle the corporate side.
I was asked multiple questions that could be interpreted as 'algorithmic' (and I have to admit that after 3 years of not coding I was nervous about them). However, they can also be interpreted differently, more charitably. They all followed the structure of: 1) give a reasonable but not completely defined problem - you should be able to clarify enough of this to show you can deal with some ambiguity; 2) turn that into an algorithm - you should be able to articulate an easy algorithm and be able to discuss improvements to it; 3) turn your algorithm into code - you need to show you can actually program. I definitely didn't have to memorize and regurgitate textbook solutions.
I acknowledge that a) the above may optimize for rejecting all negatives at the cost of some false positives and b) it's still a very basic lower bar and doesn't predict who will perform highly vs. ok. However, I did think it tested for the core skills I expect from programmers.
I've also set up interviewing processes at startups. I did end up emphasizing ownership and 'getting things done' more than Google does. I do think startups should test for different attributes than 100k+ FTE corporations.
If someone just spits out an optimal solution straight away that's not actually a great sign. It doesn't matter if you struggle a little, or need a few hints, but showing you know how to break a problem down into smaller sub-problems and work your way up is an invaluable signal.
I think I tend to make good impression on these ... but I am aware it is interview skill where I somehow picked up social signals I am supposed to send. I am adjusting what I am saying to how interviewer looks like (happy, annoyed, bored, etc). It is social skill, but not same social skill as pretty much anything I do in actual work. In actual work, people are not interested to listen to me work out problems in front of them.
It is even more useless if you know the answer and then proceed pretend to split it into smaller problems and then work your way up or down. That neat thought process is neat precisely because I know the answer and I am performing idealized problem solving process.
In case of actual real problem, you don't do that so nicely. You have at least some bad turns, random guesses, break it multiple times badly and so on.
Yeah. In a world where Google exists (or even where Knuth exists), what's the value in having algorithms memorized? Knowing the characteristics, sure. I agree that that's important. But the algorithms themselves? Why? I've got better things to do with the memory space.
"Gluing lots of things together" is a descriptive term, not a derogatory one. There's a ton of things you need to know to be a good gluer nowadays; security, performance characteristics of all the pieces, we're adding more and more distribution into our systems, higher level stuff like integrating with teams, documentation of your code, how your workflow goes... there's more than enough to interview all day on these issues without ever having to quiz the candidate on puzzles from the back of a Knuth book.
(This is agreement with you, not disagreement.)
Even sticking to the pure 'trivia' aspect, there's just so much of it that people are missing altogether. (Sure, maybe you can write out a nifty algorithm on the whiteboard, but can you sketch even a very rough proof that the algorithm is correct? I don't think many people can do anything like this. I'm not even sure that the topic of correctness comes up all that much in a CS/SE curriculum - which is surprising, since we are supposed to be doing engineering. And yet, someone who is familiar with what provably-correct code might look like in practice will likely be a lot more productive as a result.)
I decided to not to do any whiteboard challenges unless the whiteboard has a built in editor, search engine and stack overflow. So far people who interviewed me just wanted to know about the different projects that I worked on during the last 15 years.
I'm lazy and don't have time to prepare for interviews or do home assignments because of family life. I'm going to be frank about this if I'm asked to do anything more than talking during an interview.
People blindly and dumbly implementing any practice is going to yield bad results. I've interviewed for Google, for a small company with a crappy pipeline and a low need for talent, and for my current job, which needs Google-level talent across multiple specialties[1]. Whiteboarding has played a critical role in all of these. The goal isn't to have them answer trivia questions in marker, it's a basic test of their ability to think critically and program. Naturally, the exact questions differ based on the role: for the second job, it was basic processing of data structures, while for the third, I got a question that involves some degree of spatial reasoning. But in general, this is a pretty fundamental way to test a pretty fundamental set of skills.
I even was lucky enough to get a negative example: I ran the tech org for the second company, which had two non-technical founders. We hired a candidate with no engineering experience on my recommendation because he did very well in his coding interview: this guy ended up being the most reliable, clutch engineer in the company. I also rejected a candidate on the basis of failing the simple whiteboard problems, and the founders decided to hire him anyway based on his years of experience. The founder ended up having to bounce him around from task to task, leaving a trail of destruction wherever he went. His code would bring production down, he'd create weeks of work for others in a couple of days, he utterly destroyed devops during his brief tenure there, etc. He was very sweet, hardworking, had a great temperament... But the inescapable fact was that he was just kinda dumb. The whiteboard interview handily caught this, _which is what it's supposed to do_, and all the HN sniveling about whiteboard interviews only being useless trivia contests doesn't erase that fact.
[1] You can imagine how hard hiring is for us right now...
OK, but this topic is not about "simple" whiteboard problems. (People can of course disagree wrt. what's 'simple', but a rule of thumb is that anything where the average dev would need to train and memorize whiteboard trivia for an extended period in order to perform satisfactorily is far from simple.)
I was talking about minimizing risk for the people hiring at sub-FAANG companies. If they make crap hires, they can just say "well we're doing it exactly like FAANG". But yes, I also agree there might be better ways to optimize for minimizing bad hires.
Despite it being a turn of the decade 1980/1990 Microsoft thing.
Meanwhile asking questions that are grounded in the actual work you're going to have the candidate do, often gets you people making the estimation even if they haven't heard of Fermi Estimation, ever.
That's what makes them riddles, to me, and mostly useless BS in actual interview.
When someone says they hate "logic problems", it sounds as though they're talking about this: https://www.pennydellpuzzles.com/products/logic-math/origina...
I don't like those either, but I doubt they are used in interviews.
Many common examples of interview riddles that are defended as "it's just Fermi Estimation!" end up "memorise, interview, forget" method for many people, because there's close to total disconnect between assumed background knowledge and actual background knowledge (a question I encountered recently asked for estimate of revenue of an MLB stadium. If not for being spelled immediately after, my questioning would start with "wtf is MLB?").
Then there is the other part, namely that unless you don't know (memorise) certain common tropes of a Fermi quiz, you might understand the question as asking correct answer, not showing that you can use random number for most of the input data.
That said, I have been asked things that are fermi estimation problems on interviews that didn't suck and didn't feel like pointless riddles of Mensa wanna-bees. They tended to be based on the work problems, thus allowing to have a real and concrete expectation that the interviewee shares the background knowledge (in fact, part of the reason for the question might be checking if they do share that knowledge!). That kind rarely gets the flak of "how many piano tuners in city of Chicago".
The fact that not everyone knows the same things is the whole point! And if you don't have any knowledge that is related to the interviewer's, then how are they going to evaluate you using any method?
But sure, there are specific, inflexible requirements. You have to know false precision is BS, and I have no sympathy for people who have a problem with that. You have to in general, know what you know and what you don't.
OTOH, especially if you're interviewing internationally, using "common knowledge" instead of job/technology area related one? Pretty much a fail, helped along with books dedicated to memorising bullshit questions.
Another issue is that the typical "fermi problem" is stated in absolute, precision way. Ask "how would you estimate X" and you'd probably get good answers even from people who don't memorize interview gotchas.
But I suspect the reason people widely hate the concept is because schooling pounds into you that there is only one way to get the right answer, and it must be exact.
And so when people complain about being tested on trivia, what they really mean is "I want to be tested on trivia that I know". I would actually like to be evaluated based on something other than knowing trivia, but of course I would not like to take a stupidly constructed test.
At the same time, a great deal in this is the level of expectations about the "greats", finding the right job place at once. I believe adjusting these criteria might open up a lot more chances to get to doing the craft, be on the team, well, interview the others too.
Good luck!
If you wouldn't mind reviewing https://news.ycombinator.com/newsguidelines.html and posting more in the intended spirit of the site, we'd be grateful. Note this one: "Assume good faith." That's not because people do always act in good faith (of course that's not so), it's because the assumption of bad faith leads to crappy HN threads and the assumption of good faith leads to better ones.
We detached this comment from https://news.ycombinator.com/item?id=22393019.
However, I am in consulting, and was on the bench. My manager forced me to do an interview for coding. The questions were absurd. Literally reading vocabulary terms and looking for exact definitions to things.
I continually asked what their problem was, what they were trying to solve, what steps they faced, etc. They just kept asking questions like above. And every time I'd get it "wrong" they'd say "we were looking for... <googled definition here>.
Honestly what is the point? I feel really bad for kids today. I get all my jobs through word of mouth and networking now. Why? Because it's much easier and those ways almost always have better outcomes.
Strange postscript that suggests you hold some problematic opinions that indicate you can't play nicely with others?
Did you fail to get the job because you didn't have the tech chops or is it because you said something wildly inappropriate on the behavioural questions?
What did you say?
It wasn't "triggering" or anything! I happy gave my opinion and moved on to the other questions.
"Are you a leftist? We only hire leftists."
So if you don't want to hire assholes who think "diversity" is a dog whistle, you hire leftists.
Inclusivity does not mean having to include those that would exclude others.
But if you exclude all non leftists, that's about 2/3 of all Americans. And that looks very tribal to the rest of us.
The mandatory brilliant essay on this: https://slatestarcodex.com/2014/09/30/i-can-tolerate-anythin...
But that's being overly provocative.
Ultimately this started with you saying that a question about diversity could be heard by some as a dog whistle that only leftists are welcome.
I simply don't agree with that premise. I do think there is a percentage of people who think diversity is a left-only issue, but I don't think that's 2/3rd of Americans. Then again, Donald Trump hovers around 50% approval rating regardless of what he does, so maybe I have too high an opinion of Americans.
I work at FAANG as a backend engineer, and so I don't know this one either.
Aye, diversity has fuck-all to do with hiring. Competency, skills, and the ability to work well with others _does_.
I mean, if you’re left with two equally appropriate candidates whose only material difference between them is one of diversity, fine. Make the SJW pick. But otherwise? The best candidate for the position’s technical and soft-skills needs is the one you should hire, regardless of skin colour or wedding tackle. To suddenly bring in wholly irrelevant filters into the hiring process is to put your company at a competitive disadvantage and make excellent candidates who happen to be “ideologically undesirable” far less likely to apply.
And in the end, putting ideology and doctrine ahead of technical and soft-skill requirements will lead to a company staffed with monkeys (to spindle a pay metaphor).
We tend to praise people who take the risk, fake it till they make it are go getters etc. And possibly these are trying for that.
And maybe it would be pretty cool to see a sociological study about who these people are. What demographic they belong to, what background they have, what kind of personalities and value they have.
One issue is that average management is not good and management of software projects is not solved problem. That badly affects hiring and promoting in many teams.
But another issue is that tech is wide range of jobs that require completely different aptitudes and skillsets. We are not even starting to classify it all enough to be able to reasonably communicate what position is.
It seems implausible. It's counter-intuitive. But the idea seems pretty persistent.
It's an interesting question for me personally. I'm a mechanical engineer who likes to program a little and I've sometimes wondered whether I could work as a programmer. I haven't got the right qualifications or experience with enough popular technologies, so moving fields would be tough. But I know I can implement basic things from scratch. It doesn't seem like much (and clearly it wouldn't be enough for the prestigious places with really tough computer science interviews) but it would be interesting to know if that actually was enough to clear a certain low bar of competence.
Some of us have direct experience with exactly this situation (see my previous comment). Hell, Jeff Atwood wrote a whole piece on it a long time ago.
Further, most interviews I encounter don't do this and the ones that do tend to be all goddamn cagey about what to expect so I never know in advance, so I don't have a home whiteboard to spend hours and hours practicing on and if I did I wouldn't know which interviews need such prep and which don't so I'd probably end up not bothering, since it's just a few that do it.
I don't even have significant social anxiety or anything, and I have been told I come off as very confident and competent—unless the whiteboarding algo shit comes out, at which point there's a 50/50 chance I'll look like a total dunce (Nb. I can and do get The Actual Work done, no problem, once hired—that part's easy)
Since I only interview every few years and, again, this problem hasn't stopped me from landing jobs at about the same pay rate as the other ones that rake me over the coals (though not FAANG or near it) I've not spent the significant time it'd take to fix this. We'd be talking lots of hours to prep for FAANG tier, and probably a year. Don't care enough to do that. I did spend the time & effort to improve how I come off in more conversational parts, gradually, over the years, but that was relatively easy and doesn't rust as fast (since, you know, I don't get to practice interview-type coding on the job, but I do frequently have opportunities to practice relating to people).
[EDIT] I don't mean to be whiny or call the grapes sour—I simply haven't put the work in to (as I posted elsewhere in the thread) turn my efforts at leetcode from practice to performance. And again, for the roles I'm applying for I'm not losing any money by occasionally being rejected because they decided to give me a puzzle expecting a recursive & memoized (DP) solution rather than ask me whether I know WTF recursion and DP are and when they're usually useful, so the worst they do is waste a day of my time (honestly, why the hell are places so secretive about what's going to happen on interview day? Fucking Google's not, Jim Bob's Software Widget factory can afford to tell applicants the sorts of things they'll be talking about and the kinds of exercises that may come up)
Anyone who cares about using the wrong stdlib function is bad at whiteboard interviewing. That's exactly the kind of thing that's easy to mess up in an interview, as well as completely irrelevant to job performance.
I've been writing in C++ for the last couple years, and I'd probably screw up writing a new class from memory 50% of the time.
Interviewing is attempting the ridiculous feat of predicting years of job performance on the basis of a few short conversations, so there are going to be false negatives in every interviewing technique. The things I describe above lower FNs to the point that whiteboarding is a very useful tool for assessing candidates.
"Dumb people work in software eng" is true, but it isn't a novel or useful insight; you may as well complain that cloudy days exist or that closed systems tend towards entropy. It's the reality that every industry and business operates within, and the claim that it's unique to software is wrong-headed.
Half my comment was about the fact that _every_ field has these idiots. And by what bar are they "not adequately trained"? If someone wants to hire a stack overflow copy-paster, let em. I'm sure their productivity is strictly nonzero.
If the 'people fail fizzbuzz' trope is actually true then you would probably clear that first bar easily and probably the next few as well.
Personally, I think most if not all software devs have some form of tunnel vision (aka limited experience). While they feel the bar they are setting is low, the manner in which they describe the bar may be completely unfathomable to a person not familiar with the same terminology.
Since all technology is just new terminology for old ideas then it's easy to fake competence if you know the new terminology or look like an idiot if you aren't a slave to fashion.
That cycle has been going on for years. Now, there are so many companies that are essentially writing variants on the same software over and over again that demand is dictating the shape of the field. The shape of the industry. “We” are all industrial designers in a world that just isn’t that enthused.
If we wanted this other world that we keep interviewing for, then it’s not a matter of not enough programmers, but way too many. They’re cheap enough that people everywhere are reinventing wheels instead of assembling off the shelf components designed for that purpose.
People who see their jobs as safe careers are routinely good at those jobs.
And conversely, I have met people who talked about passion and seemed passionate and had all the right opinions. And they were not good simply because they would loose interest when it stopped to be fun or somehow never finished anything that was medium sized, were disorganized or demotivated easily.
I speculated on why our interviews are so insane, and just kept pulling that thread. What I omitted from GP was this thought: I don't know if we are right to want this, or if the world could have ever let us have it anyway.
There are other measures of 'contributor' that we weed out with our interview processes. Some of those are qualities that working programmers are more likely to have.
For instance, work-a-day developers tend to be less susceptible to hubris. Sometimes when you have a problem to solve, you want the no-bullshit person to do it. It's way easier for me to talk someone out of Imposter Syndrome or at least convince their boss to ignore it than it is for me to dial in the degree of Kruger-Dunning my faster-talking coworkers are covering up.
Luckily actually working in software development is a hell of a lot more like practicing than performing, and there's usually no-one watching you, so I'm fine at that part.
Most jobs are not like that, and then you get extreme variance in expectation with little communication on how to prepare, which is a waste of time for both the interviewer and interviewee if the interviewee has no clue what will be asked or expected ahead of time.
It would be way more time intensive for the interviewee to be asked to code up some fullstack project for every interview.
Having to memorize some basic algorithm questions that are maybe 20 lines of code each is way better.
Assuming the role is a fullstack developer, memorizing basic algorithms doesn’t show one is fit for the purpose.
Providing a simple skeleton of a fullstack project—in the chosen tech stack of either the candidate or the company—and then verifying a candidate can add a simple feature, or something similarly fullstack, would accomplish that far faster than algorithm answers.
Edit: I realize this risks sounding like stupid take-home interview homework. I personally oppose that crap. However, I recognize why some companies take that route, as I don’t think I’d feel confident that a candidate could work in my company’s stack by asking silly algorithm questions. I’d probably feel more confident watching the candidate do a remote screen share, git clone a starter app, and do some simple to moderately complex fullstack tasks. Of course, the tasks should fit the role, I think—e.g., I wouldn’t ask a candidate who’s being hired to tune DB queries a bunch of fullstack questions. And if I was hiring a backend dev to build out APIs, I wouldn’t bother with a bunch of frontend tasks and questions. The hiring processes I’ve seen and managed always had better results when more time was invested in prepping specific, job-focused interview processes, rather than offloading that time onto candidates because recruiting teams can’t actually do more than ask shallow questions or follow checklists.
Yes I agree but the current way we have is not even close to that.
He touch that issue in the article. So you spend a lot of time and effort to learn about binary tree, great, you pass with flying colors with company A, then you interview with company B, they ask you trie tree ...fuck.
If the interview process is largely memorizing 200 or so commonly asked algorithm questions and that is the gateway to a $200k+ job then it's a good thing for applicants, not "dystopian" at all.
Again, it would be much, much more painful and time consuming for the interviewee if they were asked to code up some fullstack project for every interview. That is far more time consuming, and in my opinion more "dystopian" to expect those interviewing to do dozens of hours of work specific to one interview for free.
Part 2, paying someone on trivia instead of capabilities is not sustainable. The company ends up suffering in the long term. Other engineers that are actually capable have to pick up the slack. Longer hours, less family time, higher burn out risk. Then comes the firing period because the company is losing revenue due to rampant incompetence. Putting even more pressure on the capable engineers. There's plenty of articles where trendy startups have some brutal layoffs, even though 12-18 months earlier had massive funding rounds and went into "extreme" hiring phases. The chickens come home to roost, no matter the sparkling bling of big paychecks.
For most of us outside the Bay Area and NYC, it's quite unlikely that we'll secure a $200k/year job unless we go into management.
*I think Austin is the smallest mentioned.
At 284, Boulder, CO is considered a "city". Don't get me wrong, it's a nice town, but you can't compare it to Austin (11), Portland, OR (25) or NYC (1). Top 100 cities comes to ~64.5m (Spokane, WA coming in at 100 with 219k).
I just... wow... I don't know why, but I truly thought "city slicker" America made up like 50%+ of the population. At best it's 29%. Not insignificant. But... not a wide majority.
Then take Wilsonville, OR. It's oddly considered a metro area for Portland. It's a good 30min away and independent AF from Portland. Plus the people there are different. More old money or straight up white trash.
Metro is a really loose/gray term. To say surrounding towns are the exact same as a city is a bad idea. Let's take the purchasing decision of a home in those areas. The "value" of location compared to price and are at odds. One person is willing to pay a premium for location, the other is not. Those are two different mindsets as to what that person is willing to deal with in life.
And the overall lifestyle of a place depends on the population within a reasonable radius of travel, not what is within an arbitrary boundary.
I live in an area of NY currently that has towns similar in size to where I went to school in AZ, but the surrounding area, say a ten mile radius, has maybe three times the population. It's a very noticeable difference, both in general lifestyle and in employment opportunities, education and so on.
Yes. Maybe you can understand some of the frustration coming out of "middle America"? The new American economy is booming in large metro areas, while the rest of the country stagnates. I'm not a Trump voter, but I certainly understand the bitterness at being economically and culturally dominated by a segment of the country that is at the very most, 50% of the population.
If you know plenty of people outside of the major tech big cities (and I should have included Austin and Seattle in that, for sure) making over $200,000 year, they you have a statistically unusual sample of friends.
All the data back up what I'm saying. Go look at the numbers. Look at salaries on monster.com or your favorite job site. Perhaps you and your friends don't realize how unusual it is (granted, you also have higher cost-of-living in those cities, sometimes by enough to eat up the additional salary).
Maybe I should revise my claim to "top software engineers make over $200,000 in Austin, Pittsburgh, Seattle, etc.".
Not to mention such interview styles can be gamed. Suppose a Flatiron bootcamp for DS&A questions becomes big in response. What then? An arms race for more and more difficult weeder questions?
Such questions aren’t necessarily bad, but focusing on them to the exclusion of all other skills is becoming an anti-pattern.
Maybe but its not the purpose to select people with families or commitment. You choose to have families or commitment, you have to deal with the trade off.
>An arms race for more and more difficult weeder questions?
Its always be an arm race. Why to expect otherwise ?
The people who do the hiring get to the decide what the metrics is and what they considered good/qualified.
Yes, that what said, but I doubt according to the people who do the hiring.
It doesn't matter if you think you are right candidate according to you or other people. Ultimately its the people who going to hire you who is going to judge you according to his/her subjective criteria.
Hiring is still an on-going debate. Google SVP of People Ops Laszlo Bock has admitted previously that internal studies revealed that the interviewing practices at the time didn't really correlate to employee success:
https://www.nytimes.com/2013/06/20/business/in-head-hunting-...
https://news.ycombinator.com/item?id=17196974
We're having a debate here. You can claim the current practices are best, that's fine. But you can't just state it and take it for granted without providing evidence.
> Four meticulously orchestrated Google interviews could identify successful hires with 86 percent confidence, and nobody at the company—no matter how long they had been at the company or how many candidates they had interviewed—could do any better than the aggregated wisdom of four interviewers.
So it isn't that interviews have zero correlation, it is that they fond no case of a single interviewer being better than the aggregate of four algorithm interviews. And as you see, four algorithm interviews combined have a very high success rate.
https://www.theatlantic.com/business/archive/2016/04/the-sci...
Families are kind of important. They're usually a large part of the reason people have a job to begin with. To callously disregard the impact of a system on families is exceptionally appalling. You should not do that.
This isn't unlike other professions, but you would lose self-taught developers who don't have the time/money to afford the credential. That is currently something special about development compared to many other professions.
This assuming you prevent people who can't do something like fizzbuzz from graduating with a CS degree.
1. False positives: you get folks who do really well at DS&A yet who are really bad developers. I mean really bad. I wouldn't have believed it if I had not seen their interviews and then subsequent performance. I'd wildly guess that it's about 20-30%.
2. False negatives: you get folks who are really good developers, and yet for whatever reason, perform badly on DS&A algorithms despite practicing. I think this number is higher than false positives, probably around 50% or more.
If you're a FAANG company, you can afford to play these odds. If you're not FAANG, then you're killing yourself by requiring DS&A interviews, almost inevitably.
Both are contributing to destroying the profession for huge numbers of people, IMHO. I mean, that's good for me, because I'm almost certainly sticking around and generally do OK on DS&A interviews with adequate practice (which is a waste of time, since anything beyond a broad knowledge of the performance characteristics of various DS&As is totally unneeded for 99% of us). But it's not right, and I really don't like it.
I thought there was a shortage of software engineers right now? Although I just got an email from Glassdoor with estimated salary (in the Bay Area) being 5-10k lower than the last email, so who knows.
All of this is well orchestrated by large tech companies in an effort to drive down labor costs. The problem is, there's an assumption that the current labor market is just asking too much.
I think looking at the current labor market landscape, practices in place industry wide (e.g., agile, interview processes, etc.) were starting to see labor market feedback that this simply isn't the case. Development is hard, it's time consuming, expensive, and requires a lot of active practice--no matter how much you want to drive labor costs down.
Ultimately I hope the entire strategy backfires and we turn away talent industry wide to other sectors and then there truly are shortages resulting in businesses pushing these practices unable of maintaining their businesses and forcing them to scale back--wishful thinking though.
So at the end of the day you can build more complex software with lesser amount of developers but there is a catch, and that is developers now need to be much more talented.
Right now a good developer can easily develop what a team of 10 average developers could build 10 years ago. This is especially true in GameDev field. Right now there is a silent revolution going on with procedural art-work so that a good programmer/artist can create huge amount of content in very short-time but procedural art generation is really complicated.
So if you are a talented developer you can compete with mid-sized companies right now!
I believe it will get to a point in future that even a small team of talented developers will be able to out-compete companies with 100s of average developer.
Large companies will have no option but to scale back and change their HR practices but large companies, like large ships, are harder to turn, hence some of them will definitely go bankrupt in near future.
Which, in turn, drives the number of bugs and flaws way, way up, which drastically increases the number of developer hours and money spent trying to fix products that are constantly broken. This situation just gets worse over time because those "better" libraries/tools/knowledge-base make adding new bugs much, much faster than fixing them. Evernote is the best example of this I have ever seen.
> So if you are a talented developer you can compete with mid-sized companies right now!
If you're a talented developer, you can compete with what mid-sized companies were doing 10 years ago and large companies were doing 20 years ago. That's more than good enough to make a niche game that pays well, but it's still an order of magnitude or more off from what mid-sized companies make today, both in quality and revenue.
> Large companies will have no option but to scale back and change their HR practices but large companies, like large ships, are harder to turn, hence some of them will definitely go bankrupt in near future.
Unless they're being propped up. Twitter didn't turn a profit until 2018. They spent 12 years burning cash. Most companies would have gone under after their investors pulled their money when they hit year 5 without making a dime.
Perhaps you should stop flocking to one location in the states and go somewhere else?
If there was, hiring and compensation practices would reflect it like in any other field.
“If you run into an asshole in the morning, you ran into an asshole. If you run into assholes all day, you’re the asshole.”
This pretty much sums up my impression of these hiring managers that crank the bar sky-high: they are assholes through-and-through, and are full of shit to boot.
If you crank the bar sky-high, all you will get are two kinds of people: those that interview/test well, but fail at the job, or those who can do both but will put a crater a mile wide into your payroll due to their high demand garnering an equally high paycheque.
Anyone who isn’t quite at nosebleed levels of competency can grow into their roles and skill sets. Yes, they won’t be able to hit the ground running, and yes, they will have a higher than comfortable drag-to-thrust ratio, BUT THAT CLEARS UP IN TIME, WITH SUFFICIENT GUIDANCE AND MENTORSHIP.
I know everyone has to start somewhere but from the company’s perspective, hiring a junior developer doesn’t make sense.
When did “not able to solve leetcode-nuclear puzzles while singing and tapdancing backwards”, become “junior developer”?
The OP is talking about “sky-high” levels of (interview) competency, and you immediately jumped to the conclusion that anything less must be juniors who need training to wipe their rears.
I think I see the problem in this field.
I’ve met “junior developers” who couldn’t translate simple business requirements into code.
The stereotypical “developer” who couldn’t do FizzBuzz.
Well, first...you were replying directly to a post that was talking about whitebord/algorithm questions and how they’re out of control. On an article about same. So my answer is: ”because I bothered to read the post to which you were replying.”
Regardless, if you haven’t done an algorithm interview in “over 20 years”, you either haven’t changed jobs, or you’ve had a unicorn career. Either way, you’re clearly not representative of the vast majority of devs. True or exaggerated, your experience is so exceptional that it isn’t worth discussing.
Not everyone’s career has been the r/cscareerquestions “learn leetCode and work for a FAANG”.
These tests are ubiquitous. If you honestly haven’t hit them, you’re a unicorn.
I’ve asked around about my coworkers experience over the years because I had never heard of algorithms style interviews until three years ago when I started reading HN and r/cscareerquestions.
I thought all interviews were soft skill, language trivia, diagramming models and architecture, and explaining past projects.
You dont have to stop the projects when people on them change jobs either.
Are they going to contribute as much as a senior dev? No, but they can still contribute in significant ways. They can still fix bugs and find issues in your system, bring a fresh perspective on design and take ownership over smaller parts of the codebase.
The reason why junior developers jump ship is because companies aren't willing to even promote people. So of course developers (of all levels!) are going to leave after 2-3 years when it's the best way to actually get paid and not taken advantage of by stupid CEOs that would rather have high turnover than a happy workforce.
One even hired McKinsey to analyze the issue. If they had given away the McKinsey fees as raises it would have solved the issues easily.
Turtles all the way down. Once a game shifts into zero-sum, it's not gonna stop getting played until it collapses.
Normally, I would say to avoid entering into any zero-sum games. But the world has made a sharp turn towards zero-sum over the past 5 years, so that advice has rapidly become impractical in today's climate.
Wisdom shall lead again at some point, but I don't clearly see when. Threads like this one though are a promising sign.
Also if you are going to lose employees because you can’t match competitive salaries than i would say you are losing them if all other things are equal.
In another words this greatly oversimplified version of events here only allows for you to come to that conclusion and dismisses how an organization could adopt different practices, values and foster organizational culture that combats these issues differently which I think training is an essential component.
I actually think this is a good argument for licensure like civil engineers etc have to have, because one thing it mandates is required training hours (among other reasons I won’t diverge into here for the sake of staying on topic)
You can debate what that should look like and I encourage that but I see little downside to forcing employers to acknowledge that all employees may need some time just to train on new things and different concepts away from the day to day work. I know this is a little bit of a tangent here but it’s something I see so often at every level of an engineers career path yet organizations so rarely set aside adequate time for it.
Why wouldn’t a developer leave for more money and more learning opportunities?
2. If that’s HR policy and you request for an exception and it’s denied, that may be a sign to start asking more questions.
3. You’re assuming that’s HR policy. Again, example dictates you have one option without actually thinking through how an organization could position themselves differently. Of couse salary is a component and rightly so, but at a certain point it’s just not everything
Think of it this way: lifestyle, ancillary benefits, “perks” etc can be all valid reasons to stay a place that treats you well and displays real loyalty (which is often displayed in more generous long term planning like big 401K contributions and fully paid health insurance for the family, open source software time etc). Can’t say I would just arbitrarily leave that for an extra 20% because that 20% can be easily eaten in other ways. Not to mention transparently knowing that your job won’t evaporate if the economy gets soft is a win. All this salary gloating is fine until that happens. 1999-2001 was not a fun time to be in the upper band taking pay cuts
Let’s not grossly oversimplify this. I’m never going to say don’t maximize your value, you should, I’m saying there is more than one (salary) way of doing that.
FAANG or not.
Oh and one dirty secret FAANGS don’t tell you? They happily underpay on salary once you’re in, or freeze you into a specific department etc. it’s not all roses.
I’m nowhere near west coast salaries but just big city America salary for context. At my age now in my mid 40s, married, making about the average salary of a top IC in my market, with the big house in the burbs (again not bragging, any developer with 5-10 years of experience could easily afford it), with the white picket fence and 2.1 kids, yeah 20K more wouldn’t make a difference in my lifestyle.
But, when I was just starting out in 1996 making $33K a year, $20K meant a lot.
But salary compression and inversion are real phenomena where HR policies don’t allow for raises to keep up with the market.
I was working during both 1999-2001 and 2008-2011. In 2000, it was very much just a dot com thing. If you worked in corporate America as a standard Enterprise Developer you weren’t really affected.
2008 was rough, but still there was no such thing as job stability. Companies were laying off left and right. I survived three rounds of layoffs - barely. But even then you could find contract gigs if you were the perfect fit.
That is to say I got extremely lucky. I know that. My takeaway since (I’ve been a software engineer for ~10 years now) is that the way I was treated as a junior is what I described throughout this post, and my mentors were the ones that drilled home what the hidden costs were taking jobs based on salary, how to properly evaluate benefits etc. I learned a boat load.
So I want to preach to developers and companies alike that things can and should be evaluated differently and to avoid pitfalls that are easy in this industry
I’ve worked at smaller companies by choice or at smaller divisions of large companies (occasionally). One developer salary is a major cost and can add to their revenue.
If you only have a few openings, you better make them count.
For instance, I know that some features I designed and developed from the ground up was the difference between us getting a client (B2B) and not getting a client. I also know how much revenue that client added directly to our bottom line. I was what is usually called a Single Responsible Individual. When one hire needs to be that impactful, there is no room for training juniors. All of our local software engineers can point to a feature they spearheaded that added measurably to our revenue.
Now the hard truth is, why hire junior developers locally when you can hire people with much more experience overseas for the same price? I know the stereotype of the crappy outsourced developer, but I haven’t found that to be the case.
Anecdotally, I was lucky enough never to be a junior developer[1], I got my first job out of college with a small company based on an internship the previous year. My first assignment was create a networked data entry system in C that was the basis of a new department that they were starting that allowed them to double in size. But I had been a hobbyist programmer for a decade. By the time I got my next job, I was already considered a mid level developer.
[1] yeah that did hurt me later on. I didn’t get any type of real mentoring and stayed an “expert beginner” for a decade.
For what it’s worth I work at a small company now that is a startup and this is how we do things, to great success, the way I described it
To be clear, I do not work in Silicon Valley either, never lived in SV. So I get that part of it
I’ve seen the argument about paying them market rates. But honestly, if they are young and unencumbered, their “market” is the entire US. Meaning you may not have been in the position to pay them what they could make if they were willing to move across the country.
To go into more anecdotal detail, I had been programming as a hobbyist since I was 12 in assembly for 10 years by the time I graduated from a no name college in the south. I had two job opportunities - one making an entry level developer salary writing COBOL [1] in a slightly larger city, or working as a computer operator in a major city. I chose the latter job that paid much less just to get to the city. I got lucky and I was the only one who knew how to program so they gave me the previously mentioned project straight out of college. They gave me a raise the next year to that of an entry level developer (I was hourly at first and got a lot of overtime).
But now, three years later, the project was done and with a major green field C project under my belt, my market value had gone up more than 50%. They couldn’t justify paying me that and I got another job.
Now if a similar scenario had played out in today’s market instead of 1999, even if they could have matched my local salary of $80-$100K for a mid level developer, I could have spent a year studying “algorithms and leetCode”, picked up and moved to SV and doubled or tripled my total comp. There is no way they could compete with that.
Let’s look at the current state of affairs. Almost every engineer at my company is between 35-50. They purposefully created the office in the burbs three years ago to attract older developers. They not only get experience, paying local market salary is relatively easy comparatively. The chance of any of us uprooting our families, selling our big, relatively cheap 3000 square foot houses in the burbs with the great school systems and moving to the west coast is slim.
We train developers in popular languages (particularly our stack leverages Vue and C# and a good deal of custom SCSS) we are only ~3 hrs from the valley yet we aren’t losing engineers in droves and haven’t ever for the years we have been in business
You should pay juniors market rates for their positions, period. I don’t agree with that at all
https://www.businessinsider.com/average-employee-tenure-rete...
This logic is sound, but I don't personally agree that bureaucracy is gonna solve any of our problems.
The rest of your comment, I believe if you spend time reading my OP carefully and spend some time noodling over it then you'd find that all of it had been covered already.
I don’t buy gate keeping either as the number one issue, see the lawyer glut as an example.
That is a zero-sum attitude that does not hold up when a company does other things well. If you are training your employees, you are likely to be doing the other things that help retain employees (https://www.bayshorestaffing.com/images/uploads/Blog_Image.j...). And if you are focusing on and actually delivering all ten of those benefits, employees are extremely unlikely to be jumping ship unless they are either a poor employee or have poor character (which you don’t want anyhow), or the competition is paying not only well above market rate, but well above your rates. Which means that they are now at a strategic disadvantage because an inordinate amount of funding needs to be diverted to payroll - much more so than in a company like yours.
Any company can make an end run around zero-sum thinking by fully and honestly employing those ten benefits. Employees can and will rise to the occasion, bringing a competitive advantage to your company that is well in excess to their numbers.
Why? The only guidance then a more senior engineer would need to give is during code review and where they may have questions. It’s a great way to get them familiar with the code base and train them up. I haven’t seen this be a productivity killer.
Also, with the shocking frequency I’ve seen, code based need more tests. Have them write tests! That’s a fast way to get up to speed.
One other point: senior engineers in one code base may have an uptick if a “junior” in another depending on existing quality, circumstances etc.
I think organizations are lying to themselves that they can only hire seniors. It’s a myth. Just like 10x developers.
I need hard data to be convinced otherwise not anecdotal evidence. All the hard data I’ve seen points in the opposite direction of any anecdotal information I’ve come across.
There are so many volumes of books devoted to these topics alone that I think most ideas around developer productivity without the firm backing of numbers are mostly hand wavy and myths we tell our selves to feel better
We had juniors for easy new features, tests, anything that is small and isolated.
These are just some things I’ve been apart of. I’ve gladly been apart of this before.
You can as I said also have them write tests or as others noted have them write smaller features or other things in isolation.
Also how green are we talking is another question entirely. Some tasks are better fit for people with maybe practical experience in another tech stack but need to get up to speed in a new language etc.
My overall point which may not have been clear is that there is always a way to get an engineer up to speed without killing velocity. It’s a management failure to say you can’t hire junior engineers.
It’s one thing to need someone that’s a domain expert, but often I see “senior engineer” === “No ramp time” and I think that’s just a lie management tells themselves to justify not coming up with a good on-ramp plan for new engineers
Functional tests are a must. I would also say that in this day and age integration tests are also a must. I don’t think there is any domain now where you are commonly interfacing with only your code end to end, some level of integration is happening and that should be tested too.
Nothing’s perfect because we are human, I will say though that having proper functional, unit, and integration tests for a codebase I don’t see this issue crop often and when it does it becomes apparent, and then you write a test for that and then you have coverage for that etc.
Software is an organism composed of changing structures, after all.
And one of he best ways to make sure your senior people always have something new and interesting to tackle is having them mentor junior people to take over the things seniors are bored with.
Corporate America is infamous for HR policies where they will only give current employees a maximum percentage raise while hiring new people at market rates (salary compression and inversion). Even if you as a manager want to keep good developers who were juniors but have now leveled up, your hands are tied.
However, most of the people I know who start looking for another job don't do it because they suspect there's more money somewhere else. They do it because they've grown less happy with the job.
So, it makes sense somewhat.
I've had recruiters talk to me at length about each of the people I'd be meeting in the on-site, their backgrounds, what they'd be covering. I've had ones give me broad strokes about why previous candidates were passed on. At the end of the day, it's not in their interest to bring too many people to an on-site who will fail spectacularly, because that means they're not doing their job properly.
I may just be lucky.
1) You've had the good fortune to work with good recruiters/HR reps, and
2) You're a qualified candidate for the role they're bringing you in for.
I say that because of an HN comment I saw from a recruiter (maybe Aline Lerner? Don't remember) that they typically send in one unqualified candidate to interview for a role first, no matter what. That's because the hiring committee always - always - has an itchy trigger finger to reject the first candidate. I'd have to imagine that a recruiter worth their salt would learn this lesson as well; you don't get good at something like recruiting without learning similar hard lessons as the other good people in the field.
Point being: the recruiter was trying to give you an idea of what to expect in your on-site, because they thought you were good, and they thought you'd be introduced at a point in the process where you could actually succeed. (The hiring committee having already gotten their itch to reject a candidate out of their collective system.)
Turned out he did 500 interviews a year. Five hundred. Unless that's your entire job, I don't see how you could come out of that without becoming an asshole.
From my own experience, that sort of load undeniably turns evaluators into assholes. I think the main problem is that to see any return on investment (i.e. a 'successful' interview) it takes about a 6-12 months assuming the person is hired. Having to do such a repetitive task with such a dearth of feedback I think will make anybody go crazy. That's not even considering any imbalance between time spent on recruiting versus time spent on strategy or other management tasks.
https://en.wikipedia.org/wiki/Bar_examination
https://en.wikipedia.org/wiki/Architect_Registration_Examina...
https://en.wikipedia.org/wiki/Principles_and_Practice_of_Eng...
We do interviews in this field like casting calls. Come on over and audition for this role. So basically we're saying 'software engineering' is a talent and not a skill.
I'm an interviewer at a FAANG company with >500 interviews in the last 5 years, I teach multiple internal courses on interviewing, and I think the system makes a lot of sense for companies at our scale.
Ask Me Anything :)
I currently have a toddler on my lap, but I'll edit this post later today to address some common criticisms and misunderstandings, but also point out which concerns I think are valid and where we should do better.
edit:
Okay, let's go through the most important points
1) I'm a Software Developer. I interview other SDEs. I ask them problem solving coding questions, algorithmic coding questions, data structure questions, and whiteboard architectural design (not at the same time, but it could be any of these)
2) Our process is REQUIRED for a company of my size. You would not believe the amount of candidates we get. We have a high bar for hiring, but fundamentally we have to be efficient with our time. That completely removes as an option superior interviewing techniques like "spend a day with the dev team working on a small real task" or "do this take home test over the weekend and then the interviewing team will review it with you". Both of these are better at uncovering good candidates than a whiteboard coding interview, but don't scale, and are themselves controversial in the industry from candidates who are unhappy of the time they require.
3) A common criticism of "algorithmic" questions (leetcode) is that they don't reflect the reality of day to day work. If a lot of people even at FAANG are working on typical 3-tier front-end-back-end-database systems, utilizing the tools and systems other employees built before, why bother evaluating if the candidates could build the next generation of such systems if asked.
Because once these people are inside the company, we'd like to think that everyone passed a similar tech bar. That means that if a new database or distributed system does need to be purpose built for a high scale system, and someone applies internally, you can be flexible with the kind of interviewing process you put an internal transfer through - you already know they passed a high technical bar, and are likely qualified to work on the hard stuff.
4) another common misconception is people underestimate the complexity of "typical" systems inside the FAANGs of the world - compared to their prior job experiences. A payment processing integration at Amazon scale is not a payment processing integration at your company's scale. An internal CRM build at Google scale is not an internal CRM build at your company's scale.
The 10,000 foot view is similar, but the expectation would be that the system would be 1/ built out faster, 2/ built out better, and 3/ scale better than a comparable project on a less technically strong company.
5) Coming back to the interview process. What that means, is that when we ask a candidate to solve a hard algorithmic problem on a whiteboard in 20 minutes, or deep dive into the inner workings of a complex data structure, or show how they could combine multiple data structures to solve one problem, we are not validating "Can this candidate write an algorithm in 20 minutes on the job at their desk"
What we're checking is "Can this candidate do something really hard, ambiguous, and time-sensitive in the Computer Science domain, when prompted to." The real life challenges will be different, but if they CAN do the first one, they'll likely be able to do the second one.
Of course we miss out on candidates who are terrible at these skills, or can't code on a whiteboard, or are overwhemled by the interview stress and can't perform. But we are willing to do that because of Point (2) above. We'd rather say no to a "maybe" candidate than hire someone who can...
If the devs at your company need to put out fires constantly, then maybe it's a good test of whether they'll be able to do that.
1) The companies that do this interview a TON, so there are bound to be bad experiences, and those are the ones that people blog about
2) The questions are supposed to be hard, but achievable. So you get two scenarios:
A/ candidates who are not good enough and are not aware of it. "How am I supposed to know if the hashmap/dicationary data structure in the language I say I'm best at maintains insertion order? I just google that every time - everyone does!". Sorry, bucko. That's the kind of in-depth understanding of your tools that we DO expect you to give a shit about
B/ Immature interviewers with a bar that's too high that are using overly complex questions and don't get noticed right away by the more experienced interviewers.
So ultimately, YEAH, the questions I ask, for me to want to move forward with a candidate, I expect you to solve the problem. But I'm not expecting you to solve it in the most efficient way or GTFO
At a high level that reflects the work that we do. The project scale may be 20 weeks instead of 20 minutes, but the level of complexity is scaled accordingly.
Of course, we miss out on some candidates that could be great at executing on a large timeline but can't demonstrate it in a short in person interview.
But, (see my edit), this is all we can do to scale our interview process, and we don't want to take risks.
i look more after how people approach problems at a high level, where they show how they build the whole system and how they interact with peers and other departments to tell if they can gather data, organise it in specs, and then fine tune nicely build parts of a system. not code monkeys.
The vast majority at the FAANGs are full stack engineers which includes long term system design.
The comparison to a car assembly factory is so ridiculously out of alignment with reality that I can see why you chose to go with a throwaway account.
That's kind of reductionist. I upvote answers that at least attempt to propose alternatives to the current status quo. The employer side isn't the only relevant one, which is likely a stronger reason why a lot of current hiring practices aren't popular. Some only work at FAANG scale with a large enough pool of applicants, some seem optimized to hire people that waste time on code puzzles (that doesn't make them an "algorithm wiz") and others generally put applicants in a position resembling begging for a job, especially for junior roles.
Just because something works well on some quantitative metric does neither imply that it is the only, nor the optimal solution, especially in two player games like hiring.
Not sure where you read "less pay" into my comment but fine, let's go with that and just ignore that quite a few companies immitate FAANG style hiring these days.
> Instead you should try to find the good candidates they miss. However there is really no reason for top companies to change their interviews.
Yeah, I feel like we're arguing two completely different things here, there's plenty of reasons for companies to change processes even if they work on some metric. When a large number of experienced participants in the fields you are hiring for are offering critique on your process it should be at least reason enough to talk about it, which is the whole point of discussions like these.
My point was that they shouldn't unless their offer can compete with FAANG offers.
> When a large number of experienced participants in the fields you are hiring for are offering critique on your process it should be at least reason enough to talk about it
FAANG are spending billions a year to keep this process running, there are huge amounts of work put into trying to change or improve it. And some things do change, but the signals from doing algorithms is just too salient to throw away.
The longer answer is we can only study the people that joined the company and failed to perform rather than those that COULD have been outstanding but our interview process selected them out. So there are flaws, of course.
I'm not sure how you could do the latter unless the biggest companies shared their data and compared scenarios of "Candidate X failed an Company Y interview, but then later got a job at Company Z, and thrived".
Also you'd be working against the bias of "Well, that just means that the Company Z is easier to work at".
There are just too many variables, team to team.
Part of the problem is even within these massive companies there is a huge diversity of types of jobs, and an engineer who thrives on working on Google AdWords might fail on the SpannerDB team (to pick two random examples from not my company)
I don’t think the FAANG-style coding puzzles have anything new to add to the conversation here. The reason big companies do that is because the questions are prompts are simple to write explain (hence interviewer has to do very very little), the answer space is generally well-defined (so it’s easy to grade, and easy for a Hiring Manager to check if the interviewer screws up), and they almost exclusively select for completion time (which is key in a high-pressure feature house company).
Most of the discussion here seems to be interested in alternatives. Through my experience, I can’t agree enough with the article author who posts:
Not a single person out of several thousand emails and messages came out in defense of the current state of interviewing processes - I’ll let this one stand on its own.
The only people I’ve seen to defend the current process in public are ex-FAANG people who were actively monetizing their experience (e.g. Gayle Laakmann).
These are not "puzzles". That makes it seem like there is some trick or clever concept the candidate needs to grasp that show "lateral thinking".
There isn't.
These are (or supposed to be) fundamental problems of computer science that require good understanding of algorithms, data structures, code performance, and can be solved in <30 mins on a whiteboard.
Yes, these exist, and there are plenty of them. A pretty common and well known one is "HEAD to TAIL" - where you have a dictionary of 4 letter words, and given an input of 2 words find a connecting path between them changing one letter at a time. This isn't a puzzle. It's a problem to solve and approach from different angles and allowing for a large number of solutions of different performance characteristics
> Not a single person out of several thousand emails and messages came out in defense of the current state of interviewing processes - I’ll let this one stand on its own.
Means absolutely nothing. Most of us are not interested in ruining the day of someone who is unhappy with the hiring process by revealing the truth that most likely it just means the person was not good enough. That seems cruel. I'm kind of going further here though because this is the second time this OP is coming up on the front page of hackernews
A lot of people at my company do, but you never hear about this stuff because nobody blogs about a career fair that came with some friendly helpful insights from senior engineers.
Also nobody blogs about recruiters when they are super helpful and give a ton of relevant interview prep material (which ours do), partially because most candidates frankly ignore the material thinking it's not relevant.
What's more is problematic is that the construction and evaluation of the puzzles is highly subjective and nearly everywhere lacks rigor. Completion time is a key metric while quality of communication is most commonly either ignored or not assessed at all uniformly among interviews.
(Aside: what's frustrating is that companies make candidates sign NDAs for on-sites; these prevent candidates for disclosing or _selling_ the information they might glean in the process, which very rarely happens. In actuality, it's the former interviewers who violate protections for "confidential info" and copyright when they go and monetize their experience post-job, or even on-the-job e.g. Rooftop Slushie).
> Most of us are not interested in ruining the day of someone who is unhappy with the hiring process
That's only true in so far as you, as an employee, are paid to achieve positive sentiment among candidates, no matter how shallow that sentiment may be. That's indeed cruel, and it's well-established that interviewers are widely unaware of the consequences of the current hiring process. That's why we get articles like those from the OP.
A true interest in improving the hiring process includes: * Making prep materials and courses freely available (helps industry candidates) * Committing time to CSE outreach to better integrate company needs to CSE (helps new grads) * Finding questions that reflect real tasks on the job (helps the evaluation have a chance of being predictive) * Closing the information gap between hiring managers and candidates: disclosure (in aggregate) of hiring rates, salaries, etc.
Playing along and doing hundreds of coding puzzle interviews is a waste of time for all involved.
Nothing could be further from the truth at my company
> A true interest in improving the hiring process includes: * Making prep materials and courses freely available (helps industry candidates)
Recruiters share this with candidates. They ignore it.
> * Committing time to CSE outreach to better integrate company needs to CSE (helps new grads)
Go to any university career fair and you'll see companies with booths clarifying these positions working against the mis information of negative blog posts
> * Finding questions that reflect real tasks on the job (helps the evaluation have a chance of being predictive)
They do. You don't have to agree, but they do. The real task on the job is "disambiguate a complex problem autonomously, and come up with a plan to address it." The interview is a 20 minute constrained version of it.
* Closing the information gap between hiring managers and candidates: disclosure (in aggregate) of hiring rates, salaries, etc.
Semi-agreed. I do wish people and companies were more transparent about salaries. But there is already an entitlement complex from a bunch of engineers on this site and many others complaining why some dude at Netflix in California is making 500k, while he is making 80 in Oklahoma writing code for Bank of America.
Appreciate it. For some background it would be nice if you clarify the perspective of your role as one of HR/coordination or a more technical view on participants of these interviews.
Do you feel like current FAANG hiring practices for lower level roles incubate a generation of programmers that trains specifically for the interview process moreso than they do for the actual role you want to fill (and if so, do you feel like that is benefitial to your employer / simply a necessity at their scale / worth changing)?
edit: That makes sense, thanks!
No, I don't think so. We would not hire a person who clearly only memorized a bunch of algorithms and data structures to solve toy problems, but cannot describe their thought process coherently, does not show a fluent ability to translate their ideas into code, or can't refactor the code or adapt their process when introduced with new requirements, scaling bottlenecks, or system failure scenarios.
See my edit, but most interview candidates I see onsite (that's after resume/phone screens) are not good enough to join the company.
Our onsite pass rate is between 15-25%
There are a lot of anecdotes like that, but the statistics I've seen has clear correlation between performance on algorithm interviews and performance on the job. I don't think there are any public studies done on this though so if you don't work at a company where you can view it internally you just have to trust that someone has gone through the numbers at these big data-driven companies.
I expect, though, that the issue is that the degree of correlation measured will depend on the population you're screening with it. If you are wanting to screen out fraudulent or otherwise utterly non-programmer persons, it will show a good correlation. However, among those who are actually programmers, it will show much less correlation, and if you're in a condition of developer scarcity, the false negatives could be more costly than the false positives.
Do you even understand what correlation means? There is a significant random element to it, yes, but that doesn't mean that there is no correlation, and the random parts from the same individual can be mitigated by doing many interviews after which you have reasonable correlation. Most interview styles has close to zero correlation, so even if we don't reach anything remotely close to 1 it is still pretty good.
Edit: About the points that it is enough to weed out people using simple problems, that isn't true either. There was significant correlation between job performance and interview performance even among those who did well. The statistics showed no signs of it capping out either, so for all we know we could make them even harder, just that there wouldn't be that many left that could pass them then.
I can only claim to have personal anecdotes, but the critiques I hear and have are things like asking you to write Bash on a whiteboard an focusing on minor syntax errors (Bash was not the primary language for the job and the candidate was obviously familiar with the language). Or asking about details from compiled languages when the job exclusively dealt an interpreted language. I'm not saying these interviews shouldn't touch on these topics. I do like to see how deep a candidates knowledge goes (sometimes it can mean they're over qualified and would be bored).
I'm not sure if it's interviewers showing off, because they've "always done it this way," or what, but I often see both job posting criteria and interviews focus too much on things well beyond what the job requires.
Of course, I'm biased and think my way is better. Outside of the minimum requirements for the job I never really care if a candidate has an answer to most questions. In fact, when they get it too quickly it seems rehearsed and I don't think it reflects their skill. For me, the technical questions are a starting point to see them talk through how they approach the problem.
Shameless nonself-promotion: The Discord "Credentials + Meritocracy"[2]
[1] https://hirecontributors.com
[2] https://discordapp.com/invite/s7bGAQM
Other non FAANG/Unicorns that don’t pay as well as FAANG can drop the practice of asking DS&A questions. But for those companies that pay really really well, there will be insane amount of people that are willing to get a job there, and DS&A is a “May the strongest win” filter (although luck play a very strong role as well, yes there are stories where a junior job applicant get 4 Hard Leetcode out of 5 questions). I happily oblige. I happily will get through 1000 Leetcode and roll the dice (apply multiple times) if I need to in order to get that salary. No I’m not willing to get lower salary than FAANG/Unicorns, that’s why I’m doing this.
For companies that don’t pay as well as FAANG, just drop your DS&A interview practice, or just lower the bar, otherwise it is a waste of time for either the companies or the applicants.
EDIT:
TL/DR. The whole answer to this DS&A debacle is only 1 thing: SALARY. End. Period. No other factor matters.
You lower the salary, no one will bother with DS&A. You increase the salary, every single person on earth and their dog will study DS&A 24/7 to get that FAANG salary. Don't believe me? Head to Leetcode forum and reddit cscareerquestions. Actually we don't even need to go that far, just look at this topic on HN every single time. It is all about SALARY. Full stop.
It is as follows:
Offer ridiculously low pay, such that only basic expenses could be paid for, like basic housing...
Then, see who shows up.
Whoever shows up... really wants a job.
You don't hire them yet.
You implement your own corporate bootcamp, where you give then coding assignments. These start easy, but progress, over a number of weeks, to those that are similar in form and difficulty to the type of work that the corporation does...
A supervisor or group of supervisors reviews their work after every week.
People who do not meet expectations are let go.
What you're left with after that process is your new hires.
That's how you cut down on frivolous resumes.
That's how you weed out the casual job seekers from the purists.
The purists don't care about money as much as working with the right people.
It's not for everybody.
People who need salaries obviously, beyond the most basic of living expenses, would be unable to apply...
If you want to be a dick and systematically screw people, just hire an army of agency contractors in some out of the way place.
...The intended goal is to figure out who is intrinsically motivated (i.e., curiousity, innate interest, desire to learn, etc.), from those that are extrinsically motivated (i.e., salary, money, title, career, corporate position, etc.)
I’m also not an idiot and I can readily bubble sort a low offer against my current comp and against the other offers.
Hypothetical scenario, tell the startups/VCs to pay more for software engineers, just a little bit lower than FAANG, then two things will happen: 1. Either FAANG will even increase their salary even more to attract type A types 2. A huge number of applicants of varying quality will flock to CS as an industry lowering the overall quality, forcing companies to do hard DS&A questions to filter applicants.
I posted what I said as a note to my future self, if/when I run a software engineering company... if/when that happens, then that's how I'm going to handle hiring...
This will differentiate companies looking for true partnership with an engineer vs those who need hamsters in a wheel.
2) Pay them to spend several weeks taking tests.
3) ?
4) Profit
I'm curious what step 3 is?
Also you say that "The purists don't care about money as much as working with the right people." but you're intentionally selecting for the wrong people, so is this intended to avoid purists?
Then why do they also apply this to candidates they reach out to? I've never applied to FAANG, only interviewed after (in-house) recruiters or internal referrals. It always seems to be the same bullshit.
Jokes aside, my point is, you can only get better, and when you get better, a non FAANG interview is actually a piece of cake, and you can just job hop every year until you maxed out your salary band, rinse and repeat.
Repeat after me: It can only get better, and one day you will actually conquer FAANG.
Take this with a grain of salt, because my experience may differ from many here (never worked at FAANG, I spent a lot of time at smaller startups in Boulder and am currently in Miami) but I have only been put in front of a whiteboard one time during many dozens of interviews and it was a generic logic puzzle to see how I performed under pressure.
Having been on both sides of the hiring table now many times, there is only one approach that makes sense to me:
1. Speak to them over the phone to make sure they are decent human being, verify again in person.
2. Be upfront with general compensation ability and expectations so that neither of you waste the others time.
3. Do a pair-programming exercise where they build a small piece of software that mirrors something that would be working on as a day-to-day there. Make it clear that finishing is not important, you just want to see their thought process and how they communicate. Ask them to refactor parts of it at some point to see how coach-able they are and how they respond to criticism.
This strategy has worked exceedingly well for me, and when I was on the other end of the hiring table the companies whose process generally looked like this were great places to work with good people.
Algorithm questions are a hazing ritual, and so many junior devs get sucked into wasting hundreds of hours practicing them when they could be building real-world skills. This practice has got to stop, IMO.
https://github.com/poteto/hiring-without-whiteboards
In my experience, the gap between the HN comments section and the real world is massive when it comes to hiring practices.
In the world of HN comments, most people tend to identify with the candidate rather the interviewers. The interview candidate is the hero, the underdog, and the person we're supposed to root for. The interviewers are bumbling fools, drunk on power and dead set on abusing their power to find flimsy excuses to reject candidates.
In the real world, most of the senior engineers I know have spent considerable time on both sides of the interviewing table. At different points in their career, they've been the ones asking questions as well as the ones being interviewed. This leads to a lot of cross-pollination of interview techniques as well as different perspectives on what works vs. what doesn't.
We can all agree that interviewing and hiring practices aren't perfect, but it's much harder to suggest better alternatives. At one point, I tried directly asking candidates how they'd prefer to be interviewed in a way that best highlighted their talents. A surprising number of people defaulted back to standard interview practices, but I also had a number of "just trust me when I say that you should give me this job" type answers.
These online discussions inevitably skew one way, because no one wants to be the bad guy defending the current imperfect status quo. Even the author of this article artfully dodges any request to suggest alternatives, instead falling back on the safe and secure "we have a lot of work to do" response.
This is really cool to hear from someone else. I've done a similar thing, asking "What do you think you could do during a technical interview to best showcase your skills?"
I too got a surprising number of terrible/generic answers, though it very likely could have been nerves in the moment.
I'm one of those engineers. The company I currently work at has no problem finding and hiring competent engineers. I also have no problem suggesting something better than what most companies do. And yet, whenever I interview at other companies[0], the most common interview experience I still have are the horrible ones described time and time again here.
The sort of "cross-pollination" you refer to is not widespread.
[0]: A few times a year, just to keep my feet wet.
Is that really so far out? In many lines of work, you're expected to be trained into the position. My experience in software is that each company thinks they want someone who already knows X, Y, and Z, and can hit the ground running with no training.
But in reality, the hire will likely spend more time maintaining P & Q, and working on S, and will need quite a bit of domain knowledge as well as knowledge of the company's custom code and practices and internal organization before they're fully ramped up. And by the time they'd even get to work on X, Y, and Z, the company has likely moved on to A, B, and C, which almost everyone there is just learning.
It's a job that requires constant learning, and you're going to need to train your new hires whether you like it or not.
That's why when I'm called on to be the one asking questions, I mostly look for whether they enjoy learning and experimenting, whether they can have fun with old stuff and convey the differences between that and the new stuff (and why they're different), and whether they're open-minded or stubbornly convinced that they know the one true way.
That's the sort of thing you need when your old system has a decade+ of custom code and the dust hasn't even settled on the new system enough for the pros to know the right ways to do things with it yet. What you really need is someone with basic skills that's also open to being trained and learning new things.
The same is true for writers: most are likely not to be interested and/or able to do their best work when watched over the shoulder by another person.
The /real/ question is this: should software be like a factory job? If so, let's clearly acknowledge it and define it, so that people can set their expectations and self-select accordingly.
It has all of it: creative jobs, theoretical jobs, and factory-like jobs. White collar and blue collar jobs at the same time.
What we suck at is admitting which jobs are which types and assigning the labor accordingly (as well as setting targets).
Huh, never thought about it that way. That's a very useful perspective. I will start incorporating it going forward.
Possibly this sort of thing is the majority of the work although not having worked for them I don't really know.
I'd also add that by saying modern factory work is quite different from Henry Ford's day, at least in developed economies. There aren't many factory jobs in the West you can get without a qualification.
At most of my companies, we tried moving exclusively to take-home interview problems for this reason. Short problems that could be solved in 2-4 hours of time, as benchmarked against current employees during daytime hours.
Inevitably, some candidates hated this so vocally that they'd ghost us, or some times even take to social media to lambaste us for trying to take away from their free time. Or we had people refusing to do the toy problem (not real work, same test for all candidates) unless we paid them hundreds of dollars to compensate their time.
It didn't matter how much we tried to explain that the entire purpose of the take-home problem was to grant flexibility to the candidate. A large number of candidates vocally hated any interview technique that didn't involve company employees giving 1:1 interview time to them.
We just filtered those candidates out of the pipeline, but I walked away with a clear understanding that interview practices will never make everyone happy.
Such collaborative interview setup also addresses interviewee concern that interviewer may not value interviewee time.
- only after I had a face to face (can be on skype, but not on phone) interview with a hiring manager/engineer, so I know I really want to work for that company. Job ads usually not very useful determinating that (Interview should work both ways.)
- Not used as a prescreening. It should prove that I really know what I'm talking about. Otherwise, maybe I'm just wasting my time (See above)
- No more than 2-4 hour (we agree on that)
- We review my code. It's good for both of us. I get feedback, the Interview gets more inside why I did what and if I really write the code. (Optional, but prefered)
It's otherwise billable time, don't see why you'd have a hard time respecting that from a candidate.
Sure, as long as the business gets to deduct the cost of the interviewers' time from that. Not gonna work out in favor of the candidate but respect is a two-way street.
After all, once the candidate (or a candidate, anyway) joins the team, it's their billable time being spent reviewing and interviewing other candidates too.
They can at tax time, whereas an employee can't. If an employer requests work from someone, they should pay them.
This is true, but it's not a problem. The problem would be everybody using the same interviewing practices.
Me, I think complaints about spending a few hours on an assignment are ridiculous. All the alternatives are much, much more objectionable to me. The main fallback I have is a contract or temp position, which means my "interview assignment" takes months.
That's largely due to the position taken up in "The dystopian world of software engineering interviews". Had the article been a defense of current interview practices, you would have received sentiments to the opposite effect.
Here's a comment on the original thread doing what you said "not a single person" has done: https://news.ycombinator.com/item?id=22332023
I agree that this was a cheap shot from the author.
The current zeitgeist of hiring practices is that we're all obligated to chant "interviews are broken" without ever suggesting alternatives. Suggesting alternatives is dangerous because someone, somewhere will come up with a reason why your suggested practice is bad. Even the author of the article avoids suggesting any alternatives.
It's the equivalent of politicians saying that they're "deeply troubled" by something, and then proceeding to do nothing because they are secretly okay with the status quo.
No one is dumb enough to go out of their way to publicly argue in favor of the current hiring practices in this atmosphere. Yet when we're put in the hot seat on a hiring committee, we all fall back on the tried and true methods of interviewing for a reason.
Nah, there's somebody who hates everything, but there are plenty of things that somebody likes. I'd be happy with both take-home problems at a moderate effort level, and Fermi problems. Clearly many people go out of their way to declaim how much they hate those things, and I don't know where to find companies that hire based on them and pay a lot, but it would make me happy.
We are failing to bring certain softwares into existence by effectively requiring programmers to their effort into the World Wide Nether, finding the Kth smallest element in an unsorted BST for the millionth time, for seemingly no purpose except for it is "how things must unfortunately be done."
The part of recent grads getting job is more related to market conditions, back in 99 recruiter would be happy to hire anyone who have attended the programming 101 while in 2001-2002 no one even wanted to talk to 5 -8 yr experience candidates right after the market crash
Ultimately, though, you're right. The problem is that software engineering interviews aren't actually about software engineering. And, that's what really needs to change.
What's your reason for thinking there are more "software engineers" than "programmers"?
This is a funny topic to me. A decade ago, before Leetcode, Hackerrank, and Cracking The Coding Interview, it was common for developers to complain that software developers were losing touch with algorithmic knowledge. HN-type websites were full of discussions about clueless software engineers doing damage to companies by implementing O(n^2) algorithms that worked fine on small datasets but failed in production. It was popular to complain that modern libraries, frameworks, and programming languages were making developers too soft to write good code.
The industry responded by re-emphasizing the value of CS fundamentals and algorithmic knowledge. The training industry responded with easy tools to teach and learn these algorithms. The internet is full of easily accessible materials to teach these principles to anyone motivated enough to Google it.
Now, the popular narrative has flipped. Internet comment sections want to hate algorithms and suggest that programmers don't need to understand the basics. Just rely on the frameworks and libraries to do the right thing. Just Google the solution and weave the libraries together to do what you want.
> Whereas a young programmer in the past may have spent their extra days writing games in Basic or static web pages, hackers these days seem to do Leetcode until the wheels come off.
Young programmers don't wake up in the morning and choose between writing static web pages or grinding leetcode. There are more opportunities than ever before to learn whatever you want.
Have you actually worked with students lately? Leetcode style systems are a lot of fun for people. It's a straight to the point system that teaches algorithms and other fundamentals in self-contained brain teasers that are straight to the point. And it's trivially easy to Google for supporting training material. In my experience, the same people who are self-motivated enough to build web pages and games are frequently also interested in Leetcode style brain teasers.
People aren't choosing between one or the other. That's a false dichotomy. All of the highly driven students I've worked with have a range of experience from toy projects to Leetcode style learning challenges.
That’s not true for everyone, especially in such high stress situations as an interview. I like crosswords, but I wouldn’t want to do them in front of someone judging me for a job in 45 min while thinking aloud.
Heck I was too young when I started learning lisp (clojure). Took a long time to get used to non-functional constructs.
Things definitely changed once I got to university though. Competition for internships meant I had to get good at interviewing. The CS program I am in encourages the career focused so grinding leetcode is popular. One of my interviewers asked me a number, and used that to retrieve the n'th leetcode question from memory.
There does exist a small cadre of people, myself included, who find leetcode and similar interview grinds unethical. I'd rather spend my time having a life or learning/building interesting tech. Interviews are then less of a performance art and instead a genuine 1-1 to work through a problem.