Python — my language of choice since 1999. I've used it to write web servers, database systems, daemons, scientific simulations, blog engines, and innumerable scripts for various purposes. I'm deeply familiar with the language, its libraries and best practices, and I bring that to bear on writing high quality code. Today I mainly use Django and Flask for web development, and I'm experienced in a wide range of supporting technologies such as Celery, SQLAlchemy, etc. I'm also proficient with various data analysis/visualisation tools such as Pandas, Numpy, matplotlib, bokeh. I prefer test-driven development where possible, supported by tools such as pytest, nose, Selenium, and Cucumber.
System Administration / DevOps — I'm an experienced UNIX/Linux/BSD/OSX sysadmin; I've set up and maintained servers running Nginx, Apache, PostgreSQL, MySQL, RabbitMQ, ElasticSearch, InfluxDB, Grafana, Supervisord, SELinux, Jenkins, etc. and am comfortable working with infrastructure tools such as Docker, Ansible, SaltStack, and VirtualBox/Vagrant. For version control I prefer Git, but have also worked with Mercurial, Subversion, Darcs and CVS.
JavaScript/HTML/CSS — I'm a very experiened front-end developer, having worked with HTML since 1994. I've written a lot of JavaScript and can get things done with jQuery, d3, Prototype, Processing.js, Bootstrap, Node, Grunt, etc. I'm proficient in HTML5 and CSS3, LESS/SASS, AJAX, JSON, REST, and the principles of responsive design & mobile first. This CV was typeset in responsive HTML/CSS.
Haskell — a key tool for much of my scientific work between 2004 and 2014, when I applied it to language processing, formal logic, simulations, GUIs and web apps. It's a beautiful and mind-expanding language, and using it has informed my general programming practice for the better.
Other languages — I'm a multi-linguist and a fast learner, with a rigorous grasp of programming fundamentals across multiple paradigms. I know Ruby though these days mainly use it for Behaviour-Driven Design (via Cucumber); I wrote a lot of Haskell for my PhD – it's a mind-expanding language which has informed my general programming practice for the better; I write PHP when I need to do get things done in Wordpress; I know Objective-C and have written some iOS apps for personal use; I'm also competent in Java, Scala, C, LISP and various shell scripting languages.
2009 — 2014
PhD in Computer ScienceSwansea University
Thesis: Structural Usability Techniques for Dependable HCI — inventing/applying new tools for automated analysis of user interface functionality and safety using mathematically rigorous techniques; programming in Haskell, Python and JavaScript.
Conception, formalisation, implementation and case studies for two novel techniques supporting rigorous development of dependable interactive systems. They are: model discovery, a reverse engineering technique that automatically builds a network model of a system's interaction behaviour via dynamic analysis; and theorem discovery, an analytical technique that automatically finds sequences of user actions having similar effects, with the intention of uncovering potential interaction surprises. In each case I formally described the technique and implemented/applied it in several example systems, programmed in Haskell, Python and JavaScript.
2004 — 2008
MPhil in Computer ScienceSwansea University
Thesis: Tool Support for CSP-CASL — language design/formalisation and tool implementation for a new mathematically rigorous system specification language; compiler programming in Haskell.
Language design, tool support, and case studies for a new system specification language called CSP-CASL (a process algebra with algebraically specified datatypes), within the Processes and Data research group. This involved design and formalisation of the language's syntax and static semantics, and implementation of its parser and static analyser in Haskell.
1992 — 1995
BA (Hons) Computing & Pure Mathematics, first classCardiff University