Born English. Grew up Australian — got the accent to prove it. Dual citizen. I enjoy living in beautiful Brisbane but do still feel the tug of Ol’ Blighty — particularly my home town in Derbyshire.
I’m an avid computer programmer who loves programming languages. As an industry veteran, I’ve used a multitude of languages professionally: Ingres 4GL (don’t ask), C, Bourne Shell, Korn Shell, AWK, Perl, Bash, Delphi Object Pascal, C++, Python, Java, Ruby, JavaScript, C#, Scala, and Haskell.
Privately, I was learning about all sorts of other languages to varying degrees: Component Pascal, Oberon, Oberon-2, Modula-3, Mesa/Cedar, ALGOL, Eiffel, Sather, Icon, CLU, Smalltalk, Scheme, Goo, Dylan, EuLisp, Racket, Common Lisp, Shen, Slate, Io, Factor, Objective-C, APL, J, K, Q, Prolog, Caml, OCaml, F#, Standard ML, Mythryl, Mozart Oz, Alice ML, Erlang, Haskell, Idris, Coq, Agda, Ur, ATS, F*, Haxe, Elm, TypeScript, PureScript, Swift, and Rust.
I’m currently working with Haskell. I like other contemporary languages such as Rust, PureScript, Elm, and OCaml. Additionally other research languages such as Idris (with version 2 currently in development) and ATS (with version 3 currently in development). I’m less connected with Scala these days — though I still follow along with developments from time to time. I’ve done a bit of introductory work with Coq and Agda and have found it quite challenging.
I had heaps of fun starting with Basic on the Dick Smith Wizard in 82. Then on the Commodore 64, I wrote text-based adventures in Basic, 2D sprite games in 6502 assembly, and experimented with electronic music composition. I regret not being about to afford to upgrade to a Commodore Amiga as it was an excellent platform for writing video games, demos and compilers.
I love programming languages and what makes them tick. Earlier, I studied compilers and runtime system techniques. Lately, I’ve been studying Programming Language Theory in my spare time. I dub it the study of TLC — Types, Logic, and Categories.
Trade-offs, tricks, patterns, the big picture, dogma-slaying, and coffee.
Operating Systems and runtime systems—very similar beasts!
Distributed systems: cloud, web, messaging, and middleware.
Database systems: SQL, NoSQL, NewSQL, OODBMS, and APIs/DSLs.
Build systems: Make, Cook, SCons, Waf, Vesta, Rake, Ant, Maven, Ivy, SBT, Cabal, CMake, Nix, Shake, Tup, Ninja, Redo, Pants, Buck, Bazel, and Please. My interest was piqued initially by Peter Miller’s Recursive Make Considered Harmful. Then rekindled recently with the publication of Non-recursive Make Considered Harmful — though it fails to mention Miller’s Cook — and Build systems à la carte.
Version Control Systems: SCSS, RCS, CVS, Aegis, Subversion, Vesta, arch, Monotone, Darcs, Mercurial, Bazaar, Git, Fossil, Veracity, and Pijul. Of the distributed version control systems, I preferred to use Mercurial. Of course, Git became prominent, and there was no resisting it. I have hopes that a better system becomes prominent — perhaps one based on a theory of patches like Darcs and Pijul (but over a tokenised or abstract syntax representation).
Reading and human languages.