A couple of days ago, Google announced Go. Naming issues aside (apparently Go was the name of another programming language a few years back), I’ve been pondering the viability of yet another programming language. We already have a jillion of them. “Is Google making another one just because they are Google?”, I have asked myself…
The main points that they have emphasized for the new language, in no particular order:
- It compiles fast
- It has concurrency “built-in” (whatever that means.. I haven’t investigated how well they have implemented it.. )
- It is currently achieving 70-80% of the speed of natively compiled code
And, probably several other things that I’ve missed. The Go compiler is released under the BSD license, and Google has released it for several platforms, I would guess (and more to follow, inevitably).
After looking through the first bits of the tutorials, it has the rough appearance of being a pretty normal programming language, with a bunch of the syntax mish-mashed up, to make life more interesting for those of us that have touched a text editor and compiler in the last decade. Instead of saying
int name; you have to say things like
var name int; etc. It’s similar to C, but has intrinsic strings, no
while, and some other things. Google says that the lack of header files makes things easier (for their compiler, I’d reckon) and so on.
So, as I mentioned earlier, I’m asking myself, “Why?”. Ya, it compiles fast. That’s cool. Speeds up development a bit. Built in concurrency support is cool. But, geez.. Another language? Google had mentioned that it would work well as a server language. Doing stuff like web site server backends.. Things like that. Fine, so be it. But did we really need another language for this?
Google seemed to be really excited about the fast compiling. For me, that seemed… well.. a bit of a yawn. OK, to be sure. But extremely exciting?
Hopefully you can see at this point a fair amount of skepticism.
This morning I noticed an article that mentioned Chrome and Go Support in the headline. A lightbulb went off in my head, I put 2 and 2 together, and now I’m going go share it with you, if you care to read.
We all know that GOOG wants to rule the world, while Doing No Evil, of course. I think we have a perfect storm building here. A confluence of events that has been building for a few years now. And when you’ve got the resources that Google has, you can afford to do things and shove things into the mainstream that smaller companies just can’t do. Let’s look at a few events.
- A while after Chrome was released, we learned that Google was working on built in support for real 3d support in Chrome. “What the heck can that really be useful for?”, we asked ourselves. They had some cool tech demos of flying around an island. Yippee. yawn.
- We get the chromeexperiments. Cool. Impressive. Terribly fun to watch the balls drop and hit the lines causing the musical notes, as an example. Pretty amazing that they can accomplish that in a browser… Should we still call it a browser? Ya, that’s what it is……….
- Chrome has something in it called NaCL. Native CLient. Well, they are working on it, anyway. It allows a way for code to be run as though it were native. They are working on the security for it. They can’t allow you to get something off the web that will destroy your hard drive or anything. So they have to limit what can be done via the Native CLient.
That’s where are, intrepid readers. Now, let’s look at where we are going.
Does NaCL sound like anything I’ve mentioned? Do salt and coffee go together? Ya, I don’t think so either. Some might say that salt is more generally useful than coffee (caffeine-hounds aside).
Let me paint a picture for you. Let’s look into Google’s crystal ball. As we’ve already established, they want to rule the world, or at least your computer, while Doing No Evil. OK. Let’s get down to brass tacks.
Android may or may not play a role. I don’t think that Google is thinking quite ambitiously enough right now to assume that Android will take over the desktop anytime soon. However, they are working to make Chrome into the operating system. It’s the ideal platform for them. They are putting all of the pieces into place. It’s network aware (it’s a web-browser, after all), so the distribution mechanism for new software is a non issue. They’re building in 3d support. You want speed? I think that is where Go comes in. Let’s use Gmail as an example.
In a year or two (maybe less; not more), Chrome is going to have Go support and there will be a version of Gmail written in Go. Your user experience (and some behind the scenes activity) will go like this.
You will go to the Gmail website in Chrome. Source code for a Gmail client will be downloaded to your computer. Go can compile 120,000 lines of source code in less than 10 seconds on a laptop. I don’t know how big a Gmail client will be, but let’s say 120,000 lines. These 120,000 lines of source code get downloaded and compiled. (meanwhile, Chrome (or Go?) caches the version that you’ve downloaded so it won’t have to redownload or compile the next time you open your email).
That’s Gmail. You have the latest version of Modern Warfare 3 that you want to run? Take the exact same model. Chrome has 3d support built in. You go to the modern warfare website, the code is downloaded, and starts running. It asks for credit card info, you pay your $50 to buy the game, and then you play.
All of this is happening now via custom solutions, but Google is going to tie everything together. Why does a game developer want to deal with payments, patch distribution, changing 3d (software) landscapes, etc etc? If Google can provide a platform (operating system) that has all of the…. ahem… chrome….. needed to allow you to concentrate on telling the story that you want to tell, why would a developer want to waste time on everything else?
For the user, it’s pretty slick, too. You always get the latest version of software. If developers conform to the Chrome APIs, your software runs on any platform that Chrome runs on (currently Windows, with betas on Mac and Linux).
Is this perfect? Well, no. Lots of people like to have control over software that they buy. The model I’ve described (where I think we are headed) is truly software as a service. The website can cut off access at any time. (Kinda like the various App stores that exist now for mobile phones and gaming consoles)
Wow.. I tire of typing. I might add more to this later. I realize it isn’t perfectly thought out, but I’d still like to know your thoughts. You think this is where we are headed?