Overcoming JavaScript Framework Fatigue

Posted on by Tero Parviainen (@teropa)

The JavaScript community is suffering from a wave of framework fatigue. It's caused by the massive outpouring of new frameworks, techniques, and ideas that has been going on for some time now. Even though it's all very exciting, it's just impossible to keep up with it all.

Since you can't keep up with it, you have to choose what to focus on. And having to make that choice is a cause of anxiety in itself. Are you focusing on the right things? Is the framework you're learning the best one for you or is there something even better out there? Will something happen next month that'll make your choices seem obsolete?

There are ways to resist these feelings of fatigue and anxiety. Here's what works for me.

Learn To Appreciate Your Known Unknowns

The fact that you even have this problem means you know a lot about what's going on in JavaScript. All the things that you feel you should be learning are things that you know about. They are your known unknowns.

The key is to understand that this set of known unknowns is only ever going to expand. You're never going to feel like you know enough. In fact, it's quite the opposite: Not only is new stuff coming out all the time, but also every time you learn something, you'll learn about related things - things that you don't know yet.

For example, when I read about Cycle.js, I understand just how little I know about reactive programming in general. Learning about React opens up avenues to React Native (and on to iOS and Cocoa), and GraphQL, and redux, and so ad infinitum. One thing always leads to the next.

Instead of letting this ever expanding set of known unknowns drag you down, it's better to learn to appreciate it.

When you know that you don't know something, you have an option to learn it later. You know that it exists and roughly what it's for. That means you can decide when, if ever, it becomes worth your time to learn it.

We do this kind of weighing of options all the time. It's just that we tend to not appreciate these kinds of options, but instead get a vague feeling of guilt for not having learned everything yet. It doesn't make any sense. It's so much better to have those options than to be ignorant of all the things you could learn.

This kind of unknowledge - knowledge of things you don't know - is no substitute for actual knowledge and skills, but it is by no means useless either.

Accept That Things Will Keep Changing

If there's one thing you can be sure about when it comes to web development, it's that it's going to keep changing. Things change as we collectively figure out better ways of doing things, but also as device capabilities and form factors evolve.

Whatever is the cutting edge of JavaScript right now, you can bet that it won't be cutting edge three years from now. Most of it will be long forgotten. Some of it will be around, but the innovation will likely be happening around something we can't even imagine yet.

For example, Angular 1.x is still going strong and will be around for years to come. But it's not where the innovation is. The same will eventually happen to React and everything else that's new today.

This state of affairs may not be desireable, but it is the reality. Your options are to either accept that things are going to keep changing, or to stay a couple of generations behind the cutting edge, below the turbulence. Either option is perfectly valid, though both come at a cost. In any case, change will be constant, and trying to fight it doesn't make much sense.

Understand that Everything Has Value

Whatever framework or technology it is that you choose to spend your time on, it'll end up helping you somehow. This is true even if it isn't the Right One™.

Everything you learn contributes to the network of neurons you carry around in your head. You'll make connections that will make it easier for you to pick up other things later. Knowing one thing enables you to compare and contrast it to other things. In this sense, learning is always useful, whatever the subject.

This means that getting anxious about finding the one right framework or technology to learn is not as crucial as it sometimes feels. Not only are those things very hard to find, but in many cases they may not exist in the first place. What's much easier to find are things that are useful. They're everywhere. You might as well learn something that looks interesting or fun, even if it may not be the absolute correct thing.

For example, I spent years learning various Ruby technologies as I was building apps in Ruby and Rails. I use exactly none of them today, and I'm not sure if I ever will. Was spending all that time for nothing? I don't think so. Not only were those skills useful at the time, but I'm also positive that everything I learned during that time has shaped the way I do programming today. I fully expect the same to eventually happen to all the tools I'm using right now.

One trick for getting around the anxiety of finding the Right Framework is to go out of your way to find things that won't be that useful directly. Find an interesting computer science paper and explore the concepts in it. Or spend time with technology that doesn't directly apply to what you're doing. The benefits of what you learn from such adventures are not that obvious, but they're very real, and often surface in unexpected ways. It can also be very refreshing to just get out of the framework rat race for a moment.

Learn to Learn

Another very useful technique is to go meta, and just spend time learning to learn. Why not practice the process of problem solving itself, or read up on techniques like deliberate practice. Things like that will be useful to know wherever your career takes you.

Here's how Rich Hickey puts it:

"You need to be careful to recognize the actual game involved. Programming mastery has little to do with languages, paradigms, platforms, building blocks, open source, conferences etc. These things change all the time and are not fundamental. Knowledge acquisition skills allow you to grok them as needed. I'd take a developer (or even non-developer!) with deep knowledge acquisition and problem solving skills over a programmer with a smorgasbord of shallow experiences any day."

As much as learning new frameworks (and learning about new frameworks) can have value, this is where the bigger returns are more likely to be. Become good at learning and solving problems, and you'll have much fewer issues picking up whatever new technology skills you may need next.

comments powered by Disqus