As a CTO, one of my responsibilities is to constantly research technologies that will enable my company to stay ahead of the competition. It might then come as a surprise that, for the longest time, I’ve had a lot of trouble studying and understanding new tools and languages.
The first language I learned was HTML, back in… I don’t remember the year, to be honest. There was probably something before HTML, but it’s so embarrassing that I wouldn’t dare mentioning it on the Internet (mIRC scripting anyone?). With HTML, I built all kinds of useless websites: e-stores that were really just a bunch of static pages tied together, intranets where the sign-in form was not pointing to anything… Not exactly mind-blowing stuff. But I was probably not even 10, so that was more than enough to keep me entertained in the summer afternoons.
In one of my numerous adventures on the Internet, I discovered PHP — and no, it was not love at first sight. I tried to learn it, but I would inevitably stumble into some problem that I didn’t have the patience to overcome, so I gave up. And gave up. And gave up. I think I tried to teach myself PHP four or five times, failing every time.
Fast forward five years — I’m a contributor to the Symfony framework, I write my own open-source tools in PHP and, of course, I built many complex web and CLI applications with the language that I was once struggling to learn.
The same thing happened with my quest for learning Ruby: I tried twice, but I just couldn’t grasp some of the most basic concepts behind the language, like blocks. It seemed cool, but it also seemed so unnecessarily novel and different from what I was doing. Eventually I gave up and sticked to PHP.
After growing more and more dissatisfied with some of PHP’s quirks, I stumbled into Ruby once again. This time, it took me less than a day to grasp the fundamentals, and a couple of weeks later I had written my first mildly complex app with Rails.
Today, I’m still writing and loving Ruby. I have created tens of Ruby apps and I’m the maintainer of several OSS projects (which no one uses, but still!), including a framework for building better RESTful APIs.
So what happened? What was blocking me from learning PHP and Ruby? Perhaps I wasn’t smart enough, or didn’t have enough experience?
“There must be something else,” I said to myself for some time, without being able to quite grasp what was standing on my path.
Then I realized: in both occasions, I simply wasn’t ready.
I don’t listen to jazz very much, but a couple of years ago I discovered The Necks. For those of you who don’t know them, it’s an experimental jazz trio and, as you might expect, they play the kind of music that you either love or hate. For me, it was definitely the former.
All their performances have the same structure: one of the musicians starts playing a tune and is then joined by the other two. They play independently, and yet their figures are unmistakably intertwined. For many, attending a live performance by The Necks can be an excruciating experience: they tend to repeat the same piece, adding the slightest variations, over and over, for up to two hours.
Then, when enough momentum has built up, the music changes and the piece moves to the next phase of its life.
The same thing happened to my learning: when I first tried to learn PHP, there was simply not enough motivation for me to do it. But when I went back to PHP a few years later, the situation was much different: I had spent enough time with HTML to know where it was holding me back and what the next step in my development would be. I was happy with PHP for some time, which is why I couldn’t commit to Ruby — when I finally realized that PHP was holding me back as well, I learned Ruby.
It was a matter of time, not of IQ. I couldn’t learn because I hadn’t built up enough momentum.
Fear Of Missing Out (FOMO) is very real in the tech industry: if you have ever heard at least one joke about how many libraries there are in JavaScript to do the same thing, you know what I’m talking about. Every day a new tool emerges that promises to be the everything-killer, to end all problems and to guarantee maximum productivity to everyone, everywhere.
Armies of inexperienced, eager developers join the bandwagon, yearning for a new technology to try out. Dozens of articles emerge about how the existing tools are inadequate and the new one is so much better and ought to be adopted by everyone. Startups start hiring developers proficient with the new technology, without really knowing whether it will be of benefit to their particular challenges — but hey, if it’s new, it must be better, right? Meanwhile, anxiety builds up in those who haven’t caught up yet — and are sure they’re going to be unemployed in six months.
Seasoned developers scoff at this collective hallucination, because they know that it’s just one phase of the hype cycle, depicted below.
If you have ever witnessed the birth and development of a new technology, you know that this graph is pretty accurate. Here’s a short explanation of each phase:
This is true for all languages, libraries and frameworks the community has ever built. The next time a new tool pops up in your RSS reader, try to follow it as it goes through the different phases. Sometimes it might take years, but it’s an exercise that pays off in the long term, as you learn to distinguish hype from justified excitement. In my experience, it’s one of the traits that only the best developers possess.
So how can you make the most of the hype cycle? Here are a few tips that will ensure you only start using a tool when it makes sense:
If you follow these tips, your work will benefit from greater stability, but you will also be able to incorporate any interesting pieces of software with a high degree of confidence that they are stable — or that any instability will be contained by the safeguards you wisely put in place.