The Paranoid Engineer has declared ‘Screw All Gui Builders‘, with an excellent example of the genre of code that can be produced by one such tool, contrasted against the much nicer hand-written code. Now I can certainly sympathise with his pain. The thing that really gets my goat up, and the subject of this post, is when vendors use a GUI builder to lock the poor developer and the target victim sorry, enterprise, into their entire product suite.
My case-in-point du jour is Oracle’s new Rich Enterprise Applications site and the associated technology. On that site you will find a flash presentation of their technology around delivering and I quote:
multi-channel capable applications that deliver desktop quality, highly interactive user experiences that are pre-integrated to enterprise class server technology.
That sounds pretty good, might be of interest to me. Lets investigate further. Now, a lot this technology is built on top of standards, like JSF, and other commonly used technology like AJAX. The earlier version of the ADF component technology was donated to Apache where it lives as the Apache Myfaces Trinidad project. The new components are built on top of these open sourced components. So far, so much is OK.
But, the kick in the tail can be seen in even just in the quoted sentence above: “pre-integrated to enterprise class server technology” – they certainly don’t mean Tomcat, right? The point of the presentation is induce lock in. However I’m still willing to cut them some slack on this particular point. Of course, if you are thinking about using Oracle’s JSF technology, you probably are already committed to Oracle’s middleware technology anyway – and Weblogic is a perfectly good application server, if you need such advanced capabilities (and whether you actually do is another question for another day).
But what absolutely does my head in, is the insistence the only way to develop for this technology is to write it using their proprietary, non-standard developer technology, aka JDeveloper. This is the point where I have to say, I’m sorry Oracle, but … FAIL. I actually don’t even care if your IDE is even the world’s best! Or even if it comes as an Eclipse plugin. My beef with this sort of IDE integration is the total mind-set that it embodies. The IDE might have all the drag-and-drop interface-building mojo in all the world, but the code it produces will never, ever, stand up to a hand coded model driven off the target domain, using modern agile development techniques that are designed to ensure the most cost-effective, best-quality development delivering timely business process transformation (aka value) that the enterprise prioritises and chooses. Just look at the ADF FAQ on the Oracle Wiki. Half the questions are related to the IDE. Here’s a tutorial style introduction that just assumes JDeveloper as the default way to get access to the Oracle JDF components.
No, no a thousand times NO!
The biggest insult is the way that developers are treated as mere commodities in this whole process. They are just the warm bodies occupying the chair driving the interface. Much like the continually failed dream of developerless development, their primary skill is seen as not “being a programmer” but “being a driver of a software package”. If I said, my financial skills and experience include 10 years Excel and 5 years MYOB – I can haz CFO jobz now? NO?! Why not? It’s insulting, that’s why not.
Software development is a profession, or at the very least a craft, and software developers should be able to choose their own tools. Obviously, some agreement has to be made organisationally, or at least across a single team or a whole project, to use a certain common toolset. Here’s one possible checklist:
We’re writing a Java app, check. Deploying onto Weblogic, check. Database is Oracle 11g, check. We have Scrum as our process framework, check. TDD is in our list of favoured engineering disciplines, check. Maven is our chosen build tool, check. Using Subversion for version control, check. Hudson for a continuous integration server, check. Writing the interface with Oracle ADF, check. Using Crossfire to deliver our web services, check. Spring for application wiring, check. Hibernate for persistence, check.
Each of these things has to be agreed upon at an architectural and organisational level (and obviously I don’t mean to say that each of the above is the only choice for each type of item, I’m just giving examples).
You should note one very deliberate omission from that list, the IDE. Architects might impose a certain application server, a particular approach to application layering, and so on. The developers – at least the senior ones – have to choose and agree, for example, on whether to use Ant or Maven, CVS or SVN, Cruisecontrol or Hudson. But what they do not do, is force developers to favour Eclipse or IntelliJ or Netbeans or JDeveloper. What is the point of taking someone who is super-productive with a particular IDE’s keystrokes and then forcing them to spend six months learning a whole new set, a new environment? That’s not productive! A developer needs to have the IDE get out of the way, become second nature – they need to be thinking about code, not where the menu is for the rename-method refactoring because they are unfamiliar with the keystrokes of the unfamiliar IDE. Keystrokes are muscle memory. You just think, rename this method and your fingers are already on the keys you need to press, without breaking your all-important flow. That’s how a developer is as productive as they can be. A productive development team should have a mix of IDEs (I’d propose that this would be statistically in proportion to the usage patterns of the common IDEs). Then we have the specific example of JDeveloper. I won’t even go into it except to say I’ve never heard a developer do anything but curse it, or maybe laugh at it. But it’s the laughter of the condemned man.
It’s something that vendors really need to get serious about. Rather than presenting me with a seamlessly integrated vision, from developer’s screen, through application server, to user’s screen, their technology presentations ought to think discrete. Each piece of technology ought to live and die on it’s own merits, something I’m sure Oracle’s ADF is perfectly capable of – without JDeveloper. If it’s not capable of being developed productively without JDeveloper, it’s already in the reject pile as far as I am concerned.
This essential information needs to be right up front. Don’t bury the information a thousand web sites deep in your developer portal. Put it right there in the first presentation! Separate the selling of the developer tooling from the selling of the user presentation frameworks and the server technology. Show me how I integrate Oracle ADF into TDD, into continuous integration, into the IDE of the developer’s choice. Because if you don’t, you’ve already lost me as a potential customer. This is the real future of software development. Look at where the major thought leaders of software development are taking development – open source frameworks, inversion of control, TDD, Domain Driven Design, Domain Specific Languages, Agile Methods, delivering real process transformation and business capability as early as possible – not drag and drop with wizards. FFS.