A while back my sister, who teaches at a secondary school, asked me to give a talk to her students about what I do. After some initial resistance (about six months), I decided I’d do it.
I started thinking about when I was at school and how I had no idea what I wanted to do with my life. In many ways I am none the wiser now, but I have found something that I enjoy doing, that challenges me, and that I can keep on learning as I do it. This may not always be the case, but it is for now. At school I just did as I was told. I got good grades, I went to a good uni, got a good degree. Then it was all a bit scary as I was suddenly on my own and free from the expectations of my parents and teachers / lecturers. There was a vague idea that I should get some sort of job / career, but it was a lot more fuzzy about what this should be and what ‘good’ actually meant in this context. Basically it was now a lot more about what I actually wanted rather than what other people wanted for me. And somehow I ended up going into IT and now I’m a software developer. Rather surprising for a history graduate, but it’s worked out pretty well.
There are a lot of parallels between writing a history essay and writing software that I would never have thought of. Essentially both consist of a problem that you need to solve. There are lots of ways the problem can be solved, but no ‘right’ way. The same rules apply in essay writing and software writing: clarity and simplicity are better than complexity and over-cleverness. I was once told that a mark of a good essay was if you could read it all at top speed (with as few pauses for breath as possible) and it still make sense. This doesn’t quite apply to software in the same way, but it’s pretty close. If you can’t understand what the code does after a quick look then it’s probably too complicated. A colleague uses what he has termed the ‘squinty eyes test’ – the code passes if you can squint at the screen and it still looks readable (this is as much to do with good formatting as concise code, but still applies.)
Another similarity between writing an essay and writing software is in the different ways you can slice up your problem and solution. When I was first taught how to write a history essay I was told to chronologically detail what happened. Thing A happened because of Thing B, which then caused Thing C. But history is rarely this simple. It is more likely that D, E and F also had an effect on C, and that A would never have happened without C. So then I was shown a more sophisticated writing style which involved breaking things up into different topics. Then I could analyse how each topic relates to another, in an approach that more represents object oriented programming. I’m not saying that an object oriented style is necessarily more sophisticated, but it is a style that makes more sense when looking at the bigger picture (although can be harder to think about when you first consider the problem).
Anyway it’s fair to say that if you’d told me when I was at school that I would now be a software developer, I would not in a million years have believed you. In fact it’s likely that I wouldn’t have known what a software developer even was. I studied IT at GCSE but I seem to remember my friend ‘helped’ with most of the practical work (which mainly consisted of doing crazy things in Excel) while I wrote it up. (And I got an A* while he got a B – shows how screwed the exam system is). I figured it could be useful to enlighten the next generation about IT jobs in the real world (not that I’m arrogant enough to think that they will actually care what I have to say!)
I guess the other reason I changed my mind (and why I started thinking about this at all) was that I’ve been to a bunch of talks lately where I feel that I haven’t really learnt anything new. I don’t mean this as a bad thing. I’ve been at talks where I’ve thought ‘I know that, I agree with that’. I’ve still enjoyed the talks, because they’ve given me the chance to think about things and because they’ve let me see that other people think the same way as me, and that’s really useful. So while I’m pretty nervous about having to get up in front of a bunch of sixteen year olds and talk about being a software developer, I’m actually pretty excited that I get the chance to share something I’m passionate about. If that makes me a geek then so be it.