DEV Community

Cover image for Why We Hate…
Montegasppα Cacilhας
Montegasppα Cacilhας

Posted on • Updated on

Why We Hate…

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.

Why we hate Python

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.

Why we hate Ruby

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.

Why we hate Java

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.

Why we hate Scala

The worst flaw of Scala is to be not Dotty. Every nice and useful feature you expect from an impure functional programming language, you get from Scala.

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.[/update]

Why we hate OCaml

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.

Why we hate Standard ML

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.

Why we hate C/C++

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.

Why we hate Julia

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 Julia 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.[/update]

Why we hate Nim

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.

Why we hate Elixir

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.

Why we hate X

I could keep going on and on, talking about Javascript, TypeScript, Wren, Odin, Moonscript, Lua, Dart, C#, F★, and every other noteworthy programming language, but I think we’re good here.

Top comments (24)

Collapse
 
deltd3v profile image
deltd3v

I think you should've added the remaining languages.

Collapse
 
cacilhas profile image
Montegasppα Cacilhας • Edited

I’ve just realised I have no fair complaints about Erlang!

Collapse
 
deltd3v profile image
deltd3v

I'm actually working on a phoenix frame work rn.

Elixir / erlang is dope

Thread Thread
 
cacilhas profile image
Montegasppα Cacilhας

I have worked with Erlang before, and I wouldn’t say that. I would say Elixir is dope, but I really have no complaints about Erlang (no fair ones).

Maybe you could write your complaints down. 😉

Thread Thread
 
deltd3v profile image
deltd3v

I agree. I've had to unlearn alot of thinking of the way i go about designing Web apps when I'm using any beam approach

Collapse
 
cacilhas profile image
Montegasppα Cacilhας • Edited

🤣 I would take a lotta work. Be my guess and write your own impressions about them, will ya. 😉

Collapse
 
deltd3v profile image
deltd3v

Nooooooo I want you to do it. Cause you captured the essence of my experience with that list wonderfully

Thread Thread
 
cacilhas profile image
Montegasppα Cacilhας

Well… I think it deserves a part Ⅱ. 😁

But it’s gonna take a lotta work, so it’s gonna take some time. 🤷

Collapse
 
cacilhas profile image
Montegasppα Cacilhας

LOL 🤣

Collapse
 
joelbonetr profile image
JoelBonetR 🥇

So my conclusion is that you definitely want to learn Elm 😂

Collapse
 
cacilhas profile image
Montegasppα Cacilhας

I love Elm. 😉

Collapse
 
cacilhas profile image
Montegasppα Cacilhας • Edited

About Python, something annoying me are annotations:

In [1]: def f(x: int) -> int:
      2     return x
In [2]: f('test')
Out[2]: 'test'
Enter fullscreen mode Exit fullscreen mode

They ensure nothing.

Collapse
 
cacilhas profile image
Montegasppα Cacilhας • Edited

Fair enough. 🤔

Collapse
 
katafrakt profile image
Paweł Świątkowski

At some point in the past, Erlang had become cooler than Ruby

Umm... When exactly was that? I've been following these two languages for about 14 years and could not recall anything like that.

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!

The same could be applied to Ruby, BTW. Although Ruby does not have const keyword.

Collapse
 
cacilhas profile image
Montegasppα Cacilhας • Edited

Umm... When exactly was that? I've been following these two languages for about 14 years and could not recall anything like that.

It was about 2014~2016, I guess. You maybe have missed it, the hype was strong.

The same could be applied to Ruby, BTW. Although Ruby does not have const keyword.

So it cannot be applied to Ruby, since Ruby doesn’t have const keyword. 😜

I’m talking about thinks like this:

julia> const a = 1
1

julia> a = 2
WARNING: redefinition of constant a. This may fail, cause incorrect answers, or produce other errors.
2

julia> a
2

julia>
Enter fullscreen mode Exit fullscreen mode
Collapse
 
katafrakt profile image
Paweł Świątkowski

So it cannot be applied to Ruby, since Ruby doesn’t have const keyword.

But it has constants.

irb(main):001:0> PI = 3.14
=> 3.14
irb(main):002:0> PI = 4.01
(irb):2: warning: already initialized constant PI
(irb):1: warning: previous definition of PI was here    
=> 4.01      
Enter fullscreen mode Exit fullscreen mode
Thread Thread
 
cacilhas profile image
Montegasppα Cacilhας • Edited

However, at no time Ruby tries to mislead you by using the token const – which is the point.

Thread Thread
 
cacilhas profile image
Montegasppα Cacilhας

But I have to admit it shouldn’t use the word “constant” anywhere, not in code (it doesn’t), not in documentation (it does).

Thread Thread
 
cacilhas profile image
Montegasppα Cacilhας • Edited

I’m not defending Ruby, I don’t recommend Ruby to anyone, I’m just trying to be fair in my hits. You cannot expect to write an immutable variable in Ruby – Ruby doesn’t propose to support such a feature.

But, when you write a constant in Julia, it’s fair to expect it to be constant. 🤷

(But it isn’t.)

Collapse
 
andrewbaisden profile image
Andrew Baisden

So many haters 😂

Collapse
 
cacilhas profile image
Montegasppα Cacilhας

🤡 Why so serious?

Collapse
 
miguelmj profile image
MiguelMJ

Fail fast and noisily is one of the best philosophies for a language to follow

Collapse
 
cacilhas profile image
Montegasppα Cacilhας

Indeed.

Collapse
 
cacilhas profile image
Montegasppα Cacilhας • Edited

A thing I should’ve noticed is that currently Scala is Dotty. 🤪

But I haven’t worked with Scala for so long, that I missed that.