I offer freelance programming, consultancy and training, specialising in the Python language and web development using Django and Flask, with expertise in a wide range of related technologies including JavaScript and the full stack.

I have 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 its best practices, and I bring that knowledge to bear on writing high quality code. I'm expert with both Django and Flask for web development, with experience in a wide range of supporting technologies such as Celery/Kombu, SQLAlchemy, Selenium, Lettuce, and Fabric. I'm also proficient with the Pandas/Numpy/matplotlib stack for data analysis, scientific work and charting.

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 HTML/CSS; the online version is responsive.

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 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.

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 virtualisation tools such as VirtualBox, Vagrant, Ansible, SaltStack, Chef, etc. For version control I'm a Git expert, but I also know Mercurial, Subversion, Darcs and CVS.

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 classUniversity of Wales, Cardiff

Employment / Clients

May — September 2016

Senior Digital DeveloperLand Registry

Microservices development using Flask in an agile test-driven team creating a property search service for the gov.uk portal; service orchestration using JSON, SOAP, RESTful APIs and RabbitMQ/AQMP. As the team's resident python expert much of the value I brought was in improving code quality and robustness, debugging tricky issues, enhancing testing, and mentoring other team members in all of the above.

Since June 2016

Consultant InstructorLearning Tree International

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

May 2015 — April 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.

March — December 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.

February — March 2014

DevOps ConsultantCarbonCulture

A short remote contract 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 University

Conception, research, implementation, investigation and dissemination of novel and rigorous techniques for modelling and analysing user interfaces, as part of a scientific research team working on formal approaches to user interface development. Programming in Haskell, JavaScript, Python, and Mathematica: reverse engineering and simulation (e.g. of medical devices) and 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 an easy-going and friendly man who loves 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.