We had our first driving test in week 6 of our first term… it was really quite daunting, but we got a practice test a week before to get us used to the process and the test environment. Since then we’ve had another one for Java and recently we had our final Haskell driving test. The whole process has become rather routine, but driving tests as a concept are a difficult thing to get your head around as an examination method when you’re used to the pen and paper exams that access content retention we take in high school.
A driving test basically tests your practical programming skills, challenging you to solve a problem in a time pressured environment and without access to aids like Google. If you’ve done any programming at all, you’ll understand that its just not the same as a normal exam. Like a physics practical, if the experiment just isn’t giving you the results you expected that one time you do it in an exam… too bad, write the report on how much it sucks. In a practical, a lot more things can go wrong and you can never really fully ‘prepare’ for them. A lot more rides on the conditions on the day, how well you understand the problem and whether the approach you choose to take is valid or not. Thats not to say you can’t prepare for them, its more that you can’t cram for them.
The first computing course I ever did was in Sydney and the practical exams were pass or fail. Either you completed the problem and your solution passed auto-testing, or it didn’t. However, you did get several attempts with more and more time provided. Time is precious in coding, sometimes you can hack away at a problem for hours to no avail, but ultimately the more time you spend on it the closer you’re getting to the right answer. The times I’ve walked out of driving tests wishing I had more time to work on that last question or that I’d been quicker in getting out the easier functions at the beginning… ugh. At Imperial, you only get one shot, but your code is marked by a person who uses the auto testing results as an aid. There are marks given for each correct function you write, and getting a pass mark really isn’t that hard.
The general format for Haskell driving tests are that they are built up in sections. The spec sets out this elaborate structure that you’re going to build and at first you’re just overwhelmed, but the instructions are quite detailed and really guide you through what you have to do. In Part I you might write some simple functions that you can’t really see the use for, but then in Part II you start writing more complex functions that use those earlier functions, and need a better understanding of the concept we’re exploring in the test. in Part III things really start to get tricky and often theres a super hard question right at the end for the geniuses out there who want to get the last few marks. I never really make it to the last question in time, and even if I did I rarely understood the concept well enough to make a decent attempt.
What I most enjoy about the driving tests is that its not just about testing us, they are also really interesting and a good challenge. They introduce us to new concepts and what is possible with the language we’re learning. Even though I know we’ve been excessively handheld through the process, it’s still cool when the code does what its supposed to, and the cool concept we’ve been reading about actually comes to life. All the information you need to know is provided in the spec, and seriously these things can be like 15 pages long, so its a lot of reading. I did every past paper I could find and each one taught me something new and was an interesting read. It sounds geeky, but I did enjoy doing them.
All of this applies to driving tests in general, but on a personal note, Haskell is my favourite programming language out of the ones I have come across and while we didn’t really get into the more powerful things it can be used for, I’d be keen to look into any other opportunities to play around with a functional programming language, rather than the imperative ones that are more well known (i.e. Java, C etc). I think that while the initial thought process involved with the recursive aspect to Haskell is hard to understand, its worth giving it a go, and I definitely found it very rewarding.
For now, with my final Haskell driving test over and done with, I’ll miss it, but its time to get into Java again. (and this term we’re getting into the serious stuff… apparently)