Cloud, Container, Programming, Database, Deep Learning, Software Architecture, Web, App, Batch, Streaming, Data Lake, ByteCode, No Code
Dec 11, 2019 · 20 min read
In only a few weeks, 2019 will end and we will welcome the new year 2020. For the Software Development industry, 2019 was a great year as Software and Digitalisation are affecting every sector. The trend will continue and will impact the world even more in 2020.
Predicting the future is difficult. Predicting the future of Software Development is even more challenging and risky. I don’t own any Crystal Ball. But I can use my “Human Learning” to make predictions about Software Development trends in 2020.
I will predict the most important stacks of Software Development: from Cloud to the ByteCode.
2019 was a great year for Cloud vendors. Not only the startups are using the cloud but also conservative and security concern companies like Government Organizations, Health Care, Mining, Banks, Insurances and even Pentagon are moving towards the cloud. The trend will continue in 2020 also where companies of all sizes and types will move or at least plan to move in Cloud. Gartner recently published the following figures for 2020:
So, if you are a decision-maker still pondering about moving towards the cloud, maybe you should rethink your strategy. If you are an individual developer and still have not tried your hands in the cloud, 2020 will be a perfect time to give a try. Most of the big Cloud providers (Amazon, Microsoft, Google) offer free credits to give hands-on experience in the cloud. Google is the most generous in this respect: it offers 300 USD free credit for one year.
As a first cloud provider, Amazon AWS ruled 2019. With the widest portfolio of services, Amazon AWS will continue to rule in 2020 as well. As Canalys has published the Q3, 2019 figures: the Big Cloud providers (AWS, Azure, GCP) hold a 56% market share whereas AWS alone holds 32.6% market share:
But other Cloud providers are also planning aggressively to close the gap with AWS. Microsoft has specifically targeted large enterprises. Recently Microsoft has pipped Amazon and got the 10 Billion USD deal from Pentagon for its cloud Project “JEDI”. This deal can boost Azure reputation and similarly dent the armor of AWS:
Google is driving the Cloud Native Computation Foundation to standardize Cloud operations. Google’s long-term goal is to make Cloud migration easier so that companies can later move from AWS to GCP. IBM has recently bought RedHat with a whopping 36 billion to have a share in the Cloud market:
2020 will see a lot more acquisition and merging. Also, many startups will come with new ideas and innovations e.g. Multi-Cloud services. From the neck-to-neck fight of the cloud vendors, companies can only profit from reduced prices and more innovations.
In the container orchestration field, once there was a fight between Kubernetes, Docker Swarm, and Mesos. Kubernetes has emerged as the clear winner from the fight and only grows stronger. Cloud is a Distributed Systems and Kubernetes is it Operating Systems (Distributed Linux). In Kubecon + CloudNativeCon North America 2019, 12000 attendees have taken part which is a 50% growth compared to the same event in 2018. Here is the exponential growth of Kubecon + CloudNativeCon in the last four years:
Source: CNCF/Linux Foundation
There is no slowing down of Kubernetes in near future and it will only become stronger in 2020. You can make your safe bet on Kubernetes in 2020 as the Backbone of the Cloud Native movement. Just a side note, Docker Enterprise is recently sold to Mirantis with an undisclosed amount:
Only a few years ago, it was all about Docker but now it is all about Kubernetes. Docker failed to monetize in its heydays and tried to gain money a few years later when the industry has already moved away. Another example that timing is everything in the modern tech world.
In the Software Architecture paradigm, the shift towards Microservice Architecture continued in 2019 as shown by Google Trends:
Google Trends: Microservices
As the industry moves towards Cloud in 2020 and beyond, the Microservices Architecture will be more dominant. One of the main reasons for the rise of Microservice Architecture is that it fits perfectly with Cloud Native, fast software development. In a previous Blog post, I explained the basic principle of Microservice Architecture and its advantages/disadvantages:
Microservice Architecture: A brief overview and why you should use it in your next projectBackground for Microservice Architecture and advantages of Microservice Architecture over Monolithic Architecturetowardsdatascience.com
I assume there will also be a trend to go back to Monolithic Software Architecture as for many use cases, Microservice Architecture is overkill and designing Microservice Architecture is challenging. What are the best practices to design Microservice Architecture? I have written a summary in a blog post previously, which may be helpful:
Be it Machine Learning, Data Analytics, Data Processing, Web Development, Enterprise Software Development or taking the photo of Blackhole: Python is everywhere.
Also, popular programming language ranking site TIOBE ranked Python as the third most popular programming language behind Java and C :
What is even more interesting is that the popularity of Python has doubled in 2019 (from 5% to 10%). I know that there are many limitations and flaws in the TIOBE index, but it is the most widely accepted ranking of programming language. I have written an article where I have listed top 10 in-demand programming languages and Python tops the chart:
By 22Kartika — Java Island, Source: Wikipedia
As shown by the TIOBE index in the previous paragraph, Java is still the most dominant programming language on the planet and will be dominant in 2020. Java’s runtime, JVM is one of the best pieces of software engineering and offers a solid foundation for Java. Many popular languages like Kotlin, Scala, Clojure, Groovy use JVM as their runtime. Recently, Oracle has changed the license for JVM:
The change of license means all companies who will use Java, Kotlin, Scala or any other JVM languages will be affected and need to pay whopping subscription fees. Fortunately, there is the OpenJDK initiative which will still keep the JVM free of cost. Several companies will provide Enterprise support for JVM:
Source: Java Code Geeks
Because of its “Cargo Ship” like size and speed, JVM languages are not best fit in today’s Serverless computing. Oracle is driving the “GraalVM” initiative to make Java nimble, fast and better fit in the Serverless world. As there is no other alternative to Java that offers Enterprise-grade stability and trust, it will continue to rule in 2020 and beyond.
Once upon a time, there was a huge competition between the Spring Framework and Java Enterprise Edition (JavaEE) in the Enterprise software development. But Oracle has given a walkover in the competition by being inactive in JavaEE. That triggered the formation of the “Micro Profile” initiative and eventually the formation of JakartaEE where Oracle has open-sourced its Java EE source code.
While all the politics and movements were happening surrounding JavaEE, Spring Framework has won the JVM Enterprise framework war with very active development and quick to react with the changing environment e.g. Cloud-Native support. In 2020 also, the Spring framework will be the no. 1 framework in the JVM ecosystem.
Two very attractive projects are under development to make Java smaller and nimbler so that Java would be a good choice for Serverless computation.
One framework is Micronaut:
The other framework is Quarkus:
Both Micronaut and Quarkus are targeting to use GraalVM and will attract the Java community even more in 2020.
In another Blog post, I have discussed in depth why it is worth learning the modern programming languages like Rust, Go, Kotlin, TypeScript, Swift, Julia, Dart and how they offer better alternative to existing programming languages:
Recently, Microsoft announced that they are exploring heavily the Rust programming to develop secure software as shown below:
Also, Amazon has recently declared that they are sponsoring Rust:
The Programming language Kotlin also emerges as the main competitor of Java in the JVM world with Google declaring official support for Kotlin in Android:
The trend will continue in 2020 and many other Giant companies that are probably having a deeper look in Close door in the new generation programming languages like Rust, Swift, TypeScript, Kotlin will come forward and declare their support openly.
Source: npm trends
Recently, Facebook has announced the React-Fiber project to completely rewrite the React core algorithm for better Concurrency and user experience:
What about other Frontend Web Frameworks e.g. Angular (Angular2+) and Vue? Angular is also a solid Web Development framework especially suited for Enterprises. I am sure that Google will invest heavily in Angular in the coming years. Vue is another very popular Web Framework which is backed by Community and several Giant Chinese Corporations. If you are already using either Angular or Vue, no need to migrate to React in 2020.
In the Mobile App Development, the Hype around Hybrid App Development or Cross Platform Native App Development has slowed down a bit. Hybrid App Development/Cross Platform Native App Development gives faster development velocity as you need only one team instead of two. But the Native app gives better user experience and better performance. Also in Hybrid/Cross-Platform App Development, the App always needs to be tweaked to have advanced features. For Enterprises, Native App Development is still the preferred solution and the trend will continue in 2020. Airbnb has published a detailed Blog post why they have ditched the leading Hybrid App Development Platform “React Native”:
Although Facebook is trying to improve React Native and Google is pushing hard its own App Development Platform Flutter, they are mainly suited for Prototype, POC, MVP or feature light apps whereas Native App Development will continue its reign in 2020.
One interesting fact among the Native App Development is that Google is promoting Kotlin and Apple is promoting Swift as the main programming languages because of the developer-friendly and modern features of the languages. Google has recently reiterated its support for Kotlin, which is good news for Kotlin adopters:
There are many use cases where the Hybrid/Cross-Platform App is a pragmatic option. In this area, there are many options: the already existing Xamarin, Ionic and the newer React Native, Flutter. Facebook has built React Native based on the highly successful and mature Web framework React. Like its Web counterpart, React Native is also the dominant framework in Hybrid/Cross-Platform App development as shown below:
Source: Google Trends
As React Native and React share the same base, they offer high Code re-usability and offer the option: “Write once, Run Everywhere”. Another added advantage of using React Native (or other Facebook Framework) is that Facebook uses React Native to develop its own Mobile App. Google is late in this domain but has gained significant traction in last year with its own Cross-Platform Native App framework Flutter. Flutter offers better performance but needed another not yet mainstream Programming language Dart. React Native will continue to dominate in this field also in 2020 considering all the changes happening in the React Ecosystem.
REST is like the 800-pound Gorilla in the API domain. It is the de facto and most widely used technique in the API based communication between services. There are also some other options in this field. As you may have correctly guessed if you have read this article carefully until this point: gRPC from Google and GraphQL from Facebook.
Both of them are interesting technology but offer different capabilities. Google has developed gRPC as a reincarnation of the Remote Procedure Calls techniques (e.g. SOAP) but on Steroid. It uses Protobuf instead of JSON as the messaging format. On the other side, Facebook has developed GraphQL as an aggregation layer to avoid the chatty and frequent REST calls. Both gRPC and GraphQL have gained success and excel where they fit. In 2020 also, REST will be the most dominant API whereas GraphQL and gRPC will be used as a complementary technique.
In the Deep Learning/Neural Network domain also, Google and Facebook are the main players. Google has given us TensorFlow which is based on a popular Deep Learning framework Theano. It quickly became the main library for Deep Learning/Neural Network computation. Google has even delivered a specially designed GPU (TPU) to speed up the computation of TensorFlow.
Facebook is not far behind in the Deep Learning field, as they probably have the biggest collection of images and videos. Facebook has delivered a Deep Learning library PyTorch which is based on another popular Deep Learning library Torch. There is a subtle difference in the way both the framework works. TensorFlow uses Static Graph for its computation whereas PyTorch uses Dynamic Graph for its computation. The advantage of using a dynamic graph is that it can correct itself on the fly. Also, PyTorch is more Python friendly, which is the main programming language in Data Science.
As PyTorch was gaining more and more popularity, Google has released TensorFlow 2.0 in October 2019 which uses the dynamic graph and more Python friendly:
In 2020, TensorFlow 2 and PyTorch will fight neck to neck. Considering the larger community of TensorFlow, I assume that TensorFlow 2 will be the dominant library for Deep Learning.
During the Hype days of NoSQL, many people were laughing at SQL and pointing its limitations. Many posts were explaining how NoSQL is much better and will replace the SQL. But once the Hype was over, people soon realized that the world cannot live without SQL databases. Here are the rankings of the most popular databases:
Source: DB Engines
As we can see from the above chart, the SQL databases hold the top 4 spots. The reason SQL is dominant is that it offers durable ACID transnational guarantees, which are the most essential requirements for the business applications. The NoSQL databases offer horizontal scaling but with the price of compromising the ACID guarantee.
The Web-scale companies are looking for the “Master Database” i.e. a Database which will offer an ACID guarantee like SQL databases and will offer horizontal scaling like NoSQL database. At this moment, two solutions partially fulfill the requirements of “Master Database”: Amazon’s Aurora and Google’s Spanner. Aurora offers almost all SQL features but no horizontal write scaling, whereas Spanner offers horizontal write scaling but does not support many SQL features.
In 2020, the two databases will hopefully come closer or someone else will come up with a “Distributed SQL”. If that happens, he will probably get a Turing prize.
As discussed in the previous section, the modern Data Platform is complex. Companies usually have OLTP databases (SQL) to support ACID transactions and OLAP databases (NoSQL) for analytical purposes. Also, Enterprises have other kinds of data storage e.g. for Search (Solr, Elastic Search) or Computations (Apache Spark). Companies build their data platform based on Data Lake i.e. Data is copied from OLTP databases to Data Lake. All other types of Data Applications (e.g. OLAP, Search) use the Data Lake as their Golden Source.
Hadoop Distributed File System (HDFS) was the de facto Data Lake until Amazon came with Object Storage S3. Scalable and Cheap, S3 soon became the de facto Data Lake in many companies. The only problem is that using S3 binds the Data Platform tightly with Amazon AWS Cloud. Although Microsoft Azure has Blob Storage and Google has similar Object storage, they are not compatible with AWS S3.
A new Open Source, S3 compatible Object Storage MinIO could be the rescue for many companies. With Enterprise-grade support and built for Cloud-Native environment, MinIO offers Cloud Neutral Data Lake:
Microsoft has recently announced MinIO in Azure Marketplace with the slogan: “providing Amazon S3 API compatible data access for Azure Blob Storage services”. If Google GCP and others also offer MinIO, then it could be a great step forward to facilitate Multi-Cloud.
In modern days, Enterprises usually need to run a computation on their large-scale dataset, which needs Distributed Batch Job. Hadoop Map-Reduce was the first Distributed Batch computation platform. Recently, Apache Spark has taken the place of Hadoop as the king of Batch Processing. How Apache Spark can give better performance than Hadoop? I have written a blog post previously to have an in-depth analysis of the Modern-day Data Platform:
Spark has specifically targeted the limitations of Hadoop Map-Reduce i.e. processing everything in Memory instead of saving the Data in storage after every costly operation. Although Spark uses the CPU and Memory hungry JVM for Batch processing, it will rule the Batch processing framework in 2020 and beyond. I wish someone will develop a more efficient Batch processing framework using Rust, which could replace Spark and save the huge Cloud bill of the companies.
A few years ago, real-time stream processing was not possible. Usually, a micro Batching framework like Spark Streaming was used which has given “near” Real-time Stream processing. However, Apache Flink changed the landscape by offering a real-time stream processing capability.
Until 2019, Apache Flink could not gain enough Traction as it could not compete with Spark’s marketing. The table has turned once the Chinese Tech Giant Alibaba bought Data Artisan (the company behind Apache Flink) in January 2019:
Flink should be the number one option if a company wants to process real-time stream processing in 2020 and beyond. Although Flink also suffers the same way as Spark by using the CPU hungry and heavyweight JVM and handing over a large Cloud bill to its users.
Several companies (led by Mozilla) developed the WebAssembly, the low-Level Byte code format for the Browser, to run any supported Programming language in Web. The MVP of WebAssembly is released which supports near Metal programming language (e.g. C++, Rust):
WebAssembly has enabled computation-intensive applications like Games and Autocad to run on Browser. The goal of WebAssembly is even bigger and to run outside the browser as well. WebAssembly also offers inherently the Security and Sandboxing due it its Web support. It also means that WebAssembly can be used in the following “Outside the Browser” scenarios:
- Hybrid native apps on mobile devices.
- Serverless Computations with no Cold start problem (Cloud)
- Server-side computation of untrusted code (CDN)
In my prediction, 2020 could be a breakthrough year for WebAssembly and many giant corporations (including the Cloud Vendors) and community will embrace it.
The rapid digitalization and Industry 4.0 revolution means that there is a huge gap in Supply-Demand for Software Developers. As a result, many people or companies cannot implement their ideas because of a lack of Developers. To lower the barrier the entries into Software Development, there is an attempt to make Software Development with no Code (No Code) or with Minimal Code (Low Code). This effort is known as LCNC (Low-Code No-Code) and has gained some success in 2019:
Source: no code
The goal of this movement is that anyone can develop software if he/she has a cool idea with no coding experience.
Although I am still skeptical about using the LCNC frameworks in production, they can lay the foundation for others. Companies like Amazon, Google can build a solid product on this foundation (the same way AWS Lambda flourishes on the foundation of Google App Engine).
It is worth to have a look at the LCNC movement which will get more traction in 2020.
If you found this helpful, please share it on your favorite forums (Twitter, Facebook, LinkedIn). Comments and constructive criticisms are highly appreciated. Thanks for reading!