2021-11-28 - Use fun languages!

I see a lot of people contemplating what language they want to choose for their
next software project, and their choice being a language like Rust, Go, Java,
Kotlin, Python, etc. With this blog post I want to show that this choice is
irrelevant, because they are essentialy the same. They are all boring
languages.

It is easier than ever to make new programming languages, but most of the
mainstream ones like the ones mentioned above are quite similar. They are all
imperative, non-expressive, and they do not offer a new way to think about the
problems at hand. There is a view shared by many users of boring languages that
learning a new language is simply a matter of learning the new syntax and
getting on with your work. This is certainly true for boring languages; they are
mostly the same, with the syntax being a slightly different coat of paint.

Perhaps the greatest sin of boring languages is that they restrict the user more
than empower them. I have previously expressed my distaste for Go, and will not
repeat myself much, but the gist of it is that boring languages are not tools of
expression and discovery, they are tools of oppression. Whenever I use a boring
language I feel limited and claustrophobic. They discourage experimentation and
new concepts in favour of being, in their words, "useful".

However, there exists a slew of languages that are the antitheses of boring
languages. These fun languages stray away from the boring programmers'
perception of what programming is and offer new ways to think about
problems. Some fun languages include Haskell, Idris, Forth, Ruby, Common Lisp,
Scheme, and Smalltalk. These challenge preconceived notions of what it means to
program and once you get comfortable with one of them, you can see just how
little "useful" the boring languages really are.

When you choose the next language to learn, be sure to judge whether it is a
boring or a fun one. I guarantee that the latter category are more fulfilling,
interesting, and enjoyable to work with.

built with sh(1) and cat(1)