An ongoing series explaining why the programming language you love is, in fact, terrible
I wasn't going to write on of these for JavaScript. First, I basically like JavaScript, but it hardly seems fair to spare my favorites. Also, I am a programmer: I basically hate all programming languages to one degree or another. Second, this exists. I cannot embed the video, but that talk sums all of the very, very weird foibles of JavaScript, without even getting into things like default global scope. Go watch it. Its less than five minutes and makes fun of Ruby, a bonus. I will wait.
Back? As I said, I hate all programming languages, even the ones I like. And I hate them because all of them (well, at least all of the ones I am familiar with. I am only now learning some LISP, which its adherents promise me will have solve all of the worlds problems if just enough of us it and there are enough parenthesis to go around) have some flaw in them that makes using them harder than it should be. Not harder for a specific domain or problem set (though those are obviously an issue) but harder to work with, harder to understand, and harder maintain. While the decisions that the individual language authors likely made sense at the time, taken together, we have created a set of languages that are idiosyncratic in nature and don't seem to have similar logical underpinnings.
Programming isn't really an efficient process. Programmers can still spend a lot of time dealing with the idiosyncrasies of individual languages and modules, and building programs is as much an art as it is a process. That, of course, is what makes programming fun. But it is also part of what holds programming back. Programmers are artists that fight their tools, as if carpenters had hammers that occasionally tried to screw in the nail, or painters had brushes that would randomly change the paint color. Instead of focusing on the creativity and problem solving, a lot f time is spent figuring out why your typewriter has changed all the vowels to commas.
As silly and counterproductive as the languages war can be at their heart is a serious point: programming languages matter and, further, we don't really know how to build ones properly.Architects and painters have built amazing, incredible things standing on the shoulders of past generations and the tools they built. We are still figuring out how to build the tools the next generation of programmers will need. Until we move on from the stone axes, we aren't really going to be able to build our version of Starry Night.