Do we really believe that the big consulting companies or banks don't know how to filter for the better candidates given how much their business depends purely on having the smartest people?
You'd be surprised. Many many firms code via the endless-chain-of-6-month-contracts method. Yeah, eventually the code goes to pieces and needs to be scrapped and rewritten, but that point can be years after the existing management has moved on.
Are Apple, Amazon and Google really just more lucky at hiring?
It could very well be the case. Nothing breeds success like success. The best and brightest apply to Apple, Amazon and Google because that's where all the other best-and-brightest folk are applying. If your company doesn't have that same level of name recognition amongst the programming community, you might have a lot of difficulty raising your applicant pool to the same level.
The best and brightest apply to Apple, Amazon and Google because that's where all the other best-and-brightest folk are applying
I've hired for both big tech companies and startups and the applicant pool generally isn't that much better. It's not atypical to have to screen 50-75 candidates for one hire (that's actually talk to them, not just look at a resume.) I think a lot of folks just don't realize the sheer amount of effort and expense that top companies put into recruiting.
I'd wager that pretty much EVERYONE applies to Apple, Amazon and Google, because they're known to have the best people/work/benefits. This would make it _harder_ to pick out the best and brightest, not easier.
I haven't applied even. I probably have decent enough programming and system administration skills. I can recognize problem types from my computer science classes but I would need to spend time googling for the exact problem and possible solutions before I could give an answer.
The reason I haven't bothered to apply? I don't know how good I really am. I keep jumping between over estimating and under estimating my ability. But, I'm pretty sure I'm not a rockstar since I suck at math. A weak math background keeps a bunch of computer science out of my reach. Still, I've taken a course on OpenGL and managed to pass with a high A because I worked extremely hard to understand all of the vector math that was required.
It certainly doesn't help that I've failed every logic puzzle that's ever been presented to me. Ask me to reverse the order of words in a string and you'll get:
"Words in a string".split(" ").reverse.join(" ") #=> "string a in Words"
I see little point in optimizing that until you can justify the need for a more optimal method. Whacking my brain for a better solution isn't worth it otherwise.
TL;DR -> I haven't applied because I don't think I'm good enough.
If you want the job, I encourage you to apply. The worst case is that you get rejected, and you lost a few hours of your life interviewing.
At Google, logic puzzles are frowned upon for interviews. I personally ask questions that I expect candidates to be able to reason through and gradually refine into a good solution, there is no grand aha moment in the problems that I ask.
You'd be surprised. Many many firms code via the endless-chain-of-6-month-contracts method. Yeah, eventually the code goes to pieces and needs to be scrapped and rewritten, but that point can be years after the existing management has moved on.
Are Apple, Amazon and Google really just more lucky at hiring?
It could very well be the case. Nothing breeds success like success. The best and brightest apply to Apple, Amazon and Google because that's where all the other best-and-brightest folk are applying. If your company doesn't have that same level of name recognition amongst the programming community, you might have a lot of difficulty raising your applicant pool to the same level.