Sunday 23 May 2010

Retrospective Learning

This post was inspired by a question I found on Stack Overflow recently:

In the theme of the stackoverflow podcast, here's a fun question: should I learn C? I expect Jeff & Joel will have something to say on this.

Some info on my background:

•Primarily a Java programmer on "enterprisy" systems.
•Favorite languages: python, scheme
•7 years programming experience
•A very small amount of C++ experience, practically no C experience
•No immediate "need" to learn C
So should I learn C? If so, why? If not, why?

My answer was essentially no.

Over the last year or two I have come to the conclusion that technology simply advances too quickly for a single person to learn everything he or she may need ahead of time. But the real question is do we need to?

Case in point: A little over a year ago I was job hunting and I had to sit a brain bench* test in C# .net 2.0. I'd just passed the development fundamentals MCP in .net 2.0 and I felt like I had a good handle on the subject so I fired up the brain bench website and started the test.

The first question had me reeling; it was so obscure, so specific, and so difficult it nearly blew my mind. I mentally shook myself and decided to skip to the next question. Again, so difficult I couldn't begin to answer it. The questions seemed to require the testee to have a very fine grained knowledge of the .net 2.0 documentation. I'd studied enough to pass an MCP, but there's no way I could remember every esoteric detail of the entire framework...

Now I'm in a bit of a panic; I'm job hunting and I don't want a poor score in this test to destroy my reputation. I mean I've already been developing for a few years with mostly positive feedback from my peers - I like to think I'm pretty good at what I do!

What are the rules for Brainbench tests?
Unlike many standardized tests, individuals are encouraged to use reference materials [...]

The test rules state that references can be used, but the test must be completed by the testee alone. There are 3 minutes per question and the clock is rapidly counting down on impossible question #3. I didn't imagine I'd have to, but I fire up the msdn website and do a quick search... Success! I select the correct answer from the options and move on to impossible question #4. Again the msdn holds the key to victory.

So I traverse the sequence of 26 remaining impossible questions and manage to find an answer to all of them. In the end I achieve a pretty decent score. My transcript number is 7736779 if you're interested in taking a look (brainbench.com).

Which brings me back to my original question: Is there a difference between knowing something and being able to find out in less than 3 minutes? Or, if I can find the correct answer to a seemingly impossible question in less than 3 minutes is that functionally equivalent to knowing the answer? Is there any point in forcing ourselves to study?

Or am I just lazy?

* In my opinion brain bench tests are artificially difficult and utterly fail to measure a person's abillity to develop software.