Back to Basics in Building Next-Gen Java Apps
Java architects have a plethora of options when choosing architectures and components. You have to consider several aspects of the app when deciding on one tool or the other. Say, for example whether to go with Spring3.0 or EJB3.1. Several Options in Messaging and Integration tools. In messaging whether its JMS based or an AMQP based because under each there again several choices. Similarly choices are there in databases, whether and which one to include IMDB/IMDG on top of RDBMS. Or, does any NoSQL fits for the kind of data to be handled. Fitment of each one into the ecosystem. Narrowing down during partaking in architecture sometimes might be due to previous experience on particular tools/frameworks. Sometimes it is straight forward, sometimes we need to spend time some to evaluate. Need to know what are options available before concluding.
Knowledge and awareness is also the key.
Now, would like to narrow down to main topic of discussion which is whether to include Polyglot programming. As there are wonderful languages around which run on JVM, why not pick one depending on the scale and complexity of the application. Why not start evaluating options at building block with the right bricks. Are most of the architects aware of the options available outside Java on JVM ?. Are Java developers aware of the other side of the coin (Imperative or Functional). As RDBMS would stay and it is not going away, so is Java. It is not going away so easily and early. But, can we think of using some nice features and language constructs from Functional languages like Scala, Clojure, Groovy to name couple of them. These languages also offer nice interoperability with Java. There are definitely good features to be advocated to be used.
As we know these languages are nothing new, core constructs which comes from Lamda Calculas. Some languages even brings their own other interesting features. Java is about to come up Lamda expressions in near future. Do, we have to wait till then to get to know about its advantages. For that matter even languages like Haskell or Erlang which have their own runtimes have been used since many many years and being adopted to build even banking and financial applications. To give examples of latest tools reminds me of RabbitMQ, CouchDB, Riak(Basho) to name some which all are built on Erlang.
Some of the advantages might be dramatic code reduction, reducing complexity, improving productivity, modularity, immutability, functions as building blocks(Higher Order functions, Mixins), Actor based multi-processing etc etc..Multi-core processors being the foray, utilization of it to the fullest is also another concern.
Now the question arises even if we choose to use one of the functional language do we have developer expertise. Specially in my subcontinent it is miniscule. Learning and utilizing the power of functions and building blocks of your application needs some time and investment. Do we really envision to be in the direction of Polyglotism for the betterment of self as well for the application utilizing both the ways. Recently I read a blog saying in many universities OOP is withdrawn from mainstream curricula.
Its time to ponder at all the levels from developers to architects to organizations how to shape next generation applications.