Is JavaScript Tragically Important?

On September 1, 2012, in JavaScript, by Jim Cowart

devLINK 2012 Closing Keynote Panel

I had the honor of speaking at devLINK over the last 3 days – including the humbling opportunity to sit in on a ‘closing keynote’ speaker panel with Douglas Crockford, Bryan Hunter, James Kovacs and Elijah Manor. Needless to say, I feel woefully under-qualified sitting next to people of such caliber! John Kellar – founder and organizer of devLINK – invited the audience to ask questions. The attendees asked great questions and, at one point, someone asked Douglas Crockford if he thought JavaScript would still be the dominant language of the web in 10-15 years. His response:

“God, I hope not. If it turns out that JavaScript is the last programming language, that would be really sad. But unfortunately, because of its dominance in the web, it is now moving into virtually every place else. It has become a tragically important language, and we’re going to be stuck with it for a time….”

I wouldn’t be surprised if the mix of laughter during & after that statement was comprised of two reactions (at least):

  1. Nervous laughter from those who have embraced (and dare I say, loved) working in JavaScript. An accomplished, respected and knowledgeable figure just told them their baby was ugly. Awkward.
  2. Satisfaction (perhaps of the smug kind) from developers seasoned in other languages who’ve been dragged kicking and screaming (or still resisting being drawn) into this crazy new world of JavaScript’s ubiquitousness.

So – here’s my take on the situation. I was only around Douglas Crockford for a brief time today – but he struck me as someone who’s seen a lot of change and innovation throughout the course of his career. He’s seen languages rise and fall – and he definitely exudes the wisdom of someone who doesn’t view the development world through a myopic “one language” mindset. He cares enough about JavaScript to write a book that should be required reading for every JavaScript developer. He also cares enough to hope that innovation doesn’t stop where we are today. Due to the nature of the web, JavaScript has achieved a reach not many other languages have experienced – that’s important. But it lacks useful features which other languages have, has confusing quirks of its own, and evolution of the language is slow – that’s tragic.

So here’s what I’d say to my two strawmen:

1.) If you’ve embraced JavaScript – great! Work hard to innovate and make this space the best it can be for the period of time it dominates the web. But don’t get lulled into any false sense of security. If my own experience is any indication, a large majority of JavaScript developers either don’t possess, or are not applying, solid pattern knowledge and architectural principles. Do yourself a favor and learn these concepts so that you can apply them in any language. Play with other languages, even if it’s just a side project (and maybe consider learning a statically typed language).

2.) If you view the rise of JavaScript with anti-hipster-bitterness, you’re just experiencing what JavaScript developers will also one day experience: the fact that languages rise and fall, and yours may not be the “language du jour”. Consider the fact that very accomplished developers (from multiple language backgrounds) are delivering some incredible things right now in JavaScript. Don’t let the awful prevalence of spaghettified front end code trick you into thinking that “that’s just how JavaScript is”. No, it’s not. JavaScript – like so much of the web – has a low barrier to entry. And that’s a powerful reality. You can get a LOT done, without knowing a lot. But it’s developers (and would-be-developers) that are responsible for the spaghetti code, not the language. What we could benefit from is your knowledge being brought to bear in this space. And remember – a low barrier to entry doesn’t preclude the power it can wield.

I think the lessons conveyed over my time at devLINK this year are clear:

  1. Endeavor to do what you love
  2. Strive to become excellent at what you do
  3. Do *not* limit your skill set to only what your employer currently utilizes
  4. Learn another language.
  5. Repeat step 4.

That being said, it’s time for me to dust off erlang and Io again.

