Hello, fellow programmer.

So, you clicked to read this post. I guess you had some reason for doing so.

Maybe you clicked, hoping to discover the key to your next professional success, learning the new shiny language for which everyone will want to hire you in six months. Or maybe you were just pissed off reading another clickbait on a so-called “best” programming language, ready to scroll right at the bottom of the article to insult me. Finally, maybe you were just curious about this post that landed on your feed, and you want to learn about the N+1 language out there.

Well, I’m sorry to disappoint you all. I’m not going to introduce the newest, fastest, amazing programming language that trumps all the benchmarks and that allows you to build and scale a one-billion users platform spending 10$ per month on AWS.

I’m not going to do that because there are already dozens of Quora threads and Medium posts about this, and I dare you to go over all the results from Google. Instead, I am going to give my opinion on this perpetual quest for the ultimate language(s) you have to learn to be a better programmer, and why this is actually dangerous.

Let’s say you have to buy a bed for your new house, and mount it. Looking at all the different beds at IKEA, you are somehow unsure and lost, because you never had to mount a piece of furniture before (or, like me, you suck at it). You finally settle for this nice Japanese wooden Kingsize bed, but you have no idea on the tools to use.

So, you go to the nearest salesman and ask what is the one, ultimate tool you should pick to mount the bed.
Wait, what? Of course, you would never ask such thing. You know that you probably need screws and a screwdriver, a wrench, maybe a drill. But you know for sure that picking only one tool is not going to work. And, if the salesman is not fooling you into buying this 200$ magic all-in-one tool, he will probably tell you the same thing.

That goes the same for software. There is no one tool, one language, one platform, that is above everything else. Any decent language out there allows you to build stuff, and that’s enough. Then, you will have some options better than others depending if you need velocity, scalability or performance. One very good choice of technology for an early stage startup might be a terrible one for a growing company that needs to scale to millions of users.

So yes, you can build only Wordpress websites using PHP and make a living of it, without any worries. You may use only Java your entire career and never run out of job opportunities. You can use Ruby, Python, Javascript, or anything else that you want. As long as these guys allow you to build things and to achieve what you want, they are all good choices.

Actually, It is very unlikely you will find yourself running out of jobs because of the technology you chose to focus on. The only exception might be the rare case where the language you pick happens to be something very niche or obsolete (and even, it looks like you can still find Fortran jobs out here).

But I admit, it is normal to have doubts about that, and we are all going through this from time to time. Even today I still have these days of doubt, where I wonder: shall I focus my time on this new language that is gaining traction? Or should I go for this one that will make me look like a more “serious” programmer (like it did even mean something)? But this is normal, because doubt is human. And, as close as our job is to whisper to the ears of computers, we are all still humans.

The shortage of developers on the market is real, and probably here to stay some more years. It is a quite hard to find and recruit software engineers. But what’s really harder is to find very good software engineers. And, while some platforms have bigger communities than others, this statement holds true regardless of the programming language.

I started playing with HTML, CSS, Javascript and PHP building my first websites about ten years ago. Hell, I even had no idea at that time it was something I could find a job and build a career with. I later discovered Ruby and fell in love with it (and I still do), and I also learned to use Node.js. I learned to build iOS apps with Objective-C (did not fell in love this time, but still built a few apps with it). I discovered Go and fell in love again. More recently, I’ve been playing with Elixir and Clojure. As of today, I’m following an online Erlang course, and I enjoy it because it opens up my mind to a whole new way of programming that I was used to. This is refreshing.

Talking about this now, it sounds like making a list of all your ex’s from the first time you kissed a girl back when you still had juvenile acne. Well, except if you live in the wonderful world of Disneyland, you don’t expect to find the one before exploring a few, very different relationships, for better and worse? What if I told you that I know the one person that would be perfect for you, and that you have to date this person immediately? Would you believe me?

Probably not.

The different thing is that, even if I typed my first lines years ago, I still like working with PHP. Of course, I’m not talking about the crappy code I used to write in a single, godified index.php file. But I like the ecosystem, what it became, the mature frameworks and tools that I can use today, like Symfony, Laravel and Composer. I love the way the platform has evolved. 

And, as for a past relationship, the years I spent working with this language are part of me and who I became as a programmer today. And other languages that will cross my path will act the same in the coming years.

I recently watched the RailsConf opening talk by DHH, and while I found it very interesting, I have to disagree on some part of it.

I agree that the choice of a language or platform is usually made not using a rational and logical process of selection, but rather from a system of beliefs and common values. This is especially true for startup founders who do not necessarily pick their technology stack in the goal of scaling to millions of users right away. So, like a lot of things in life, you choose using what you know, what you experienced, and what you love in a platform, in its values.

The part where I diverge a bit is, I think you do not always fall into one specific community. I might love Ruby for its syntax, community and simplicity, but I don’t want to have classes with dozens of methods and sharing five different responsibilities. I might like the simplicity and the power of Go, but I don’t always agree with the way its creators are pushing idiomatic guidelines, leaving small freedom to users. I was recently amazed by Erlang and Elixir pattern matching (among other features), but I probably won’t use it in a majority of my projects.

However, all these different languages I learned or tried, are now something that I can reflect on, and knowing about them allows me to take better decisions in my work. Because then, I don’t have only one point of view, one answer, from one technology. I have many, and I can take the best from each one I know and understand, and design my choice according to what I learned. Knowing more gives you a broader vision as a programmer, and makes you even better at learning itself new things again.

And this is what you are looking for to improve yourself. Not one technology that you can learn and make millions with for the rest of your life.

Sure, you might, at some point, want to get more expertise in some particular language or platform. And that’s good, because you will have made the choice to go with this particular technology that you love and feel comfortable with. You will look to become an expert in this technology, but with all the good learnings from your previous experiences.

This is true for all languages. In all of them, you will find things you like, and things you dislike. As a person, you can reflect on your past relationships, choices and errors, to learn about yourself.

And, as a software engineer, by discovering and learning different technologies, you will learn more about yourself, and become a better engineer. Your mind will open to change, to new paradigms and new ways of thinking and solving problems. And, in a world where things can change in a matter of months, and when jobs can be very different from one to another, this is always a good thing.

So, don’t limit yourself with PHP if you’re a successful freelance Wordpress developer. Don’t limit yourself to Java even if you know the entire language and its power in and out. Don’t limit yourself to Javascript if you are a front-end engineer, or a WebGL developer. Don’t limit yourself to iOS or Android development. Don’t limit yourself to OO programming, or to functional programming.
Don’t lock up yourself in one platform, one idiom, one way of thinking.

Be open-minded, be curious, be a learner, and it will pay off in the long run.

This is the next thing you need to learn.