I started a new job at $_COMPANY few months ago. It’s amazing. I’m working closely with people who are much better than me at developing software; this week three people on my team were paring my API down to the bone and reminding me of that scene from 1984 (Chapter V).

‘The Eleventh Edition is the definitive edition,’ [Syme] said. ‘We’re getting the language into its final shape — the shape it’s going to have when nobody speaks anything else. When we’ve finished with it, people like you will have to learn it all over again. You think, I dare say, that our chief job is inventing new words. But not a bit of it! We’re destroying words — scores of them, hundreds of them, every day. We’re cutting the language down to the bone. The Eleventh Edition won’t contain a single word that will become obsolete before the year 2050.’

Every time a I finished a new draft of my code it seemed like the functions I had written – which I had just written without thinking hard, in the manner of ‘Oh, I’ll be doing this sort of task so  these sorts of functions will be helpful’ – were only half necessary.  I had a serious problem where I was learning to code faster than I could code; often I would finish a draft and I would realise everything I had done was wrong, wrong, wrong… only it would have worked, and previously in my life it would have been the best code I’d ever written and it was, only it came with the understanding of being able to do better.

I did it TDD-style, too, writing my living specification before implementing my functions, and oh Mercy I’ve never been in an environment where there are tests in the process I’ve discovered what a wonderful thing it is to have a complete suite of tests.  To find mistakes in one’s work, code can be read; code can be compiled; code can be run; but never before have I had just the ability to say “I have made some changes to this complex interlocking system; now, I would like to know if the system still carries out the intent of every other developer that’s worked on it since the beginning”.  Boom!  Possible with just a few keystrokes.  No more am I “Urgh, this looks finished-ish, let’s see if it compiles or segfaults”, and instead I am “Urgh, this looks finished-ish, let’s see if the tests pass.”.  I knew this in theory; now I know it in my heart.  I think that deserves a song!

99 confusing bugs in the code

99 bugs in the code

You take one out,

You rerun the tests,

100-

You take one out,

99-

You take one out,

107-

You take one out,

98 confusing bugs in the code!

My PhD would have been at least six months shorter if someone had taught me to code properly.