When I was an undergraduate at the University of Utah, I took the Putnam exam. It’s considered one of the hardest mathematics tests in the world. Those who do “well” in this exam have exceptional mathematical ability: outstanding at solving these tough problems in a short period of time.
The test is fantastic at finding out one’s “Math IQ” as it were. Consequently, you would think that people with high Math IQs are great at research, right?
And of course, some great researchers (e.g. John Nash), didn’t do “well” in the exam.
So there appears to be a clear difference between one’s innate mathematical ability, and one’s mathematical output.
I began thinking. Can such a difference manifest itself in the computing domain? After some thought, the answer is … of course!
Let me explain why.
Nowadays, it’s all the rage to find good hires via means of challenges. In the computing domain, these challenges are generally either in the form of competitive programming questions, or hackathons. In some cases both!
However at times, in spite of this screening process, companies find out that the people they have shortlisted from these contests are not suitable for the company. Note I’m not talking about things like a cultural fit here. I’m talking in terms of actual “technical fit” or ability.
How could this be? After all, people who do well in hackathons (or programming contests) have demonstrated great ability. So it should be the case that these are good hires. Right? Right??
The mistake boils down to assuming that those with “high programming IQ” will necessarily produce good real world output. Or, that those with great “hacking ability” necessarily have a very “high programming IQ.” It’s just like in the case of the Putnam. Sometimes, people with high math IQ are not good researchers, whereas good researchers may not have an exceptionally high math IQ!
Does this mean we should throw out all these screening tests and trust to chance? Of course not!
It just means we should understand what skill sets these types of programmers bring to the table.
Let’s take the case of the competitive programmer. What are the skill sets needed to be a good competitive programmer?
Firstly, excellent command over the basics, of course! Programmers such as these have a sixth sense of understanding what is the most efficient way of solving the problem. I don’t need to mention, therefore, that these whizzes have excellent analytical skills that are honed and developed over time. Generally, these programmers prefer code over people. In other words, most are introverts.
What about hackers? Those who seem to win or do well in hackathons? What makes them tick? Well, these people get the job done. They may not be the best programmers in the world. No. But they have a deep understanding of what’s needed. They look at the big picture and work towards that. Combining various pieces of existing software and tweaking it to the problem statement requirements, they don’t waste time reinventing the wheel! And to the extent a programmer can be extroverted, they are.
Of course, these skill sets are not mutually exclusive. You can be both a good competitive programmer, as well as a good hacker. Just like being both a good research mathematician with a fantastically high math I.Q. However, as you can see, there is not an insignificant difference between the two!
I guess the main thrust of my argument is to beware. If you are looking for a good hire through challenges, you MUST be aware of what skills your challenge tests. As well as what you are looking for. After all, if you test the ability of a fish by asking it to climb a tree, you will be disappointed.