It‘s totally crazy that in 2012 there are so few good choices for modeling tools. I got encouraged for a minute today when I found a thread on Stack Overflow that included a bunch of products and I found out about SparxSystems‘ System Architect . Got all the way to downloading the trial version when I saw that it was an exe. Yes, folks, Windows only.. in 2012. Unbelievable. Hilarious that these guys are selling tools for doing MDA. Guys, where is your PIM? Oh, yeah, you don‘t have one (clearly). Your codebase is already a PSM (platform-specific model).
What are modeling tools for? Sure, we could set our sights lower than MDA‘s answer: logical representations of both requirements and specifications, and a generative mechanism for platform-specific versions. My desire for modeling tools is to speed the process of figuring out how to do very complex models. But many tools are pictures only to make people feel better about the fact that someone has thought about something. I used to be driven toward the idea of reversibility way back in the 90s when I was using Togethersoft, but I am not so much into that anymore. I think MDA is too ambitious and is bound to produce very robotic solutions. Guess what I am saying is I am interested in all the pieces, but more interested in using the images to flush out ideas and then a generative layer to get much of the boilerplate done (a la Roo and Forge). And then, the ability to support some basic metaprogramming notions.
I can't see myself running an emulator to get to use Sparx' tool. Which made me go back and take a look at where the Eclipse Modeling Tools are at. The answer is everywhere. That could be a good answer, but if you just go to the page and start reading, its a treatise in what everyone complains about on the Java side: a sloppy dog's dinner of every possible idea cooked to some uncertain degree of doneness. Seriously, this is the page here .
I have written plugins before (for eclipse), and used EMF before (with JET). I have Ed Merks‘ books and generally like EMF a lot, but there was never much tooling with it in the beginning, and now, if this heap has some in it, I fear that ferreting it out will take the better part of a year.
I have been learning After Effects lately because I had an ah ha moment recently where I realized that we jump too quickly into requirements even (we all knew that about specs), and immediately run to get busy before we have probably cemented their predecessor. What is that? The vision? Well, vision docs are a good idea, but I think there is something else that is missing: a conceptual understanding. It‘s not just the abstract types you intend to use, or the couple ways someone‘s going to use your app. It‘s how your app plugs into the world and how it will appear to someone who will attempt to use it. While I was thinking about this stuff a friend of mine gave me a book of Occam‘s philosophy. A guy who has been reduced to a philo sound bite. Turns out he was a conceptual philosopher. I have said this 20x before, but programming could benefit immensely from a greater embrace of philosophy. This is not just answering the question ‘what should this do?‘ It‘s answering questions like ‘how will someone figure this out?‘ or ‘how can we entice people into this part of the problem while making their labors feed this other side of the model?‘ For example, consider Amazon. That company owes 90% of its success to its reviews. If you went to people in 1995 and told them ‘the kind of retail online will be the one who makes it possible for me and everyone else to write sometimes 10 paragraphs on what we did and didn‘t like about the product,‘ 90% of the responses would have been akin to Ballmer gleefully (and stupidly) exclaiming ‘nobody is going to pay $500 for a phone!‘ Is this systems thinking? (yes) heuristics? (yes) and also evolutionary/emergent/complexity-oriented? (yes). A mere smattering of these influences, if you allow them into your mind, make our ‘tools‘ look like tinker toys.
Finally, the other thing I am obsessed with deserves the final spot in this chain of thoughts: reactionaries who think they are revolutionaries . Some amount of reaction is required of course, but think about the degree to which most tooling has been born of frustrations with the stupidity of the current state of affairs. I remember when Sun first introduced EJB, with all of its stupid requirements for XML files, etc., and the toolers got all excited that no one would want to produce that junk by hand, so they could add generation of it to their tools and that would justify a G per seat for their suites. Remind me, Fellas, how did that moonshot go? Oh yeah, it crashed and burned and birthed the biggest reactionary revolutionary of the Java world: Rod Johnson. When I watch the Forge demos or look at Spring Roo, I have to laugh (especially when the Mentos music plays on the Forge ones). Guys, go make a new project in Xcode. It takes about a minute and a half. Yeah, that‘s right, you don‘t have to pick amongst 20 versions of Hibernate (only to find out that 4 is incompatible with Seam 2 3 days later), and you only have one test runner, but you can customize things. I added OCHamcrest to my projects, and OCMock now. While I‘m at it, coming off of days of sifting through the crash site engendered by the innocent need to move Jenkins and Nexus, seriously, the situation with the management of dependencies in Java has gotten to the stage where it‘s like that fire that started in the coal slough pile in Kentucky that‘s been burning for 10 years, or the state budget of California, which no one really has been able to even feign command of for 3 decades.
If there‘s one commandment that has stood the test of time in the software engineering world, it‘s the one laid down by the brilliant Ivar Jacobson: use cases must be the central focus. We have convinced ourselves that we have to have all these things because we were suffering with what we had. A hot dog is a feast to a starving man. Having failed to really deliver on the promise of serious end-to-end modeling, we have comforted ourselves with these rapid fab demonstrations of cutting through the sheets of ice. When it obviously makes more sense to not get yourself stuck in the first place.