Holy cow there is a ton to learn in this field. If you wanted to, you could quit working and invent a job for yourself doing nothing but learning the latest frameworks and languages. We all instinctively know this isn't a good use of time, and yet so many of us feel a bizarre pressure to keep up with the trends.
I've been thinking a lot about this lately, and it occurred to me that our field is much like pre-enlightenment history. There are many competing ideologies. We haven't quite agreed on what the essentials are, nor how we might communicate that. To this end, I have come up with a simple test.
Whenever evaluating the importance of a given technology or practice, ask yourself the following question.
If there were a global thermonuclear war and all intelligent life were wiped clean from planet Earth, is this a thing that future humans (or whatever) would necessarily discover again?
You can ask this about any piece of the stack, all the way from the highest level abstraction down to the hardware itself.
If an asteroid hit the planet, would we rediscover transistors as a means of storing state? I would say yes. At the very least, even if our successors do eventually come up with something more advanced, there is a good chance they will at least pass through transistors while on their way to something better.
Okay, here is something more software related.
If we manage to destroy ourselves by overheating the planet through greenhouse gas emissions, will a future intelligent species discover something like Big O?
Again, I would say yes. A linear algorithm doesn't magically become quadratic or polynomial by some historical accident. Algorithms are a truth of nature. Certain ways of doing things are simply more efficient, regardless of whether there are human beings there to observe it. When we come onto the scene, we merely discover and exploit these fundamental truths about reality.
If a global pandemic wipes out all of humanity and we are forced to rebuild civilization completely from scratch, will we necessarily discover React Native?
No. No we won't.
That is because React Native is a historical accident. It only exists because of other historical accidents, these two dominant mobile platforms iOS + Android. It is a temporary solution to a temporary problem, and as such will likely wear away with the sands of time as we move on to other things.
In other words, platforms and frameworks come and go. Algorithms, data structures, computing itself, these things are essential.
Okay, here's one for the project managers.
If an alien civilization decided to destroy all humans and then got bored with our planet and left, would the next intelligent species to evolve here necessarily discover 2 week timeboxed agile sprints?
There is nothing essential about scrum. It is a historical accident that arose from this one meeting of the minds in Utah in the early 2000s.
You can imagine history taking on a multitude of alternate paths. Maybe someone with a ton of social status wrote some different manifesto about scrum but instead of two week sprints, he decided they actually need to be a month long.
Or maybe they never drew the sports analogy from Rugby and instead decided it's really important to model themselves after Nascar drivers. So now we're all obliged to say we're doing this month's Indy 500 and we've got a Pit Stop Meeting where we let everyone on the team know what we're Driving Toward. Don't forget that we also need to mention any Flat Tires preventing us from getting our work done.
Nonessential things are flippant, silly, worth turning up our noses at.
Essentials are worth learning.
Alright, so I will throw out one bone for the Agile people out there because I don't think it's entirely B.S.
If a supervolcano wipes out all of North America and plunges the entire world into an ice age for hundreds of thousands of years, will those who emerge from the thaw rediscover iterative software development?
Yes. I think they will.
The ability to focus on delivering value in the tiniest possible increment will always be an important thing to do when you're making software for paying customers. It is essential to learn how to do that. Lizardpeople, humans, cyborgs, hyper-intelligent kittens, all of them would benefit from figuring that out. And so they would naturally discover it again.
To conclude, life is short. You never know when an asteroid is going to hit or when global thermonuclear war will break out. If you're going to spend your time learning, you should spend it learning something that is always going to be valuable. Study the essentials and you'll have no trouble picking up the platform or framework of the month while you're on the job.
And if anyone asks you why you don't know React Native yet, just send them a link to this article.