If you wanted to mess about with “classes” and reusable components you were completely free to, but you had to build a system yourself. This gave programmers great flexibility to innovate and try out different models over time that evolved with the web as they weren’t locked into a rigid system of object-orientation or modularity. Many competing and incompatible frameworks like x.js, Moo, YUI, Prototype, jQuery and a zillion others popped into existence to fill in the gaps, with most large companies just making up their own. Eventually jQuery “won” the cross-browser compatibility layer competition and most everything in the browser uses that today.
Modularity. It’s great when you can encapsulate little bits of reusable functionality into packages that export only the public bits of your interface and declare their dependencies. Really makes it easy to develop serious software. Yep.
In all seriousness, all programming languages are roughly the same. A mistake many people make is falling into the trap of thinking that there are vast differences between languages and that they take years to master. Most common programming languages do pretty much the same things and are derived from C and have similar syntax and features, and they can be picked up in a week or two by someone who is an experienced developer. For some reason many people still ask “what language do you code in” or say “we need to hire some python people” or love to argue for hours about which programming language is best, which is an unsolvable question and just leads to religious wars.
That said, there ARE major differences between programming in different languages, but not because the languages themselves are hugely different. It’s much more about the problem you are trying to solve, the community you interact with and the quality of the libraries you are going to rely on to build something useful. These things can and do vary wildly. Python is a great general-purpose language with a friendly community, Ruby is probably a bit more web-focused but mostly the same. PHP is great for making web applications if you’re 12. C# is great for windows desktop applications. J is used by about 20 people in the whole world but is great for numeric applications. Java is not really good for writing software.
My previous open source experience was with the Perl community. It had a large number of highly competent, serious-minded, occasionally smelly geeks who cared about designing and engineering high-quality software.
Definitely one of the most important aspects of any language is the community because they are the ones building the software you rely on, answer your questions when you need help, and are responsible for maintaining code quality. So when I first gave node.js a try I decided to write an IRC ASCII art flooder bot, always a great way to get acquainted with any new language. One of the requirements for a good IRC bot is that you need to be able to bind to various addresses on a socket to change your source IP up, and the node-irc module was lacking in this capability. No problem thought I, I’ll just submit a pull request with my addition to allow specifying the bind address.
I guess I was used to the community of CPAN maintainers for Perl, where someone would review my patch and merge it in, or tell me they weren’t maintaining that module anymore and give me maintainership, or occasionally tell me to add tests or go fuck myself. Here I got silence. And then more silence. Then, following up two years later, I got a request to rebase it, since every single file in the project had been deleted. I guess someone thought it was cool to come along and delete all files, destroying all history and any hope of merging in the 40 or so outstanding pull requests, and then started a rewrite of the code, which they kinda gave up on halfway through. For some reason this had been accepted.
Instead I had to do some gnarly git incantations to copy a branch of the proper mainline back into master and remove the history of some random asshole shitting all over the module. Then we got things back on track. The guy who helped me with fixing everything was someone I recognized from CPAN, interestingly enough.