Why It’s a Good Idea to Be a JavaScript Developer, and What it Takes to Be One

Note: This article seems to have gone somewhat viral. It was written in 2010 but still applies now. I no longer work at Cloudera, but they are still hiring (and I highly recommend the place). For the curious, I now work at Thanx.

So, I’ve been trying to hire another JavaScript developer at Cloudera for a while now and the effort has proved to be rather daunting. Finding really good JavaScript developers who know their stuff is hard! If anything, it’s driven a very simple point home to me: it is a good time to be a JavaScript badass. In the past few months, when I’ve found talented JS developers and tried to recruit them, it’s clear that they have as many doors open in front of them as they want. If anything, they’re bombarded with requests from recruiters and companies trying to recruit them. As a person trying to hire these people, I find myself competing in a way that reminds me of the first dot-com boom. I offered one candidate a 1967 Cadillac Eldorado and still didn’t close the deal (I wasn’t serious of course, but I did offer them a lot, including the car, but the candidate knew I wasn’t serious about that one. He countered by demanding something a little more high-profile). In the end he took a job at another startup.

The thing is, being a JavaScript badass isn’t only about knowing JavaScript. If you want to be a solid front end developer, you need to be able to do a lot of things really well, most of which aren’t really in the job description or, at least, don’t appear to be as important as just knowing JavaScript. Some of them just require competency, while others really require mastery (JavaScript does, obviously, if you want to qualify as a certified badass). In general, I’m a relatively humble person. I have my own blog, which I guess says something about the size of my ego, but I’m not that full of myself, I swear. But consider the fact that when I was recently talking to a recruiter about the position, I described what we were looking for, the skills and the kind of person, and the recruiter told me flat out, “Those people don’t exist; you’re describing a unicorn.” I told the guy I was describing the job that I do every day. He was unyielding, “Well then consider yourself mythical in nature.”

So what does it take to be a JavaScript badass, and what do you get for it? Well, to be a really top-notch front end developer means you’re going to have to spend a lot of time doing stuff that’s tedious and boring, some stuff that’s really hard and beyond your talents, and some stuff that’s just plain fun. For what it’s worth, here’s my list:

You need to know HTML. You need to know everything about it. Everything. You need to know what effect document types are going to have on your markup’s display. You need to know that browsers will shove a TBODY tag into your tables even if you don’t code one. You need to watch what the browser vendors are adding into their nightly builds and their upcoming specs. Learning this stuff, at least for me, just takes loads of time discovering it as you work.

You need to know CSS so well you’ll regret it. These days most of the cross-browser problems I encounter are with their CSS implementations. Getting around them usually means describing the exact same style in a different way. You just added a negative margin-top to a link and guess what, the users of certain browsers can no longer click them, despite the fact that you gave it a z-index of a million and you can clearly see the damn thing. Or you just made the most amazing collection of positioning statements to make an auto-resizing masterpiece of CSS awesomeness but god help you if your boss looks at it in Internet Explorer. The thing is, having this skill – being good at CSS – isn’t really all that interesting or valuable any more. Everyone who works on the front end is just expected to have it. There are some seriously talented CSS developers out there who go far above and beyond this kind of knowledge and truly make CSS into an artform. You don’t have to be one of them, but if you can’t make the page look like the mockup, it doesn’t matter that you can do just about anything else.

You need to know the browsers. You need to know that IE won’t let you convert this string: “<meta></meta>” into DOM elements by setting the innerHTML of a DIV. And forget about injecting it in the HEAD to turn it into a DOM element, because that thing is read only. You need to know that IE will always barf at trailing commas in your array and object literals. You need to know that IE has offset positioning issues for elements inside of iframes. And IE isn’t the only pain in the ass; Firefox has those clearfix issues with floated elements and webkit’s no saint. And you need to know that the latest versions of webkit have whatever awesome new features it has, as well as what ways mobile safari differs from the desktop version.

Did I mention JavaScript? You need to know how ALL of JavaScript works. You need to know that the arguments object in a function has a length property and is iterable, but it isn’t an array and has no methods. Further, you need to know how to turn it into one. You need to know how the prototype property works, how to use it on your own without the help of a framework, and what the implications of using it are. You need to know how to garbage collect things and, for that matter, how to tell when you aren’t. You need to be really good at abstraction. Seriously brilliant at it. You need to be good at designing APIs for yourself as well as others. You need to know how to test your code and how to manage it.

You need to be decent at design – information flow, graphic design, user experience design, code design. You need to be able to interview a user, a client, a stranger, an expert, whatever, and ask them the right questions to be able to devise an experience that solves their problems. Not just the ones you can imagine, but the ones they don’t know how to describe. You need to be able to open Illustrator and put together wireframes quickly to devise a plan, then switch to Photoshop – god you need to be good (that is, efficient) at Photoshop – and put together the visual style. You don’t have to be the worlds best designer; I’m certainly not. But you need to be able to tell the difference between good design, bad design, and amazing design. If you can manage good on your own, you’re set.

