Thanks to all 21 who participated in the workshop -- and a special thanks to the seven brave souls who stayed on to build their own first DSM language! Aali Alikoski stood in for Alan as my co-organizer, and has posted a couple of photos and his presentation. Here are some of my thoughts on the workshop...
All the developers here at MetaCase have currently got our heads down finishing off the beta of the next version of MetaEdit+. There's still nothing I love more in this job than programming, but helping people take their first steps in DSM comes a close second. It was thus with only slightly mixed feelings that I took a day out to lead the 2nd Workshop on Agile Development with Domain-Specific Languages at XP 2006 in Oulu, Finland.
Since the culture at the XP conferences is relaxed, there's no real process for signing up for workshops beforehand. This is great for participants, although it does leave some uncertainty for the poor organizers. I wouldn't be surprised if that played a part in the decision of my co-organizer, Microsoft's Alan Cameron Wills, that he couldn't actually make it in the end. Fortunately, Microsoft Finland have a great proponent of DSM and their DSL Tools, Aali Alikoski, who was able to step in and did a great job. The two of us waited with bated breath to see who would turn up, as we played the normal game of persuading the data projector to behave nicely with our laptops.
It was thus something of a relief at 2pm to find our room was full, 21 people in all. A quick session of introductions revealed that the general level of knowledge about DSM was significantly higher than last year. Although only a minority had tried it, many were in projects that were going to be using it in the next year; five or six really hadn't seen DSM before. Over 80% of the participants were from companies, also up from last year.
Trying to run a workshop on this topic in 2h50m is something of a challenge. Personally, I don't like workshops that are just a series of PowerPoint presentations, so we wanted to have the participants actually do something. However, as the participants were from such varied levels, we first needed to lay out the basics along with some concrete examples. This also meant we could get the initial questions out of the way, as always mainly from people who found the idea of generating full code from models implausible, based on previous poor experience with non-domain-specific modeling languages and generators.
Since Microsoft's DSL Tools are now at a stage when they can be demoed, I asked Aali to present 20 minutes on them and Microsoft's Software Factories. For speed reasons, Aali didn't show any actual metamodeling -- just a metamodel and a model. I did a quick 10 minute demo of changing a modeling language and generator in MetaEdit+ (complete with demonstrating my inability to count parentheses in Java when writing the change to the generator!). I'd brought along the current pre-beta state of MetaEdit+ in the hope of using the demo effect to force any bugs out of hiding, so it was simultaneously gratifying and disappointing to have the tool work perfectly.
In retrospect, maybe presenting both tools was a mistake. Tool support for DSM is vital, and I didn't want to be rude to Microsoft by only showing MetaEdit+, nor unfair to DSM by only showing Microsoft's DSL Tools, but showing both did take 20 minutes we could have used elsewhere. After the demos came a coffee break, and after that there were only seven of us left for the actual fun part of the workshop: building a DSM language and generators for a new domain from scratch. Some people had already said they were only coming for the first half, but still...
Those who stayed had a great time, and it was clear that the best way to learn something like this is by doing. People found it fascinating to have to fight their ingrained UML modeling habits, but they took to it quickly and came up with a great modeling language for the domain. In ten minutes at the end we built it in MetaEdit+, and even had time to add the majority of the generator. I'd post it here, but then you never know when you might find yourself building this same example in a future workshop, and I'd hate to spoil the suspense!