Skip to content

Personal Techradar for Programming Languages - 2020 H2

| techradar | python | java | scala |

Why “personal” Tech Radar? Well, Technology Radar was “invented” by ThoughtWorks company (I guess, and I have zero motivation to prove this). It is used for companies’ technology landscape evaluation. So, how I can use this for personal technology tech stack definition?

We are living in a very dynamic world. Things are changing very fast. Software engineers like to try new “silver bullet” here-and-there. You know “the grass is always greener on the other side” ;-) So, it’s important to follow some guidance even for own personal development, especially in Programming Languages space.

I have a weakness look around and try new “shiny” programming languages. But, now, I don’t see any value in this. It’s a waste of time. Better to work on something fundamental like math, instead of learning new syntax every year or two.

Some time ago I defined a list of programming languages I am willing to invest in with some reasonnings. This list is defined for 2020 H2. And I can assume that for 2021 H1 it will be updated.

So, following Tech Radar tradition I need to select some criteria.

The Radar Ring Semantics (in decreasing level of investment):

  • ADOPT: technologies with broad adoption, in which I am willing to invest long-term. I feel strongly that the industry should be adopting these items. I use them when appropriate on my projects.
  • TRIAL: worth pursuing. It’s important to understand how to build up this capability. I can try this technology on a project that can handle the risk.
  • ASSESS: worth exploring with the goal of understanding how it will affect me.
  • HOLD: Proceed with caution.

Technology Domains:

  • Back-End
  • Scripting/Automation
  • Infrastructure
  • Web
  • Desktop
  • Machine Learning
  • System programming

Technology Domains

Back-End

This is the obvious part for me, since I’ve been using mainly two languages: Java and Scala.
JVM is my primary platform, so all .Net programming languages are automatically removed from this list (i.e. C#, F# and so on).

What about other JVM languages:

  • Kotlin (it is on hype in 2020). This languge could not bring anything new to my current tech stack Java/Scala. Even conceptually, this language is not even close to Scala. Yes, it’s better than Java, but come on, why do I need a slightly different language?
  • Clojure. It’s dynamic, Lisp, and is not popular.
  • Groovy. Unfortunately, I have to put it to the same bucket with Kotlin.
  • Ceylon. According to Github, it’s dead.

Other languages:

  • Golang. Yep, it’s very interesting alternative. But, I just could not use it after Scala. Golang syntax is very weak and limited. Ideologically, it’s not my language for the backend.
  • Javascript (via Node.js). It’s not for me. I don’t see any benefits there.

Scripting/Automation

  • Python is my main language in this area: 1) I’ve been using it at work; 2) popularity
  • Ruby I used it many years ago. But now this niche is occupied by Python. But esthetically Ruby is a much better language than Python. I’ve been using Python only because of its total dominance. Sad, but true ;-(
  • Groovy. Another sad story. Groovy was my main scriping languge for several years. Then there was a huge popularity decrease and I switched to Scala/Python.
  • Javascript (via Node.js). I think it’s pretty good alternative, but I am with Python now.
  • Golang is well suited to CLI application. I think it’s a perfect fit.

Infrastructure

  • Golang is very popular in this domain. Kubernetes and Cloud-Native all these are Golang (mainly). Furtunatelly, we can use other languages (e.g. Python) while implementing Kubernetes operators. But, I would use Golang if it is required.
  • Rust. Another interesting language, but it’s much more complicated than Golang and the community is not as big as for Golang.

Web

There are only two candidates: Javascript and TypeScript.

All other languages (Clojurescript, CoffeeScript, PureScript, Scala.js, Elm) are not interested for me because of the popularity.

Desktop

  • Java. I haven’t developed for Desktop for some time. But, I would use Java in case I need something right now and right away.
  • Swift. It’s a perfect fit for MacOS native app.
  • Objective-C is slowly declining in popularity (BTW it should be already dead).
  • C++. I don’t want to touch this monster.
  • Python. I think it’s nice alternative. It has good bindings: Qt, wxPython, etc.

Machine Learning

  • Python is a king on the Machine Learning scene.
  • R. This language is losing popularity in ML. But, it’s still big. So, I should consider it.
  • Julia. I know nothing about this language.

System programming

  • C is simple and quite powerful. For something small, it’s good enough.
  • C++. Again, I don’t want to touch this monster. It doesn’t worth investments.
  • Rust is a very interesting and powerful language. At least, I prefer Rust over C++.

Summary

  • ML = Machine Learning
  • DS = Data Science
  • DA = Data Analysis
  • CLI = Command-line interface
Ring Back-End Scripting/Automation Infrastructure Web Desktop ML/DS/DA System programming
Java ADOPT ADOPT ADOPT
Scala ADOPT ADOPT
Python ADOPT ADOPT ASSESS ADOPT
Golang TRIAL TRIAL
Javascript ADOPT HOLD ADOPT
TypeScript ASSESS HOLD ASSESS
Haskell ASSESS ASSESS
R TRIAL TRIAL
C TRIAL TRIAL
C++ HOLD HOLD HOLD
Rust HOLD HOLD HOLD HOLD
Swift HOLD HOLD
Kotlin HOLD HOLD
Clojure HOLD HOLD
Objective-C HOLD HOLD
Groovy HOLD HOLD
Ruby HOLD HOLD
Julia N/A

So, for 2020 H2 I have selected languages that are in ring TRIAL and upper:

Ring Back-End Scripting/Automation Infrastructure Web Desktop ML/DS/DA System programming
Scala ADOPT ADOPT
Java ADOPT ADOPT ADOPT
Python ADOPT ADOPT ASSESS ADOPT
Golang TRIAL TRIAL
Javascript ADOPT HOLD ADOPT
R TRIAL TRIAL
C TRIAL TRIAL