I’m currently ploughing my way through the Ruby on Rails documentation, trying to get used to thinking of applications in the server-client model rather than the far more familiar (to me) desktop model.

I really like the idea of web apps as a portable platform to do nearly anything you would want. I love the idea of being able to do work from any computer. I love the idea that if you are paying, then you are paying for service and/or data, not for the lame idea of owning a piece of software (because you never really own software). And I love the idea of being able to share work with other people with a single click- no need for installed software. Prezi is a an excellent example (you should check out their cheesy demonstration video if you haven’t seen them before).

I don’t have a problem with frameworks like Silverlight or Flash (or Java…)- I think that they can solve problems which would otherwise be very difficult to solve. However, I think that they should be a last resort, and in being a last resort they kind of become redundant, since the ubiquity of installations will drop and thus the idea of not relying on installed software fails if the user needs to download a framework.

Furthermore there are further problems with these frameworks since they are not open standards, it makes it hard for interoperability beyond the manufacturers intention. How long did we have to wait for a 64 bit Linux build of Flash? From my experiments, Moonlight (Silverlight Linux port by the Mono project) still has a way to go, and will always lag behind the latest version of Silverlight. There are rumours going around that Silverlight’s future may be in jeopardy, and we all know what Apple have in mind for Flash, so perhaps it is a bad idea to be investing our time as developers learning to use these frameworks when their control is out of our hands.

On the other hand, from what I have seen, developing web apps is incredibly messy. HTML, CSS and Javascript are the basic tools, and HTTP is the basic method of communication. It seems like anyone writing web applications front ends with just these tools must be crazy. What with browser incompatibilities, AJAX, and the horrific DOM specification, it seems very difficult to achieve anything of any significance using only these tools.

With the rise of MVC frameworks such as Rails, ASP.Net MVC and Cake there is a wealth of support for developing complex server side solutions with data layers bound to presentation layer content, and toolkits such as GWT and jQuery provide functionality to keep the evil aspects of DOM and AJAX at arms length. All this is great and the sheer amount of different frameworks and libraries available is incredible. This can only be good for web development as a whole.

I don’t believe in a silver bullet for web or any other type of development. Design is a hard problem which cannot be solved without being rigorously specified, in code or other formal method. However I do think it is possible to position ourselves as developers in a place where we can see the way in which all of the components in our system are working together, and go down the levels and see how each of them is working. Getting the right level of abstraction is the hard part of development, and that goes for development of frameworks as well.

Given the amount of work required to build really cool stuff using raw HTML + Javascript. I guess the problem for the developer is which framework to choose. No-one wants to spend time learning something only to find it deprecated after a single project. However, it seems that with web development, whether you like it or not, things will move on and you will find yourself constantly challenged to learn new technologies and libraries. You can choose to focus on learning one thing properly like the old school UNIX hackers prided themselves on, or you can keep Google and StackOverflow open at all times, set up unit tests and get to work. This can either scare you, or it can excite you.

In fact I think it can do a little bit of both. It can be hard to know where to start with all of it, but the great thing about the web is that you only need a text editor and a browser to get started.