The Internet and the Application Development Landscape
July 10, 2020
The Internet has been enabling the growing interconnection of everybody and everything. I have been a JAVA fan since its beginnings and used it heavily after J2EE was created. But as time goes by, we should be open to alternatives. I will describe my journey with Java and J2EE and how I see it in 2020.
Internet Origins
The Internet is a set of interconnected networks via TCP/IP protocols. Its origins are back to the 70s, interconnecting academic institutions. It was formally created in 1983. The spread of the Berkeley Unix among universities helped to spread of TCP/IP and the Internet. In the ’90s HTML was invented and had a growing adoption, popularizing the Internet.
Internet in Brazil
In 1988 I was working at NCE/UFRJ in a team that developed a shared-memory multi-processor computer (Pegasus), with the pioneer multi-processor Unix-like system (Plurix). One of our researchers that studied his Ph.D. at UCLA negotiated with Embratel and UCLA, and so NCE/UFRJ was the first Brazilian Institution to be connected to the Internet. Afterwords Fapesp and LNCC also got their connections.
In 1994 Embratel started commercially offering a pilot dialed internet connections, my cousin was one of the lucky ones, and we shared his connection. In 1996 Internet dialed connection was generally available.
Designing Applications for the Internet
I will describe our experience in developing web enterprise applications over the years.
Making it happen!
In 1998 I worked at Symprise, we had developed a client/server system to manage Export and Import Operations, as a complement to ERPs. Our main Customer exported to over 60 countries.
Export and import logistics and financials involve a complex web of operations, relationships and information. One critical success factor for the business is the ability to quickly adapt to changes and delays related to production, shipment, regulations etc. Another critical success factor is the timeliness and correctness of the documentation. It has to be compliant with banking requirements, Brazilian norms, international norms, and the destination country norms. Our system generated most of the documents according to business rules and Customer/product/country-specific reference data.
With the growing world wide availability of the Internet, we saw a clear opportunity to integrate each international agent to the work required to manage operations and the generatation of the documents for their Customers’s orders, shipments and payments.
At that time, we were developing our applications with PowerBuilder and we noticed that they had just released web.pb.
This new component connected HTTP requests to PowerBuilder functions, enabling us to create our first web applications.
These web applications facilitated easier collaboration and quick feedback among national and international business agents in each export operation,
resulting in significant competitive advantage for our Customers.
Java on the Server - A stronger approach
Web applications were viable and were a fertile new field of opportunities for effective innovation. We were not comfortable with our tech stack. Looking ahead for a large number of simultaneous users (like Amazon), we needed a more reliable solution with better performance, security, and scalability.
At the end of 1999, Java server technologies were emerging. I have done some concept proofs and saw there a possibility of reliable and effective technology. I was contracted to develop a web version of a windows application generator that implemented a graph database model. I delivered that in 2000 march. My version was developed using Java and generated Java Swing applications that could run via the Internet and persisted its data in any SQL Database. That resembled the previous windows applications generator and fulfilled their requirements.
J2EE - A better solution
Java Swing applications were ok, but they have not the same thin client and scalability necessary to build an Amazon-like web application. The ideal solution should be compliant with most of the user’s web browsers, with minimal pre-installation. So our web client should be a generated mix of HTML, CSS, javascript, and simple media. Java server technologies grouped under the J2EE brand. They implemented a sound, reliable, and scalable web application model, with a thin web client. In 2000 we started to build a 3 tier framework based on J2EE, resembling our successful PowerBuilder highly delarative framework. We called it WISE. It abstracted out some of the burden and complexities of J2EE, and facilitated Unit Test and Test Driven Development.
In 2001 we released our new generation of Export Operations System based on WISE and developed other web applications based on WISE, as a CRM for a Petrochemical Company. In 2002 we were invited to implement the first 3 tier J2EE transactional application at Petrobras. The application should be ready in 45 days. At that time it was called cc-Truck and was part of their main e-Business initiative: “Canal Cliente”. They already had a J2EE application developed, but it had reliability and performance problems. We build a new application utilizing their user interface style and their working interfaces with other systems. The system consisted of about a hundred of data entry pages, interfaces to legacy systems, and some calculations. Our system, based on WISE components, generated on demand the entry pages compatible with most of the various user browser versions. These pages were JSPs that even big international consulting companies would handcraft each one of them. Our system generated them on the fly. If any problem were detected for a specific browser, we just needed to improve the generator. It was a success. Afterward, they contracted us to help Petrobras TI with its pilot J2EE application.
SAP decided to be a player in the web applications market and bought some companies that had complementary web solutions to SAP R/3. All of them based on J2EE, so to facilitate the proper integration of those applications with R/3, SAP organized BAPIs to access the business functionalities and made them accessible to java applications via a Java Connector (JCO). I studied all the SAP R/3 business functionalities to design the proper interfaces to our Export and Import Operations System. The interface comprehends most of the core R/3 modules: MM, SD, FICO, PP. I have developed our full SAP R/3 direct online interface in 2004.
J2EE and WISE enabled us to build many modern, reliable, and performant applications. So for us, Java and J2EE were the perfect software solution at that time. In the following years, many large software companies embraced J2EE as their primary software technology. But the IT evolution is exponential, and new technologies and practices emerged.
2020 - The digital era
The exponential advances in IT hardware, communications, software practices (agile, etc) and business practices (MVP, etc) has changed the application landscape: adaptable and fast-changing applications solving complex problems and enabling twin digitals of the reality. Nowadays, Software is developed by small groups, using Agile methodology, deployed on Container at Cloud server providers using CI/CD, persisted on NoSQL databases, rendered on a modern browser or smartphone. All of them connected via high-speed networks.
Microservice Architecture is about decomposing a Software System into autonomous Modules that are independently deployable and which communicate via lightweight, language-agnostic way, and together they fulfill the business goal. These autonomous modules called microservices, may use almost any technology stack.
Now the focus is on rapidly building and evolving reliable microservices. Each one of them, implemented with the technology stack, that best fits its requirements and the skills of the development team. But large systems may consist of thousands of microservices, and may have many users, so it is possible to have an enormous number of running instances. If so, this imposes performance constraints on the technology stack selection.
Many programming languages and runtime environments were created in the last years. All of them may be alternatives for building microservices. Javascript has widespread adoption and has been significantly modernized, so now is an alternative. Java Spring was a answer for the drawbacks of J2EE.
How does javascript/NodeJs compare to Java in terms of development time and execution performance? Paypal has done a comparison. A new system was developed by two teams, one based on javascript/Node and the other based on Java. Jeff Harrell (Paypal Engineering VP) relates here Paypal’s extraordinarily results, in favor of javascript. The javascript team even though was smaller concluded the code before, with fewer lines of code, and it run faster than the Java counterpart. Recently here and here are considerations about these results.
Conclusion
Nowadays, the software industry reached a maturity level, that there are plenty of good alternatives for Software Development. Some of them more suited for specific applications. I am confortable with Javascript/Node and Java Spring. Most of the modern concepts in programming are now available in most of languages. My advice for new software projects:
- Python for AI and other math-intensive applications.
- GOlang for write server-side scripts for high performance.
- Javascript for frontend development.
- Kotlin for android
- For parallel programming Scala and GOlang.
- For functional programming Clojure, Scala
- For monolithic systems: Java Spring