Erik Engheim
2 min readDec 19, 2022

--

I think I agree with most of what you said. I am also quite opposed to the idea that there is some objectively best language for all. As you say our brains work quite differently.

For me I have found that more dynamic languages such as Julia, Lua etc work best. But details and specific matter. I find JavaScript absolutely horrible to work with. Go is statically typed but quite okay for me. It has a bit of dynamic feel to it.

I just want to comment a bit on your example. I think C++ is the classic example of an overly complex language. Having been a C++ developer for some 15 years is part of the reason why I strongly dislike complexity.

I would argue Rust is a simpler language. It is perhaps a bit more difficult conceptually. Some of the things around life times require more thinking to understand. Yet in terms of number of features and concepts I would say Rust is a much simpler language unless it has profoundly changed since I last looked at it.

What you describe about pattern matching is a bit of an edge case for me. I don't necessarily think a powerful abstraction means more complexity. Some powerful abstractions are quite easy to understand, communicate and use. In the case of C++ complexity is not so much from advance features as it comes from just share number of features and the clunkiness in how they are implemented. The large number of edge cases. You know having to remember to make copy constructors and the rules surrounding how to implement them correctly.

Having to know stuff like that you cannot call a virtual function from a constructor, even indirectly and that the compiler will tell you nothing about that.

Swift is a language more like Rust and going from C++ to Swift was truly a blessing. It saved me from so many typical C++ problems. But it did all that while still being a simpler language. It is much easier to read Swift code than modern C++.

I am actually not that fond of Python. Last time I pair programmed in Python I really missed type annotations I use in Julia. I also cannot really stand the heavy OOP focus and messy package system.

About Go routines, I think we can say there is complexity under the hood in how it is implemented, but from the user perspective Go routines are super simple to use. Or at least compared to concurrency in Swift, JavaScript, C#, C++, Java and a whole host of other languages.

Actually the Julia approach is very similar so I am quite fond of the Go approach.

I guess you could say Julia is quite complex under the hood but from a user perspective it is fairly simple to use. A bit more complex than Go though as it has advanced meta programming, multiple-dispatch, union types, JIT compilation etc.

--

--

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