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)