Phil Pennock had this to say on Sunday:

Today I noticed that http://fastgood.cheap/ lets you select all three together as long as JavaScript is disabled. There’s a moral here.

Is there?

Phil is correct that if you disable JavaScript at that website, then all three of the buttons can be selected: fast, good, and cheap. If you start disabling pieces of a UI, you can expect that UI to misbehave in unexpected ways. If there’s a moral in that, it’s that if you fail to bring your tools to work, you’re going to have a hard time getting your job done.

What Phil means to convey though is that JavaScript is a hindrance to having all three things. Here’s my answer to that: it’s ok to criticize something when you have a better solution. Phil does not have a better solution. If Phil were tasked to create a UI in a web browser that had the functionality of this website, what language would he use? What languages could he use? There is only one language: JavaScript. Sure, he could write it in anything he wanted, technically, so long as he had a transpiler. But that transpiler would have to convert it to JavaScript.

Here’s where it gets even funnier. Let’s say that browsers could use languages other than JavaScript. If browsers could natively interpret Python or Ruby, would one of those be a better choice? The answer is no, because those languages are slower. Here’s what I replied to Phil:

It’s funny that you say that, because JavaScript has a faster dynamic language runtime than Perl, Python, Ruby, and PHP.

When Phil says that JavaScript is a hindrance to fast, good, and cheap, that’s the equivalent of saying this: “I’ve been doing some studying of industrial design, and, you know, the machinery that’s required to build a building is crazy. That machinery is heavy and overkill and uses a lot of fuel and really — with all that machinery it’s just impossible to have a building that’s fast, good, and cheap. So let’s just not build buildings any more.” It’s not possible to build a building that’s fast, good, and cheap. You can only pick two of those at most. That’s the whole point of the website. If there’s a moral here, as Phil insists, it’s that Phil hasn’t learned the wisdom of this simple website.

A friend once told me of a rural Texan who wore shorts and cowboy boots. He went into the local library, sat down at the computer, pulled up Google, and typed a bunch of random numbers and letters into the search box. When he saw there were zero search results, he pointed his finger at the computer and laughed, “Hah! I confused it.” When Phil disables JavaScript and pulls up a website and it doesn’t behave the way that he expects it to, it reminds me of this cowboy. You “confused” the system, Phil? Congratulations.

Lastly, I can’t help but sense a subtweet here as well, that goes something like this: a site is vulnerable because developers assume you’ve enabled JavaScript. Well, just look what happens when you don’t! It’s weak. The silliness of that is this: sure, you can “confuse” the system if you want, but when it comes to CRUD operations, the server is the gatekeeper, and so you can’t truly do anything harmful. All you can do is shoot yourself in the foot and mess up your own experience, and nobody cares about that — that’s your problem. Let’s say there’s a client-side validation on a registration form that makes sure you’ve entered a valid email address. If you disable JavaScript, that validation won’t run, and you might be able to submit the form with invalid data. But have you hacked the system? No. The server will do its own validation and throw an error. If that server is running NodeJS, then the server-side gatekeeping is also powered by JavaScript. Is JavaScript weak and vulnerable in that scenario? Not at all.

If Phil wants a fast, bad, cheap browsing experience, he can continue running his browser with JavaScript disabled, whilst virtue signaling the language’s perceived evils on Twitter, and enjoying the camaraderie of his smug friends who continue their double standard of enabling JavaScript because they want the good part of fast, good, and cheap.

Update: further discussion on Twitter has made it clear that Phil’s views of JavaScript are more sane than others in the community. Thanks for the clarification, Phil. Still, my argument stands for those who misconstrued Phil’s whimsical tweet into standing for something more than it is.