William Payne

Productive, results-focussed algorithms engineer and quantitative developer combining a strong software engineering background with a keen interest in image processing and statistical pattern recognition. Experience developing a range of machine vision and image processing applications, as well as “Big Data” analytics for the online advertising industry and quantitative models for the financial industry. I have experience working with very large datasets (Up to 1PB), as well as high-throughput “real-time” streaming data processing systems (>1BN messages per day). I have a reputation for producing high quality code, and for delivering simple, effective solutions.

My my most recent development experience is with C, C++, MATLAB, Python, Bash and CMake. I have also used SQL, Java, Prolog in the past:

  • MATLAB (6.5 years, recent)
  • C (2 years)
  • Python (2 years, recent)
  • Bash (2 years, recent)
  • C++ (1.5 years, recent)
  • SQL (1 year)
  • CMake (0.5 years, recent)
  • Java (2 years, academic experience)
  • Prolog (2 years, academic experience)
  • Unix (2 years, recent)
  • OSX (2 years, recent)
  • Win32
  • Git (0.5 years, recent)
  • Hg (1 year, recent)
  • Svn (3 years)
  • Perforce (1 year)
  • MongoDB (1.5 years, recent)
  • Oracle (1 year)
  • MySQL (2 years)   
February 2013 - Present - Continental Group - Research Engineer

I work on machine vision systems for advanced driver assistance and automated driving products; splitting my time between work on collision warning related algorithms and our cross-platform automated build & test systems.

My machine vision software is written in C++ and MATLAB. My build-system is written in Python; Bash and CMake. Our version control and configuration management is done with Git. Continuous integration and code review are implemented using Jenkins and Gerritt. I use GCC; CppCheck; CCCC & PC-Lint for static analysis; Valgrind; GDB & DDD for debugging & profiling.

As with most of my past roles, I wear the software engineering hat in a multidisciplinary research team, providing help and support with issues involving Git, GCC, profiling & static analysis.

  • Embedded C++
  • Python
  • Bash
  • CMake
  • Git
  • Jenkins
  • Gerrit
  • GCC
  • CppCheck
  • PC-Lint
  • Valgrind
  • ARM
November 2011 - January 2013 - EveryScreen Media - Sr. Data Engineer

I worked on ESM Data Science Systems, connecting the data science team with the engineering team; turning prototype data science concepts (MATLAB) into working products, implementing statistical and graph processing algorithms, scaling our data science systems to handle > 1 billion requests per day, and implementing data cleaning, monitoring and reporting tools. I also have an occasional role supporting the development of ESM core production systems. It is a hands-on role, with most development done in Python, occasionally pitching in to support C++ and PHP development where required. Most of our data science systems sit on top of Linux/QPID/MongoDB/Python infrastructure.
  • Python
  • MongoDB
  • Unix
  • C++
  • Mercurial
  • Amazon AWS & EC2
August 2011 – October 2011 – British Consulate General, New York – IT Support Officer.

In this temporary role, I provided first line technical support to approximately 150 users.

May 2010 – June 2011 - Fidelity International Limited (FIL) - Quantitative Developer.

In this role, I provided MATLAB expertise to the “Equity Applied Research” (Quant.) team; promoting software development best practice through periodic “brown bag” sessions; writing MATLAB libraries for data handling & cleaning, statistics, distributed computing, graphing, report generation, testing, deployment, logging & fault reporting.

I managed the team's production environment, as well as the development automation tool-chain, from source & configuration management through continuous integration, test & deployment automation. I implemented stock screens and charts; data quality screens and exception reports. I worked closely with quantitative analysts and gained a reputation for code quality, reliability and trustworthiness.
  • Object-Oriented MATLAB.
  • PL/SQL.
  • AutoSys.
  • FactSet.
  • Subversion
  • Buy-Side Equity Quant development.

May 2007 – May 2010 - Thales Optronics (UK) Plc - Algorithms Engineer.

In this role, I acted as a technical lead in a technical demonstrator programme: researching, proposing, securing funding for and implementing original machine vision (IRST) and image enhancement algorithms. 

I built relationships with experts from the customer community, obtained feedback and gathered requirements, carried out data analysis, proposed, designed & implemented original target detection, tracking, classification and image enhancement algorithms, whilst effecting change in the development process, successfully introducing iterative development, continuous integration and testing/performance evaluation using large scale video libraries.

I gained an excellent reputation for enthusiastic engagement with problems, for effecting organisational change to improve our development processes, and for a pragmatic approach: identifying conceptually simple and computationally feasible algorithms, and driving development to get the job done.

