A conversation on the train home the other spurred off a thought with me. I was talking with a fellow commuter who works in Real time communications for a financial organisation. He was saying that the process for hiring where he works includes BrainBench tests to whittle the 100 hundred applicants down to 5-10. If you don't know BrainBench, then it takes the form of a timed quiz relevant to your subject area.
Now I have never used BrainBench to assist in the hiring process and I could only compare with the one occasion that I have taken the test. On that test I answered the majority of questions without any hesitation but then I came to several that I had no idea how to answer. Now it wasn't that I am a bad candidate with no experience, but the questions were the classic 'Connect to the database and get results' section.
In my past experience I have written the code to write to a database using System.Data precisely once. Ever since then I have used the company specific wrappers. Code that implements automatic connection string retrieval from the registry, or caching into memory to avoid hitting the database many times, or just makes it so that all code is talking to the database in the same way (so we can reuse our bug-fixes). In fact in my current role I have even refactored the previous company database connection library to make it work with more databases, and present the methods in a more consistent manner.
So when I was confronted with the questions in BrainBench I took a few seconds to look at the question and did exactly what I would have done at work. Since a common reusable data access library was out of scope, the next best was a VS help example. I flipped over to VS and searched help on System.Data. This information basically allowed me to refresh my memory and answer the questions that came up.
I was told by the agent that I scored very highly on that test, I certainly got through to the next round of interviewing very quickly,. Here I got interviewed 45 minutes late by an interviewer caught in tube delays who seemed determined to spread his bad mood on. Had I been offered I would have turned down the opportunity to work for him as tube delays as far too frequent. However the question remains as to whether the interview process would have gone as far if I had not 'cheated' on my BrainBench test?
To my fellow commuter what I did was wrong. I pointed out that these days I spend most of time out of code (unfortunately). I manage, discuss, organise and design, and although I review, I rarely implement. I know I am failing to exercise the important structures in my mind that remember how to write these pieces of code, and while I can still look at code and see more bugs in it than most people around me, writing Database access routines is one of the skills that is fading away as time passes.
So now for the big question, Did I cheat on my test? I think not. I believe I was asked an irrelevant question. It was set by somebody who had read the book, but had never been in the frontline, somebody who worked for BrainBench and wrote a generic question. This is the problem. There isn't a BT, BBC, Google, MicroSoft, Apple, UBS, Goldman Sachs, Merrill Lynch, IBM, LastMinute, Amazon or eBay book you can buy. When I did my test I also doubt if somebody from the company I was interviewing for had taken the test. I doubt they had said that's an irrelevant question here as we use the MyCompany.Data library. I doubt if that section of questions was relevant.
What do you think?
Did I 'cheat'?
Did I simply use good practice to ensure that I knew the code I would be calling before implementing an answer?
Do you find BrainBench relevant? (Please tell me if you are a candidate, recruiter or hiring manager)