The following is a contributed article by Mike Piech, vice president and general manager for middleware at Red Hat
In 1850, American Express was born as a rapid mail delivery service. In the late 1880s, one of the owners of American Express had difficulty obtaining cash while traveling in Europe, which led to the creation of traveler’s checks. Eventually, the company evolved into an investment banking and consumer credit powerhouse – but it all started with delivering express mail using circuit riders. American Express more than adapted; it drove change.
Java is a programming language that was originally intended for consumer devices (interactive cable boxes) to support object-oriented programming more elegantly than C++. It didn’t really catch on as a device language, but it pivoted to become a portable language of the early web and then a dominant enterprise programming language.
Today, Java is adapting yet again, supporting the complex demands of Big Data frameworks like Hadoop as well as the flexibility for mobile platforms like Android. Java is growing because Java adapts.
Community before there was open source
Java was open source – or at least open community – before there was open source.
Within two years of its introduction, Java became the second most popular programming language in the world. Sun approached the International Organization for Standardization (ISO) to introduce Java as a standard, but ultimately made the bold decision not to hand over control. It instead created the Java Community Process, which anyone could join and which entailed an open process for proposing changes to the language and platform. By organizing the community, it avoided some of the early pitfalls of Linux projects such as contradictory and conflicting implementations.
Strategy, not tactics
Sun made a strategic move in 1999 that established Java as an evergreen language: it released different platforms, based on a common core, to enhance Java application development. In addition to the core Java, Standard Edition (SE), Sun added Java, Micro Edition (ME) and Java, Enterprise Edition (EE), with specialized application program interfaces (APIs) and tools that enabled the Java platform to span a wider range of development needs and workload scales.
That action is an example of perfect timing. Java was ubiquitous because of its web presence; it was defined by the developers using it, through its community, and standardized through their best practices; and it was focused on providing an extensible framework that made it reliable enough to work in large enterprises.
You can change tools, but you build on foundations. The Java platform became an enterprise application foundation. It was not just, or even mostly, about the language itself, though arguably the Java language drove some great innovation). It was about the Java virtual machine (JVM) runtime, the APIs, the tools, and the ecosystem. And further, it was about the openness and process with which those evolved.
Java has been a staple of enterprise environments since the mid-2000s because it is more than a language. Java EE has been something that enterprises could commit to for a decade or more with greater confidence.
Adaptability: Android, IoT, and the cloud
Application development is moving ever more rapidly away from monolithic approaches. Cloud environments, containers, microservices, mobile apps, and the Internet of Things (IoT) are the antithesis of the stereotypical large, lumbering monolith.
IoT represents the roots of Java. Android ultimately ignited the device-based Internet of Things that was envisioned by Java’s creators. Android is a Java-based platform and has invigorated Java innovation. Java is still a go-to foundation for large-scale, server-side logic, but its set-top-box roots predispose it to IoT development in a way other platforms have difficulty matching.
Today, there is a whole new generation of developers who are not traditional developers at all. Business analysts are creating business logic, workflows, and rule bases; executives are creating applets for specific reports from SaaS products like Salesforce; and graphic designers are creating mobile applications. These are low-code environments, and these types of developers often don’t even know or have to know the underlying programming language.
In emerging environments like the cloud, the technology battle is often more on the cloud provider’s particular service portfolio and developer experience than the language of the applications. Microsoft Azure, Amazon Web Services, and Red Hat OpenShift are all polyglot, as are major container platforms like Docker.
It is fair to predict that no single language will replace Java. Cloud and mobile applications call for lightweight, flexible architectures based on fine-grained components (“microservices”). Java and Java EE-based application servers are very much relevant in the world of microservices; they can provide mature, streamlined, and battle-hardened capabilities related to transactions, persistence, and security. The need for that level of performance will not disappear any time soon, microservices or not. Meanwhile the descendant technologies such as WildFly Swarm and Spring Boot continue to adapt in support of the emerging requirements of cloud, containers, microservices, and big data.
Java has grown over two decades because it is still one of the strongest language for business critical, large, transactional applications that rely on complex data and data sources. The monolithic applications in the past have evolved into microservices in the cloud. Java continues to be relevant because it continues to adapt.
PREVIOUS ARTICLE«Line-of-business: Software for the people
Jon Collins’ in-depth look at tech and society
Phil Muncaster reports on China and beyond