Fluent in 3 months: Beyond Javascript

Maxene Graze
4 min readOct 20, 2020

Week 2/12

Genealogical tree of programming languages

I gobbled up today’s topic: programming languages. Our activities consisted of “Hello World” introductions of a few of the more popular and classic programming languages out there (C, Ruby and Python). It reminded me of when I was in high school and I would spend some nights “testing out” foreign languages: from Old Norse to Russian. In the same way, I tried to be conscious of the shareable features amongst the programming languages and even how they can be categorized, like natural language families. My mind hopped from fantasies of a typological study to toying with the idea of programming language complexity — where I’d welcome learning Ruby, I sincerely hope I will never have to learn C. This idea could be related to how some people say that Indonesian is an “easy” language or learn, for example, while Chinese is “difficult.” (The actuality is obviously more complex than this — easy vs. difficult is entirely subjective and is mostly based off of your native language and prior language experiences). Nevertheless, you can translate Chinese into Indonesian, so although the way in which you might express yourself is different, you can get more or less the same point across. Same with coding languages.

The trophy went to Ruby. It was as clear and natural as I could ever hope a programming language would be, and it was only after I came to this conclusion I found out it was developed by a Japanese man! (This was hardly a surprise as my bias toward all things Japanese seems ingrained).

A lot of his quotes were rather poetic, almost to be expected, but among the many gems (no pun intended) I found this one:

Language designers want to design the perfect language. They want to be able to say, ‘My language is perfect. It can do everything.’ But it’s just plain impossible to design a perfect language, because there are two ways to look at a language. One way is by looking at what can be done with that language. The other is by looking at how we feel using that language-how we feel while programming.

I immediately thought of Esperanto, easily the most famous artificial language out there (although a Tolkien or Star Wars fan might throw popcorn at me), created by Doctor L.L. Zamenhof in 1877 in hopes of establishing an “easy and neutral language” that would become a lingua franca. I won’t dive too deep into this topic, but I will say that neutrality is impossible when you have your own biases, and “easy” is entirely subjective — an “easy” language for an English-speaking language could be Spanish, whereas a Chinese would most likely prefer Taiwanese. Nevertheless, what has been “done” with Esperanto is the creation of a global community that isn’t necessarily tied down to a certain country, and that anyone who learns the language can be part of. I suppose there are enthusiasts of all languages — be it natural or programming languages. While my knowledge of Ruby is limited to a 1-hour “Hello World” intro, I could already feel my preference tipping from Javascript to Ruby. I’ll try to show you why. If you want to print “Hello World” onto the screen when a variable, “smile”, is true, you’d write this:

smile = true
if smile
puts "Hello World!"
puts "You should smile"

It’s comparable to rather awkward and ungrammatical English, but still understandable to those who don’t “speak” Ruby or other programming languages (I hope). Compare the above to Javascript with its “frivolous” punctuation:

let smile = true;
if (smile === true) {
console.log("Hello World!")
} else {
console.log("You should smile")

Which one is more readable to you? I have to say, I love the “end” touch in Ruby — instead of using brackets to close functions or sentences, for purposes of this analogy, it seems to use words as punctuation. I’m utterly fascinated with the different strategies that languages take to get the same point across. Take Chinese, for example, who doesn’t use tenses. Instead, they use time-related vocabulary to relate the tense. So instead of, “I went to the store yesterday,” in Chinese, it would literally translate to, “I go to the store yesterday.” Before learning the little I know about Chinese grammar, I figured that tense was a language universal and necessary to language. Discovering Chinese equivalents made me realize that there are other ways of expressing tense aside from verbs. In the case of the above example in Ruby, I never thought there were other ways to end a function, other than a bracket since I only had experience with Javascript functions. Another possible programming language typological topic.

Each programming language has its own history, style, expression, and flexibility or lack thereof. While each has found different niches, and loyal communities, like learning languages they give a peek into human logic and consciousness. From little details on how to end functions to larger, almost philosophical questions like Javascript’s Object-Oriented Ontology are begging to be explored.