Here’s the panel discussion, if you’re interested:

  • Pingback: In the News: 2012-09-01 | Klaus' Korner

  • Pingback: From IoC to require | Dru Sellers

  • Tim Branyen

    Everyone laughed, because what he said was funny. I doubt any serious JavaScript programmers delude themselves into thinking JavaScript is the last language (as Crockford says).

    This is why Google and Mozilla have both experimented with new languages in the space, it’s only a matter of time.

    • Jim Cowart

      It really is pretty funny. Most js devs I’m around are used to it being called “ugly”, “awkward” and “confusing”, so no harm no foul on that side. Being a former full time C# dev, though, I have no doubt there is a lot of “OH CRAP, WTF? I have to take JavaScript seriously now?” Lots of talented devs in that space, so I hope the ones looking down their noses at js decide to jump in, instead, and contribute. Btw – I plugged your layout manager stuff for backbone in my devlink backbone session. Keep up the great work!

  • Drew

    I can distinctly remember a time when I shunned JavaScript as a silly, annoying fad and refused to use it in any “serious” web project. I can also remember looking around and wondering how that silly, annoying language made its way so heavily into the mainstream. So I can understand exactly the sentiment Mr. Crockford was attempting to convey. We, as developers, can never allow ourselves to become complacent.

    • Jim Cowart

      Thanks Drew – I was in the same boat not too long ago as well. For just under 2 years, I wrote “Brio” reports – and any scripting had to be done in JavaScript against a proprietary object model. At the time I felt sidelined, but man am I thankful for that experience now!

  • jimmy de smittz

    “He cares enough about JavaScript to write a book that should be required reading for every JavaScript developer.”

    As someone who has been developing with JavaScript since 1998, I believe that “the good parts” were left out of Dougie’s book, opinion, mine.

    “a large majority of JavaScript developers either don’t possess, or are not applying, solid pattern knowledge and architectural principles. Do yourself a favor and learn these concepts so that you can apply them in any language.”

    I know this is in your own experience, however mine is completely different. As someone who has never gone to university and has learnt mostly by reading books, source code and being lucky enough to be around some very smart people at the right times, I’ve not only learnt about design patterns, I’ve learnt why they are good and how/when to apply them when developing user interfaces.

    Sadly where I see the lack of application of “solid pattern knowledge and architectural principles” is not by professional JavaScript developers, so much as from “developers seasoned in other languages who’ve been dragged kicking and screaming” into the JavaScript space.

    They seem to forget everything good they have learnt – or maybe I’m just assuming they’ve learnt – and write spaghetti code, then call JavaScript ugly.

    Then when they are shown the real power of JavaScript, they complain it’s “too advanced”, “too complex” and/or “overkill” for whatever task. A lot of the time it’s because they don’t have a fundamental understanding of how JavaScript works “under the hood” – i.e. prototypical inheritance, scope, closures, DOM interactions/browser repaints, garbage collection, compilation, hoisting, etc, etc – as well as no understanding of how to develop user interfaces.

    The second point I believe is the most important, maybe it might not remain this way as JavaScript becomes more prominent on the server side, however, the language was created with the mindset of controlling and adding richness to browser based sites/applications, without a fundamental understanding of how to develop user interfaces, awesome JS-fu or not, you’re pretty much going to write some $hi+ code.

    At least this is what I have seen in the last 15′ish years.

    • Erik Reppen

      “They seem to forget everything good they have learnt – or maybe I’m just assuming they’ve learnt – and write spaghetti code, then call JavaScript ugly.”

      You can assume a lot of them haven’t learned much of anything beyond the bare minimum required to get to the degree. My favorite thing to do when somebody gripes about JS is ask them what other languages they’re comparing it to. They usually know one and it’s usually Java.

      JS is obscenely flexible, concise and powerful. If anything’s striking me as “hipster” nowadays it’s this phenomenon of being apologetic for its supposedly legion flaws. And FFS, Crockford’s given plenty to the community but he’s not a JS-God. Some of his JS-lint warnings are beyond over-opinionated. They’re downright silly. Prefer wild cards over negating character classes in regEx? Are you !@#$ing kidding me? Awesome performance advice there.

      Scheme to JS hackers like Dean Edwards don’t get their due for helping the community go a lot deeper with the language at a time when most of us were just starting to understand that yes, you were actually passing functions like they were any other type of data or object when setting event listeners or timeouts.

      Sure, I wouldn’t mind syntax closer to something like Python but at the end of the day I can drastically adapt to bad code, crummy libraries, and decade-long failures of a certain browser vendor to support the DOM API by wrapping and reducing cruft within my own architecture in ways languages without first-class functions that can be applied to any object context you want, simply can not.

      JS isn’t spreading fast because of the web. It’s spreading fast because it was the only language that could handle the web. Nothing normalizes and adapts as easily as a functional language can. Absolutely nothing. All other would-be client-side contenders fates were sealed when Eich decided to go with Scheme for inspiration.

  • Pingback: Joel Cochran » Weekly roundup 9/7/12

  • Adron Hall

    As I was reading this blog entry, which I might add is a great write up, I was going to throw a snarky comment of “Erlang is next…” but then you mentioned it, so it made it less snarky/funny. :)

    Overall, great write up, and glad it didn’t fall into the whiney “oh dear god do I have to learn JavaScript” blog entry realm. I’m sick of hearing people whine about it, just learn it, be polyglot, and smile when the language shift starts to happen again.

    • Jim Cowart

      Thanks for the kind words!

  • Don Dwoske

    Quote from Doug is at about 20:45 in the video.

  • DevelopIntelligence

    “Play with other languages, even if it’s just a side project (and maybe consider learning a statically typed language).”

    I think that’s a good idea no matter what your “favorite” language is. It can’t hurt to broaden your horizon a bit and learn at least a little about every language you can get your hands on. You never know when it might come in handy.