Graham King

Solvitas perambulum

We are all polyglots

software
Summary
I started with two programming languages: **C** as my serious language and **Perl** as my scripting language. Over time, **C** has been replaced by languages like **C++**, **Objective-C**, **Java**, and more recently, **Go** and **Rust**. In scripting, **Perl** gave way to **Python** and **Ruby**, with **PHP** emerging for web applications. The rise of **JavaScript** introduced complexity, requiring knowledge of three languages, while frameworks like Rails and Django blurred the lines between serious and scripting languages. Now, I regularly write in **Python**, **JavaScript**, **Go**, **Java**, and **Rust**, reflecting the widespread trend of being a polyglot in programming, which I find both challenging and exhilarating. There’s always more to learn, but the journey is rewarding, and anyone can embrace it.

I used to know two programming languages at any one time; what I called a serious language and a what I called a scripting language. My initial serious language was C, my scripting language was Perl. The serious language was for client work, it paid the bills. The scripting language was for tools and toys (which is why many early web-apps were Perl CGI scripts).

We’ve been replacing C as our serious language since the 70s. C++ mostly succeeded, and became the official language of Microsoft Windows. Objective-C got a solid niche when Apple chose it for OSX, and later iOS. Java, became the serious language of web apps, and is now the language of Android. The two recent exciting developments here are Go and Rust.

In scripting-language world, Perl was largely replaced by Python and Ruby, and for web-app work by PHP.

So by now my serious language was Java, and my scripting language Python. But then three interesting things happened.

One, everyone had to learn Javascript. Clearly this wasn’t going to be my serious language, because it was client-side only, but it wasn’t really a scripting language either. So now I have to know three languages at once.

Two, Rails and Django came along and blew my precious artificial distinction all to hell.

Serious work was being done in scripting languages. In retrospect, serious work was being done in PHP on the web for a while before that (Yahoo, Flickr, etc), but the web-only nature of PHP made it easier to avoid noticing. Later, Node.js allowed us to do server-side programming (previously a serious language only space) in Javascript!

The two recent serious-language choices I mentioned earlier, Go and Rust, both make good scripting languages too. The distinction is completely gone.

Three, mobile. Java for Android, or Objective-C for iOS. Soon Javascript for Firefox OS.

Today, in a single day I will get paid to write code in Python, Javascript, and Go. In the evening I will write Java (Android) and recently Rust. And talking to friends and colleagues, that is by no means unusual. Today, we are all polyglots.

There’s always more to learn than I have time for. It makes my brain hurt sometimes. But in the words of Ward Cunningham, I am excited to go down the stairs because there is a lot more to it than I even knew and I learned it last night and I am going to go apply it and in another week I will be an expert. And you can do it too.