skip to main |
skip to sidebar
Lately, mainstream application programming has been steadily moving towards the web. Traditional desktop applications are being moved to the web. This gives me the terrifying feeling that one day we might become JavaScript programmers, breaking our heads writing script for some weird browser!
Read this article by Joel, http://www.joelonsoftware.com/items/2007/09/18.html
He says that history is repeating itself. In the early 1990s, Windows and Macintosh kind of standardized the UI and how applications interact with one other. And now as we are moving all applications to the web, and we will again need to standardize the UI on the web and how web applications interact with one other. Eg. We don't have a way to copy a photo from Picasaweb and pasting it in some other website.
I think that's why everyone is trying to create their own array of services so that it will be easy for them to create ways for the services to interact with one and other and give the user a consistent experience. Eg. Google has a common user account for all of google's services like Gmail, Orkut, Blogspot which does make life easier.
And for custom development, they release a JavaScript based API for web application developers to create their websites which can interact with that array of services. Eg. Google AJAX Search API
Joel says that the winner will be the company who can come up with a language and compiler which generates JavaScript for different browsers. Someday we will have features like copy/paste to move objects between different web applications like we do with the Windows clipboard! And JavaScript code will be in MBs!
Google wants to make the Internet the platform to deliver software services.
Before the advent of Internet, developing an operating system was the means to creating a platform to run software. The OS provided all the services a developer would need, right from disk services up to complex security services, all provided as APIs. The problem is that, nobody wants another operating system in the market. There are already enough operating systems as there are enough guys hitting on your girlfriend in the local bar.
The genius of Google is in identifying the Internet as a platform for services. And creating web APIs.
Google is building a rich set of APIs and services deployed on the Internet, because, it is not the platform which matters any more; it is the APIs for the developers and services for users, which matter. It doesn't matter if the user has a Windows or Linux or Mac; all that matters is that if he has a browser which can access various services, be it a Mail service or a Map service or a Weather service or a Game service.
Now that the Internet is truly ubiquitous, people are starting to innovate and come up novel ideas to everyday problems. Eg. If I were living in Chicago and would like to know which areas of Chicago are safe to travel, all I need to do is visit the site, http://www.chicagocrime.org. A creative developer has come up with the idea of mashing up google maps with the Chicago crime database. I can view the crime rates of all the areas within Chicago. So it is all limited to the creativity and business sense of oneself to provide solutions such as these.
I still don't understand the economics of creating web APIs and providing them free of cost. But that's an entirely different story, for another day.
In the broadest sense, LIVE software is centralized computing.
The necessity of for centralized computing to come back can be attributed to the new breed communication devices called 'smart clients', which are simply handheld devices with limited amount of CPU horse power and memory. Eg. our very own cellphones. Now equip your cellphone with a browser and an internet connection, and it can do a whole lot more things than just send and receive calls.
LIVE software is essentially running applications and holding data on the server so that a user can access them from anywhere, very much similar to our yahoo! mail or gmail. Now, just imagine the calculator application which comes along with Windows being a web application accessed through a browser.
Going a little further, imagine having winzip on the web, compressing/decompressing files on the server using the server's CPU and memory resources. Or imagine having winamp and your audio files on the internet and you listening to your playlist by streaming them to your handheld device. Now, that's something we all need.
And the roadblocks for realizing such an idea were mainly, 1) lack of a ubiquitous, reliable and fast communication infrastructure and 2) a programming technology which abstracts the stateless nature of internet applications. A solution to both these problems have been found, with the availability of high speed internet and technologies like AJAX breaking ground in providing a seamless user experience, one that mimics traditional desktop applications.
Going even further, imagine having all your applications and data on your personalized web pages(or rather, web desktop)... just with a handheld device + a projection keyboard + and a projector, all built-in... Now, that's what we call LIVE!!
I suspect the recent moves by IT giants like Google and Sun are hints to move the focus back onto centralized computing, where powerful servers provide service to dumb(or not so dumb) clients.
Sun is revamping it entire server line from scratch, introducing eight core processors like Ultrasparc T1. Google on the other side is creating services like map service which can be accessed programmatically, essentially creating web-based APIs. While Sun is working on the hardware aspects of centralized computing, Google seems to be working on creating a rich set of software services.
And quite recently, both Sun and Google have formed a strategic alliance.
Sun's software services are in pretty bad shape with shrinking market share. Sun's hardware too is quite in shambles. Sun is trying to recover and part of the plan is to revamp the hardware services entirely. Sun has long had the concept of a user subscribing for computing power just like how we subscribe for electricity or water. Now that's the essence of their future plans, I guess.
Google on the other hand has always remained in the software scheme of things. They started with a search engine which is a search service in programmatic terms. The obvious next step for them is to create more such services which can be accessible programmatically.
They both seem to be planning to promote the concept of centralized computing in a huge way. Probably they are building a part of the infrastructure and services before openly proclaiming their intentions.
It isn't hard to imagine a future where we are going to virtually have our applications installed and data stored at some place which you need not necessarily know. Just having a smart client device, we can connect to our applications and data and essentially do the same which we do with our PCs and laptops now.
I've always wished to have a single language for all my programming needs. And the LINQ project seems to fulfill that wish of mine!! It really separates the querying syntax from the data being queried. By doing so, we have a standard syntax for querying various data sources be it the file system, a SQL server or an in-memory object. Not just that, it also gives an object oriented approach to the data. And of course, you'll also have intellisense :-)
It is based on the idea that instead of dealing with a DataSet object containing a Customer table, we can directly talk with a Customer object which maps to the Customer table within a DataSet, which makes it very natural to program. In the longer run, I think it's gonna give ORM software a run for their money.
Watched a video of Anders explaining LINQ. He the whole LINQ project crystal clearly with code examples. Nice work.
I think we as developers are in a very exciting phase of technology where we have a really rich set of APIs available to give life to our imaginations. And most importantly we need not carry over the burden of older technologies. With the .NET framework, we start with a clean slate, and are truly in the realm of object-oriented programming.
I just love C# and the .NET framework. I see a lot of innovation and creativity. Really excited.
I thought I'll use my blog entirely for registering my thoughts on software, programming in general. It won't be a Joel On Software, but I'll give it my best :-)
During our college days, most of us started out programming with libraries. Eg. the C Standard libary or the Win32 library. By library we mean the main() function of the program is in control of the entire flow of the program. The main() function calls other functions in other libraries and gets the job done.
As time progressed software needed to be developed more faster and more efficiently without wasting time on tasks which provide plumbing. So, we needed to concentrate on the business logic of the application and abstract the redundant plumbing code.
Enter Frameworks.
Frameworks essentially provide skeletons/boiler plate applications. They have all the plumbing code minus the business logic. Eg. .NET framework, MFC etc. We only need to write code in places we need to customize, as per our business logic. By doing so, frameworks give tremendous productivity. In these days where hardware costs aren't a limiting factor, productivity is the key to the success of mainstream software development.