472 karma · joined August 28, 2008
http://myweb.brooklyn.liu.edu/cortiz/PDF%20Files/Misinterpre...
TLDR: 80% of methodology instructors have a misconception about significance. Scientific psychologists and students perform even worse.
Any programming challenge other than the most basic questions is going to have a long-tail distribution in the time it takes a person to answer them. It's easy to get hung up on something stupid, especially in a high-pressure situation like an interview. We've all had moments where we missed something "obvious" for weeks on the job.
In college they solved the time-pressure problem in tough classes by making the homework really hard and the tests really easy (like the take-home project OP suggested), but that relies on an honor code and the fact that getting a good grade on your homework is not nearly as important as landing a job. Also a lot of great programmers don't want to deal with your bullshit project because they're getting recruited by a million other companies.
If some new metrics end up in widespread use, most of the people that pass the test are going to be ones that gamed the system (e.g., added a bunch of GitHub projects), just like the majority of people that get really hard coding puzzles have seen the trick to solving them before.
No matter what you'll end up with low true positive/negative rates for any test you do. I think the right way to deal with this is to come up with a bunch of orthogonal tests and then choose candidates that pass a bunch of them. Have them debug a program, have them do web programming, have them talk about a project they did, give them a project to do if you can, etc.
The main thing I learned after doing hundreds of interviews is that I have a limited view on how to judge a programmer, and that view translates only so well to the question of "how much value will this person add to our company right now."
So yeah, TLDR, I don't think the status quo is great but I don't think any of the solutions proposed over the years are better.
Here's Peter Higgs on the subject of how academics today compares to the past: http://www.theguardian.com/science/2013/dec/06/peter-higgs-b...
Most people I know who went down the academic route have left the world or are seriously thinking about leaving. I know a couple people with positions at top universities, and around the age of 30 their careers are just starting, with tenure being potentially a coin flip.
And it always traps the most brilliant people. That's the worst part.
We can't settle this debate because we just don't know enough about how the mind works and how genetics play a role.
My question is, what's the actionable piece of advice? If you try programming and don't get it, you'll never be a good programmer? At what point do you give up and say that you just aren't talented enough?
It seems to me that the only people asking the nature vs. nurture questions are the ones that want an excuse to give up.
I'm just sayin they're totally different. But yeah they are both hard.
Next up in the topic cycle: Discrimination in tech. Why working more than 40 hours a week is killing your productivity.
I think HN has become increasingly focused on people rather than ideas and this would exacerbate the problem. IMO this should be news FOR hackers, not news ABOUT hackers.
AMAs would also largely be posted by people with a self-promotional interest (for the benefit of either themselves or their company) and upvoted by their voterings. Reddit AMAs seem like much more of a favor to the audience in comparison.
I don't even think the problem is employers [in Silicon Valley]. Employees themselves, unaware of how best to show their worth, choose to optimize for these proxies because it's perceived as a safer bet.
That said, I think when I've worked 80 hour weeks before I've gotten twice as much done as 40 hour weeks, but only because I felt driven to produce a certain output, not because I cared about the hours.
The foundational "computer science" skills held in such esteem by companies like Google amount almost entirely to an understanding of algorithms and data structures (you will almost never see an interview question based on, say, programming language theory), which was covered by exactly one semester-long course in our curriculum.
I think we learned a lot of cool stuff, but not stuff a working programmer really needs to know.
1) "Physics is like sex: sure, it may give some practical results, but that's not why we do it." - Feynman
Most smart scientists and engineers I know (not just web programmers) work on their problems due to some combination of: they enjoy the problem, they're scratching their own itch, they get prestige from doing the problem, and they make good money doing it. Even the ones that are working on "important" problems.
2) Sometimes it's hard to see the downstream effects of what we do. By improving ad targeting, maybe Google has enough cash to reinvest in something like self-driving cars, which ends up saving untold numbers of real lives in the future.
By spending time on planetary motion (seems pretty useless) in addition to alchemy (eternal youth and unbounded riches? clear winner), Newton has helped solve more "important problems" than anyone could dream to.
Summary: The incentives of people that work in science and engineering are generally far from altruistic. We don't really know enough about the impact of the stuff we do to be able to say what's important.
By the time you hit 60, you've gone from ~75 to ~80.
With the "naive" asymptotically correct solution (go up a constant number k of floors, then linearly search the remainder), two coconuts gives us a worst case cost of:
n/k + k
minimize for k, we get a cost of
2n^(1/2)
With 3 coconuts, we have
n/k + 2k^(1/2)
minimize for k, we get
3n^(1/3)
What happens when we get log(n) coconuts?
log(n)n^(1/log(n))
= O(log(n))
Sweet! So at least we can see that it converges to binary search as we add coconuts.
"Why not just plan ahead? Because most of the time, it was a very abrupt failure that we couldn’t detect with monitoring."
safercopy() will not be writing or reading garbage from memory, but the strings produced as output are not going to be well-formed unless the caller is being just as careful. e.g., safercopy gives me a string that I probably can't pass into printf, or to ANY C library for that matter.
Besides, this article is about scaling. If your needs are static, who cares what you use. It's about where you go from there, and I'd rather be on the cloud before I have to.
Management tools have different needs from 2 servers to 10 to 50.
- Sometimes you just don't know whether your traffic is going to spike 10% or 100%. And I'm not talking about one or two computers, I'm talking about adding hundreds. Are you sure your supplier has everything in stock for a rushed overnight order? Your exact hard drive model? Your aging CPU? You're seriously going to experiment with a new batch of shit and tell your team to spend all night wiring all of those racks? Do you even have the space left in your cage? Enough space on your routers? Enough power? Even if you're in managed hosting like SoftLayer, these are now their issues and Not Their Problem if they can't turn around for you in the time you need.
- In the time we were on the cloud we were better able to understand our hardware needs so that we could actually spec out machines optimally. Even better, technology improved considerably to bring us low-cost SSDs which wouldn't have been possible at the start.
- There was no way we could manage these servers and a datacenter without a dedicated network engineer and an SRE. And even that was pushing it. If you've ever tried to hire these positions, it's even harder to find good ones than software engineering. We got really lucky. Also, you've spent a lot of time on your engineering interview process and you have it down -- now do the same for two more positions that you know much less about.
- There is a huge engineering cost to moving off and building your own tools. Two servers? OK. Two thousand? Different ball game.
- I would argue that even a company like Google uses essentially a cloud solution that they've built internally and made available to their teams. AWS helps make a piece of that accessible for the rest of us.
TLDR: I thought I was hot shit too when I ran a Newegg server off my parents' internet connection, but come back when you're pulling down a megawatt and tell me the cloud sucks.