To some people programming languages are no more than mere tools. We can say the same about Mathematics but we would be missing a lot.

The design involved in a programming language marks a tremendous difference on how it makes you think and what code you write.

A language that doesn’t affect the way you think about programming, is not worth knowing. – Alan Perlis

Usually juniors love PHP because “you don’t have to set types and it just works!”. Doesn’t it sound like when we wished our parents were as cool as our friend’s that gave him all he wanted when he wanted? Well, I hate PHP. It’s just a piece of bad design and if you are going to do PHP please consider some framework like Laravel.

In general we hate to hear that we are wrong and this affects our way of choosing and approaching programmming languages. We prefer to have our code running at first and have have 20 iteractions to solve a bug than to just have our code running after 5 attemps and having it working correctly.

I remember of my first semester at university learning Java and being frustrated that it simply wouldn’t compile “just” because a type was not quite right.

My programming languages timeline is something like this:

Pascal > PHP > SQL > Javascript > Assembly > Java > ShellScript > C > Haskell > Objective-C > Prolog > NodeJS > JESS > JEE > Ruby > Swift > Scala > AngularJS

At first PHP seemed amazing and my first professional projects were in PHP and I felt like such a coder but, at the same time, I always felt like I was always working around to reach my solution. Javascript/JQuery at the time looked like a monster that I was quite affraid to face… until I did.

At university it was very interesting to have a look into Assembly and to understand in a very concrete low-level how it really works. Next to it, learning Java felt like “the real deal” I remember how our professors made us believe that Java was the one and only. I honestly thought it would be pretty useless to learn any other language.

Until the procedural mother C came and I just loved it. Not that I would use it to develop common production software or so but just the fact that at every single moment you have to be conscious of side-effects and about the general structure of a process and memory managment… it just makes you more complete and better programmer.

Language shapes the way we think, and determines what we can think about. – Benjamin Lee Whorf

Haskell, a purely functional and declarative programing language was one of those languages that conquered me by experience. When we were first introduced to it I just thought we were losing our time learning some useless language while we could be improving our Java skills. But as I got to learn more of it, had to solve more exercises and had to write little programms a “uau, this is good” experience kept going on a steedy crescendo.
Haskell is by far my favourite programming language by all means: the way it blows your mind, takes you to new ways of thinking, the way it’s designed and makes you design software and how close to mathematics it feels in it’s elegance, assertivness and complexity (very differente from “mess” or “complicated”) it’s just remarkable. The type system is just amazing. When it compiles it must be right and if at first you may get incredibly frustrated with the compiler always telling you off, with time you will get to just enjoy it and wish that every language had such type-system. That’s why Haskell is the language I’m committed to keep learning. Read this review and this SO post about it.

In production, I appreciate a language I can write large-scale software with. For example Ruby is just such a beautiful and magical OO language but I feel safer with static language with explicit types like Java.

Ok, so what do I think about Java? 7 languages in 7 weeks says that Java is like having an older brother who is a lawyer; when you were young it was really cool but now it’s just boring. Java doesn’t have the best design all around (static methods, util classes, primitive types vs Objects vs Nulls), it’s verbouse and not magic at all. At the same time newer versions of it do bring some improvements and in the overall it allows you to write good code (as it allows you to write terrible code) which makes it a good go.

Prolog, a logic programming language, was a true nerve cracking but I’m glad that I was introduced to it as it, again, changes your way of looking to programming, thinking and of approaching problems.

The limits of my language mean the limits of my world. – Ludwig Wittgenstein

Whatever language you use just don’t get stuck there and learn some other language, challenge yourself, your way of thinking, of programming, of solving problems. Leave your comfort zone and truely enjoy the craft of programming though all the different ways there are to do so.

What’s next in the list? Clojure!