Research Fellows Directory
Professor Marian Petre
Software engineering is about thinking – and, by thinking, solving problems. The constraints to software design and innovation are not physical, but human: software is constrained primarily by our ability to invent, by what software engineers have managed to think about so far, and how they go about it. Reasoning is at the heart of expertise in software design.
This research is about how expert software designers and engineers think about, represent, and communicate about problems and designs. For example, one thing that distinguishes expert software designers is their attitude to error. For them, error is opportunity: to reflect, to reassess their assumptions, to consider the software system as a whole, to gain insight into behaviours that emerge from interactions between software components, to challenge their thinking. This in turn drives creativity and innovation. Another example is how expert software designers combine different notations in their design sketches. This allows them to consider design issues from more than one perspective, getting around the limitations of any one way of thinking about things. This too drives creativity and innovation. Design sketches give us evidence of how designers bridge between conceptual models (the idea of what should be built) and physical models (the pragmatics of what can be built in the world). Understanding how expert designers think helps us build better tools to support them, leading to better software.
This research also looks across different disciplines. By looking at how experts from different areas – such as architecture, materials science, and chemistry – reason about problems in their domains, we can transfer important lessons to software design.