My experience is that what you hear is true, that you shouldn't spend significant time on job listings. The problem is that every other technique available to me had long odds. Professional network? Non-existent. MeetUps? Most people I met there have similar problems. Lunchcruit or similar gimmicks? No response, not even a lunch. I feel like I just got lucky that mavelikara gave me a chance, and I intend not to waste it.
Firstly, the job application that Decade mentioned in that thread was not the coding assignment, but was a resume.
We will not ignore an answer submitted to our coding assignment. Also, we do give feedback to the candidate if we decide not to proceed. We have had candidates who sent in a revised submission which incorporated fixes to our earlier negative feedback and we have been glad to proceed[1].
This meme I see often on HN that people who do hiring are some antagonistic bastards out to get you is simply not true. I am as much a programer as any one of the candidates. I have tried to design the interview process - at least in my part of the organization - to be fair and humane ("Do unto others.." etc) But I also have the other constraint that I have to make the process scale - hence the coding assignment. We are not using the code sent in by candidates in production. We have spent significant time developing the assignments - say, an order of magnitude more man hours than it would take for a typical programer to code up a solution.
I honestly believe that the "interview problem" is an essential complexity caused by the way the industry is set up[2]. I also do believe that a solution to the problem will not be handed down to us from the heavens. Each one of us programers have to help with the solution. Every time we get a chance to conduct an interview show some empathy and respect. Also, teach the professional recruiters working on your hiring team to also show the same. Make it clear that ill-treating any fellow programmer, even one which is not fit for the current role, will permanently ban that recruiter from working with you ever in any capacity. I also welcome efforts like Starfighter, Triplebyte etc from more prominent members of this community.
Now, the aftermath. After that thread, Decade followed up with me and we ended up sending him the coding assignment. Decade completed it and send us back the result, and my colleague's assessment of it was "This is the best code I've seen for this assignment. Let's take the next step". Few days later Decade came in for an onsite interview where he met various members of the team. We made him an offer, which he accepted. I am delighted to report that he started on the job the week before last!
[1] This is very rare, though. We do not hear back from most candidates. Few argue with the feedback, of course.
[2] My thoughts on the topic are at https://news.ycombinator.com/item?id=1964932. The advantages of this set up, IMO, far out-weigh the negatives cause by "interview problem".
I recently interviewed at google, and while I can't talk specifically about questions, I would say that medium to difficult level questions from "Cracking the Coding Interview" are representative of what you must be able to do to a startling (in my opinion) level of efficiency and accuracy. A question like "find the sub matrix with the largest sum in an NxN matrix" is absolutely fair game, at a whiteboard, on the spot.
Think about what it takes to get to this level of competence, where you can pass an exam like this. Granted, google is notoriously tough, but it's pretty common in the industry. And as you point out in your comment, we have to do this over and over.
I read about a guy who passed the bar with 100 hours of study
http://blakemasters.com/post/37113468298/pass-the-ca-bar-exa...
The bar exam (in California) is considered one of those brutally difficult, high barriers to entry that at least you only have to do once (there are training requirements to remain active in the bar).
Now, think about how much time it takes to get up to speed with data structures and algorithms, operating systems, and combinatorics, to the level where you can solve tough problems in 45 minutes to a high level of accuracy with a dry market at a white board, under the additional pressure of an in-person interview. It's hard to even think under those conditions, in my opinion.
I really don't think it's too far off to say that if you do three interviews, at difficult tech companies, you've done something approaching passing the bar.
I've heard a few people here on HN say that while they aren't in favor of a formal barrier to entry like the bar exam, they would happily take an exam like this if it meant that they didn't have to keep doing it over and over. Where they could properly prepare for it, and take it, and pass it for once and for all[1], with a proper study path, under conditions that would be consistent and fair, and get the results back (rather than a mysterious "we don't see a match at this time").
[1] As with many formal credentials, I have no problem with further education requirements to stay up to speed. The problem here is the capriciousness of it all.
Oh yes the other way around. At a previous employer, two of us took 3 full time months to review over 100 qualified candidates (i.e. that returned the task) to make 10 offers.
We made an offer to anybody who met our standards - whilst management initially restricted our headcount, they allowed us to expand the team as great people got in touch and the main restriction ended up being the maximum salary we were allowed to offer (which had us have to give up on half a dozen candidates). (We offered people the chance to show us their FOSS contributions to skip the task, but even those with big reputation couldn't resist tackling the problem.)
That's 3 full time months of not doing ANY work, no output, just full time recruiting, for two people who were probably in the top 10% of the company in terms of compensation.
It's not just expensive in time but also politically, as the team has no output to show for the period.
Where McDowell is correct is in the context of a large company whose hiring needs are very different. But I think that if you are building a small team where every member counts, you have no alternative.
Ugh. I've been in a similar position, assisting with pouring over candidates. The worst part about salary being the limiting factor is you've quite literally wasted your time weeding through the poor candidates to find the honest-to-goodness best to hire - only to not be allowed to have the cream of the crop. It's ridiculous how much time some companies are willing to invest in finding the best talent, only to turn them down because of an extra $10-30k/year. If you're not willing to hire the talent, don't spend the time searching for them. Just post your job ads with your salary expectations, and accept the first people through the door if that's how you're going to operate.
If someone is very junior or has some other discount factor (in practice that's the only real one), you'll probably go lower than expected for a 30 year old with a PhD, freeing budget to bump up someone else.
And sometimes, you get a stellar CV with enough brand on it to make the staunchest McKinsey reconsider his limit policy, so whilst you can't put the number on the ad, you can warn the candidate, get his number, and take a punt on management in case it might work.
The strongest factor for flexibility is when you have a chance to affect the outcomes for the company, but need to prove it before you can claim the pay raises. Then, it makes sense to take somebody at under their market rate, and 3 months later have a chat with management and bump up.
Hiring is a really sensitive topic because HR is often the biggest budget. I once seriously weakened my political position by attempting to automate away "Excel blue collar workers" in another department, which would have lowered the budget and therefore relative power of their boss internally. Those with the most flexibility in hiring (startups, which have no established internal territory to worry about) also have the least resources...
Another strategy too commonly used by poorly run companies. If you feel someone will be worth $X more in only 3 months, they are worth paying that from the start. Kick the employee to the curb before their probation ends if they don't meet your expectations for the full salary. These games some companies will play ("we'll hire you at $x and then in 3 months we promise you'll get another $x") is despicable manipulation of employees' trust.
I worked for one company that did this to any new hire that was a pushover (they tried with me, I only accepted after constant back and forth for "HR approval" of my expected salary which was average market rate at the time). The gimmick is that nobody automatically got the promised raise at 3 months, and nearly everyone who went to fight for it never received it. An employee had to have already embedded themselves deeply enough into a product and be considered a "hero" in order to receive anything. The result was that the great developers would leave after being stabbed in the back, leaving the least talented people in play.
Suffice it to say, I don't even negotiate for salary or vacation time anymore. I request $x and X vacation days, and if the first offer comes back with anything less, I give them one chance to fix it. If the second offer is still shortchanged, I drop them. Unless you are desperate to find a position for financial reasons or you need your first job in the industry, these games being played during the hiring process are a strong indication as to the quality of the employer in general.
You might very well think that; I couldn't possibly comment ;)
I think your strategy makes sense and once one has enough experience and market value to make it work (after all, better be underpaid than unemployed), should be the default to adopt. It also shows strength and signals value to the prospective employer.
FWIW, most of those who came in got a raise later. I put my career on the line every time (and one too many, in the end). Didn't ingratiate me with management but it was my word (not HR's) and I stood by it. If I had one criticism to make to your otherwise accurate comment it is that it is not a company but a person you are going to work for, and one should align with people who share one's values.
Maybe another year or two and I'll have the balls to sign what I write.
Unfortunately, I don't have any much evidence for my next statement, other than bits and pieces, but I think you are not a common case here. I don't think that most companies do anything close to what you're doing with these take home exams. My defense for this statement without much data is that companies are deliberately secretive about this - I understand it is for legal reasons, but I have no idea, none, if anyone even looked at my project.
Remember, McDowell said that this approach allows the company to burn a lot of a candidate's time, but not the other way around", but it doesn't say that they necessarily do. It's just that the equivalence (a 1 hour interview necessarily involves one hour of the company's time) isn't built into the process, it leaves the door for this kind of time wasting and abuse open, and I'm pretty sure lots of companies do abuse it this way.
BTW, if an employer promised to spend 10 hours reviewing my 6-7 hour homework project, with feedback, I'd try to find a way to make the time available, because it would be beneficial to me regardless of whether I got the job. But if they brush me off with a one liner from a recruiter a full month later, and ask people not to post the project to github (even if it might lead to interesting and novel solutions), I'm going to guess that they aren't doing what you're doing with these projects.
% python -mtimeit -s 'x=1' 'x<<3'
10000000 loops, best of 3: 0.061 usec per loop
% python -mtimeit -s 'x=1' 'x*8'
10000000 loops, best of 3: 0.0602 usec per loop
% pypy -mtimeit -s 'x=1' 'x<<3'
1000000000 loops, best of 3: 0.00103 usec per loop
% pypy -mtimeit -s 'x=1' 'x*8'
1000000000 loops, best of 3: 0.00103 usec per loopSome interviewers (not just the "homework") raise their bar by not allowing you to make any tiny mistake. And I just don't get it. If someone is good enough to write something like a lite version of Hacker New website in hours, I'm not going to turn him/her down because of such mistake.
I did interviews at a company for about 2 years and there was constant pressure from management to do trivial crap like that, it finally came to a head and I invited management and one of the "rockstars" to do a mock interview.
When it was evident that the person they thought of as a "rockstar" could not solve these tests(without prior knowledge of the problems), they immediately discounted them as a worthless and stopped bugging me (about that, of course not about everything else).
If I found bit shifting in an interview code sample as a replacement for basic multiplication, I would ask the developer why they chose to do it that way. They'll either a) calmly explain that their computer science classes taught it that way or it's a habit they've adopted after writing code for embedded systems or similar where the optimization actually made a difference, or b) their ego will make an appearance with a "because I'm so senior" attitude. The latter is not a good sign.
My company does 4 hour work-product tests, and we pay each of the candidates for their time. We're in Portland, not SV, so maybe there is a difference in environment.
It shows a level of thought about people that goes beyond ping-pong tables and free pizza and coke (and ironically probably costs less than those things).
Let me guess ... you are happy working there right?
static const int eight = 8;
x * eight;
Sometimes magic numbers are just that - numbers. Adding constant definitions is often a good thing, but sometimes just adds noise. static const int days_per_week = 8;
:-).When I interviewed at Apple years ago, they gave me a take home program to solve. It was interesting and I enjoyed it a lot. It required some good algo knowledge and had to be written in C. I was told in my face to face that few people ever solve it, and I enjoyed discussing it.
But the rest of the interview was unpleasant - your typical SV brain teaser riddled, algo whiteboard sessions for 4 hours, 2 days in a row. I wasn't really expecting it and wasn't prepared (my fault), so failed miserably. I think I suffered PTSD after that for a while :).
Now I feel preparing for that sort of interview is a huge waste of my own time. It has so little relevance to reality. I'd much rather put that time into building a product or learning some new PL or whatever. At least with a coding test I'm honing skills that I'll use day to day.
I talked to thumbtack for data science. They wanted a 10+ hour takehome project after just speaking to a recruiter because their data scientists were "too busy" to speak to candidates.
Yeah, I'm going to get right on that.
Bet they're bitching about a data scientist "shortage (^1)" as we speak.
(1) data scientist defined as experienced data scientists who want to waste a day's labor before even understanding what they'd be working on and/or speaking to their potential boss
edit: checked my email archive and fixed company name. Apologies...
the response from the recruiter was just "thanks, but the dev team said 'no', that's all the info i have for you"
Any company that does not realize that your time has value before hiring you will probably continue to waste it after hiring you.
There are naive ways to solve certain problems (finding primes), but there is a general guideline that tasks should finish in under one minute (I believe).
I've also soured on take-home test. I recently did a C/C++ one, I know I aced it, and I didn't even get a phone interview.
I figured out afterwards what they were doing. They were giving the take-home test to EVERYONE who applied. Then, after you submit a solution, they read your resume. After looking at my (correct) solution and my resume, they decided I wasn't worth a phone interview.
No more take home tests for me.
Personally I would given them a link to my github which has hundreds of hours of work put into projects. From my experience a homework problem that long doesn't really prove anything (I could have outsourced it) and you never get feedback (this isn't the employer's fault but of laws in the US[1]).
I think a take home quiz is the only appropriate quiz if it's a basic less than an hour quiz. Harder than fizzbuzz but easier than creating a blog from scratch.
Don't even get me started on IQ tests or personality tests.
[1] - http://humanresources.about.com/od/selectemployees/qt/must-e...
Maybe enough responses about never getting contact from employers would make them start treating people like human beings
This experience left me embarrassed, honestly. I don't think it reflects well on me that I put up with it even once.
At this point, I will participate in tech interviews, but I won't do any more take-home assignments. I suppose this could change under different circumstances.
Gayle Laakmann McDowell, who wrote "Cracking the Coding Interview", wrote an insightful post her blog about this. It's titled "Companies who give candidates homework assignments: knock it off!"
http://www.gayle.com/blog/2013/09/18/companies-who-give-cand...
She mentions something I see as a problem as well - these tests allow the company to burn a lot of a candidate's time, but not the other way around. I may have burned 6+ hours interviewing unsuccessfully at google, but they parted with 6+ hours of developer time as well (though I did spend a lot of additional hours reviewing algorithms and doing sample problems). This creates a natural set of checks and balances that don't exist with homework assignments.
She does have some good suggestions about how to use a take home if a company is determined to do it. To me, a particularly insightful one was to have a high (she says 90%+) passage rate.
I agree. If you're going to ask a candidate to spend a day on a homework assignment, you should be very close to an offer. If you're using it as an early filter, you are wasting a tremendous amount of developer time.