Comment Re: Ummmm.... (Score 1) 319
Agreed.
What gets forgotten in the debate is that Java is a reference implementation of all true OOP constructs:
Interface
Abstract Class
Class
Which when applied judiciously, allow u to do things like inversion of control, dependency injection and test driven development in a strongly-typed environment, and this strongly-typed nature, when properly embraced, makes it easier to write software which you can refactor as often as you desire with orders of magnitude less risk than with "fsck-all-typed" languages like ruby or JavaScript.
So, if your application does little more than pushing data into and reading data from some storage engine, then okay, JavaScript is an okay choice.
If your application is growing into having significant business logic, then JavaScript will turn into thousands of lines of spaghetti untraceable closure hell , whereby each refactoring attempt will almost certainly have catastrophic consequences in production down some obscure execution path in some anonymous callback function you couldn't be bothered unit testing because how the fsck do you write a unit test against that anonymous function?
There's not a concept of a Class in JavaScript. Sure you can mimmick inheritance patterns with prototypes with albeit some unintended consequences (hasOwnProperry) and encapsulated properties by having your closures reference variables from their enclosing context etc, but those techniques are what i call "expressively contrived"
Strongly-typed OOP languages have very-well established tried and true patterns for writing test-driven code
Ruby while not strongly typed, at least has a concept of Class/methods/inheritance/polymorphism . Problem with Ruby is as i am writing things TDD in it, the first half of my tests are there to ensure that my methods behave correctly when i pass them arguments of the wrong types, and my methods are littered with lines of code ensuring that my arguments have the expected properties. Totally retarded. And Ruby doesn't know anything about an Interface, but that's okay because it's got "fsck-all-typing" so it's not like you would even try to enforce modicums of contracts.
Anyway, as applications grow in complexity, building things TDD in strongly-typed OOP languages leads to more fun, and frequent refactoring which makes ur code more stable instead of more brittle.
I've written a crap ton of JS code. Java code too. And PHP. And a minimal amount of Ruby: I've appreciated their strengths. And drawbacks.
Feel free to learn the same thing I have the hard way: this panacea mentality to stacks is just one big circle jerk. If you think JS, in its current form, is the only true way to build web applications, then by all means, keep that head firmly planted in the sand while the rest of the World out innovates you with a blend of languages and platforms best-suited for their use-cases.