TL;DR:
When someone claims that engineers and developers aren't good product designers, no one should understand that better than the engineers and developers themselves. After all, much of the pain we experience in the course of doing our work comes from using tools written by our peers.
Full Post:
I've been fighting off the urge to start a new side-blog called "All Technology Is Terrible" to give me a firewalled space to vent about just how awful things are in the current state of web development. Since "Stark Raving Logic" was inspired by considering how bad most companies are at designing good technology for ordinary users, I didn't want to confuse the space by dropping a ton of programming jokes into the mix.
That said, I think this does dovetail for this blog since what most programmers complain about is essentially a species of user experience. Right now, it doesn't feel like there's One True Language for the web, but rather a Byzantine marketplace ringing with the cacophony of various pidgins, trade tongues, and imperial languages that must be employed in the course of doing business.
Without further ado, I submit the following list of complaints about the tradeoffs that come with some web development technologies I've encountered in the wild:
First we'll consider a couple of the powerful Actual Programming Languages that CS students bump into. Why not use a well-designed language I already know, right?
Java
Rapid prototyping in Java is like sprinting while tied to a water heater because you are literally dragging a half-ton of boiler plate with you wherever you go. Yes, it scales. Yes, it's performant. Yes, you spend as much time wiring things up as you do actually making your application do something. Now Oracle's in charge of the language, which has caused some friction with the FOSS arm of the community in the way that making Ghegis Khan the leader of a peace rally might cause some friction.
C++
On the server, it's fast, it's powerful, and debugging it can be like reaching into a running blender because you think you dropped a hair into your smoothie. It's native code running directly in system memory and you can seize the box up with a memory leak. As the old saying goes, C++ won't just let you shoot yourself in the foot, it'll hand you another clip. Most CS grads leave it behind when going into web programming because they can. Like with Java, you tend to mostly see this one crop up with enterprise-level projects for a reason.
What about a couple of other currated, vendor-driven solutions? Why not spend money to save time? That must be the ticket...
C#
Shamelessly steals some of the best ideas from C++ and Java to build a beautiful language for use on a web application server that will cost your company its entire IT budget to license from Microsoft. I'd love nothing better than for the Mono project to gain some steam, but I'm not betting my career on it.
ColdFusion
CFML and CFScript are the redheaded stepchildren of Adobe, a company that released Dreamweaver with a busted FTP client and left it on the market. The language had no IDE to call it's own until Adobe released a $300 plugin for Eclipse called CFBuilder that lacked real auto-complete or a syntax highlighting that wasn't easily confused. I'm sure they're going to keep doing a bang-up job, so go ahead and cut them a check for thousands and thousands of dollars for the server. If you want a free version, you can check out Railo or Open Blue Dragon and hope your code base is compatible (though Railo does actually look promising if you must).
Ok, well surely there's something new and shiny or old and reliable we could try instead. What about...
Ruby on Rails
I don't have enough experience here to weigh in, but the fact that there's a well known phrase floating around about how you'll be happy if you do things the "Rails way" should let you know that it's built for certain use cases more than others. Nothing wrong with that, but you might want to keep it in mind.
Node.js
is cancer. (Seriously.)
PHP
No debugger, thousands and thousands of keywords, the necessity for using a framework (yours or someone else's) to manage a web app of any significant size, objects (not really, well kinda, hold on)… Where do I sign up? PHP is like a set of server-side options that metastasized into a programming language. Your project will run fine on PHP if you use it for small things, but will need professional help to survive a heavy case of it.
The server looks like one set of tradeoffs after another. At least the native languages on the browser are all established and well-known. Let's see, there's...
HTML, I mean XHTML, hold on… HTML5
If ever there was a cautionary tale against creativity by committee, it should be the HTML5 spec. Some of it feels like semantic markup, some of it like container markup, big chunks are deprecated but still parse, and the exciting bits are unevenly implemented across the squabbling vendors' browsers. For example, HTML5's video and audio tags can parse the MP3 and MP4 files your authoring software export natively! …If you're using Webkit. Unless it's Google's version of Webkit. Mozilla, on the other hand, supports free codecs no one uses. (Urge to kill rising…)
CSS
Separating out the style aspects of the webpage into their own files allows for us to write and manage our content in one place, while using another set of files to style our page into a tangled morass of "Why is this div tag overflowing and breaking my design!?!" It was supposed to make everything simpler, but we ended up with a heavy declarative markup language that allows DOM elements to inherit properties and styles in a way that's not unlike how some children end up inheriting recessive traits that give them clubbed feet or sociopathic personalities. It acts on a set of nodes but is not itself expressed nodally, so there's little visual relationship between an HTML file and the CSS file that just gave it a pronounced stutter. Plus, you can always just tack something on the end of a stylesheet. Which never goes wrong. Ever.
JavaScript
Developed in Hell by murderers sent there for killing joy, JavaScript's feature set reads like a list of everything you generally want to avoid in language design. Global variables by default, unconventional behavior for common keywords, inconsistent references, inconsistent implicit casting between datatypes…
This list goes on and on, but most of the rough spots amount to the language flat-out lying to you. It's designed to be C-like, but only starts to behave itself if you tie your JavaScript into a set of functional knots to enforce a kind of ad-hoc variable scoping. I do believe Douglas Crockford deserves a warm round of applause for rescuing developers with his "Good Parts" approach, but seriously how damning is it that to use this piece-of-%&#$ language you have to reduce it to a subset and stretch it into a weird shape?
Yes, you can get real work done in JavaScript, but only in the same sense that you can use a rock and some screws to hang a sheet rock wall: the tool you're using isn't all that helpful and the results can be suspect.
What further proof do you need that JavaScript is awful than that everyone and their pet monkey is either trying to constrain it into a consistently usable library (jQuery, Dojo, YUI) or are trying to write their client-side dynamic code in better languages (CoffeeScript, GWT, Dart) that compile back down to it? Do people take the hint? Nope. Pride in knowing JavaScript is spreading like Communism across the developer community. As the saying goes, "When you're a hammer, everything looks like a nail"; JavaScript has even established some beachheads on the server side.
I recently attended a talk at Strange Loop where a very nice man who edited the ECMAScript 5 project modestly proposed we consider JavaScript the lingua franca of the web on tablets, phones, devices, and appliances in the coming "Post-PC" world of ambient computing.
I think I just threw up in my mouth.
Robert X. Cringely once quipped that:
If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.
I think it's closer to the truth that if the automobile had followed the computer's public development, we'd have cars that only mechanics knew how to drive.
Engineers and developers aren't good product designers, and no one should understand that better than the engineers and developers themselves. After all, much of the pain we experience in the course of doing our work comes from using tools written by our peers.