I implemented algorithms in MATLAB, Simulink, C and C++, using my software engineering background to understand how C code generated from Simulink models performed on an embedded target, advising on algorithm ease of implementation and performance issues, and prioritising algorithm development based on a solid understanding of the problem domain.

Whilst in this role, I gained experience designing and implementing novel signal processing; target detection; tracking; image enhancement; navigation and machine vision algorithms. I also designed & implemented automated test & performance measurement systems, video ground-truth mark-up & ROI selection tools. I also consistently achieved the highest possible rating in all performance reviews undertaken.
  • Distributed Computing Toolbox.
  • Embedded MATLAB; 
  • Simulink & Stateflow.
  • Real-Time Workshop Embedded Coder
  • SQL.
  • C.
  • C++.
  • Rhapsody (C++).
  • VxWorks/Tornado
  • Subversion
  • VHDL.

May 2006 – May 2007 - SOPHOS Plc. -  Software Engineer.

In this role, I worked on Sophos Anti-Virus 7 Windows client program as part of a large development team. I carried out low-level development work on run-time code modification and analysis functionality as well as higher level work on configuration, upgrading & messaging systems, including the development of multi-threaded OO C++ code. Working in a large team on a complex and evolving software system, I gained experience using test-driven development & continuous integration techniques, carrying out code reviews & pair programming, writing unit tests & build scripts.
  • C++. 
  • Test-driven development.
  • Agile.
  • STL.
  • COM.
  • ATL.
  • XML. 
  • Perforce

Jan 2006 – May 2006 - SmartSensors Ltd - Consultant Machine Vision Engineer.

In this role, I productised a prototype iris recognition system, developing iris image extraction and image quality estimation algorithms. I worked closely with researchers and the customer to reimplement MATLAB prototypes in C, proposing novel alternative algorithms where required to meet run-time performance and robustness guarantees.

I gained experience developing image processing algorithms, translating complex mathematical and statistical concepts into code, writing optimisation & signal processing algorithms; developing embedded image processing code and developing portable embedded C code.

Nov 2003 – Nov 2005 - Cambridge Research Systems Ltd. -  Staff Scientist.

In this role, I developed a large MATLAB toolbox for Visual Stimulus Generation, experimental control, data calibration, collection and analysis. I built relationships with members of the customer community, providing demonstration code, advice, training and technical support for a range of visual stimulators, eye-trackers and assorted related scientific products. I developed data capture, analysis and visualisation applications in MATLAB, C and Java, as well as a CRT saccade contingent display, as part of a PhD researching adaptive control of saccades.

I built up an understanding of the practicalities of experimental control and measurement in vision science, psychophysics and neuroscience; excellent MATLAB programming skills, an understanding of filtering, noise control, artefact detection and removal.
  • C
  • Java
  • Vision Science
  • Signal processing
  • Data analysis

September 2002 – January 2003 – GMPTE. -  Project Management Assistant.

I provided project management and administrative support for the Manchester public transport real-time passenger information project, acting as the point of contact in Manchester between GMPTE, the project management team and the prime contractor.

May 2002 – August 2003 – M2002 Commonwealth Games. -  Project Management Assistant.

I provided administrative support to the security team, liaising with security contractors and venue security managers, using Excel to track security requirements and expenditures, to reconcile invoices with time-sheets & contractual records.

  • March 2009. Comprehensive VHDL, Doulos.
  • September 2007. Simulink for System and Algorithm Modelling, Mathworks UK.
  • February 2007. Advanced C++, QA.

09/1999 – 06/2003 – Manchester University – Bsc(Hons) Artificial Intelligence.

My final year project was a texture classification machine vision project, (segmenting out bundles of nerves in light microscopy sections of blowfly ganglia), utilising direction and spatial frequency sensitive filters, and a Bayesian classifier to inform the image segmentation algorithm. The Software was written in Java; designed and implemented using Object-Oriented techniques and methodology. I came top of my year (1:1) in my second year, and also scored highly (1:1) in my final year January exams.

Informal Details.

I work hard, and have been highly regarded at all of my previous positions.

I spend most of my time working with high-level, high-productivity languages developing data-handling and statistical data-analysis algorithms, but I have a software-engineering “head”; like to know how things work "under the hood"; and produce nice, readable, pedagogically well-motivated "code".

Since I have worked mainly on data analysis software of one sort or another, I have most experience writing in a somewhat functional, declarative manner, with lots of side-effect free functions, coroutines, etc...

I have sufficiently good communications skills that I have often found myself "bridging the gap" between domain specialists and other (normally software) engineering disciplines.

I enjoy making simple systems that solve complex problems.