Born English. Grew up Australian. Dual citizen. Enjoys living in beautiful Brisbane but does still feel the tug of Ol’ Blighty — particularly Scotland and my home town near Nottingham.

I’m an avid computer programmer who loves programming languages. As an industry veteran of 25 years, I’ve used an multitude of languages: C, AWK, Perl, Delphi Object Pascal, C++, Python, Java, Ruby, JavaScript, C#, Scala.

While I was using those languages in industry, I was learning about all sorts of other languages: Component Pascal, Oberon, Oberon-2, Modula-3, Mesa, ALGOL, Eiffel, Sather, CLU, Smalltalk, Scheme, Goo, Dylan, EuLisp, Racket, Common Lisp, Shen, Slate, Io, Factor, Objective-C, APL, J, K, Prolog, Caml, OCaml, F#, Standard ML, Mythryl, Mozart Oz, Alice ML, Erlang, Haskell, Idris, Coq, Agda, Ur, ATS, F*, Haxe, Elm, TypeScript, PureScript, Swift. Of course, my depth of study varied greatly. In fact, most of these languages I have learnt only superficially, often from research papers or books alone.

Languages I like at the moment are Haskell, Scala, PureScript, and Idris.

Formative Years

I enjoyed programming for about 10 years prior to joining the industry. I had heaps of fun starting with with Basic on the Dick Smith Wizard in 82. By the time I got a C=64, I was writing text-based adventures (aka “go north; get chalice”) in Basic, 2D sprite games in assembly, and experimenting with electronic music composition. I regret never upgrading to an Amiga 500 as it seemed like an awesome platform for writing video games, demos and compilers. I didn’t own a PC until after university. While I was studying, I was fond of the terminal labs. At the time, I was quite partial to VAX/VMS and it’s DCL shell scripting language until I was introduced to UNIX with it’s Borne and eventually Korn shells.


  • Programming languages: Type theory, Category theory, Logic/proof theory (TLC).
  • Apps—trade-offs, tricks, patterns, big-picture, dogma-slaying, and philosophy.
  • Systems:
    • Runtime systems and operating systems—very similar beasts!
    • Distributed systems—cloud, web, messaging, middleware, and highly-scalable servers.
    • Database systems—SQL, NoSQL, NewSQL, and APIs (e.g. LINQ).
    • Build systems—GNU Make, Cook, SCons, Vesta, Ant, Maven, Ivy, SBT, Cabal, Shake, Nix. My interest was originally piqued by Peter Miller’s Recursive Make Considered Harmful.
    • Version Control Systems—RCS, CVS, Subversion, Aegis, [GNU] arch, Vesta, Darcs, Mercurial, [GNU] Bazaar, Git, Veracity (with integrated bug tracking and wiki), Fossil (with integrated bug tracking, wiki and technical notes).


  • Programming Languages—Types, Logic, Categories (TLC).
  • Human languages—such as Spanish and French.