I’m a hater, especially when it comes to programming languages. I approach most of them with pessimism, I rarely look at new language and think it’s great right away.

C

I started programming in high-school with QBasic. I made a small choose-your-own-adventure style game in text-mode, then moved on to C. I didn’t like C much: it didn’t feel expressive enough, and was too hard to use for the noob I was. I started programming seriously after high-school and discovered C++ during my 2nd year studying computer science. I became instantly a fan, C++ had so many features, the language felt more expressive, more powerful. I though I could master it within a few years. It took me a good 5 years to realize that C++ was too big: It seemed baroque and overly complex after all this time. After 5 years I still didn’t master most of the language; like everybody I just used a subset. I went back to C and saw what I wasn’t able to see then: C was expressive and simple. I took me years of struggle with the seemingly cool features of C++ to realize C was the best part of C++.

Javascript

I was a Javascript hater for a long time, the language seemed so absurdly hard to work with, there were traps and gotcha. If you asked me 5 years ago: PHP or Javascript I’d reply: “PHP of course! Javascript is terrible.” Then I learned more about it thanks to Douglas Croford’s videos. While Javascript is not my favorite language I came to appreciate it, today I’d pick it over PHP if I had to start a new project.

Python

Python looked a bit ridiculous when I first used it. I didn’t like the indentation to define blocks, or that the language was interpreted, I didn’t get that a dynamic language opens up a realm of new possibilities. At the beginning Python felt like slow, and dumbed down C++. It took time writing Python everyday to fall in love with it, but after a year it was my favorite language. I’ve been writing Python personally and professionally for 10 years now.

Go

My first impression of Go was: it’s kind of like a cleaned-up C. My main problem was that concurrency was part of the language like Erlang, I though it’d be better if the tools for concurrency were contained in a library like multiprocessing in Python. Also there were a few things that really bothered me with it like the semi-colon insertion, a known Javascript gotcha.

Then I heard about goroutines, channels, & Go’s select statement, after that it all made sense. Go has an elegant solution to a fundamental problem of modern computing: concurrency.

The semi-colon insertion turned out to be a convenient quirk.

Go became my new toy a month ago, it’s now on track to replace Python as my favorite programming language.