There is no doubt that generative technologies are becoming more and more important in the software industry. Every development environment contains lots of generative steps and technologies like Model-Driven-Architecture are hotly debated. This means that we have to make sure that students understand the core concepts and tools in this area and that is why I started a new lecture with the title "generative computing".
I know a couple of industry projects - mostly those where my students work or write their thesis - which use or could use generative technologies. In one project a student performs a problem analysis, creates model and meta-model information and finally writes a generator for database testing. Another large scale project involves internationalization and different business logic for different countries. This is currently a project maintenance nightmare as the necessary artifacts for e.g. the new spanish version are not explicitly stated. Here one of my students started with a problem analysis which should uncover the information that needs to be known for a reliable project plan of new releases or versions. Once this is done we will think about creating a model and meta-model and also begin generating some code. Because of the size of the problem and its complexity we do not shoot after a completely automized solution. Instead, the combination of meta-data, generation and best organizational practices should do the trick. Interestingly, this project uses the Xtreme Programming Methodology event though it is fairly large and the results where good so far.
As it was the industry which brought the topic of generation back onto my radar and since I have a couple of real projects running there I thought about leveraging those circumstances to create a new kind of university event: a mixture of lecture and exercises with industry participation. In between technology sessions we would look at the current projects, analyze and try to improve them. This brings technologies and applications in a close relation. But it means that somebody from those projects needs to participate in the event. We will see if this is a realistic assumption.
If this works out we will very likely have another workshop on generative technologies in summer.
I plan to introduce the following generative technologies and tools:
Frame processor technology to create template processors
The eclipse modelling framework as a tool for generation
Relaxer - a RelaxNG based generation tool. In the same context: schematron for co-occurrence constraints which cannot be handled by XML Schema.
Traditional compiler generators like antlr
Meta-data modelling tools and execution logic (UML2.0)
The concept of domain and family analysis as this is still the base of larger domain frameworks.
Not this time but in the context of a master lecture on embedded systems I plan to introduce Statemate from i-logix. I used that tools years ago to simulate phone hardware and design a X.25 protocol module.
Perhaps also not this time: Code generation at runtime. See the article by Peter Sestoft on Runtime Code Generation with JVM and CLR
Our workshops on generative computing
Last term we did a workshop on generative technologies with friends from the industry, students and university members. The focus was to bring practitioners, interested software architects and students together. We discussed various technologies and in the end we had a better understanding of how we should organize lectures, seminars and thesis work around this complex topic.
I've written a few sentences on what I learned at this workshop and will offer the presentations for download (once I've got them all).
The course takes you from simple code generation techniques to advanced meta-modelling and Domain Engineering. Lots of theoretical and practical things to try out. (e.g. Eclipse EMF, ANTLR, DSLs, annotations, production lines, semantic technologies based on XML, compiler etc.))
two excellent thesis works recently finished. Learn how to model operational aspects of systems. learn how to develop and test user centered designs. Lots of ideas around this.