I have noticed a strange phenomenon with JavaScript which I call the JavaScript paradox:
The better you know JavaScript, the harder it gets
If you asked me 10 years ago how my JavaScript was, I would have confidently answered “Good”. My answer now is “I still have a whole lot left to learn”.
On the one hand, I know that my JavaScript has substantially improved over the years. But from my honest answers it also appears to have gotten worse.
I also know that I’m in good company here. I have read from many, many people that JavaScript is an easy language to learn. But in every single case I have found that those same authors lack an understanding of one or more important aspects of the language and teach an amateurish form of the language.
Conversely, the authors who have studied it long and hard and ought to be the ones who think it’s easy, never ever make such a claim.
I’ve been at this for years and I sometimes feel like I’ve only just begun. – Kyle Simpson
I recently watched Ben Callahan’s course on responsive web design. I found the most interesting bit was right at the end when he spoke about the 4 stages of competence:
1. unconsciously incompetent
2. consciously incompetent
3. consciously competent
4. unconsciously competent
Seth Godin has written a book called ” The Dip”. Steve Smith has a brief review of it here.
Between stages 2 and 3 we experience a Dip where we have to get worse before we can get better. This applies to just about any skill that we need to learn.
What seems to be different about JavaScript is it seems to be a never ending sequence of dips. And at every next stage we reach, we see further and further ahead. Although we have come far, we see the journey ahead getting longer and longer.
JavaScript is complex, and growing. What you describe is something all programmers go through, and so it’s not unique to JavaScript, but is common with all growing languages. It’s a sign of you getting more skilled. If you can still go into the wild (github) and discover Javascript code that makes you go “huh?”, then that’s a good thing.
I agree. The purpose of this post is not to dissuade anyone from learning JavaScript or to say that it is too difficult, only that you see the same language with different eyes many many times in your career.
There are certainly some commonalities with learning other languages, but also some real differences. There have been a number of lessons that I’ve learned that have caused me to completely reevaluate the language and look at exactly the same piece of code as if it has become a new language. Things like closures, callback functions, prototypical inheritance, osmani’s book on design patterns: every time it is like reaching the next level in a video game. It’s still the same game, but the rules of the game have gotten more complex.
I’ve seen and heard this too.
Employers asking for “full stack” developers. Or asking for Expert level of ASP.NET and Expert JavaScript. In my experience of both for recruiting developers and working with developers… generally you can’t be an expert in both.
Once you’ve worked with REALLY great JavaScript developers you realise your own abilities.
I’ve seen full spectrum .NET developers who claim to be experts in JavaScript and then write inline javascript and horrendous procedural code.
It extremely easy to spot a JavaScript that was written by a C# or Java developer: all equivalence checks are done using ==
Even easier: the code is over-engineered to death
I’ve not seen much in the way of over-engineered JavaScript. I’ve seen plenty of over-engineered .NET code, but the JavaScript tends be, like Owen says, inline and procedural.
Pingback: The future is JavaScript, only less terrible | Zombie Code Kill