There is a new trend that seems to be gaining momentum over the last one, maybe two years (at least being amplified by the things happening in JavaScript). Instant Gratification Driven Development. Powered by opinionated blogs and tools and fueled by a hype machine, that would even make your favorite hipster’s favorite blogger jealous.

Reading through blog posts and more blog posts you quickly notice a lot of the stuff out there is optimized for quick learnings. Just touching the surface, running a couple of commands and copy and pasting a couple of lines of code. Gluing together an application. When was learning a new tool or learning design patterns or learning any framework for that case easy?

If you wanted to gain insights into common design patterns, you would be taking the gang of four “design patterns” book with you. Everywhere You Go. For a year. You would be reading it on the way to work and you would be reimplementing the examples in your free time or when you had an hour or two to spare. Software Development is complicated. The mind needs time to adjust to what it’s learning.

Just think about switching from object oriented to functional programming. You might think, well — this is easy right? I’ve been doing this for a large number of years but then nothing happens. You’re overwhelmed with the simplest of all examples. Things don’t add up. You’ll reimplement the examples. Over and over again. And then and only then — slowly your mind will transform. Understanding the patterns, getting a grip on the fundamentals. This stuff takes time. At some point it goes click! You get it. Looking back — you might say — It took me this long to get it? It’s so obvious. Nothing is obvious.

On the one hand you need to constantly unlearn things while at the same time you need to learn new things. Just imagine having to unlearn working with classes and building inheritance chains while trying to think in pure functions and composition. These things take time. More than a day or two. More than reading a couple of random blog posts. More than reimplementing a couple of examples in your favorite online editor.

Now obviously there is a huge industry, or well, a couple of industries revolving around the idea that you only need a couple of things in place to get a team to high perform or that it only takes a couple of months to create the 10x Programmer (exaggerated — but you catch my drift). You know what none of these consultants, self proclaimed teachers and experts tell you? These things take time. Anything from months to years to fully understand a methodology, language, framework etc. Transitioning from barely understanding the minimum to becoming advanced on a single topic can be a journey of itself. But this is what mastery is about. Constant learning, taking small steps. Where did the idea stem from, that you can learn a framework in 24 hours?

We’re in an era where everything revolves around instant gratification. The gamification aspect is everywhere. Even in places where you would actually not expect it. Think Stackoverflow points and badges or Github stars. Also think of those “Get up and started in 5 minutes” examples for a specific framework.

Focus on what you really want to master.

Do you want to master Enterprise Architecture? Start studying Martin Fowler books. You’re interested in introducing XP into your team? Read what Kent Beck has to say. You will only get a grip after doing this over and over again. Don’t focus on short term wins, go for long term success. Software Development is a marathon not a a sprint (although you might have heard or read the opposite).

Focus on why not only on what you want to learn.

Why do you want to become a Software Developer? Why do you want to learn XYZ? Take your time. Find the space to dive deep into a topic and keep iterating. This is the formula for learning anything within 10 years. Yes, 10 years.

With all this being said, in no way should you strive to be an expert on a lone topic, knowing nothing else. Mostly having deep insights in one topic will help tremendously on gaining a broad knowledge on a number of topics. This is not a one way street.

When you start to learn an instrument for example, you might start with the piano, then switch to the guitar and maybe end up playing the drums. At some point you decide on your favorite instrument and start to practice. You practice for years. You don’t switch the instrument every year. You might learn more instruments along the way, but you’ll strive to at least master one of the them. Some goes for Software.

Don’t give up long-term knowledge for short term satisfaction. The first will get you a long way.