Original post in Kodumaro.
Sometimes I spend some time trying to acquire new programming skills, to finally figure out I was wasting time with something useless.
But even well-known programming tools and languages have their own issues, and this is why we hate them.
Python is one of my favourite programming languages, but I haven’t work with it for a while, and it isn’t for nothing.
Python is strongly typed, but also dynamically typed – which wouldn’t be a problem if it respected the assigned types, but you can assign an integer to a variable and then assign a named tuple right after that.
Erlang has a very useful line: “fail fast and noisily.” When Python allows to change variable types, it potentially allows to carry errors away from where they were caused too, which is the worse situation in a debug.
Ruby is one of the most beloved toy programming languages, mainly because it makes bad programmers to look cool. Everything wrong you can imagine in programming, you can find in Ruby.
Ruby falls in the same Python’s typing issues. It also promotes monkey-patch, code injection, assets’ implicit exportation, and tool monopoly. It’s nearly impossible to track down where a bad behaviour comes from.
You might call Ruby a debugging hell.
However, it’s great for PoC.
Java is the big static companies’ darling.
Unlike Python and Ruby, Java is statically typed, and you need to carry errors explicitly if you don’t want them to explode right where they arise.
Still, Java is extremely bureaucratic though, the simplest procedure is hard to be done and requires many code statements.
Besides, Java is very greedy, consuming every hardware resource it can take.
However, Scala compiles to JVM bytecodes 😖 – and this is enough reason not to use it.
One can say you could do Scala Native, but that’s a hell you don’t wanna get in – believe me.
[update]Actually Scala is Dotty currently. I haven’t worked with Scala for so long, that I missed that.
OCaml is the perfect impure functional programming language, except for requiring widely long boilerplates to work.
The simplest project is more bureaucratic than Java, and you can get into a hell of cyclical references much too soon.
An alternative to OCaml is its grandpa, Standard ML, which doesn’t have the OCaml’s same issues.
But Standard ML has another one, very annoying: lack of tools.
You can find libraries for almost everything you need in OCaml, and what you can’t find, you can bind from C. Standard ML is way poorer on libraries, and you can get in trouble missing something very easily.
C and C++ are great programming languages, so great that lots of other programming languages are built on top of them. Everything you need, you can find or build in C/C++.
But C is too verbose, everything is tough to get done, C++ is a pitfall of infinite tokens, and both have unexpected behaviour. Don’t get me wrong! C/C++ are very stable, but they simply don’t behave like you may expect.
The better description for those languages could be: C/C++ do exactly what you ask, not what you want.
Regarding Julia, I think we don’t need to go further than this:
What to expect from a programming language that, when you assign a value to a constant, raises a warning instead of an error? And the program keeps going!
[update 2022-05-29]I must be honest, and I owe Lua a retractation: Julia doesn’t allow anymore a program to go on if a constant is redefined. I’m intending to write another post about Julia exclusively.
Nim is Python made right. Or it would be…
The Nim’s big no-no is that you keep bumping into things that don’t behave as they told – or don’t work at all.
The Nim creators’ line is: WORKS ON MY MACHINE.
Elixir is a toy programming language created because kids can’t code in Erlang – but Erlang is cool, and they wanna look cool.
BEAM is the Erlang’s virtual machine, and it has a lotta restrictions that ensure your app isn’t gonna crash unexpectedly.
At some point in the past, Erlang had become cooler than Ruby, so all cool kids wanted to code in it, but they aren’t able to. Bad programmers can’t deal with the BEAM’s restrictions. 🤷
In order to allow then to work with Erlang, some
imbecile developer decided to work around the BEAM restrictions, obliterating all Erlang advantages – but it’s still cool. This is Elixir: a workaround to obliterate BEAM advantages.