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.
Top comments (6)
I work with Java and Javascript in my day job. They get the job done, but I don't find either to be enjoyable languages to work with.
I work with Elm and Rust in my free time. I have obscure side-projects. I contribute to obscure open source projects. I like to illustrate ways that these languages model and solve problems in elegant ways. I like to learn new things.
Shame on me I guess?
I can understand learning new languages on the side, preferring certain languages because they are more enjoyable to work with, and even working on obscure side-projects. The point of the article here was to satirize the "language wars" (in particular, blog posts about switching from one language to another) and the technological fads that are embraced with alarming regularity.
Fair enough.
If I take issue with anything, it's this, really. Old opinions aren't necessarily flawed, they're based on the circumstances at that time. I would have argued vehemently that C#/Java was far superior to pre-.NET Visual Basic fifteen years ago, and made a compelling case for it. I could argue just as vehemently that better alternatives to C#/Java exist today.
I think it's OK to have strong opinions and for opinions to change, so long as their rooted in your own work and research, and not just mindlessly parroting the opinions of others.
Sorry if I took this all too seriously. It's a geek thing I guess :)
HN: "Rust vs Go"
Let the wars begin.
For what it's worth, I think that [Minor_Technical_Flaws] is key here. Many times we switch because of some small annoyance. However when you compare JavaScript with Elm going from runtime exceptions to none is not minor in my opinion. Going from Python to Ruby to JavaScript is probably mostly minor differences and "improvements".
That's brilliant!