On Web Apps
on November 16, 2010 at 12:19 amI’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.
I think the sheer amount of options out there is a really good thing, with so many competing technologies it really pushes the envelope in terms of what is possible. The only down side is, as you mentioned, where you may invest time in a particular technology to find it is no longer used. This is where you have to be careful.
Personally I hand craft all my code opting for very minimalistic HTML with lots of CSS for positioning etc and use jQuery to add effects separately. jQuery and updated CSS support is making web development a dream now!
I’ve not done any web development for a very long time but it looks exciting again and probably something I should get back into at some point. I still think I’d learn the core low level technologies properly (HTML CSS JavaScript) and then learn a framework. After all if you understand the core underpinnings of the frameworks then moving between them as new ones arrive should be a lot easier.
I’m excited to see what web apps you come up with.