Have you ever looked back and seen how the world around us has changed ?
You might argue – Strange … Its all the same; what the heck changed?!! We were building and using software to make our lives easier and so are we building it even today to continue the legacy. Nothing has changed!
From decades humans are building software to simplify their work. If you go a decade back, building a software was tough and the landscape of technologies which encompassed tools, frameworks, languages was less complicated. There were few technologies to learn and we had to build systems that eventually got complicated. So complicated that, we had to start inventing new technologies to start maintaining them. That is when the landscape of technologies started evolving. All this evolution started in the name of “Keep it Simple!!”
If I were supposed to host a software system/application today, I don’t have to request my IT desk and wait for few days for them to come back with a system. Now is the era of cloud. All it takes is a few clicks navigating through screens choosing the required configuration and within a few minutes I can have my blazing fast servers up and running. Some of the leaders in this space are Amazon Web Services, CloudShift, CloudStack and the list never ends. The hidden beauty of this cloud is that, I can spawn as many instances of servers required when the need be, based on an existing instance. Chef transforms infrastructure into code. I can write my own Chef recipes to achieve automation of building, deploying and managing the infrastructure. For example, recipes can define what kind of machines should be configured, which web server to be deployed and how to configure it post-deployment, what database to install, etc.
Start building your infrastructure using cloud and Chef recipes and get rid off physical servers.
From the time computers made its way into human lives, User Interface(UI) or User Experience(UX) is the component in any software that makes an impression on the consumers of the software. No wonder a lot of importance is given to make the UI look fantastic, simple and customer-friendly. Gone are the days when UI was built with trivial HTML supported by Servlets or JSF or Struts. Not to forget that Adobe Flash was seen like bread and butter for building UI in those days. This is the era of tablets, smart phones, laptops and many more smart devices. Focus is on building a single UI to be used irrespective of the variety of devices. This started the leap of HTML5, BootStrap with JS frameworks like AngularJs, EmberJs, etc. HTML5 gives cross-platform compatibility. BootStrap is a package of styling, icons, UI elements, etc. which helps to build a responsive UI for web applications. AngularJS supports automatic data-binding – UI changes based on the changes in the model, supports dependency injection for UI, supports defining behaviour without writing any boiler-plate code.
Build a responsive UI to be used across a variety of devices using HTML5, AngularJS with BootStrap. Dump Servlets, Struts and JSF.
In early days, applications used to be built with an idea that they are independent entities. So multiple applications used to talk with/consume each other using some standards like XML or file sharing mechanism. This made life complicated in 2 ways – since Applications were independent, they never tried to be friendlier and flexible with other applications and more work had to be done on the data exchange format to be understood by the consuming application. XML was a revolution in the data exchange format and was promoted as simple and cool technology. XML parsers, XML schema validators, Extensible Stylesheet Language Transformations, etc. added more complexity and XML was no more simple and light-weight. More time and effort was spent on the conversion of data between 2 systems. Developer community was eagerly looking up for an alternative to get out of this clutter. JSON is the remarkable alternative to XML. JSON is a simple key-value pair structure and a universal solution for all platforms, devices, technologies with very little processing overhead.
Use JSON as the data exchange format, for it is simple and really simple. Kill XML in your application.
With the advent of Web Services mostly SOAP(Simple Object Access Protocol) few years back, life became comparatively simple with the SOAP layer controlling the data to and from the Web Services. Slowly it turned out to be developers’ nightmare to maintain and enhance the functionality of the existing SOAP web services. As I mentioned earlier, one of the inspirations to invent a new technology is to build a simpler one. This is how RESTful web services gained an upper hand over SOAP web services. No WSDL files, no generation of stubs and skeletons, no more XML and SOAP protocol, use a simple protocol familiar to the whole developer and user community – aka HTTP. These were the biggest advantages RESTful web services brought with them. RESTful web services combined with JSON started transforming the way web applications communicated with each other. With this, Web Applications are able to understand each other more precisely across technologies, devices and platforms. Off late a new concept has emerged – micro services. Convert your RESTful web services as micro-services. Now you might argue that we are complicating things. Wait! Micro Service is a service that defines the smallest unit of work, is kept as simple as possible with its own storage. To summarize, it is the smallest independent service. No inter tangling with other services, it can be shut down and started without having to restart any of the other services, since there is no dependency.
Build your system with RESTful micro services and abandon SOAP services. This makes the application very light and simple.
By now we understand that this is the age of services. Any application/system built today is a simple system to the outer world, but from within, it comprises of a humongous variety of services. As systems mature and grow, so does its complexity due to the growth of the underlying services. To the outer world i.e. consumers, the services are APIs aka Application Programming Interface. The APIs are exposed to the user community to be consumed. Organizations who build and expose the APIs need to manage them in a more disciplined manner as it helps them to shape their own future and survival. API manager comes handy for this. API manager monitors traffic from consumers/applications, protect misuse by using proper security mechanisms, help maintain versions and also gives sudo URL for the APIs hosted.
Its high time organisations hosting APIs make use of API manager to guard and mask their services.
Database is the key to every software built, since it is the vital part of any software that persists data. All of us know that any data related operation finally boils down to disk access and thats really really expensive. No denial about that. Data model used in the UI is different from the data model used in the middle tier and finally when it is time to store the data on disk, it is like a phantom; you really cannot believe how data has transformed and is unrecognizable. This owes to the simple fact that data needs to be normalized and stored across different tables. This is the ‘charm’ of an RDBMS(Relational Database Management System). A database hosted on a RDBMS is like a 2 headed serpent – data is unrecognizably deceptive at the time of storage (compared to the time when it gets created on UI) and database usage makes application slow. NoSQL was the invention to kill this serpent. NoSQL is very fast and light. Applications don’t need to worry about their performance degradation due to the data and the database; all kudos to NoSQL. The different flavours offered by NoSQL – 1. graph based like Neo4j where data is stored as graphs with nodes and leaves; 2. key-value based like Redis,Hazelcast, Memcached which stores data as key-value pair; 3. column based like HBase, Cassandra where very large tables with billions of rows and millions of columns can be hosted, but accessed very fast; 4. document based like MongoDB, CouchDB which stores JSON-like documents.
Use the lighter and faster NoSQL system and ditch the RDBMS.
As Java claims – “97% of Enterprise desktops run Java, 3 billion mobile phones run java, java is the #1 development platform and many more”. This gives you an idea to what extent Java has conquered and penetrated the software industry. Due to its huge market share, many developers endorse Java like a religion. After endorsing it, developers eventually realize over a period of time that Java is not simple like other languages, not friendlier like other languages, not versatile, lacks fun and many more. Stop complaining and look at the brighter side. Despite these shortcomings, the beautiful contribution by Java was JVM. JVM rocks even today and is indispensable. This is proved by the very fact that there are new era languages built to run on JVM. Yes!! to name a few – Groovy, Scala, Jython, Clojure, JRuby …. Build your application with Java and a complement it with these languages to achieve the power, simplicity and fun.
Java complemented with new era JVM languages, is more versatile, friendlier and powerful. Java is here to rule.
This is just a small glimpse of the software technology revolution. It will take couple more write-ups to give you the over-all picture of this evolution. Stay tuned!!