I offer freelance programming and consultancy, specialising in the Python language and web development using Django and Flask, with expertise in many related technologies including devops, testing and JavaScript/full stack.

With over 20 years of professional experience as a programmer, scientist, sysadmin and teacher, I'm passionate about writing great maintainable code, and helping others to achieve that by promoting and sharing deep knowledge and best practice.

Skills

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.

Education

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

Employment / Clients

Since 2017

Senior DeveloperReckon Digital

Django/python back-end development on a variety of projects, working also with PostgreSQL, Docker and related tools.

Since 2016

Consultant InstructorLearning Tree International

Delivering intensive instructor-led training in python programming to small classes of local and remote attendees on an occasional basis.

2016 — 2017

Senior Digital DeveloperLand Registry

Microservices development using Flask in an agile test-driven team creating a property search service for the gov.uk portal, mainly concerned with service orchestration using JSON, SOAP, RESTful APIs and RabbitMQ/AQMP, and integration with legacy login/account services. As the team's resident python expert much of the value I bring is in improving code quality and robustness, debugging tricky issues, enhancing testing, and mentoring other team members in all of the above. I also handled migration of the team's development environment to Docker.

2015 — 2016

Web DeveloperAlfa Aesar

Porting the company's CMS/e-commerce site to Django, working remotely as part an internationally distributed team. Back-end development in Django/Python; front-end development in JavaScript with extensive use of jQuery and AJAX. I led the introduction of automated testing to the project (unit tests, Selenium, etc.), led the migration of the codebase from SVN to git, and championed code quality and process automation throughout. Most of the team were new to Python and so a key part of my role was mentoring and promoting best practice, both by example and education/documentation.

2014

Services Software EngineerVertu

Working on technical debt reduction projects, in a role combining reverse engineering with new development: reimplementing, refactoring, extending, documenting, and maintaining legacy back-end web service systems using Python, Django, JavaScript, XML, Ansible, Lettuce, Jenkins, etc.

2014

DevOps ConsultantCarbonCulture

Creating virtual-machine encapsulated development environments for use by the company's employees and other contractors, enabling new-starters to get up and running in minutes — using Vagrant, SaltStack, Fabric, and VirtualBox.

2008 — 2013

Research AssistantFIT Lab • Swansea UniversityFuture Interaction Technology Lab • Swansea

Scientific research and implementation of novel and rigorous techniques for modelling/analysing user interfaces and other formal approaches to user interface development. Programming in Haskell, JavaScript, Python, and Mathematica: reverse engineering, simulation (e.g. of medical devices), implementing new tools for modelling and analysis of interactive systems. Dissemination of results via publication, conferences, invited talks, etc.; — see Publications ; this work led into my PhD research — see Education.

2002 — 2008

TutorComputer Science Dept • Swansea University

Lecturing on various topics (e.g. C Programming, Linux, Data Comms & Networking, Operating Systems, Computer Architecture); tutorials; student project supervision; development and maintenance of an in-house student marks administration system (Python and PostgreSQL); organisation of annual student conference.

1995 — 2002

Programmer/Analyst • Sysadmin • DB AdminVarious

Various programming, analysis & sysadmin roles in several different companies in the Cardiff area. Programming in Python, C, C++, Pascal, and Clipper/dBase under Linux, Windows and Netware.

Personal

A photo of Andy Gimblett in the Copenhagen LEGO Store

I'm easy-going and friendly; I love to meet new people and hear their stories. I'm flexible and work well in a team or individually; I'm self-directed and I love learning and problem solving.

I'm a skilled and confident communicator, both verbally and in writing. I've written university courses, scientific papers (one of which won a best paper award) and two theses (MPhil and PhD). I'm an accomplished public speaker, having spent years lecturing and giving scientific talks at conferences and universities. I love explaining things.

In my spare time I enjoy hiking and scrambling, yoga, meditating, dancing, singing, and making music with computers and other instruments.

As of mid 2015, I live in the countryside in Dorset, about halfway between Poole and Salisbury.