I am a big fan of [Language_1] and one of its early adopters, having been disappointed with the utter failures of [Language_0]. I have been an avid contributor to many open source projects such as [Obscure_Project_1], [Obscure_Project_2], and [Obscure_Project_3]. However, after using [Language_1] for over 5 years, I have been dealing with [Minor_Technical_Flaws]. At first, I ignored and even tolerated these flaws, but I was forced to confront reality. I could not live with these flaws, and since [Language_1] is a mature language, it will be difficult, if not impossible, to actually fix [Minor_Technical_Flaws].
I also resented the opinions that [Language_1] took. When I first used those languages, I thought those opinions were a fresh breath of air. I would constantly defend those opinions on Hacker News, because I thought that these opinions would promote good coding practices and would ulitmately lead to higher productivity. After 5 years of coding though, I realized that those opinions may have been slightly flawed.
And then, I heard of [Language_2]. [Language_2] promised to fix all the technical flaws in [Language_1]. I also read about the opinions inherent in [Language_2], and realized that those opinions were utterly correct, compared to the fallicious and wrong-headed opinions in [Language_1]. And that's why I switched languages.
Let me show you an example to prove my point.
Here is an example of a “Hello World program in [Language_1]:
PROGRAM HELLOWORLD 10 FORMAT (1X,11HHELLO WORLD) WRITE(6,10) END
You can see why I was drawn to this language. Its syntactic sugar was beautiful. But it was too magical. I didn't know what was actually going on. What did Format mean? Or Write? When I had to scale up my program, I would be cursing all night trying to debug the latest ‘magic' that [Language_1] decided to invoke on me. Half the time, I would be fighting against [Language_1]'s constraining limits.
And here's an example of “Hello World in [Language_2]:
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++. [-]>++++++++[<++++>-] <.>+++++++++++[<+++++>-]<. >++++++++[<+++>-]<.+++. — — — . — — — — .[-]>++++++++ [<++++>-]<+. [-]++++++++++.
You can see how easily readable and maintainable [Language_2] is over [Language_1]. Its syntax is just as elegant as [Language_1], but there's no magic involved. Everything that I need to know is right there, ready to be understood in an easy-to-digest fashion. There's no fighting with the language here, just me working with my trusty new tool.
Always use the best tool for the job. That's why I have chosen to use [Language_2] for all my obscure side-projects. It will likely not have any technical flaws whatsoever, nor will its opinions ever turn out to be wrong. And, in the rare case that [Language_2] disappoints me…well, there's always [Language_3]…
Note: This article was previously published on Medium under a pseudonym. After publication, qiajigou used this template to create an open-source project allowing you to generate your own "language switching" rant.