You need to be comfortable on the server side. There aren’t that many positions out there where all you write is JavaScript all day long. Most front end jobs will see you writing as much as half of your code in JavaScript, but you need to be able to pick up other languages relatively quickly (in, say, a month or less). Python, Ruby, Java, PHP… If you only know one programming language, it doesn’t count. If you only know JavaScript and PHP, and you balk at any task that requires you to use something other than those two (rather than, say, looking at it as an opportunity to learn something new), then you need to ask yourself what you’re doing here. Knowing how to use a framework, but not how to accomplish something without one – with vanilla JavaScript – doesn’t count as knowing JavaScript.

And then there’s about a million other things that you need. You need to understand Git. Git is amazing. I know you’ve heard people tell you this, and if it still seems like an alien monster that refuses to explain itself, then you need to hunker down and figure it out. You need to understand how to get things done with just a shell. You should be able to open up vi or emacs and edit a conf file without launching notepad or TextMate or whatever. You should be able to run make and compile things. You should be able to tail a log file, unzip a tarball, secure copy things, run servers and configure them. You need to be able to kill processes and read a stack trace.

I’m not even counting stuff like being familiar with Agile development processes, working with open source communities, or releasing code. But if you feel like out of the seven things I listed above that you nail 5 of them and would get passing grades at all 7, then congrats. You’re a unicorn.

And what do you get for being one? How can all these things possibly be worth the years of tedium, of debugging crap in IE6 and worse (yes, there is worse), possibly be worth it? Well, you’ll get recruiter emails and calls every week (this isn’t so awesome, actually; they’re like sales people who pretend they know you). When you want to look for a new job you won’t even need to do much – just tell a few people or post it on twitter – and you’ll have half a dozen doors open to you. You’ll have friends that are starting new ventures calling you, begging you to join up. You’ll get in on that ground floor you’ve been hearing about. You’ll get good stock options and you’ll get to design products from the ground up. You’ll get a 1967 Cadillac Eldorado as a signing bonus (not really). That guy I offered that car to (not really) took a job at a startup and he’s the guy. He’s THE front end developer for their product which doesn’t exist yet. He gets to point to that thing, a year or two from now when it’s worth a bazillion dollars (I do wish him luck, after all) and say, “I did that.” There are people out there, right now, who get to point at Twitter, Facebook, Gmail and Google Maps, at the Iphone’s UI, at Github, at the YouTube player – stuff used by millions upon millions of people – and say, “I did that.”

This entry was posted
on Friday, August 13th, 2010 at 11:38 am and is filed under Deep Thoughts.
You can follow any responses to this entry through the RSS 2.0 feed.
Both comments and pings are currently closed.

29 Responses to “Why It’s a Good Idea to Be a JavaScript Developer, and What it Takes to Be One”

I don’t think you can have the expectation that a person should have this amount of detailed experience already. However, you should be able to expect that someone can learn and adapt to these issues quickly, based on big picture knowledge of software/browsers/web technologies.

Brian, as a person hiring, I certainly can expect anything I want. I just might not be able to fill my role. I think that it’s reasonable for me to, perhaps, be willing to take candidates who are good at several of these items and not strong at others. Maybe I don’t get a candidate who has any design skills, or maybe they’re really solid at JS, CSS, HTML but not the server side. And yes, I might hire them, but that person wouldn’t meet my definition of a JavaScript badass. I certainly don’t mind people learning on the job (I do every day!), but right now I work at a company that, if we can find a candidate that meets these requirements, would pay handsomely, offer some nice stock options, and throw in an El Dorado.

Today I explained to a friend why I do it. I said, its because I like to play with Lego. Web application development is like playing with lego, just for grown ups. It is fun. I like playing. I do it because it feels like I’m playing. It’s really good to be anything in the IT-Business right now.

It’s also a difficult time to *learn* to be a JavaScript ninja, or even a JavaScript street beggar. Good resources for getting beyond the very basics are hard to find, documentation is sparse or wrong, and a snippet of code that may have been viable last year is now an anti-pattern. So I have to admire the people who got there, it’s hard won experience re-thought every day.

I think I’m a unicorn then. Thing is, I’d NEVER work in web development. At least not for any firm with the slightest inkling of supporting IE6. I would quite literally rather bag groceries in a supermarket for the rest of my life than have to open IE6 more than once a year. I get the recruiters from youtube and the likes. It just gets annoying.

You let me know if you have any jobs going where only current generation browsers need be getting first class support though. To hell with the legacy. I need my sanity more than vendors legacy customers.

Sidenote: I’m not of the opinion that Internet Explorer is a bad web browser. Just that nine year old web browsers are bad web browsers.

