It's some time now that I'm wondering whether I should spend the time required to get acquainted with Javascript. So, this post is a pseudo-random dump of arguments for and against this idea.

For: I'll be able to tweak my blog's various plugins that use Javascript. Most of them do, and when I want to customize them to my needs, I often find myself stumped because of my almost complete lack of understanding of what's going on. It's not the language itself (which is simple), but rather the whole DOM / AJAX / events idea that I simply have to learn about.

Against: As the argument above hints, to learn JS is not just to learn the language. The language is C-like and relatively simple, it seems. The problem is with all the mountain of frameworks, concepts and libraries that must be learned. To be really good in JS, one has to understand DOM, events, AJAX, connection with server-side code (PHP), common libraries (JQuery, Prototype), CSS and much, much more. Oh, and don't get me started on learning all the quircks of the various browsers, all of which seem to understand JS a bit differently.

Stevey says here that application programming is often harder than systems programming. Here's a more detailed discussion of the topic. I agree. The problem is - you have to learn so much frameworks and libraries to be proficient in something, that the application level starts looking hard.

For: But JS is really cool! It is, really. Recently I realized that some of the applications I'm writing at home would be most usable as web applications. But for that, one has to construct a usable front-end in the browser, and for this knowledge of JS is required. JS these days is the canonical way to build in-browser "GUIs" to web applications, and knowing it is essential for constructing usable tools.

Against: I'm usually trying to direct my learning efforts to directions that would benefit my work. But JS has absolutely nothing to do with what I do at work (the technical aspects of which are either FPGA coding in VHDL, low-level C for micro-controllers or Python scripts for everything PC-based).

Against: I know myself. I can't learn something just a little. If I start, I'll invest a lot of time into this. I'll learn the language itself, the browser DOM model, AJAX, connection to server side scripting, debugging, compression, some of the popular libraries like JQuery. It will take a long time, and I have to think what other spare-time hacking activities will get less attention.