I’ve been involved with the web pretty much since Trumpet Winsock (Thanks, Peter!) was the way to connect your PC to the net and mosaic was the way to browse this new things called ‘web pages’.
It didn’t take long before someone asked me if I could make some software using a technology called CGI to process the data typed in to a form by a user.
Since then a lot has changed. CSS, javascript, java, javascript, PHP, Perl, Python, Ruby and a whole pile of other technologies were still in the future at that point.
These have all become the tools of the trade with which we, the programmers build the websites that you use every day. Typically a website uses a number of technologies for every layer in the cake.
There will be a back-end which persists data using either SQL or some key/value store, there will be a bunch of business logic either implemented in stored procedures or coded up in some programming language. Then there is the ‘front-end’ code that creates the interface to the browser the user of the system uses to interact with the system, written in any one of an enormous variety of languages, sometimes more than one. Then there will more likely than not be a bunch of javascript that makes the user interface more like what you could have achieved if the program were downloadable instead of server side. And finally there is the CSS code that styles the HTML output by the server side code.
All in all an ungodly mess of languages and techniques to achieve what in the late 80’s would have been nothing special, the only difference is that you can now tap in to the power of the server farm on the other side from your mobile phone through the network connection. Essentially we’ve re-invented the smart terminal, only now it got so smart that you can send bits and pieces of software over the wire to accompany the content for interaction and rendering purposes.
I don’t know if any of you remember the concept of the ‘graphics terminal’, but in case you don’t, a graphics terminal was a device that would allow you to draw both text and graphics remotely. Typically you had a very limited choice of line drawn fonts and the resolution was terribly low (except for the high-end models, they’d cost as much or more than a new car) but they got the job done. Printed circuit board layout programs and CAD software running on mini computers typically used graphics terminals to present the user interface.
Browsers today are the graphics terminals from yesterday, only they require a much larger number of technologies to ‘drive’ them (and of course are much more powerful).
I think the current fragmentation of the ‘stack’ of technologies that is required to create a functioning website is counter-productive. We’ve gotten to the point where the demands placed on a web developer are such that it won’t be long before websites will be like movies. Already the number of techniques that you have to master to even be considered a player is on the edge of overwhelming small teams, let alone individuals. Given the budget of the average start-up and the number of things you need to do with that budget there is a limit to how many specialisations you can engage in to create a minimally viable product. A few more iterations of the wheels of technology and end-user expectations of what a website should do is going to be overwhelming for small players.
So we need to reduce the number of technologies required to build websites. Or at a minimum provide a framework where those technologies are still used but are addressed in a way that keeps the ugliness abstracted away. Personally while I’m impressed with the way that javascript has been used to create projects like jquery and the effects that can be achieved that way is absolutely horrible in the way all these components interact. It’s very messy, to put it mildly.
There has to be a better way to do all this, there has to be a way in which you could build a web application using only a single language that will hide all the gory implementation details, cross browser issues and so on. All you should really need is your ‘resources’ (graphical components, text and templates) and a server side program written in a single language.
As far as I’m aware there is one project on the road to doing this (http://noloh.com/)) but it isn’t open source (yet?). Are there other projects like that? Will you be the one to get us out of this mess? (I wouldn’t know where to start).