You Can’t Get Comfortable in Web Development

I’ve been thinking a lot about the topic of “JavaScript Fatigue” and have had a number of exchanges with other developers about their opinions and, most importantly, their concerns. The post, How it feels to learn JavaScript in 2016, by Jose Aguinaga kicked off quite a bit of debate of what I feel has been a growing concern to the amount of tooling necessary to build web sites and applications. On one side you have many empathizing with the complexities of building JavaScript apps while the other voicing their support for the evolution of web development.

I tweeted out my perspective on what I think is causing so much angst and it seems to have resonated:

Since I only had 140 chars to say that in, let me elaborate a bit.

What I mean by this is that many web developers who have been able to hang their hat on a specific technology for “x” years are incredibly concerned by the rate of churn in the JavaScript (and web development) world. They can’t just pick a specific framework and feel that they’ll be in a good spot for the next 5 years. And when you factor in the rate of churn on tooling and workflow technologies, you increase the anxiety of feeling “left behind”. I can totally relate to this and have voiced my concerns publicly.

Here are some examples from Twitter:

“@reybango The rest of us are looking for some GD stability. To, you know, make shit. For like a year or two, at least.”

“Make all the analogies you want, but it’s willfully ignorant to claim the fragmentation & churn of JS tooling isn’t overwhelming to outsiders”

“@reybango for beginners i think it is easy, the old dogs, now they have to learn new tricks, difficult but not impossible. 1 step at a time”

“@reybango reminds me society that buys cool shoes every season. Looks silly. Devs should just do their real stuff with less frameworks.”

“@reybango also stacks keep changing so fast. I’m not a fan of constant “updates”, seems lazy, unplanned and bug-ridden.”

This reinforces my thoughts that many developers want to be able to pick a route and feel assured that by learning it they’ll have some stability and a sense of relevancy for a decent period of time. I definitely think that’d be nice to have since the churn can be exhausting.

John Shewchuk, VP & Technical Fellow at Microsoft, said it nicely in a thread I was on:

This is probably a side effect of the rate of innovation here — and this innovation is often leading other programming environments.

The evolution of tooling for complex web apps was inevitable. JavaScript development has been simplistic compared to other environments which is why it’s had such an attraction to many developers. It’s why so many developers who were used to comprehensive & mature environments would look at JS-development as a regression.

Quincy Larson, founder of Free Code Camp, said:

We are trying to build applications that run right in a dozen browsers, look good on thousands of different devices, load fast enough for impatient commuters in the subway, and are still accessible enough that blind people can use them.

And he’s absolutely right. Web applications are becoming more involved and developers are trying to meet the needs of these applications. This translates to the need for better and more feature-rich tools that are more easily able to solve complex problems. And in many cases, these tools are being built to fill the holes that deployment platforms are missing.

As I’ve been going through the process of learning Node.js & Express, I’ve started to have a better understanding of why this new tooling is important. Like many developers, I’ve experienced the frustration of having to learn about so many new moving parts just to scaffold an application and at times cursed at having to work with so many different tools. But as I’ve continued on, I’ve started to get a better understanding of how and why they’re necessary and appreciate the functionality they provide. I’m not saying that I like having to use so many different tools to build an app but I will admit that I understand the need when you want to push the web forward.

A lot of the discomfort we’re feeling is the belief that we need to know how to use every new framework or tool that comes out. It’s really not the case. There will always be someone building a new tool or library and of course you’ll have the early adopters that will flock to it saying that it’s the cool thing that everyone should be using.

My colleague Bill Barnes really articulated this well:

This gets to an important and underappreciated soft skill of development, which is the ability to predict winners. More experienced developers consider a number of factors including:

  • Industry trends (both in functionality and implementation)
  • Aesthetics in API design
  • Currency of maintenance
  • Quality of contributors

Experienced developers can simply sense an emerging consensus faster than new developers.

I think the best thing we can do to help new developers is not just guiding them in what to learn, but also helping them understand what factors went into that choice. Let’s teach them to how to fish. And shop.

I agree with this assessment and it ties into the “you don’t have to know everything” statement.

My teammate Aaron Gustafson adds:

One other thing we haven’t really discussed (and was a central conceit of the piece that gets a little lost amid the absurdity) is that we are overcomplicating things. There are absolutely certain instances where an Angular or a React or any other framework or library can be the exact right tool for the job, but I think that folks building for the Web have a tendency to reach for a library or a framework immediately without actually asking if it’s needed. Without going too far down the React/Angular/Flavor of the Month rabbit hole, consider the ubiquity of jQuery. There are many web designers & developers out there who drop it into every project they build without a second though, never asking themselves why. It’s just part of their template. In many cases, the don’t need it.

He’s absolutely correct. We should be asking why we need a framework or a tool before just dropping it in. It’s not to say that you shouldn’t learn new things. YOU ABSOLUTELY SHOULD BE CONTINUOUSLY LEARNING! But you should ensure that you have a solid base to work from. The general consensus is that you should get good at plain ole JS, learn ES6, HTML, CSS and dive into at least one top framework. This gives you the foundational skills of web development that can be easily applied to almost any modern web project.

I’ve changed my perspective on being comfortable. A part of me truly longs for the good old days of being able to just use jQuery, HTML & CSS to build a cross-browser site but I know that’s only because I’m comfortable with that stack. You can’t get comfortable if you want to work with JavaScript but you don’t have to know everything. And that’s the key thing that I think many developers need to hear.

I’ve personally chosen to learn Node.js/Express + React + Functional Programming to build apps because that seems to be the the emerging consensus of how to build modern web apps (thanks Bill). That will mean that I’ll need to learn the tooling that goes with it (uncomfortable) but I’m going into it feeling like I have good foundational skills and an understanding that it’s a continuous learning process.

I know it can be hard but I’m here to tell you to keep at it. It does get easier with each step. Embrace being uncomfortable and learning new things because the things you’ll build with these new tools can be absolutely amazing.

Originally published at Rey Bango.

Tinkering in cybersecurity at Veracode and helping developers build secure software. Fortis Fortuna Adiuvat. Opinions are mine.

Tinkering in cybersecurity at Veracode and helping developers build secure software. Fortis Fortuna Adiuvat. Opinions are mine.