I don’t know if I agree with your comment entirely Brent. Look at this blog. I started it in 2006. I was a pretty decent JS developer then, but no ninja. I had passing marks on all the items on my list, but I was no expert. If you flip through this blog you’ll see me learn lessons, explore techniques, find out about browser quirks and more. If I were to pick one thing that had the most profound impact on my JS skills it was writing the documentation for MooTools when there was nothing but the source code. Reading through the source code of JS libraries has taught me mountains.

Well, I fit your description pretty well ;-) Doing webdevelopment for 16 years. Although I’ve not worked with Git yet :) But as a freelancer living outside the USA, I’m not applying for your position :-P

I hope you don’t want your candidate to be twenty-something (I’m 42). And I hope you don’t expect him/her to be a real designer. Asking for a developer who also can design is like asking for a gardener who also can write great poems.

And recruiters? They can only see whether you’ve worked for known names. Not whether you’re any good. Only a few companies know how to value a developer. Getting on a project to work with people who really know what they’re doing is very hard. Sometimes I’m lucky and then I’m the happiest men on earth.

@Edwin: Not always true. I’ve never worked a day in my life, and recruiters still pester me on the quality of my lame old javascript widgets alone, and I guess also my website’s been linked to by a few online design ‘magazines’ a fair few times now in articles instructing ‘designers’ how to drag and drop awesomeness in to their pages. :/

@Edwin, my description here is my definition of a JavaScript badass. I know developers who can do all the things above. Maybe they aren’t the best designers in the world, but they’re not lacking in talent entirely in that regard. At the very least, they need to be able to work with designers to help them imagine the possibilities of a UI solution within the boundaries of what the browser is capable, but, ideally, they would be quite capable of designing it themselves. I can think of several developers who fit that description (and, consequently, they get spectacular job offers and are nearly impossible to hire). Jonathan Snook, Guillermo Rauch, and Valerio Proietti come to mind.

As for the actual role I have open, it’s not a requirement that they be super talented designers; that’s one of those things that I expect them to be able to be given page 1 and 2 and then extrapolate pages 3 – 5. Also, there’s a difference between graphic design and UX design.

Speaking from my short experience I believe the main problem is that a period between starting with JS and becoming a JS badass is quite hard, way harder than in some other areas related to the web.
I mean, people start the adventure with JS from a really simple things, like jQuery based animated menus and such. That usually just a side track job for usual HTML/CSS stuff. When they became quite good at it the real JavaScript shows up and people realize they need a lot of time to master it. But till then all they will do is these silly menus and widgets and HTML/CSS thing and they’ll probably never even look at JS based web applications. Not very motivating, nor rewarding. Also, finding a job as a junior PHP programmer seems easier – so people turn this way quite often. Of course that makes JS experts even more valuable. I’d really like to see more of them everywhere though, so things would be moving forward faster – both in my humble, little job and in a global perspective (libraries, docs, etc.).

These skills are more for a web designer or possibly a framework designer, not necessarily an application developer (dojo, yui, qooxdoo, gwt, rails, django, whatever). Personally, I would recommend aspiring javascript developers to focus on the latter (unless graphic design/css is your main interest and strong suit). I think there’s more of a future there.

So many developers still just see the web as a place to put electronic brochures. Fancy, animated brochures. Not real interactive applications & games and enterprise solutions and so forth (like we normally expect on the desktop or on our phone). That’s changing, especially with all the turmoil over java and flash the past couple of years.

What it takes be a Javascript developer? There’s no thing as JS developer, as JS is just one brick of the entire stack. I don’t know any job where this is the only requisite.

What you do have are back-end developers and front-end developers. Front-end developers shouldn’t be hacks that know JS and then “pick up other languages”. They need to be complete developers, as anyone else, PLUS have decent front-end skills (know HTML and CSS inside-out, know the back-end technology used and have a deep understanding of design, usability and user experience).

@Darren, it’s garbage collection in a looser term than one would have in other languages. I mean it here in terms of cleaning up after yourself. MooTools, for example, detaches all the event listeners that it creates for elements as well as decouples the ability to store pointers from an element to something in JavaScript from the element itself to allow browsers that do a poor job at garbage collection (esp. IE with it’s reference counting) to avoid memory leaks.

There are so many things to know regarding the frontend: (“semantic”) HTML, CSS, JS (vanilla and libraries), accessibility. It’s hard to be really good in all of them. Or rather (as you mentioned): it takes time.
I would actually take on more of a junior position, even with a lower wage than now, if I could really learn something on the job, have code reviews with senior frontend developers etc. I would love it. But that kind of job seems to be as rare as the people you are looking for…

I didn’t mention any framework. I said you need to know JavaScript. In my experience, if you know JavaScript, you can learn jQuery easily. The obverse does not always prove true. If that’s the only thing you know, you don’t know JavaScript. Show me a JavaScript badass that only knows jQuery.