Developers are passionate their tools. This is totally understandable. They invest years of learning into them. Their livelihoods depend on their expertise with them. Their professional community is built around them. They can become deeply invested in them because it seems apparent that their success is somehow tied to the success of the tool.
Which brings us to the current debate about React. I won't rehash the debate, since I'm not here to argue over the pros and cons of React or other front-end frameworks. Suffice it to say, the debate has gotten pretty intense and, at times, has seemed pretty personal.
This brought back parallels from my own career journey and some lessons that I learned in the aftermath.
The Rise and Fall of Flash and Flex
Dave Rupert had a weirdly timely post about Adobe Flex recently. He clearly intended it as commentary on the current debate in the web community and, based on my experience, the parallels he implies are accurate.
For those that don't remember it, Adobe Flex was a way to build web applications using Flash. Web standards at the time were essentially frozen in the past. For instance, HTML 4 was proposed in 1997 and had been last updated in in 2000. HTML5 wasn't even proposed until 2008 (and those who were around know it took years for much of it to show up in the browser). Flash and later Flex, which was released in 2004, were filling the gap in web standards, allowing for animation, styling, interactivity that was largely impossible on the standards-based web at the time.
To say that I was deeply invested in Flash and Flex would be an understatement. I had been using Flash since around 1997 when I'd initially started my career and had committed to focusing on Flex, in particular, around 2006. I wrote articles and spoke at conferences about Flex and many of the Flex meta-frameworks (yuck Cairngorm...yay Mate). I even started my own conference about Flex in 2007. In 2010 I was hired by Adobe as the Content and Community Manager for Flash and Flex.
When I was a younger developer, I was incredibly passionate about the tools I used and even moreso about Flash and Flex, given that my career at the time revolved around them. In 2010, Steve Jobs published his famous "Thoughts on Flash". Putting aside any debate over the merits or motivation of his particular argument, it threw a major curveball at my career. Over the next year, the criticism of Flash and Flex was unrelenting and seemingly coming from everywhere.
Within less than a year of that post, my decade or more of Flash and Flex experience was over – literally from one day to the next. A massive re-org at Adobe signaled the beginning of the end for Flash and Flex. I was fortunately spared from layoffs, but, by that afternoon, my job had nothing to do with either tool. Instead, I was now focused on web standards and JavaScript.
In a developer career that had begun around 1997, I had never known web development without Flash. Yet, I have not touched Flash in the decade-plus since that day.
Parallels with React
React was first released in 2013. According to the most recent StackOverflow survey, half of the developer population started their careers within the last 9 years, which is to say, half of all web developers have never known a world without React.
It's even highly likely that they were taught web development via React or that they have never built a site any other way. They were told by their teachers, then by recruiters and then by their employers that React was the way you build web sites, and they invested their careers in it accordingly.
Beyond just React itself, many frontend developers have also deeply enmeshed themselves into tools that are part of the React ecosystem. It's not just their UI framework, their entire toolchain may be built around React.
It’s understandable that those of us who may have invested many years of practice with Swiss Army Knives (okay, JS mega stacks) would be reticent to leave them behind — they’re familiar, they’re comfortable, even if we recognize their shortcomings, and after all, we spent all that time honing our skills with them.
— Cole Peters, Redefining Developer Experience
All this is to say, that it is understandable how turning back now can feel like starting over. While Alex Russell is not Steve Jobs (this is not a dig, I mean who is?), it makes sense to me why posts like this would be perceived as an existential threat. We're telling them that everything I've been taught since day one of their career and the skills that that they've built are now "considered harmful".
It hurts. I know. I've been there.
Changing Directions is Difficult (but Often Necessary)
“The most painful thing is losing yourself in the process of loving someone too much, and forgetting that you are special too."
— Ernest Hemingway
When you are deeply invested in a tool, it can be difficult to see beyond it. When a tool has been a part of your career since the beginning, it can be difficult to imagine your career without it. I didn't change willingly, but it taught me some valuable lessons that I've carried forward nonethless.
- Don't wrap too much of your identity in a tool. For example, there's a difference between identifying as a web developer and a React developer. In the latter case, it can be easy to imagine your career and React are inherently interconected. Recognize that your skills and expertise go beyond a specific tool you use to get the job done.
- Every tool will eventually fade. It may seem obvious in retrospect but less obvious in the moment that tools will come and go across your career. In the cases of prominent tools, they don't die, just lose relevance. Remember when jQuery was a critical resume skill? It was far more widely used than React and, while it still exists (and is still actually widely used), it increasingly less relevant as a career skill than it once was.
- Flexibility is a valuable skill. Yes, it can be important to hone a particular skill in the short term, but remaining flexible can be valuable over the long term. It allows you to adjust to the ever shifting requirements of the job market. Beyond that, it can open you up to all kinds of possibilities and solutions that you might have otherwise miss, which can make you more valuable in your current role and more efficient at the job you do.
- Changing tools does not mean starting over. It's true that you may have invested a lot of time and energy into a particular toolset, but when you change directions you often find that you've built a ton of skills that transcend it. Looking back, the early post-Flash days on the web were a flurry of innovation brought by ex-Flash/Flex developers who brought their expertise to web standards development. There were new animation libraries, new frameworks and new tools that came from folks that were already familiar to those of us in the Flash and Flex community. And ActionScript skills were definitely far less transferrable to the broader standards-based web at the time than React skills are to non-React development.
The last point I want to make is to those publishing and sharing the criticism of React. I do agree that the debate is valuable and necessary, but be aware of the impact of your criticism. I know that Alex and others have made a point that this isn't intended as an attack on the developers who use React themselves, but given the potential threat they might perceive to their current roles and their careers, it is understandable why it might be seen as such regardless.
Recognize the difficulty of the course correction that you are advocating. Make your case with empathy and reach out a hand to help them on that journey, because, whatever the future holds, it's still a journey worth exploring.
Top comments (14)
Having started in the mid 90ies, I saw countless tools rise and fall. From Perl to PHP, VBScript, XSLT, XHTML, WAP/WML, Dreamweaver, Flash, Java Applets, and many more. It's simple: learn the fundamentals, watch where things are going and pick your tools. But be aware things will soon be different anyways.
I wouldn't say PHP fell. It got a pretty bad reputation when it was around version 4-5 I guess. But today it's widely used and not as bad anymore as everyone thinks.
I used to completely avoid PHP at all costs but now I had to work with it at work and I began to really like and understand it.
Yup. PHP can do all kinds of things, especially CLI. The ecosystem is still very much alive and kicking. In the dynamic web server language universe, PHP still commands 77 to 79% global Internet marketshare as of 2023:
w3techs.com/technologies/overview/...
With PHP CLI, we can build useful system services that start up at system boot, powerful command-line tools to do things like modify Windows EXEs and DLLs, create cross-platform, installable software applications, and much more in PHP.
PHP CLI also has excellent "startup-to-first-line-executed" performance and generally uses very few system resources, which is kind of expected for a FastCGI-first language.
Overall, there's a lot more churn that happens in scripting languages than compiled system languages. C and C++ have been around for quite a while and while Rust is the new hotness, C and C++ are extremely unlikely to go away anytime in the next few decades or change dramatically because, for better or worse, there are hundreds of millions of lines of code written in those two languages.
Actually I wasn't trying to say PHP fell. It's more like I saw the transition from Perl/cgi-bin to PHP. I still think PHP is unbeaten when it comes to ease of deployment. Just get any shared hosting, deploy your PHP scripts. Done. I'm pretty sure most PHP developers still run circles around most Javascript Fullstack (or any other) developers there.
Oh okay then I understood your message wrong. In that case we have the same opinion.
I started with JS and did only that for around 4 years. I was always kind of "anti-PHP" but then I started using it I really liked it and saw what some JS frameworks definitely lack of. (Like the massive structure of Laravel and the whole ecosystem)
💯
life of a developer.
Good advilce. Here's what I learned over the years.
Ultimately companies will throw their adopters under the bus for staying on the cutting edge. Microsoft is king here in that they must have at least 5 huge projects that died because someone else other than the adopters made the decision
Be extremely careful to adopt anything new. It takes about 6 months to become a SME but if the tech dies in a year, you've lost 1 year.
Study programming theroy. This allows you to spot poor architecture and implementation right away. Always reject anything that doesn't follow good architecture and implementation.
Be cognizant of the support ratings. For example a rating of 1 may also talk about a lack of support which is always a bad sign.
Be aware of you own prejudice and laziness. For example many people rejected Javascript for over 10 years just because it was a goofy weak language. Today it's the #1 language.
It's OK to wait. Allow others to do the vetting. Jump on the bus after you see strong trends. Usually a year or two.
Thanks for the advice John! These seem like good things to keep in mind.
There's a thing I've heard before, and it has stuck: Don't love your code. Don't be so invested in the way you've written a thing that you won't scrap it in favor of a clean refactor, a more understandable way, or a better way (by some metric).
In the same vein, Don't love your tools. The things we use to accomplish a given goal are great, they are powerful, but they are merely tools. React is incredible, and I'm absolutely not hating on it - but it is a tool in our toolbox. And if a tool comes along that might be a better fit for a given usecase, then don't be afraid to put the one you've been trying to use away and pick up this new one.
Flash, ActionScript and Flex are great examples of tech that served a purpose at a point in time, but as the systems evolved, the tools were replaced with different ones. jQuery, same deal: it was designed to be a short-term tool, it was planned to go obsolete.
So as we have these monolithic libraries and frameworks, but the system on which they rely continues to evolve and grow in its own right... don't so love your framework that you won't jump at the chance to try out new tools.
Nicely said.
I too started as dev/software engineer in late 90s.
Loved this article, took me back to always thinking about should I learn this or that, usually in my own time if current work wasn't applicable.
But with experience, learn what you need for current projects and just learn what you love in your own time.
I work for a consultancy so each new client project brings opportunities of new tech skills and domain knowledge to learn. I love learning new stuff so love my job.
Every skill is transferrable and breaking/learning/fixing is universal and shows you can get things done.
It's more important to lots of employers to know you are hard working, team player, problem solver than individual tech skills as these can be learned on the job
Thanks. Yes, working as a consultant can definitely help prevent you from getting too attached to a particular set of tools or way of building things.
I still think that knowing older tools such as jQuery or SCSS is relevant even in 2023. Even if most websites nowadays are either using the big three (React, Vue or Angular) or some newer framework such as Astro, Svelte or Solid, there will be times when you'll encounter simple websites with no such thing, and jQuery and/or SCSS will still be relevant to know. Sure, you won't be developing an app with jQuery today, but for doing simple tasks that you still can't do with vanilla JS, it is still useful.
It's like knowing how to use the Office suite, the command line and so on. Unlike Adobe Flex (good times...)