This is a food for Thought post…
MDA? Search Google and you get one list for the term. Search Bing for a slightly different list. That sounds like an association for a medical condition. The Object Management Group is pretty hot on MDA. Other than that, doesn’t seem to be a very hot topic.
What is it doing in a technical blog? Did you know that Gartner stated that MDA would be the way of the future for development? OK, before going further, MDA = Model Driven Architecture for the purposes here. Yes, there was a big hype about it a few years back. It didn’t really materialize.
My first real exposure to MDA came while I was working for Care (CAR-AY) Technologies headquartered in Spain. I worked for the US Branch out of San Jose. They have a product called the Olivanova Programming Machine. Generates code in C# or Java.
This tool is a very interesting application of MDA and has specific niche situations where it is very practical. In their model, the “engine” that generates the code is housed back in Spain. The application sends out the model to the engine and the code is returned basically ready to run.
The technology is popular in Europe but has only had limited success in the US. Many of the companies that were presented this technology were skeptical of code generators and even more skeptical of having to send their code offsite.
The Next Iteration
Why is this the next iteration? MDA and code generators have been around the edges for sometime now. Talk to many appdevs and they’ll tell you with confidence that no “machine” can write code like they can.
I’d agree with them… A machine will write the same code, the same way every time. A person… not so much. History books will probably look back at this time when machines took over the task of programming machines… no not in “Terminator” parlance but in typical, boring, industrial revolution style.
Forces for change
People are the root cause here. Let me put down just a few reasons…
- People get bored –> repetition has never been a highly valued trait
- People make mistakes –> to err is human and when a human is at the hands of a computer…to err is to err on a grand scale
- People are costly –> between the cost of corrections, complexity etc. A well conceived code generator…
- The number of software projects that fail…
We’ve been at this computer game for the past 60 or so years with serious intent. In the past 10 years or so, the pace of technology has been going fast than the average person can assimilate.
I’m sure we reached the point some time ago where companies started holding back just so the latest revision, the last released version, had enough time out there to recoup the investment.
Back to MDA
MDA in the US hasn’t really been adopted. At least, not as a primary way of developing code. But, as Gartner predicted, it is here and is becoming more and more prominent.
They’re everywhere from SharePoint to Drupal, pre-assembled code parts little the code-scape. But these aren’t MDA, they’re just frameworks. No code is generated, it’s just pre-written into objects…
Frameworks are a model… they are a balsa model airplane. Let me ‘splain…
- Pre-cut parts –> things like ribs are already die cut. You just have to pop ‘em out and glue ‘em to the spars
- Finishing –> you get to choose what color to paint your model. You can go old fashioned and do the sanding, painting and polishing route OR you can cover the model with pre-finished plastic
- Options –> add on parts are available, you can adapt other items to the model, etc.
Sound a little like a framework to me.
Like Olivanova, Together, Rational Software Architect, Visual Studio Ultimate, etc. You get pre-assembled parts that snap together. Draw pictures, use UML. Different from the frameworks in that your choices for variation are reduced. Typically, variation’s going to cost you money. The more flexible the product the more it costs but you are still giving up control.
As a kid, I loved erector sets. Completely flexible. You could build anything. Legos to. These must have been good toys because they have stood the test of time. But what does this have to do with MDA and Code Generation?
For MDA to be successful, you need a tool that is completely flexible where you can build your own assembly items. Where a designer crafts a solution and the software generates the blocks. To that end, it seems that Microsoft is running towards that goal. More and more of their tools are model based with code being generated behind the scenes. The more Visual Studio progresses the more it seems that the “plumbing” code will be generated by the IDE.
When will MDA Be a force to Contend with?
I think you’ll see it first with mobile devices. Talk about a platform that lends itself to the mobile paradigm. Small formats (a 4” screen is no 20” monitor), formats that have to be flexible to go from detached (mobile mode) to attached (big screen mode) and bandwidth. This means that coding for the specific unit is critical (although as memory and storage capacity continues to grow, there will be less focus here) and even if the phone or tablet can handle a large app, waiting for it to download is still an issue. Granted, you can get around some of that with a workstation connected to a high speed connection then attach the unit or the unit itself will support a high speed internet connection.
Will a complete divorce from custom code occur?
Will programmers be reduced to assembly line workers?
The irony is MDA is being adopted. Kind of like the debit card was adopted. You’d be hard pressed to find someone today who doesn’t think their debit card isn’t a necessary evil. Convenient and more secure than cash… but there was a time, not that long ago, when the very concept was overwhelmingly rejected.
It was through enticements here, discounts there and slow adoption (almost grass roots) that changed the perception of the debit card.
If that can happen with such a personal item, software development with it’s external pressures of accuracy, time to deliver, etc. will adopt MDA architecture. It will be required just to compete.
I guess if you don’t call it MDA and call it something else…