Name
Tom Churchman
GitHub
https://github.com/tomcur
Email

About me

I’m Tom Churchman. I design systems and write code.

In my daily life I focus on computer science. For a brief moment in my past I was drawn to physics, but fondness of exploring computer systems won out. Some of the mathematical thinking has stuck, which I find to be a useful tool in system design.

I’ve enjoyed exploring many different kinds of programming: from high-level type theory and creating a basic programming language (for the fun of it; my language didn’t solve any real problems) to bordering on electronics and creating a basic processor from scratch (a simulated one—no foundries involved). Between these extremes I try to do useful work.

When implementing a system, I find knowledge of both the programming language and the underlying target hardware to be important. Finding an efficient program design making good use of the available tools is a great source of joy.

I strongly advocate moving complexity to the design process, not to the design. Taking your time to design a system leads to a simpler expression of the system, without loss of functionality. Refactoring is part of the design process, especially for large systems and systems that are still evolving.

As systems grow, the number of lines of code also tends to grow. This is not, in itself, a bad thing. It is a liability. An important consideration is to encapsulate complexity and keep it self-contained, such that the complexity a programmer needs to keep in their head at any one time is bounded.

Over the last few years I’ve usually had multiple projects going on at the same time. Keeping the various systems of these projects in my head at the same time is not possible. To handle this, I find technology that allows one to be expressive immensely helpful. Such expressiveness can take different forms for different aspects of a programmer’s day; it may entail being able to write intentions in code clearly (maybe with the help of a well-designed type system) or documenting the requirements for working on a project (perhaps with a declarative package manager).

Skills

  • Creating idiomatic and performant system implementations
  • Designing and simplifying large software systems
  • Implementing from a background of computer science and mathematics

Education

  • 2015–2021, MSc Artificial Intelligence (summa cum laude)
    Radboud University, The Netherlands
  • 2015–2021, MSc Computing Science (opted out of the thesis)
    Radboud University, The Netherlands
  • 2012–2015, BSc Artificial Intelligence (cum laude)
    Radboud University, The Netherlands

Experience

AstroPlant

2022–present, AstroPlant

For the European Space Agency (ESA) we created a plant growth and monitoring chamber. The project is intended to support research at ESA as well as be useable as an educational tool. I was focused on developing the project’s backend systems as well as the control software running on the hardware inside the growth chamber. The project had been ongoing for a while on a volunteer basis, with funding started by ESA in 2022. The project is partially available publicly and open source: app.astroplant.io.

Open-source Software Development

I contribute to the development and maintenance of open source projects, especially in Rust. Currently I’m focused on implementing graphical capabilities and web standards for user interfaces as part of Linebender in Color (color representation and manipulation), Vello (high-performance 2D rendering), Parley (text layout and fonts) and Kurbo (efficient 2D geometry).

Contracting

2022–present

I’ve been available as a contractor to help organizations with their technical challenges. I’m especially interested in helping organizations explore, integrate and contribute back to open source projects. I’m also interested in helping organizations implement their systems in efficient languages like Rust.

Software Synthesizer for Audio Design

2021–present

Lock-free and wait-free data structures. Signal processing. Cross-platform development. UI design. Major system architecture from the ground up. This is a side project that I continually come back to. I am developing this synthesizer in Rust for its modern language features combined with good performance characteristics. This has become a good focus point for my interests in efficient software and expanding the available open source tools.

Master’s Thesis - Autonomous Driving - Learning from Interventions

2020-2021, University of Tartu and Radboud University

Research into training machine vision models from operator interventions. This resulted in a novel negative learning approach that allows the usage of negative data samples alongside normal positive data samples, by lifting ideas from reinforcement learning into a supervised learning setting.

The thesis is available for reading at Radboud University’s repository.

Business Intelligence Analyst

2017–2018, Zilveren Kruis, Achmea

At Zilveren Kruis I searched for patterns of potential fraud in health insurance claim data through data mining. Using these patterns I implemented computational models to find and score claims for potential fraud. I also developed a monitoring tool performing checks on the team’s models to automatically report issues.

Business Intelligence Analyst

2017–2018, Centraal Beheer, Achmea

Development of statistical models.

Student Assistant

2016–2017, Donders Institute for Brain, Cognition and Behaviour

As part of a PhD student’s research into learning capabilities of cognitive agents I was asked to implement novel a cognitive agent architecture in Python.

Teaching Assistent

2015–2016, Radboud University

At the department of Computer Science I was a teaching assistant for a course in Functional Programming.