In the defense of fatigue and how to overcome it
Maybe I'm a bit late to the party, though the thoughts about the subject have been around in my head for a while now. I'm talking about the idea of JS fatigue and how do I feel about this.
So I decided to lay down a summary of a presentation I recently held at We Speak JS event, that touches a bit on this idea. Probably slightly pushed and motivated by this article as well.
Just keep in mind the voice that will advise later in this article, is a developer's voice. Also, you might not agree with everything. Which is perfectly fine. Most of the advice and opinions you'll find throughout the following lines emerged from a very personal experience, so they may not be helpful for everyone.
But first...A bit of background
I've been fortunate (is fortunate the right word here?) enough to fully embrace the explosion that happened in the entire frontend world in the last five years. It caught me young, right when I started to walk this road we all call programming . So I'm used to looking at the fast pace of the current ecosystem and think that it's something perfectly normal.
As a professional, I grew with this. With the ever-evolving libs, new frameworks or new versions of older ones published with fucked up semver rules and backwards incompatible, different ways of writing your CSS (from pre-processors to moving that in JS entirely), relying on bower and later npm , moving from monolithic files to loading strategies using AMD, CommonJS and later, JS modules, etc. It all seems natural to me, because that's always been the pulse that I had to align my heart with.
But despite this feeling of "normality", I spent more than one night trying to understand Webpack configs, build systems, how ES2015 works and React Router's API. And I cannot even count the times I felt like an impostor , like I don't belong, like I'm not worthy. I know I let things and JS get the best of me more than one time.
So, yes. The fatigue is a real thing . And yes, it's unpleasant. But here's the hard truth:
Fatigue is necessary. And programming is not supposed to be simple.
Note:This is a very personal opinion. So I expect a lot of disagreement. Still, I will go on with saying what I think.
Secondly, and this is where fatigue might bend or break people, there are the ones who are emotional about what they build. They know the end product is something that entirely represents them as industry professionals. They want it to be good, fast, secure, reliable and speak quality with every line of code it has. These developers will still have the same issues as above, but for them, the feelings are much more intense. Because there is a connection between them and the code they write. To them, being a software developer is something they love wholeheartedly. So fatigue becomes something personal. And they have to deal with that every day.
For this last category of people, I put together my presentation and now this article (more or less the summary of it). It emerged as something natural anyway because it bears a very personal mark. I only had to look at my past. And years later, I still feel fatigue every single day and I'm constantly fighting the feelings that come as an after effect because of this.Reasons behind this article
First, let me reiterate the idea that fatigue is necessary. In a way, it's a metric of progress itself and it's something that will always exist so complaining about that make little sense.
However, I think that most of us don't really know how to handle fatigue. And because of that, I've seen countless junior developers losing enthusiasm along the way, senior developers leaving jobs or changing tech stacks just because of the frustration or people being generally confused about the current state of the frontend/JS ecosystem, not knowing where to start and where to end learning.
PS:there are some pokemons in the presentation so it feels necessary and right to put a Pikachu picture right here before going on to the next section.
Hashtag: #win!How to overcome JS fatigue
Below is just a list of advice that you might already be aware of. It also may or may not prove useful to you. In a way, it's common sense, really. But I think we're bad at applying it, which in turn, makes us bad at managing the fatigue feeling.
Nothing is imperative and I'm not saying I know it all. I found most of these little "gems" through personal experience and they're basically a reflection of how I feel now. Hopefully you will find some of it valuable. If not, make the comments section your best friend. I'd love to hear your thoughts.
On we go then...1. Don't try to know everything
Newsflash: it's damn right impossible anyway. We live in a very diverse world and the amount of information is just insane. Wanting to know it all is just something that is not achievable.
What I've learned to do though, is to go for depth of knowledge in areas I love and for breadth of knowledge in areas I'm merely interested in. It helps me keep connected with the technology in general as well as deliver maximum value in certain situations. But you have to be prepared for sustained effort. How much you are willing to give is a subjective matter.2. Learn to appreciate your known unknowns
The simple fact that you are aware you don't know everything is a sign of maturity in itself. Truth is, everybody can become better and learning is a process that never stops.
Paradoxically, constant learning is something that is followed by what I refer to as the speed of darkness . Basically every question that you find the answer to will yield three more that you don't know how to answer. Every new piece of knowledge comes in with the additional burden of connected pieces of knowledge that are a mystery at first. And you'll know and feel that. In short:
The rate at which your know unknowns expand is much faster than the rate at which your known knowns expand
This is the speed of darkness and, in a way, it's a wonderful thing. It's what keeps people engaged and motivated to learn more. So make sure you fully embrace this idea, instead of feeling dumb about what you haven't mastered yet.3. Accept that things will always change
Change is the one true constant that you can always be sure of. The whole challenge lies in the fact that you need to learn to embrace it rather than fight it.
Change sucks because it takes you out of your comfort zone. But I got news for you.
The moments you're out of your comfort zone are the moments that grow you
Change is good because it forces you to constantly reinvent yourself. Don't focus on the negatives, instead just enjoy the process of becoming a better version of you with every new thing that you have to accept or learn.4. Wait for the critical mass
Constant effort has to be put in so that you push yourself and your limits and stay relevant in the field. But to be honest, no one likes to spend time on a piece of software that will never have impact in the market.
The idea is to refrain from trying every new piece of technology that spawns in the ecosystem. Instead, when a new framework is announced or it's not mature enough for the market (see Angular 2 for example), start to explore it by reading high level concepts and ideas about it rather than diving deeply into APIs that might very well change the next day.
Learn smart, not a lot. And wait for a something to first prove itself and deliver value. This way you'll avoid burning yourself out on things that don't matter. For a framework/lib for example, maturity is a very important aspect in my opinion.
Until then, learn about it by following people on Twitter, reading high level articles or putting together a small demo that covers only the basics.
Delaying deep learning until you actually need it is a smart thing.5. Learn to learn
I think we, as an industry, are inherently bad at how we tend to value professionals. We care so much about the right answers to specific questions that this has become the main method of evaluating one's expertise in a certain technology.
However, I believe programming mastery has little to do with tools, frameworks and even languages. To some extent, I see all of these as implementation details.
I think you should learn to learn . Because knowledge acquisition skill is the most important thing you can develop as a professional. Do that and you'll be able to quickly change technologies and move your thinking to a higher level (abstractions) that will allow you to become cross functional.
This is by far the most valuable quality you can find in an individual.6. Stick to what you know (mostly)
Let's say you have a greenfield project at your fingertips. Full freedom, no constraints. A dream, right?
Well yeah, but you have to make sure you don't transform it into a nightmare. So when choosing the tech stack, refrain yourself from going full kamikaze style and don't chose only new technologies.
I believe it's important to retain some sense of control. Yes, change is good (see above). And learning has to happen. So go on and try something new. But don't make the stack completely pristine to you or anyone else in the team. I'd say that if you have more than three new pieces of technology on your project (be those frameworks, libs, tools, etc.) you're already setting yourself up for a very frustrating road.
Also, the more new stuff you have baked in, the higher the entry barrier on the project and the longer the ramp-up time for a new team member. Think about this and put things into perspective when making technology decisions.7. Do small, focused exploratory projects
Developers love to hack on things in their spare time. So, to the extend of your availability and desire, try to bake in this nice habit into your free time.
It will help you grow even faster. Maybe quickly grasp the basics of a new technology. It will keep you alert, it's always fun and depending on how far you want to go with this, it might prove super challenging as well.8. Understand that everything has a value
I sometimes struggle with this one to be honest. Part of my job is to keep an eye on the ever-changing landscape of JS and I find that very exciting.
But the truth is that, no matter which piece of technology you use, everything is valuable to you in one way or another (even if it's an older lib/framework that's no longer popular).
Whatever you learn and experiment with contributes to the network of neurons inside your head and will help you make faster connections and compare things for the better choice. Focus on these ideas and you'll see that no matter the technology, you'll find advantages in everything that you use.
And you should never feel bad about learning something. Almost all skills (framework/lib driven) will prove useful only at a certain point in time. Yesterday it was Backbone and jQuery. Nowadays it's React. Tomorrow is Angular 2. Don't feel bad about investing time in something that will no longer feel relevant in five years. It does help you now and that's the whole point.
Considering the current state of the frontend/JS ecosystem, a short lifespan for a piece of tech is a normal thing. Embrace that.9. Pay attention to the non-technical skills also
We often forget to think about other things than technical stuff.
When was the last time you took care of yourself? Are you well hydrated? Are your eating habits the right ones? What about your health and your posture at work?
And if you feel you sometimes need a break from geekiness, try shifting your attention to other things as well. Focus on your time management skills or think about what can you do to improve the communication inside your team.
Diversity is a good thing. A true professional pays attention and always strives to develop other skills besides technical ones.10. Don't overdo it
It's easy to think that in oder to become better and learn to deal with fatigue, you must take everything I wrote so far and apply it daily.
But that's wrong. You're not a machine. You're a human before anything else. Don't make your life a continuous quest where you always improve and don't overdo discipline. Learn to stop from time to time and take breaks.
I find periods of boredom to be absolutely necessary to one's sane development. Especially after those, I manage to come back even stronger and often with a different perspective on things.
Incorporate other habits in your life. Make sure you do spend enough time with your loved ones. Do sports, go on vacations, explore the world, smile often, take on a weird hobby or whatever, but make sure you have things to shift to when the tech stuff is just too much.
It will keep you healthy and happy in the long run :).End notes
I'm trying to apply as much as possible from the writings above. I sometimes fail miserably at it, but at least I'm trying.
But even the small action of putting all this into writing and thinking about each step daily, for me, made all the difference. I now manage to see the ecosystem with different eyes.
But you know what?
All this is perfectly normal. It's part of my job and yours as well. It's what I love about frontend, though I'm sometimes too ashamed to admit that. It's what I signed up for and what keeps me moving. And at the end of the day, in a weird way, I'm happy that I am fatigued by this.
Because it makes me feel alive...
本文标题：In the defense of fatigue and how to overcome it