To admit the truth, I’ve been holding not to write on Dart for a while. After consuming lots of stuff online on this topic I couldn’t resist but to throw out my thoughts. So, what in the world is this new programming language called “Dart”? Why do we need another programming language with new syntax & semantics? What does dart do, others don’t?
OK, I’ll try to address these questions with my view points & analysis. Keep in mind, as Google put it, Dart’s language specification is still on its “early release” so, don’t be surprised if there is any significant change to Dart from now. There are lots of reviews(good & bad) on Dart available online. But, I’ll try to focus on only the points relevant to questions stated earlier.

Dart as described by its technical overview page – “It is a class-based programming language for creating structured web applications.”. There are two keywords to note here, class-based and structured web applications. You may know this already, Javascript is prototype-based, which is fundamentally different from class based languages like Java, Python, Ruby etc. What that means is, its very different in the way object orientedness/object hierarchies handled by the language. Whether you love or hate Javascript, you always get puzzled with its prototypic language nature and that adds so much to its peculiarity. Sometimes its a good thing and often times its not. So, a developer coming from a strong objected oriented programming language (like Java, Ruby, Python) background would always have a hard time working their way out using Javascript the way you normally do in class-based languages. The point is, Dart is trying to address that problem. You may ask now, why Dart? Isn’t GWT supposed to do all that already for you by masquerading JavaScript in the cover of Java? Yes, thats a very valid question. But, there is a difference. Trust me, I will try to address that in a short while.

Why do we need another language?

This is gonna be the hardest thing to sell. It almost feels like Google is so confident on their “moving the web forward” initiative and they kind of ready to loose some of their good old friends. This might sound political, but here is the truth. If you think of a website with some life on it (dynamism), it is most likely provided by JavaScript. Obviously, there are other things like Flash, Applets, Silverlight etc. But, they are much lesser in the grand scheme of “web” in general.
JavaScript has been a close friend to browsers all through its life. And suddenly, some new guy called “Dart” walking in and trying to share its life with some body else. It is really gonna be very tricky. Think of all the companies, tools, libraries, frameworks, resources, browsers who have already invested so much on JavaScript. It would either take them long time to welcome Dart or may be “not anytime” at all. So, only time can tell the truth.

What does Dart do & others dont?

This is probably a good selling point for Google. If you look at programming language or code developed for web application, they are either client side or server side. Even the code written for client side execution in PHP, Ruby, Python, Java etc. need to be translated to HTML/JavaScript/CSS to run in browsers. So, there is really not a very seamless way to write some common code and run both in client(Browser) and server side(Web Server). Yes, JavaScript can be made to run both in web server & browser. But, that is not a seamless process. Same thing would applies to Java also (like server side Java & Applets). Thats where, the concept of Dart VM kicks in. If you think of Dart VM existing in web servers (Apache, Nginx etc.) and in browsers (Chrome, Firefox etc.). The code you write can be deployed both client & server side. One of the major reason, I personally feel Google is pushing Dart forward is, they indirectly own majority of Web not just through Chrome browsers in Desktop but, also because of Chrome being in Android (Phone, Tablet, TV etc.). Obviously, Dart can very well be expanded to build native apps in Android OS and stuff.

If you compare Dart with GWT. I would say GWT can be considered as kind of a short-term goal for structured web application approach. Whereas, Dart can be called more of having a brand new programming language & approach itself for long term goal.

Will it win? Not sure :). Its gonna be very hard to speculate. Only thing I would say is, it will be yet another “expensive experiment” by Google in the world of sophisticated technology and innovation.

Update 11/11/11: Here is a posting from GWT blog on where GWT & Dart stand.

Alright, here is a major news from Google on HTML5. You may have heard about HTML5 based native speech recognition being added in Chrome version 11 recently. But, its surprising to see that feature is already available on Google search. I noticed this on my Chrome OS netbook version 12.0.742.22.

We know that voice search is available on Android platforms since long time. But, this is new because of Google trying to take the voice/speech input capability to Netbook/Desktop platforms.

So, Whats next? GMail through voice input? :)

Here is the screenshot of how it looks like…

Here is the voice search input in action…
video-2011-05-06-16-14-28

Cloud computing is one of the latest buzzword you keep hearing from pretty much everywhere. I have had numerous discussions on this with my colleagues & friends. I find that cloud computing is a very loose term and it can easily get mixed up with grid/clustered computing or highly-scalable multi-tiered systems. I am going to express my view points on what cloud computing is all about.

Image Courtesy: Mick Wiggins

Before I go further, the point I am trying to make out of this whole article is, we are just in the early stage of this computing paradigm shift. We don’t know how its gonna shape or what it will be called in another decade or so, but ultimately, the relative end point for this whole quest is what we call now, the “Cloud Computing”.

