In the new article “Java and C# are Obsolete in the Age of Docker” Erik Engheim states: “Languages running on virtual machines were developed to make deployment on any platform easy. But this ability no longer matters when your software runs in a container.” He apologizes saying he does not mean “there is no point in learning Java or C# anymore” but still pushes a language like Go as their natural replacement. This article provoked the following discussion between me (JF) and a colleague of mine (IK) this morning. I decided to share it and get comments from DM Community. Here it is:
IK: The author makes strange points, docker is just a way to deploy an application but how deployment type is related to the application semantic expressed in a particular language? Go is a good language for system utilities but it is not well suitable for business apps.
JF: It seems his article is not about languages as his main point is that virtual machines become unnecessary overhead when run inside containers.
IK: Well, more than half of his article is about obsolete languages because there is Go which is “Java for Docker”. The guy sounds like a super excited neophyte who discovered a new way of doing things and claims that everything else is obsolete. He does not make any valid points why Java or C# are obsolete. Because of Go? He does not like JVM, but there is GraalVM that can deploy the same java app as a native application. JVM is not only about running the same code on different OS, but also about polyglot programming environment which has nothing to do with docker or linux or windows.
Java may become obsolete one day, but there is Scala, Closure, Kotlin that run on JVM as well. Besides, Java itself is evolving…
JF: As we discussed yesterday, an AWS Lambda function is a small computer that executes one specialized function for different requests.
IK: Exactly, and it’s written in Java. There is no special language for Lambda.
JF: Or in another suitable language that allows a user to describe business logic.
IK: Soon the docker will be obsolete too but programming languages will stay there much longer. He compares apples and not even oranges but crates.
JF: Lambda, Docker, or something new that will come after them are different implementations of specialized computers that execute one particular business function. How to create such a computer? It needs two different components:
- a deployment mechanism that is not so important.
- the logic (semantic) of this function – here languages from Java to DMN with Decision Tables play and will continue to play an important role.
IK: Yep, exactly, the guy confused content with its packaging.
JF: or did this intentionally to bring a controversy
IK: Does not matter, the entire approach is based on misunderstanding. Deployment type is obsolete, it becomes a commodity. There are already tools that let you deploy running code on aws, azure, or google without any changes to the function code.
By the way, OpenRules does that to some degree by providing “click and deploy” to java api, aws lambda, or docker. If there is another “NextDocker”, does it mean java or openrules become obsolete? It’d be just another crate to ship the product.
JF: A crate or a package. I like you calling a Lambda function a specialized computer. Moving from a universal general-purpose computer (“main/monolithic frame”) to specialized computers (“microservices”) is the apparent latest trend.
IK: Yes, it is true, and we will move more and more in that direction. The entire internet will be a “computer” that runs those small “functions” integrating data, processing and decision endpoints as a some kind of global, always running app ( SkyNet ).
Feel free to add your comments.