Most web applications use something like five languages. One of these is a big programming language, like Java or PHP, running on a server, and the other four are HTML, CSS, Javascript, and SQL.

SQL and HTML are “declarative”: they let you state what you want, and the browser (for HTML) or database (for SQL) has to decide how to cook it up for you. This makes them easy languages for people to grasp; it also ensures that the browser and database server will be exceptionally large and complex pieces of software. (And apparently programmers are never really satisfied with declarative languages, so database servers grew stored procedures and browsers got Javascript.) CSS is a “little language,” a vocabulary for design, more lexicon than grammar. Over the last ten years, a lot of presentation code has moved out of HTML into CSS, while today’s HTML is full of DOM signposts (”id” attributes and “div” tags) that didn’t used to be there.

The full-fledged language at the center of a web app — maybe PHP, Java, or Ruby — is the one language in the bunch that is well-suited for a large software engineering project. Ironically, with AJAX, the user interface on the browser gets better, but the role of this central language in the whole scheme of the application gets smaller and smaller.

Web apps still aren’t as good as desktop apps. They are tooday’s dominant software platform (or at least the one with the most momentum.) People are throwing out perfectly good CRM systems so they can pay per-employee, per-month, for Salesforce.com — which, on it’s own part, sees some big advantages: nobody there has to press CDs, help customers install the software, or worry about people who run old versions and refuse to upgrade. These advantages are all fortunate side effects of the design of the Web, but they are not fundamental to it. The World Wide Web was intended to be a big network of hyperlinked global public information. If it also revolutionized the distribution of data-driven business software, that’s just an afterthought. Out of all those languages, only HTML was in the original plan.

If, today, you really set out to create an internet application framework on top of HTTP, would you build it around a hodgepodge of dissimilar interpreted languages? As web UIs get better, can’t you imagine that the web development stack will get even messier? Netfrastruture — Jim Starkey’s last project, which MySQL AB now owns — was an interesting experiment in simplifying the server side of web apps. Maybe the rest of the stack can be cleaned up some, too.