My typical childhood phase of wanting to be an astronaut or firefighter did not last long. As far back as I remember, at least as early as I was reading about the success of Bill Gates, I wanted to be a computer programmer. I remember asking my teacher, in my early teenage years, how to do this; he said “go to university and do a computer science degree”. Fast forward to today, and I’ve now been coding for about 10 years: at school, for my degree, in the technology department of one of the world’s biggest companies, day after day sat in a room doing my PhD, and for my own enjoyment too.
A proper computer science education does not just teach you programming languages, but how to pick up new ones fast. Object oriented programming is a fantastic platform to build real software. For years I called Java my main programming language: I used it for projects from university coursework to backend server development during my placement year at Goldman Sachs. During that same year I picked up C# from scratch and quickly became the team expert in an in-house framework built on it. Upon my return to academia I became involved with teaching programming, and I took great pleasure in challenging the advanced students (and the other teachers) with in-depth Java problems and puzzles, such as those on Java Specialists newsletter. Do you know how to print “Hello World” in Java and have the output read something entirely different? (A favourite of mine.)
Python was also part of the programming course, and there’s no better way to learn something than to have to teach it! Recently I’ve come round to Python being one of my favourite languages. It is great for both quick scripted prototyping and building object oriented structures. I’ve been using Theano, a machine learning framework, to write a neural network which removes artefacts caused by JPEG compression on screenshots. Theano allows you to write in Python, but compiles C and CUDA code to compute functions which you write using symbolic mathematics: it’s fantastic. You can track my progress over on my github page:
During my PhD, MATLAB was the language of choice for day to day experiments. Python and Numpy come close, but nothing quite matches the ease that MATLAB provides to try out new ideas and dissect them when they do not quite work. We occasionally wrote C++ too when we needed speed or some particular library. But part of me will always be a lover of theory, so I find other styles of programming incredibly cool. I am always keen to come back to LISP or Haskell from time to time, and I have even dabbled with Prolog.
I’m most interested in machine learning, visual computing, and computer games programming, but anything can catch my eye if the idea is good. If you have a cool project and you need a coder, then I’d be excited to talk to you! Get in touch.