I've been watching some great videos over at Yahoo's YUI Theater and have especially enjoyed ones about JavaScript and Ajax by Douglas Crockford (a JavaScript architect at Yahoo). Listening to his talks, I've come to respect JavaScript more. As a programming language, it has a very interesting history, and although it has many deficiences, it's actually a very powerful, expressive, and in many ways innovative language. [more]It supports some interesting programmatic constructs: objects are associate arrays (obj.x = 10 and obj["x"] = 10 are equivalent, it uses prototypal inheritance (instead of inheriting from classes, objects just inherit from other objects), and functions are first class (meaning functions are objects and can be acted on just as regular objects - a very Lisp-like idea - JavaScript is probably the only mainstream language that supports this). JavaScript was partially designed to be lightweight, script version of Java hosted in a web browser (initally Netscape Navigator), and yet today it is better than Java in applications that Java was originally intended for.

However, JavaScript does have many problems. Weak typing can be a turn-off for programmers familiar with more traditional, strongly-typed languages. JavaScript's runtime is the web browser, and differences in browsers has caused havoc over the language's history. Pile on top of that design errors in the language, a poor official standard by ECMA, and inferior development environments, and you can see why many "serious" programmers might be hesitant to work with it. In fact, there has been a lot of effort to insulate developers from JavaScript (take the Google Web Toolkit's strategy [Java to JavaScript] or Microsoft's Volta [.Net to JavaScript] as examples - there are many others as well). I like a comment I heard recently in an interview with Erik Meijer (one of Volta's principal architects), in which he said something like, "We're viewing JavaScript as a nice, cross browser, cross platform runtime. It's a good runtime, but you don't want to work with JavaScript as a language."