Model-Driven Engineering (MDE) is the practice of raising models to first-class artefacts of the software engineering process, using such models to analyse, simulate, and reason about properties of the system under development, and eventually, often auto-generate (a part of) its implementation.
MDE brings and adapts well-understood and long-established principles and practices of trustworthy systems engineering to software engineering; it is unthinkable to start constructing e.g. a bridge or an aircraft without designing and analysing several models of it first. It’s used extensively in organisations that produce business or safety-critical software, including in the aerospace, automotive and robotics industries, where defects can have catastrophic effects (e.g. loss of life), or can be very expensive to remedy, for example requiring large-scale product recalls. MDE is also increasingly used for non-critical systems due to the productivity and consistency benefits it delivers, largely through automated code generation.
Essentially, the use of domain-specific models enables software engineers to capture essential information about the system under development at precisely the level of detail that is appropriate for their domain and technical stack. These models are then used to automate labour-intensive and tedious work (writing setters and getters, JSON marshalling and unmarshalling code etc. is nobody’s idea of fun) which lets engineers channel their creativity towards the novel and intellectually demanding parts of the system under development.
How to start learning about Model-Driven Engineering?
There are several good books on the subject such as Model-Driven Software Engineering in Practice, Generic Tools, Specific Languages, DSL Engineering, and more books are coming up (e.g. Domain-Specific Languages: Effective modeling, automation, and reuse, Domain-Specific Languages Made Easy). Code Generation in Action and the EMF book are also personal favourites of mine.
Model-Driven Engineering has also been taught in post-graduate courses for a few years now, both in dedicated modules and as part of advanced software engineering modules, in Universities such as York, McMaster, Edinburgh, L’Aquila, and TU Eindhoven - just to name a few.
In terms of online resources, open-source tools and frameworks such as EMF, Xtext, Sirius, Acceleo, ATL and Epsilon provide lots of online documentation and tutorials one can learn from. Lars Vogel’s EMF tutorial, Fedrico Tomasseti’s blog and the EclipseSource blog also contain very useful material (e.g. the series of blog posts on EMF dos and don’ts in the EclipseSource blog). For a high-level overview of the rationale of MDE and the main activities it involves, in the context of the Lowcomote training network we recently made an introductory course to Model-Driven Engineering freely available on YouTube, which is loosely based on the MDE post-graduate course at York.
Who is your hero within this field?
If I had to choose one person, it would be Ed Merks. Merks is the lead developer of the Eclipse Modeling Framework (EMF), and he has been a huge inspiration for me. Merks has done an amazing job at leading the development of a robust, versatile, extensible and performant modelling framework, and the support he has been providing to the EMF community through the Eclipse forums (30K+ forum posts so far) is legendary. EMF is the bedrock of the Eclipse modeling ecosystem and has facilitated the development of a broad set of interoperable tools (e.g. Xtext, Sirius, EMFCompare, Acceleo, Epsilon). In my view, in the absence of EMF, open-source MDE tooling would be nowhere near where it is today.