Skip navigation

I was asked recently by one of my friends in the finance sector, "Why can't I just pick and choose all of the features I want out of a menu? We have all these things that everyone needs, and they're all the same, so why can't we all use the same components and just put them together? Why can't you agree on some level of unity between technologies?"


You've probably heard it all before, but recently I find myself pondering the state of our industry, utterly astonished at the amount of change we have seen even over that last two years; however, despite the myriad of new advancements, announcements, and achievements (the AAA), I find myself to a large extent unexcited about the past few years of technology, even though they were vastly productive. What makes me excited about our industry, and why haven't we yet achieved what my friend wants?


We've seen several new programming languages enter the scene: Ceylon, Kotlin, Go, Dart, and others. Of these, I think that Ceylon is most suitable to advance the state of enterprise software, particularly as it pertains to the JVM, but I'm also noticing a new trend toward client-server programming again. Browsers are becoming more and more powerful, and there has been a big move toward JavaScript on both the client and server. Even databases have been moving to the browser with systems like Node.js and MongoDB - translation? Lots of fragmentation.


But it seems like we still have all of the same problems we had before. Programming is hard, finding good programmers is hard, and making things work the way we expect or demand is frequently even harder - why hasn't this changed? Have we been so absorbed in solving new and individual problems that we've lost track of solving the only problems that remain constant over the years? Somehow we seem to have lost track of the fact that as we introduce new technologies, we introduce new problems; integration remains the most difficult thing we do to date, and with such a wealth of the AAA, we are still spending much of our time integrating, not implementing. That's figured out, we can get down to business, but it's still something everyone needs to do.


Is this a problem we will ever address? Can it be addressed? I'm not sure, but I think we'll find out sooner than we think; people are finding this more and more important - even my friend in finance has noticed.


This is really one of the ideas behind JBoss Forge - a plugin-driven, command line tool designed to simplify technology integration - technologists write plugins to perform installations and integrations of technologies, greatly reducing the startup and integration pain for those attempting to get started "now." Why are tools such as Forge becoming increasingly popular? Because few people have the time or patience to follow a tutorial or guide on how to get started. We want instant gratification, and every barrier to entry causes us a great deal of grief.


It's a similar reason why people are moving more web-applications to the client browser via JavaScript, and why they are also using JavaScript on the server. It's too frustrating to handle the technology integration to bring a client language into congruence with a server-side language, particularly when you have to deal with impedence between the data-structures of each; we just don't want to spend the time - nor should we have to. We should be able to use a unified programming model, just as we should be able to have a unified method of technology/component integration.


This is where the Errai project comes into play, moving on the same premise of client-server programming model unification. Using Java and Java EE as the core programming model, you write for and share code between the client and server. The same java classes work in both places, and since the client-side java code is compiled down to JavaScript, you get all the benefits of running in the client (direct DOM manipulation, events, and async), but you never lose the familiarity of the tools and languages you are familiar with. Errai is revolutionizing simultaneous programming on the server and client.


So I ask myself the question, is this something I am excited about? And I think, "Yes, absolutely," and in fact, "This is one of the only things I am truly excited about." We have thousands of solutions for thousands of increasingly similar yes distinct problems, so whenever we can take steps to bring unity between parts of the vast web of tech, I think it's a good thing. Java EE has discovered this and begun to address it with CDI and extendable APIs. Spring has pretty good about this, and tools like Rewrite, from OCPsoft (for URL-rewriting and HTTP manipulation,) are also taking this new more fluent and extendable approach. Design for integration up front, and you'll make everyone's life easier later. There are new extensions for Rewrite being written every day: markup rendering, runtime and cached compilation of LESS resources into CSS and JS, security integration, you name it, it's there, and if not, you can write an extension for it. This is the philosophy that I am excited about.


Want to extend Forge and get your technology into your users hands more easily? Write a plugin. Want to build on Errai? Write an extension. It's becoming easier and easier: Apache DeltaSpike; RichFaces; the new Application Server from JBoss; Arquillian in the field of testing, OpenShift on the cloud. - everyone is doing it.


The combination of these things - easier extension/focus on extensibility, tools for integration, and unification of programming models - is going to be what really changes and advances our industry in the future. We're going to see more and more focus on ease of installation and use, more and more focus on integration and compatability, and more and more interoperability between frameworks; we're already seeing it. With more focus on extensability and compatability, extension and integration are getting easier, and I'm excited about it. Are you?




Thanks for reading. If you're interested in other useful or perhaps entertaining articles, here are a few links for general fun: Guide to Java Regular Expressions. Another good one is PrettyTime - date and timestamp formatting in Java, and a budding new project for social-style agile project management, called SocialPM. These are all open articles or projects, and would love feedback, contribution, and general love.