My research is in software engineering. I am interested in capturing existing good practice and domain knowledge in automatable and analysable forms to improve software quality. To this end, I study:

  • Principled simulation engineering: The use of domain-specific modelling languages for the systematic engineering of simulations and digital twins, to support trust in these simulations and their results. Applications include healthcare and biology.
  • Foundations of model-driven engineering: A particular focus here is on techniques for modularising models and transformations to enable modular reasoning and reuse. Example work includes work on Reuseware and on the use of GTS morphisms for DSL modularisation. Another focus area is on finding optimal models. Check out our tools MDEOptimiser and Acapulco. I also run an international network on model-driven engineering – MDENet.
  • Computer science education: In particular, how we teach programming and software development to learners of all ages and how this can be improved. Example work includes research on the use of software frameworks in UG teaching, automated assessment of programming tasks, and work on concept development in learners of programming.

I did a Computerphile video on model-driven engineering (MDE) and DSLs; you can find it here. Find some other videos of a talk on DSLs I gave for the London Java Community here and here.

Research projects