JavaScript really is overtaking the world

According to various sources, including the Stack Overflow Developer Survey 2017, JavaScript is the most commonly used programming language on Earth and I do love it, I actually tweeted this a while back:

But this article isn’t about how much I love JavaScript, nope, it’s about how much it’s saturating the front end development space and worryingly becoming the be–all and end–all of front end development.

Where have all the front end developers gone?

Let’s recap, the three front end technologies are:

  • HTML
  • CSS
  • JavaScript

However, it seems nowadays that most front end developers, and people looking to hire them, are only caring about the big “J”, plus one of the big JavaScript frameworks/libraries, well let’s just say React right (oh and by the way I love React, I use it every day). Leaving HTML and CSS, plus all the other stuff (see the Front end stuff section), on the sidelines or worse not even considered at all.

I’ve noticed this when speaking to front end developers, looking at front end developer job ads, and as a reviewer of a coding exercise that my employer: Campaign Monitor asks potential front end developer hires to do—which I’ll touch on a bit more in the next paragraph…

The coding exercise is to build a small React app where people can rate their favourite Star Wars characters using the data provided by the Star Wars API. The title of the exercise is: Front end coding exercise, despite that, we’ve had to keep updating the document to make it more clear that the exercise is not only about JavaScript but the whole gamut of front end development which obviously, or not so obvious it appears, includes demonstrating ones HTML and CSS skills. However, we continue to get submissions from candidates who are clearly only interested in JavaScript, in most cases treating all the other stuff as merely an afterthought, in some cases using third party frameworks such as Bootstrap to handle all of the User Interface (UI) development.

I’ve even interviewed candidates who have sniggered when asking them how well they know HTML and CSS—especially HTML, to give the impression it’s somewhat beneath them or not deserving of their time and effort. Well, there’s more to hiding and showing a <div> when building a dropdown menu, see Menus & Menu Buttons from the excellent Inclusive Components series.

Unfortunately this seems to be the trend. And there is another trend I’m noticing too, that is, organisations focusing solely on hiring JavaScript centric developers believing that’s all they need on the front end.

I think we need to get some perspective.

Hiring front end developers

People in charge of hiring front end developers, such as engineering leads and recruiters, often don’t fully understand what front end development is. The amount of times I’ve heard people in engineering leadership roles say such things as:

I know nothing about front end development.
Front end development is something I don’t understand.

This doesn’t help, especially when running an engineering team.

My manager at Campaign Monitor, whose title is Director of Engineering, took the time to do a HTML/CSS coding exercise that we use internally. His motivation was to better understand a part of development he’d never bothered to pay much attention to. This is great as it brings an appreciation and understanding, at a leadership level, to these often undervalued technologies. I’d encourage more engineering leads to do the same.

I rewrote the front end developer job ad for my employer as our previous one fell short when covering the role of a front end developer including the skills we were after, as it was too focused on full stack development.

Whilst mentioning full stack development…in my experience, when it comes to front end development most full stack developers are predominantly competent in JavaScript and have, at best, a cursory knowledge of HTML and CSS. However, people hire full stack developers believing they’re competent in all of front end development and most are selling themselves as such. We need specialisation, there was a reason the generalist Web Developer job title faded away many years ago—there’s simply too much to know and master for any one person. We see this in other industries, for example, if I bust my knee it won’t be a GP repairing it or if I’m in trouble with the tax man it won’t be a criminal lawyer representing me.

If you require someone to solely focus on JavaScript development then make the job title: JavaScript Developer, for example: Senior JavaScript Engineer. However, if you’re expecting someone to build scalable, accessible, robust, and maintainable UI’s then you’ll need someone who is good at writing HTML, CSS, and JavaScript. I’d like to see the state of your UI if you’re only interested in the JavaScript part of front end development, and no React and CSS-in-JS will not save you.

Front end development is not easy

Being a front end developer is demanding, it requires a lot of time and dedication to keep up with its relentless pace—it feels like a new Web API is released every fortnight. And now and again I find it truly overwhelming.

Often I think it would be nice to just focus on one particular aspect of front end development, such as JavaScript, dive deep and ignore everything else. There's nothing wrong with wanting to specialise in JavaScript, but I can’t ignore all the new awesomeness coming out for CSS, awesomeness such as: CSS Grid, CSS Custom Properties, CSS Box Alignment, and perhaps the next version of the WAI-ARIA spec? Heck, even just getting my head around some of the new markup available for images, such as the srcset/sizes attributes and the <picture> element. Maybe getting better at SVG.

Becoming purely a JavaScript developer is not for me as I like all the other front end stuff too much — I love the craft of building UI.

Front end stuff

Front end development logos, for example: CSS3, HTML5, JavaScript, Babel, Sass, Webpack, NPM, Git.

To end, here’s a list of skills, characteristics, disciplines, et cetera, that I think an experienced front end developer should have:

  • Can write semantic HTML including technologies that extend HTML to make it more machine-readable, for example: WAI-ARIA, Microdata.
  • Can write CSS at scale.
  • Can write UI focused JavaScript (preferably ECMAScript 6) including unit tests. I think it’s expecting too much of a front end developer to be able to write high quality application focused JavaScript and to architect and build an application end-to-end, however, you should feel comfortable working in applications consuming RESTful APIs.
  • Can write highly readable and maintainable code.
  • Can build highly componentised UI’s, for example, you’re really good at abstracting UI patterns.
  • Can build responsive, accessible, performant, and resilient (cross-browser/device) UI’s.
  • Can work with a JavaScript framework/library, such as React. I don’t think this is super critical though, if you have a decent handle on JavaScript and DOM fundamentals then picking one of these up shouldn’t be too hard.
  • Can work with front end tooling such as: Webpack, Gulp, Babel, ESLint, Stylelint, PostCSS, NPM, Git, Browser dev tools, et cetera.
  • Has a solid understanding of how browsers work, such as: Critical rendering path.
  • Has a solid understanding of what makes for good user experiences (UX) and has an appreciation for design.
  • Has attention to detail.

Here’s what Wikipedia says:

Maybe I’m too old school? Maybe one day the only thing left for humans to do in front end development is to write JavaScript as software will be creating production quality UI’s.

For now though, there’s more to front end development than just JavaScript (and React).