top of page
  • Petri Silen

TOP-6 software innovations in 21st century

Updated: Sep 14, 2019

1. JSX

JSX as introduced by React.js has revolutionized web front-end development by allowing writing HTML inside logic (JavaScript file).


The emergence of Single Page Applications (SPAs) created demand for dynamic HTML, because user is interacting with a single HTML page, there must be a way to modify that HTML.


There are two solutions for creating dynamic HTML problem:

  1. Embedding logic inside HTML

  2. Embedding HTML inside logic

Angular and Vue.js chose the first option, but React chose the latter option. In my opinion using JSX produces most readable and understandable solutions for dynamic HTML generation. It also enables you to use as complex logic as you need to render dynamic HTML And you don't need to learn a new ´language´ for adding logic inside a HTML template, you can just use JavaScript that you know already. This opinion is shared by other developers. According to recent StackOverflow survey, React is most loved, least dreaded and most wanted web framework (StackOverflow survey 2019) and I believe that much is to thanks to JSX.


2. Redux

Redux is a state management library for JavaScript Single Page Apps (SPAs). Redux is popular especially in React development. But you can use it with other UI layer also. The best part of the Redux is reactivity that is hidden inside Redux itself. Developer does not need to use any additional reactive programming library like RxJS to achieve reactivity. The second best part of Redux is shared centralized state. Any component can read other components state very easily if it needs it. There are some issues in Redux and it could be improved. I will write later a blog post about how I use Redux in safe and object-oriented way.


3. Typed JavaScript

Typed JavaScript enables large scale and enterprise web front-end development in productive and safe way. Currently there are two alternatives for typed JavaScript: Flow and TypeScript. I have used both of them and I will never go back to untyped JavaScript again!


4. Node.js + MongoDB

This combo makes end-to-end usage of JavaScript objects (and JSON) from web front-end all to way to web backend and to database. You can get rid of all ORM (Object Relational Mapping) that you need when working with relational database systems. Your life becomes much more simpler.


Using relational database and ORM, when changes to database are made, they may require multiple SQL statements (changes to multiple tables) to achieve a single thing and then you must also consider locking and transactions. However, in document-oriented MongoDB your change typically requires a change in a single document without dependencies to other collections (collection in MondoDB is equivalent to a table in relational database systems).


MongoDB also offers scalability with sharding. At the moment, MongoDB is clearly the most popular NoSQL database ranked as 5th in DB Engines ranking, only preceded by Oracle, MySQL, SQL Server and PostgreSQL.


5. Docker

Docker is the most popular containerization technology and by using containers we can isolate software components from each other. Previously, without containers, we faced problems like incompatible dependencies when deploying multiple software components running on the same computer. Using Docker, each software component is isolated from other software components running on the same computer in theirs own containers. Also previously, deploying software to different production environments might have caused problems if the environments were different.


Docker container deployments are fast, because of Docker image's layered architecture. Only layers, that do not already exist on the computer where software is to be deployed, will be transferred (from Docker image registry). So, when you deploy your application first time, all the docker image layers might be transferred, but when you upgrade software using a new version of the docker image, it might be that only the top layer needs to be transferred. Let's imagine you have a Java EE based microservice. It's docker image must contain Java runtime and Java application server, which are big layers. But the top layer of your microservice's docker image can be a very thin layer, which is transferred fast over the network. And when you update your microservice only the top layer is affected (provided that you don't need to change Java runtime or Java application server version)


6. Kubernetes

For containers, we need a system to orchestrate them to run in cloud. Previously, we needed to select a cloud provider and learn its usage. This caused a vendor lock-in. Today, all major cloud operators, Google, AWS and Azure, support Kubernetes. In the future, we should be able to dynamically choose and change our cloud provider or providers so that we can run our software system as cheap as possible.


I like the way Kubernetes allows you to use a declarative syntax to specify the wanted state of the cluster. The Kubernetes concepts and API are a bit too complicated and could be improved, however.

11 views0 comments
bottom of page