My Job Interview at Google
catonmat.net
catonmat.net
1) Have the first interviewer be the best/most-appropriate interviewer for the position (manager, lead dev, whatever). Have them write down in a sealed envelope a "hire" or "no hire" statement after the interview.
2) At the end of the assorted interviews, measure how often the first interviewer is correct in his hire/no hire assessment.
My theory is that interviewing is a great opportunity for "thin-slicing" (a la Blink) and that you'd get 98% of the value with 10% of the time invested.
Related anecdote (from gladwell dot com):
One of the stories I tell in "Blink" is about the Emergency Room doctors at Cook County Hospital in Chicago. That's the big public hospital in Chicago, and a few years ago they changed the way they diagnosed heart attacks. They instructed their doctors to gather less information on their patients: they encouraged them to zero in on just a few critical pieces of information about patients suffering from chest pain--like blood pressure and the ECG--while ignoring everything else, like the patient's age and weight and medical history. And what happened? Cook County is now one of the best places in the United States at diagnosing chest pain.
Not surprisingly, it was really hard to convince the physicians at Cook County to go along with the plan, because, like all of us, they were committed to the idea that more information is always better. But I describe lots of cases in "Blink" where that simply isn't true. There's a wonderful phrase in psychology--"the power of thin slicing"--which says that as human beings we are capable of making sense of situations based on the thinnest slice of experience. I have an entire chapter in "Blink" on how unbelievably powerful our thin-slicing skills are. I have to say that I still find some of the examples in that chapter hard to believe.
Hard to say. The economics of hiring aren't intuitive - a bad hire can do a lot of damage, esp. if it's a management position (which this wasn't, I know). It's probably better to nicely turn down 10 people (and nicely ask them to re-apply in 6 months) than to let in 1 charming, but conniving and free-riding bullshitter into your team.
in addition firing in a company like google is expensive: there's three months of training for a position like SRE (given they're scale at which google operates), during which they're paid a competitive salary (as usual), provided free food, flown out to mountain view (if from remote office).
i can understand why google would have the requirements they would: they want to maintain the start-up culture (everyone is working there by choice, there is a perfect culture fit) at a much bigger place and for a longer duration.
for what it's worth they're also open to letting people interview multiple times as well, for the same or different position. to this experience definitely help the original poster. he could come back within a year to interview (say) for a munich office position, where the competition wouldn't be as intense.
That being said, I'm still not convinced that 10 hours of interviewing is any better than 2 hours of interviewing in terms of predicting success/fit in an organization.
Also there's something else I haven't thought which is also a matter of "laws of large numbers": you simply can't hire every qualified one (and there would be opportunity costs in hiring the first person to pass the minimal qualifications).
"Hazing is often used as a method to promote group loyalty and camaraderie through shared suffering (male bonding in fraternities), either with fellow participants, past participants or both."
It seems clearer if you think about the converse: If you were offered a job 10 minutes into an interview, would you value it as highly?
Later did I know he hired someone else for the role.
Too big a company , too many employess , to value you is not the 1st thing in mind.
First basic recruiter basic questions.
Second part, call from Mountain View to London. They couldn't organize a VOIP line that didn't sound underwater. They tried calling again and the line was still bad. They proceeded anyway.
I spent 5 minutes answering a basic question about deploying some changes across a thousand machines, then the interviewer mentioned he'd heard part of it, but how would I deploy it across a thousand machines?
I talked about things stored in inodes, including POSIX attributes, he asked for an example, I mentioned immutable. Google: WHAT? Me: IMMUTABLE. Google: WHAT? Me: IMMUTABLE. INDIGO MIKE MIKE UMBRELLA ...
The whole call went along those lines and was generally a massive waste of time.
Apparently they were going to organize a second interview with a working phone line. They haven't gotten back to me in the two weeks since.
At least the blogger that is linked to got the tired "well uh we've decided you're good but you don't have enough experience hurrrrr" excuse instead of silent treatment.
To give them credit, they are probably shoveling through thousands of candidates, so it's very hard to actually give them all a proper chance, and there are positive consequences (narrow the pool) for cutting people out.
Buddy, you have a lot of time on your hands and you're using it well, keep chugging along, looks like you're close to your dream job
X - any startups like Twitter, Friendfeed, Posterous, Kashless. etc
Would be simply silly if that off by one error was the cause for rejection.
Nope, just when they're on call. I was snowboarding in Montana for a week last winter with my google SRE buddy, so I'm pretty sure about this :)
When you work for a big company and you're getting paid a corporate salary, being on call just plain sucks. Period. I worked one job like that and hated it. I'd never do it again. If you work for your self or your own startup, well... then that's different :).
I've worked jobs where you really are on 24x7x365 call, and it does suck, and google SRE is not like that.
And hey, it could be worse! Doctors can get called any time, by their most hypochondriac patients...
First I thought it was simple but the I got stuck, maybe I'm just tired. No matter how I twsit and turn it I seem to get only an even distribution over 5 numbers.
I didn't want to go through all 5^7 possibilities for the 7-die case, but I figured it's likely enough that he's right that I'd keep my mouth shut.
r = random.Random()
def one_to_five():
return r.randint(1, 5)
def mod_seven():
return (sum(one_to_five() for x in xrange(7)) % 7) + 1
def test_dist(lst):
return [(x, lst.count(x)) for x in [1,2,3,4,5,6,7]]http://spreadsheets.google.com/ccc?key=pq4tB7LQWN03gF7ImGhIP...
edit: Oops bad addition on my part, could be uniform, but you'd have to work out the actual number exactly.
1 -> 11177
2 -> 11172
3 -> 11158
4 -> 11144
5 -> 11144
6 -> 11158
7 -> 11172
...not quite
But, if you want to uniformly map a random number from set X to set Y where (IIRC) lcm(|X|, |Y|) != |X|, it seems you need an infinite worst-case running time.
Here's an informal proof that you can't have a finite upper bound to the number of iterations. After n iterations, you have |X|^n possible outcomes. But, since lcm(|X|, |Y|) != |X|, |X|^n cannot be divided evenly by |Y| (since its factors are the same). So some outcomes in Y must be more likely than others.
(This is not nearly complete, but hopefully it's enough to show how it might be right.)
Of course, in practice it is highly unlikely that you will get past more than a couple iterations before determining an outcome.
Can you go into more detail about this part?
Here is an explanation with the new condition:
Let p be any prime factor of |Y| that |X| does not have. It follows from Euclid's First Theorem[1] that p cannot divide |X|^n for any n [2]. Since every integer (> 1) has a unique prime factorization, it follows that |X|^n can't divide |Y|, because the prime p divides |Y| but not |X|^n.
[1] http://mathworld.wolfram.com/EuclidsTheorems.html [2] We are given that p does not divide |X|^1. Suppose that p also does not divide |X|^(n-1) for some n > 1. |X|^n = |X|^(n-1) * |X|^1, so by Euclid's First Theorem, if p divides |X|^n it must divide either |X|^(n-1) or |X|^1. We know it divides neither, so p does not divide |X|^n. By induction, this is true for all n > 0.
Now use that process to get 3 binary digits. You get a random number from 0 to 7. If the random number is 0, start again... eventually you'll get a number from 1 to 7, and all numbers have the same chances.
gonna have to think about that some more
if(t > 3)
return t;
else
return 2 + rand15();
}I dunno? will that work?
I'll give you a hint, though - the solution is not elegant at all. Which is part of the point.
;; * SPOILER? *
(defun rand7 ()
(loop (let ((result (+ (1- (rand5))
(1- (rand5)))))
(if (< result 7)
(return (1+ result))))))
;; * SPOILER *edit: If it doesn't work I'd like to know why...
http://ariya.blogspot.com/2007/11/random-number-15-to-17.htm...
He gives a few different ways to solve it, most with uniform distribution.
(Note: not guaranteed to terminate.)
(Now you have two bits of randomness evenly distributed among the set {00, 01, 10, 11})
2) Get another number 1 to 5, toss it if it's 5, take the LSB. Call it b.
(Now you have another bit of randomness, evenly distributed among {0,1})
3) if b == 1 and a == 11, start over. else return (4b)+a+1
Python implementation (with the -1 then +1 factored out):
def one_to_seven(debug=False):
a = one_to_five()
while a == 5: a = one_to_five()
b = one_to_five()
while b == 5: b = one_to_five()
b = (b % 2) * 4
if a+b == 8: return one_to_seven()
return a+bIf the number is greater than 6 throw it away and repeat, otherwise you have your random number.
12345 67123 45671 23456 7RRRR
R means "reroll".
Constant time execution in average case. Mathematically provable that it is as unbiased as your rand5() function. Technically not guaranteed to terminate but if you dock me points for that you're technically not guaranteed to survive to the end of the interview, are you.
int rand7()
{
return (int)(7.0f * rand5() / 5.0f);
}First convert rand5() to rand2(). The LSB from rand5() has a uniform distribution for the integers 0--3:
int rand2()
{
int n = rand5();
return n!=4 ? n & 1 : rand2();
}
Now we simply build a three bit number: int rand7()
{
int n = rand2();
n |= rand2() << 1;
n |= rand2() << 2;
return n;
}
This gives the proper distribution as well, but it's
not branch free, so really nothing new here.Couldn't you just Google for the answers to these questions in order to bring yourself up to speed where necessary? I'm not sure I see the value in trying to keep vast libraries of arcana in your head at all times.
PS: I was classified with a learning disability back in school so this could just be me.
Don't interview for positions in languages you've forgotten, then, or brush up and re-learn stuff before the interview. It's like riding a bike...it comes back to you.
Not being able to remember pointer syntax is a serious problem if you're being hired to program in C. I can understand why they'd want to weed out anyone who can't get that, particularly given how many candidates they have.
PS: Ok, if it was really just a C job of course I would focus on that.
Edit: Dammit it is like riding a bike. I have been having C flashbacks to horrible old code. O Malloc how do I hate the let me count the ways.
Around 5 years ago I was spent a lot of time working with really old Object Pascal and some C code that was upgraded to OS 8/9 and then left to rot. Let me just say that low level networking code on a OS that does not have threads is a PITA. They had something like interrupts but you could not allocate memory during them. You had to first allocate using Handel's and then do something before working with actual pointers as part of your run loop and then use that memory during the interrupts. Meh, I think it might have been the most fun coding project I have ever been on, but I don't want to do that again.
In addition their culture seems to be that once you're on the job (as a salaried employee vs. a contractor) they'll do all in their powers to ensure you aren't laid off, get fired or quit out of boredom: you can freely move from team to team, you generally work flexible hours and with little micro management. The tough hiring (with far too many false negatives but no false positive) requirement is why they're able to mantain such a culture.
Seems like a brilliant programmer, but for whatever reason that wasn't enough.
I'm still wondering, who's trying to game who?
Similar leaks are being posted every other day.
http://www.reuters.com/article/ousiv/idUSTRE4AO1LI20081125
http://www.forbes.com/afxnewslimited/feeds/afx/2008/11/25/af...
And everybody mentions WSJ as source but couldn't find the original, perhaps it's offline only.
Yeah, no mention of (mostly) not hiring but I am very sure of that, too.
(Seriously, two totally contradictory opinions on this, wondering if there is any actual evidence either way.)
Those are some of the reasons. Also sometimes HR departments are just several months behind the times.
Not trying to rain on your parade. I just wouldn't take that argument too seriously in a general situation. In this particular situation, I think Google is doing great and believe they probably are hiring.
Worst case scenario is that you end up interviewing a bunch of folks and can't offer them a position. However, if you just stop recruiting activity altogether then you'll have more than a month worth of lead time to start getting new hires after the hiring freeze is lifted.
http://alex.dojotoolkit.org/2008/11/joining-google/
So obviously they are still hiring, they're just really, really picky.
1. One who hires 2. One who recommends to hire
Avoid getting interviewed by 2.