| I hear you. I have extensions to your points and disagree here or there but, in general, all your points come down to the same thing: the developer toolchain for JS really frickin' sucks. Web development is a pain. Web developers have to deal with at least five separate technologies to get anything non-trivial to show up on the page. HTML, CSS, JS, server-side language, persistent store. Each one brings its own config languages or preprocessors, maybe some kind of build system, and, of course, mo' tech mo' problems as they say. (An aside: I think select2, specifically, is really beautiful and an absolute pain to actually use with any other framework in real usage) There's some truth to the argument that JS development is merrily rediscovering development methodologies pioneered decades ago: 1. "Yay! With RequireJS I can do real dependency management!"
2. "Did you see that article on how to do conditional breakpoints in Chrome dev tools?"
3. "Using type annotations in the Closure Compiler let you add some kind of type checking!" All that said, it is getting better: 1. Always use a linter. JSLint if you wanna cry, JSHint otherwise.
2. Callback spaghetti in JS is equivalent, in my mind, to cryptic one-line pointer arithmetic in C/C++. It's a symptom not of the language itself but of the programmer's hostility to future maintenance.
3. Declarative widget-y tech is the future of web front-ends: between AngularJS directives and the evolving Shadow DOM specification (to name two), we're moving in the re-usable component direction. We're never going to throw out JS. Ever. Every browser vendor would have to simultaneously switch to some staggeringly amazing technology all at once as well as convert all the old browsers as well. It's not going to happen. JavaScript, if measured by installed runtimes, is the most popular, wide-spread language on the planet. Count the devices in your home that can run JS. That's its true strength, I think. |