I have been thinking about writing about this subject for a while. However, the posting by Jason Sales prompted me to actually write a blog entry.
When I started in computing there were no PCs, just mini computers and mainframes. The UI was mostly a green screen on a dumb terminal. As all the processing was actually being done on the main computer, you got very used to checking how many concurrent users were logged in to the system.
Eventually, the PCs came along and it was possible to build form based applications, some application processed data that was stored locally or on a mapped drive and some clients accessed data stored in a central database. However, now you no longer had to worry about how many users were logged in to the system as all the processing power was local. This meant you got used to providing the best interface for the user, all the power was local so you did not have to worry about other users. I got very used to building forms based applications and the design metaphor used by RAD tools such as VB made the task very simple, some people would say too simple especially if you look at some of the code produced.
This gave way to the Internet and the ability to build applications that ran on a server and provided an interface to the user within the browser. In some ways it was like going back to the world of the green screen dumb terminal apart from this time it was more colourful. Like the world of the mini computers you had to worry about how many concurrent users were using your web application. I remember having conversations around that time with people asking me what is a concurrent user and why it was important. If you came to computing during the windows form phase, you had no experience to look back on from the mini and mainframe phase of computing.
Interestingly enough, people who came to computing during the "Internet age", tend to have started computing by building web interfaces.They have no experience of building windows applications. However, I have also seen the down side of people not having experience of the mini/mainframe period as they do not always think of the number of concurrent users. However, in many ways they are programming mini/mainframe applications but without the security of owning the connection. However, I think with web applications we sacrifice ease of use and gain location independence.
I suppose it still find it much easier for me to sit down and put together a rich client app than it is to put together a web application. I feel that I have freedom with a rich client app and that I am restricted writing a web application. However, I tend to build my components first which means I can decide later stage which presentation layer to use.
In conclusion, I think whether you are happier building web applications or rich client application is largely influenced by when you entered the computing industry. However, what worries me is that some of the lessons of windows forms development have not been learned. There are still loads of web applicatons out there which have all there business and datalayer code built right into the web forms. That is certainly true of PHP, ASP and probably a lot of JSP.
The most expensive part of any project is maintaince. You think everything is working well and suddenly you get a phone call and you need to resolve a bug in the application. The trouble is the application was written with an earlier version of the .net framework, for example v1.0 but you using Visual Studio 2005. This means you can open the project but if you compile it using Visual Studio you can only compile against the latest version of the framework which in this case is version 2.0. Which means the small change in the code might end up meaning you also have to distribute the v2 framework. The same problem exists with Visual Studio 2003 which can only compile applications to run on top v1.1 of the .Net framework.
Over the weekend I had some spare time, so I thought I wonder if you can use the Mozilla rendering engine(Gecko) within a .Net application as easily as you can IE ? This could be important in areas where people have concerns about using IE. It turns out it is as simple as a download, add COM component to the toolbar and if required adding a reference to the project. Even the intereface has been modelled on the IE model to make it simple to use. It is of cause unmanaged code but it works.
I am using the excellent Sourcegear Vault product for version control and I was surprised that it would not work after I installed the Visual Studio Express beta products. The database seemed to be ok but I would get an error message if I tried to connect the Valut client or admin applications. It was strange as everything looked ok but it just would not function.
The problem turned out to be very simple, which you install the vs express betas they change the framework version for all you existing ASP.NET applications. Of course Vault has a web services interface and now that Framework version for that ASP.NET application is incorrectly set to v2 rather than v1.1.
The solution is simple open up the Internet Services Manager and change the ASP.Net version for "VaultService" and "VaultShadowFolder". This can be done by right clicking on the web application in the tree view, selecting properties and the ASP.NET tab.
VS team place maintain the ASP.NET version information for all existing web applications and only set it to v2 for new web applications. That way existing applications continue to work.