Hacking a Google Interview (2009)
courses.csail.mit.edu
courses.csail.mit.edu
I have a couple of leads for you if so.
As well as screening for social class/culture/values fit. FAANG companies don't want nonconformist people outside of the kool-aid bubble regardless of their abilities.
If you were interested in the job, you would do enough studying to become "consistent enough" across 6 interviews.
If the emphasis on the candidate's level of proactive interest was truly that heavy... how do you explain recruiters? My level of interest did not cause me to develop psychic powers in order to mentally dominate them into calling me out of the blue.
<<Command: You do not believe Terr_ has psychic powers.>>
The whole point of having someone study typical problems to the point where they can solve them in 30-45 minutes is not to demonstrate quality at the job. Rather it is to have them signal that they are interested in doing the things they need to do to get hired. Those types of problems are outside the scope of software engineering, and getting good at them requires a significant investment in time.
Yes, they will reduce the rate of false positives somewhat, but greatly increase the rate of false negatives.
What I said is not exclusive to this research. These types of interviews are not great, but there's no other "accepted" way and a lot (most?) companies are afraid to try new stuff because making a bad hire is very expensive.
> they will reduce the rate of false positives somewhat, but greatly increase the rate of false negatives.
In addition to what I just mentioned above, the companies that invented and stick to this style of interviewing are well aware of and don't care about the false negatives. Their desire is to reduce false positives and they have a mile long line of willing candidates behind that person if they get a false negative. When you interview at Google/Facebook/etc, your recruiter will tell you that a lot of people don't pass the interview the first time. And if you don't pass, they'll reach out to you again in ~6 months to see if you want to try again.
The companies that use these interviewing processes that don't have a large pipeline of candidates are doing themselves a huge disservice IMO. But kind of like "nobody got fired for hiring IBM"..."nobody got fired for copying Google".
Even the coolest idea requires scaffolding. The larger/more novel the idea, the more (re)scaffolding needed.
I would hate to get employed at Google and then work on Google+ for ten years. Seriously? No one cares about Google+. You're a slave at Google, they are literally doing statistical experiments with your time.
It is known, people turn down Google offers all the time to remain independent. Working for a big company doesn't give you a lot of freedom, unfortunately.
So I'm guessing, it's not for the everyday stuff that google thinks you need to know how to invert binary trees etc, it's for that one time when you'll really need to do it.
... of course, at that point you can just look up the solution, but I guess they want to make sure you can understand it.
I've inherited enough of these (deeply nested code hairballs that can be replaced by a comparatively miniscule set of tree traversals or something) to change my view from "algo is just programmer status signalling" to "algo is a core competency that matters."
I suspect we would be better off if we used total domain specific languages for the majority of the work (data transformations) and TC languages only sparsely, where we cannot avoid recursion.
This is somewhat what you do when you write SQL, but SQL is an OLD language and it doesn't compose well with other things.
This approach is exemplified by for example Facebook's Haxl, which is a functional domain specific language for filtering content. So you write the domain code in a specific language, which is easily transformed/compiled.
(Actually your TC and your DS language don't need to be different syntactically, they can be both based on a common functional language.)
Interestingly, the interviews are very much based on TC language notions.
I once stumbled upon a problem at work that, after some thinking, I realized could be modeled as a graph problem and solved by performing a topological sort. It was a good and elegant solution to the problem. But what if it hadn't landed on my plate, and instead on someone who didn't know a thing about graphs? The problem might not have been solved (which would mean great pain for our customers, since it was on a feature that customers directly interfaced with), or worse, someone else might have turned up with a horribly messy, spaghetti-like solution.
So I think companies should actually hire people who know their CS fundamentals, even if 80% of the time they'll be doing trivial work that someone less qualified could do. What matters though is having people that are ready for the hairy stuff when it comes up.
The dirty stuff ends up being most of the work and is what counts for the most in the end product. Companies should be hiring on the ability to take care of the dirty tweaking and tuning. But this experience is something that can only be seen in past projects and that's too much work for a hiring manger to be bothered with.
Mere coding ability is easily tested with fizzbuzz-like problems.
I have an education in engineering and I am entirely self-taught on the software side. I think the most valuable thing is learning and exposing yourself to as many ideas as possible. Once you know what "boxes to look in" constructing search terms and finding answers isn't that difficult.
Context: I'm on the Google PM Hiring Committee and help craft our hiring rubrics.
Several companies (including Google) have very good associate PM (APM) programs that offer recent grads rotations through a few different roles, mentorship, and a strong peer group. Several APMs end up with rapid upward trajectories at the company and many decide to jump into starting their own companies but it is rare to come across people who did this and regret it.
Some people go into industry or consulting for a bit, get an MBA, and then join directly as a PM. Another popular route (the one I took) is to be a startup founder and learn what works and doesn't on your own terms directly from your own customers.
SWE and PM have very different lifestyles - a PM's day is slammed with meetings and most of your output is email, presentations, spreadsheets, PRDs, dashboards...a SWE's day is more focused on code, ops, design docs - fewer interrupts and more focused. But you likely know this as you've lived both realities already! My advice would be to think about which path suits your disposition and to solve for joy, learning, and impact.
> If you already know the answer, don't just blurt it out! They will suspect that you already knew the answer and didn't tell them you've seen the question before. At least pretend to be thinking though the problem before you give the answer!
Most interview questions are taken from sites like Leetcode. So you would have come across some of them if you work through those problems. Is it really that bad if you give the solution quickly? Some problems have specific "techniques" to solve them which you would likely only know if you solved it before. Are you expected to come up with a completely new algorithm to solve a problem?
For phone screens: sure. Frankly, a lot of people will bomb a fizzbuzz-level question at the phone screen so why bother spending time thinking of a good question that they might leak onto the internet, forcing you to take the time to make up another?
Interviewers tend to take the on-site a bit more seriously and will at least add an unusual wrinkle to a leetcode question to stump anyone who just has a great memory but very little actual ability.
Ah yes, deceit and trickery, the basis of any solid future working relationship.
This to me epitomizes the absurdity of this whole "leet code, cracking the algorithm" mania that has blighted the tech interview process. The only way to pass these types of tests is to spend time studying them. But then if you have studied and therefore know the tricks(use two pointers etc.) its seen as unacceptable enough that you should either lie or tell your interviewer "I know the trick" to solving this so ask me something else." The whole thing has become a scripted charade.
I get it that these types of tests and interviews work for Google but it's absurd when small startups still building a product adopt these tests simply because Google and FB do it.
There's a sad corporate uniformity to it that feels very much at odds with the hacker ethos.
Or something like that.
Probably because you deprived them of the opportunity to feel superior because they knew the answer and you didn't. You probably dodged a bullet - would you want to work with someone that got "miffed" during an interview because you knew the answer to something?
CTCI tries to make interviews about competitive programming, this book is about competitive programming itself.
CTCI offers some high level problem solving advice, and a list of exercises. This book elaborates provides a framework for understanding the exercises and elaborates on techniques for each type of data structure.
I've read CtCI, used the mentioned and/or other websites for problem solving and have had 10+ interviews on pramp.com and interviewing.io, both as an interviewer and interviewee.
Due to my experiences and experiences of other people that I know, my conclusion is that the interviewing process has not changed. Google has a pool of thousands of questions, so you likely did not hear the questions that they'll ask you before coming there, unless it's the question to establish whether you're a programmer at all or not (phone screen). Like learning to drive -- you don't go out and memorize every road by heart, but learn how to act on the road and interpret situations, signals and signs. Those resources shouldn't teach you the questions, but teach you how to really be you in an interview and perform at your nominal level.
After going through the above resources, my impression is that they have helped me type faster, make less mistakes in boilerplate and think more about the problem when it's given, before diving into it. Certainly, I do remember a few "tricks" more than I used before going through them, but overall, I think they've helped me very little with the problems in interviews and more with my behavior in interviews. The pattern that I've always seen is that intelligent people who code well pass the interview more often than not and that less intelligent people and/or those who don't code well don't pass ever.
Or point folks to some notes from an updated version of the class.
Wondering if you have any tips for that.
I code in java at my day job but its not really well suited for whiteboard interviews where I have write all this code on the board. Google interviewer was noting down what I was writing on whitboard and said that he will compile the code after the interview. Wondering if you have any thoughts about it, maybe choose something more consise like ruby?
I would love to get updated version of notes.
"The class is held in room 32-124 from 5:00-6:30 PM on January 12 - 15, 2009"
http://www.businessinsider.com/employee-retention-rate-top-t...
We need to stop repeating these statistics with no context. It's incredibly misleading.
If the size of a company doubles in a year, the median tenure will be <=1yr.
If the most junior employees of another company start quitting en mass, the median tenure for the remaining employees will actually increase.
Median tenure is a completely useless in determining how many people are leaving a company.
What is the source of this statistic? Do you have a citation?
I'm obviously biased but I think the problems are fun and the solutions are valuable. Here are some blog posts I wrote that hopefully give you an idea of our questions:
Given a table of currency exchange rates, determine whether there is a possible arbitrage: https://dailycodingproblem.com/blog/2018/01/02/find-an-arbit...
Picking a random element from an infinite stream: https://dailycodingproblem.com/blog/2017/11/30/random-elemen...
Merging k sorted lists: https://dailycodingproblem.com/blog/2017/11/29/how-to-solve-...