University of Kent and the University of Cambridge
I am interested in programming language theory and applications, new programming techniques and language approaches for aiding reproducibility and sustainability of scientific software, and the use of verification techniques for sustainability.
Programming languages are central to progress in computing, helping to manage complexity in hardware and software by providing ways to hide unnecessary details (the principle of abstraction). Programming aids creativity, problem solving and the communication of ideas. Thus, programming languages are now a core research tool in both the sciences and humanities. My work lies at the intersection between the theory and application of programming languages.
On the theoretical side, I study fundamental structures and patterns of computation that are widely used in programming. This study of underlying computational structures is exploited in my work on languages and tools to aid the understanding, expression, verification, and efficient execution of code.
On the application side, I apply ideas from programming language research to aid computational science. This includes developing tools and language extensions to help preserve the value in existing, long-running projects, as well as developing new programming approaches for the future. I work particularly closely with climate scientists through my co-directorship of the Institute of Computing for Climate Science at the University of Cambridge.
I believe that verification can play a key role in supporting sustainable software. For example, most verification approaches (such as testing or type/specification systems) encode program properties and invariants which give useful specifications of program behaviour. This helps to document the intention behind the code and aids code maintenance, extension, adaptation, and reuse.