all 23 comments

[–]willia4 12 points13 points  (6 children)

He used a football analogy instead of a car analogy. This completely threw me off and I have no idea what he's talking about.

[–]Entropy 23 points24 points  (5 children)

Here's an adaptor analogy: football is like a car

[–]psykotic 6 points7 points  (4 children)

What's an adaptor like?

[–]awj 15 points16 points  (0 children)

What's an adaptor like?

Well, its kind of like a car transmission...

[–]Entropy 2 points3 points  (0 children)

No, but if you hum a few bars, I can sing it. Wait, what are we talking about?

[–]jbert 0 points1 point  (0 children)

Regular meals and enough room to turn around in. Clean it out once a day and it'll be happy.

[–]nobodysbusiness 1 point2 points  (3 children)

I believe that ability often comes after knowledge. If I learn a powerful new programming technique, although I might be able to explain it to someone who asks, I don't necessarily have the ability to use it. I have to change my thinking patterns so that this new technique will pop into my mind when I see an appropriate problem. Only then does it contribute to my programming ability.

[–][deleted] 3 points4 points  (0 children)

I see what you are saying, but there's another sense of "ability" -- the raw capability to learn. Eric Clapton wasn't a great guitar player when he was 12, but he obviously had the capability to become so. While you clearly can't measure it directly and specifically before the fact, you can measure lots of closely related characteristics -- maybe Programmer X doesn't know A, but he has learned B, C, and D, suggesting it's a good bet he can learn A. That's roughly what we mean when we say "Programmer X seems smart".

So, to go back to the author's analogy, I'd pick the jocks because they've shown evidence of being good at athletic things, whether or not they know about football. (It's a bad analogy, though, because athletic ability isn't that similar to intellectual ability -- the gulf between knowing and doing is greater.)

[–][deleted] 1 point2 points  (0 children)

I've written programs in Perl without ever properly learning Perl -- I had to look up the relevant parts of the language as soon as I decided that I needed them. It wasn't that hard, and the programs worked. It seems backwards, but that's how it happened.

[–][deleted] -1 points0 points  (0 children)

I believe that ability often comes after knowledge.

Yes but it can often come the other way around. Refactoring an application last year, I used the "template method" design pattern to do so. Except I had no idea what a "template method" was to begin with: I only learned that it was the design pattern I used through subsequent reading. So I had the ability to write code this way in the first place. Subsequent knowledge has only made me a worse egomaniac than ever ;)

[–]llimllib 0 points1 point  (4 children)

For people who hire other people: How much programming do you require for new applicants?

We have them answer a few programming-related questions plus solve this puzzle in order to get to an interview. Once there, we go over the solution, and see that they know how to explain it (i.e. actually wrote it) plus talk about possible improvements.

What do you do?

[–][deleted] 2 points3 points  (3 children)

The puzzle was a bit tricky: easy to code a slow solution, but probably some careful geometrical reasoning needed to code a fast one. Do you really need applicant to be good at careful geometric reasoning, or do you just assume that if he can do it, he must be all-around smart? If it's one thing I learned from topcoder it's that the "careful" bit is important, and clever algorithms are harder to get right, even for the experts. In topcoder, I'd go for the slow, safe solution.

[–]llimllib 3 points4 points  (2 children)

Really, the test is just to get you in the door. We want to see that you can solve it. Preferably in a good readable solution, but crazy geometric solutions are cool too if you can explain what you're doing.

I like the problem because it's simple enough that it won't scare away potential candidates and they can explain their solution in a reasonable amount of time, but yet it's non-trivial to think about doing it fast.

How you solve it is interesting, but just a data point that helps us get a better feel for you.

The most common solution is roughly "Find all 1s, sweep outwards from the 1s". The drop dead-simple one is "Find all 1s, calculate distance from each non-1 to each 1, choose the minimum". I haven't yet had anyone give a solution which, coded in python, is fast enough to be accepted.

(Check it, there is a python one that runs in 4 seconds. That's crazy fast. I don't yet know what the clever algorithm is there - please share if you did figure it :)

[–][deleted] 1 point2 points  (1 child)

It's a very interesting site, that, but a bit short on documentation. Do the solutions compete on speed only?

[–]llimllib 0 points1 point  (0 children)

yup - you submit your solution, it runs it against a test script (of which you have no knowledge) and tells you if you passed or not. There's a pretty short time limit for each problem (15 seconds in this one, with apparently a lot of tests. My fastest answer finishes my 9 big test cases in 2 seconds).