For the sake of this discussion, let’s talk some history here. As you might know, the whole computing system architecture started with big-sized machines like mainframes & mid-range systems. Those huge machines were accessed through terminal clients, emulators, consoles etc. Then, the biggest breakthrough/revolution was undoubtedly, moving towards personal & desktop systems. Obviously, we all know those systems got shrunk more & ended up in the form of laptops, tablets, smart phones etc. If you look at the evolution of computing paradigms, we didn’t start with networked computers. We had the room-sized machines connected only to few computers and then got expanded more & more in the form of LAN, WAN, Internet, Intranet, Extranet etc.

There is almost a parallel line running between the evolution of computing system architecture to the network system architecture and obviously they are also very much interconnected & intertwined. If you look at almost any computers/tablets/smartphones that exist today, there are two realms(lack of better terminology :)) we are dealing with. One is the Device & OS realm (which includes BIOS, Firmware, Kernel, OS etc.) and the other realm is “The Network”. I don’t know if you remember, back in the day Sun Microsystems(now its Oracle) came up with a revolutionary concept called JINI. And unfortunately, because of various limitations like software, hardware & network infrastructure, it didn’t go very far. In my opinion, the way I see is, “Cloud Computing” will/could be JINI done right. We weren’t ready for JINI at that time. But now, because of Moore’s law & stuff we are able to enter so called “Cloud Computing” era.

OK so, is everything running on Internet infrastructure be called cloud computing system? Well, not really. Why not? Isn’t the internet’s new fancy name is Cloud? :) Thats where the confusion starts. Unfortunately, there is no clear definition for cloud computing exists as of today. But, organizations like IEEE, W3C & others are working on standards & specifications which would shape up slowly and help us understand what cloud computing really is.

Alright, lets talk some layman language here. I don’t care about standards & stuff, how will you explain “cloud computing” to a non-techie person? If you switch on a computer/laptop/tablet etc., what really happens? The system get booted and OS (Linux/Windows XP/Android/iOS etc.) get started and it connects to the World Wide Web also known as Internet through wired/Wifi/3G/4G connection. Then, you open a web browser and log on to websites(like Facebook, GMail etc.) and work on web related stuffs(like checking emails, adding FB status updates etc.) So, there is a clear separation between my device and the internet I connected to. So metaphorically speaking, the gap between those will slowly get shortened as we move towards this whole cloud computing paradigm.

OK, What if I don’t like this constant connectivity? I don’t want to be connected to the Internet all the time. I’ll access/connect only when I need it. Do we have a choice? Here comes the “why” part of this discussion. We already reached a point that we pretty much cannot do anything with a desktop, laptop or smartphone without the network connection, which wasn’t the case like some years back or so. That kind of dependency is growing very faster, not only on personal computing devices and also on other consumer electronics & devices. I am not saying we won’t be able to drive cars without the internet connection. All I am suggesting is that the dependency will get more stronger. There are already cars in the market that can alert Facebook status updates while you are driving. Yes, it sounds ridiculous now. But, what will happen eventually is that those systems & services will mature more & get streamlined as we go forward.

There are two sides to this story. One is the service aspect of it. You can call it Software as a Service (SaaS), Platform as a Service (PaaS) or whatever you like. Bottom line is this. We all know Facebook, GMail, Twitter etc. have become a universal & ubiquitous aspect of life. It is accessed through desktop, smartphones and from every corner of the real physical world. So, the dependency factor on these services is always going to grow. The companies hosting those websites/portal/services should be able to accommodate this explosive growth. Their web service systems should be able to expand horizontally(applications, frameworks, API, SPI etc.) & vertically(hardware & network infrastructure). Some examples are Amazon EC2, Google App Engine, Cloud Foundry etc.

The other aspect of this story, which you don’t hear a lot is, the device/end-client side of it. As I said earlier, more & more devices will start depending on the cloud based infrastructure. The device client will start needing more processing cycles, which would be wiser to be done in the service infrastructure(which possess hardware/software elasticity) . So eventually, the client side processing will get shifted more towards the service infrastructure with the help of blasting or unlimited network speed. And, connecting to the network part will get more embedded into the device user is accessing from. What I mean by that is, it will reach deep into the OS/Kernel layer rather than just the application/browser level. Some of the examples I can think of here is, Chrome OS, Jolicloud etc.

My speculation or hope is, both the service & client/device type technological advances will be converging at some point in the future. And eventually, we will have one mega thing that we all are connected with. We don’t know what we will call but, it will be just ONE thing. If you want, you can call it a World Wide Computer for now :)

I haven’t really touched on pros & cons of cloud computing in this article, which I will try in my future articles. The point I was trying to make here is cloud computing is in it’s infancy. We are going towards that moving target. We have laid our foundations & platforms. They are shaping up slowly and getting matured. But, we are already seeing some realization of it.

Thoughts, comments?