Erik Engheim
3 min readMar 30, 2021

--

While I am critical of Java, I got to point out that this is based on what I value in development. Obviously for lots of people like yourself it is a highly productive environment.

But there are tradeoffs and different approaches to building systems. The way I see it you got these kinds of choices:

1. Pick Java, get more variety of tools. More advanced langauge features which gives you more productivity. Downside: You got to spend more time becoming a profecient Java developer. More time staying up to date. More time reading code.

2. Go with Go and have simpler tools and language features. Means lower productivty, but it means you can learn the language and tools faster. You spent less time staying up to date. Less time reading and understanding code.

I think there are some sweet spots here though. While you are mainly writing code, the Java approach will move you faster along. But as code base gets bigger, you hire more people and spend increasingly more time reading and understanding your existing code, then complexity will start dragging you down.

I have seen this as a C++ developer over many years. It is an old C++ argument, to just use a subset of the language but that never really works. The wiz kids are always going to want to use the latest even if you try to prevent them. For your personal project this is not a problem, but for large projects this matters. You end up trying to decipher crazy code written by people who wanted to be clever.

Go makes it hard to get clever which means a lot of the code will remain fairly easy to read.

To be clear this is not a unique problem to Java or C++. I notice e.g. that my old Swift code is harder to read than my old Go code.

I absolutely love Julia as a programming language, but I got to admit, that it does probably make it a bit too tempting to write clever code. For my own projects, not such a big deal. But it does worry me a bit about larger projects.

I remember jumping into a Ruby on Rails project once. That was not easy to follow at all.

As for Generics and Go, I am not sure what to think of it. I don't think this is comming because limitations have proven themselves. People have complained about lack of Generics since the first day Go was released. The designers said they where not opposed to it as long as they could come up with a good design.

The Generics proposal that we got now, looks pretty good to me, but I am not 100% convinced it is needed. Most people who actually wrote larger systems in Go, don't seem to think it gets in therir way. The people who complain loudest about lack of Generics aren't even users of Go.

Ultimately I think people should have choices. If people like to have a high powered language wiht lots of advance tools, they should have that choice. But if people want to keep things simple, that should also be an option.

Go is a nice addition in a field that had started getting crowded with complex languages. Java used to be the simple choice. If you did not want the complexity of C++, you could pick Java. For those who crave simplicity, Java really isn't a valid choice anymore.

--

--

Erik Engheim
Erik Engheim

Written by Erik Engheim

Geek dad, living in Oslo, Norway with passion for UX, Julia programming, science, teaching, reading and writing.

No responses yet