The recent pace of change

Five years ago having learnt Git I got into Scala. This was such good fun that I stuck with it after decades of mostly Java (a little Ruby, Javascript, C# and C++).

This meant Akka and ScalaTest and SBT and so on.

Then Docker came and destroyed the JVM. My project images of 230M for small programs was stupid, in fact the entire premise of the JVM running anywhere is replaced by Docker. So for the last 18 months I got bare metal Kubernetes working with Ingress and so on in the garage. My scala microservices were all chatting with Alpakka streams over Kafka.

But the images were still huge, and GoLang offered a simpler world of small images. So I embraced GoLang and GRPC for about 10 months. It was fine until we had to connect to Oracle from Windows and Unix GoLang and then I shudder at the memory of C++ programming last century. I tried my first AWS serverless experiment in GoLang.

Pause.

Lambda don’t require a docker image, you just upload your libs (as AWS layers if you want) and then your code. No JDK needed, as its already there.

But, serverless have concerns with cold start. It seems it used to be Javascript was slow, but now Node is blistering compared to Python. JVM is still slower - cold start could still kill the JVM?

Well, various web sites are telling me that AWS is currently evicting Lambdas every 10 minutes, and that the JVM is taking 260ms to start compared to node which is almost instant. However, JavaScript is a stupid language if you are writing huge systems. Also, if my Lambda is not called often I don’t think I care that it is 263ms, and if it is called often it will stay warm. The JDK is actually faster than node when warm, if only by a tiny margin. Also, with Graal and even Dotty native in the near future perhaps the cold start issue will go away.

So, GoLang is slow on cold start, Scala is slow on cold start (JVM), JavaScript is fast but a rubbish language.

What about modernity? Akka is now typed, and Scala 3 (Dotty) is out in the next 12 months with its new Python looking Syntax and Tasty cross compilation and general functional greatness….

I think the Container distraction is over. Lambdas in AWS are event driven and fit every use-case I can think of (OK, not high frequency trading, but I’m not doing that). ReactJS for the GUI remains the only choice.

Back to Scala on AWS Lambdas, discarding GoLang. Scala lives again!

Now to get AWS SAM set up….