My little theory is that the psychological concept of “imprinting” can just as easily be applied to programming: just as a baby goose decides that the first moving life form it encounters is its parent, so embryonic programmers develop an indelible attachment to the patterns and features of their first formative language.
For many people, that language is Ruby. He is often credited with making programming “click”; the prints speak of it with a certain debt and feeling. I understand that. I wrote my first “Hello world” in a terrible thing called Java, but programming only became intuitive when I learned JavaScript (I know, I know) and OCaml – both of which fundamentally shaped my tastes.
I got to Ruby a bit overdue. It wasn’t until my fourth job that I joined a team that mainly used it. By then I had heard enough paeans to its elegance that I was filled with anticipation, ready to be enchanted and experience the kind of professional satori its proponents describe. My distaste for it was immediate.
Coming to the language overdue means seeing it without the forgiving fog of sentimentality that accompanies imprinting – the fond willingness to overlook a flaw as an oddity. What I saw was not a bejeweled tool, but a indigent little thing that hadn’t quite gotten the message that the world of programming had moved on.
Ruby was created in 1995 by Japanese programmer Yukihiro Matsumoto, affectionately known as “Matz”. In addition to creating the only major programming language developed outside the West, this Osaka-born practicing Mormon is also known for being exceptionally nice, so much so that the Ruby community has adopted the motto MINASWAN, meaning “Matz is nice and we are nice.”
Befitting this, and its pretty name, Ruby is uncomplicated on the eyes. Its syntax is plain, without semicolons and parentheses. Even more than Python – a language known for its readability – Ruby reads almost like regular English.
Programming languages are generally divided into two camps: statically typed and dynamically typed. A static-type system is like a set of Lego blocks in which pieces only connect to others of the right shape and size, making certain mistakes physically impossible. Thanks to vigorous typing, you can combine elements in any way you want. While this is theoretically more versatile on a petite scale, this freedom backfires when you’re building huge structures – some types of errors are only caught while the program is running. In other words, the moment you put weight on a Lego footbridge, it turns into a useless piece of crap.
Ruby, as you might guess, is dynamically typed. Python and JavaScript too, but over the years these communities have developed advanced tools that support them behave more responsibly. None of the current Ruby solutions come close to these. It is far too favorable to what programmers call “guns”, i.e. functions that make it very uncomplicated to shoot yourself in the foot.
