Ok, so the title is a bit sarcastic. I remember the debut of Xml. We used it for data. It was a way to improve on comma-delimited strings. We converted from flat files to xml files for data.
It wasn’t long before scripting could be expressed in Xml, and now I see teams with large libraries of executable Xml in the form of build scripts with NAnt.
I think it’s going to far, however. I’m beginning to hear that all software can now be expressed in Xml if you have the right tools. The implications of that is just shifting from C# programming to Xml programming. Whatever the language of execution is – that’s the programming language.
I share Ayende’s concern for Xml programming. Xml is not a 5th generation language. Just because designers can generate Xml instead of C# doesn’t mean code is going away. It just means that the chosen syntax is different for the generated code.
My stance on code generation has always been:
- Machine generates code, human maintains (bad)
- Machine generates code, machine runs code, human never has to see code (good). i.e. C# to MSIL
- Machine generates code exactly how human would have written it anyway (good – just saves typing).
- Machine generates code, human has to modify code and then maintain (worst)
Designers fall into the category that WANTS to be the 2nd bullet point, but that never happens. WinForms tried to do this with the .designer file, but that code still needed to be understood and tweaked from time to time. Designers don’t have good track records because they always constrain flexibility. When you hit a wall, you always have to fall back and change the generated code. That’s the problem. Good intentions, but it won’t happen that way. For it to work, the designer has to be the language.
Designers come and designers go. Languages stay and evolve.