Sunday, November 30, 2008

Cloud Computing Chronicles: Stirring to Life


So I've been working on a software development project for a couple months now. Sporadically, but working on it nonetheless. I look at the changesets in my source control system (Subversion), and the dates go back to 9/4/2008.


The idea for the project started germinating with Google.  I have been developing software for more than a few years now, but the technologies I'm into these days aren't necessarily aligned with what Google is doing.  I use Google's products as part of my everyday life, of course.  I started using its search engine early in its lifecycle, and I couldn't help but notice the clever software that Google continually pumps out (I'm writing this post with Google Docs). But software development is a mammoth, fragmented industry.  For the last several years, I've been working with Microsoft technologies. Google... hasn't.


My path intersected with Google's, though, when one of my (day job) projects needed some basic mapping functionality.  At first we looked at some proprietary GIS (geographic information system) software, but decided to look at Google Maps as well.  Google's price was more attractive (essentially zero vs. big bucks), the interface was easier, and the feature set did all we needed.  The choice was not hard.


More intriguing was the level of community participation in Google Maps.  People have created everything from maps of historical journeys to step-by-step maps of red light districts.  I wondered if this was the way things were in the Google developer community.  Legions of citizens across the world, leveraging Google to unleash their imaginations.

I took a superficial look into the other APIs that Google offers -- data, YouTube, docs, etc. -- and thought it would be cool to create an application that could lead me into this world.  When I want to learn something in development, the only way to inject it into my bloodstream is to build an application with it.  Reading about a technology or writing sample code can only take me so far. I was ready to go, so I put the idea on the pile of other projects I'd like to do. My ratio of projects I'd like to do and projects I have time for is somewhere around 100:1.  So not much happened.


Engine roarin'


The concept gained some momentum with the release of Google App Engine.  Here came a service where Google would host your application right in its data centers.  What better place to work on Google's technologies?  Sounded like fun. The drawbacks to GAE, of course, are well-documented by commentators of all stripe.  Namely, you can only develop with the Python language, and there's a little matter of a non-relational database at the heart of the system.

But hey.  I was up for a challenge.  Development is both my vocation and my hobby.  The projects I do for my work are mainly out of my control -- they're what clients are willing to pay for.  But on my own time, the field is green. Building an application with GAE would put me in contact with all sorts of worlds I only knew superficially -- Python, Linux, Google APIs.  So I started working on it, as I found stray hours here and there.  I'll say more about my technical struggles learnings in other posts.

Wizard of Ozzie

Another piece fell into place when I attended Microsoft's Professional Developer Conference in late October, 2008.  One of the big technologies Microsoft was pushing was Azure, the cloud computing platform.  Ray Ozzie, Microsoft's Chief Software Architect, gave props to Amazon for blazing the trail of how cloud computing for the masses should work.  I'm sure he's right.  Amazon's EC2 (Elastic Cloud Computing) was the first behemoth out of the gate. From where I was sitting, though, the initiative looked a lot like Google App Engine. 

So now there was another angle: Microsoft was coming into the cloud computing game full-bore.  I could make my project into a narrative -- how the Microsoft and Google approaches stack up to each other, as I build an application.  But I'm also interested in seeing what the developer experience is like for other comparable offerings between Microsoft and Google.  For instance, Microsoft has Live Maps, which is remarkably similar to Google Maps.  Microsoft answers YouTube with MSN Video.  Microsoft is moving Office online, to compete in the space Google Docs occupies.


If you ask either company which has the better offering, you could probably predict the answer.  And that's generally who you have to rely on for in-depth answers about the details of technology. I would contend that the main difficulty of modern software development is not technical.  It is deciding from a seemingly infinite number of choices.  There are a finite number of problems in computer science, but they are generally complex problems.  And there are a lot of people/organizations who have thought up solutions.  If you're a developer, the stakes are high when you sit down to create a project and you choose a technology.  You can almost never predict where a project will take you.  You may end up finding out that the technology you chose is a dead end -- that it will not solve the problem.  By that time, you've probably lost a great deal of time and money.  So.  Doing this kind of exploratory development might help my technology bets be more accurate.

Underpromise and Overdeliver

Despite having made my living as a writer at various points in my life, and despite the fact I enjoy sharing experiences with other developers, I have yet to find the enthusiasm to write a technical blog.  I've had some fits and starts, as you can see for yourself by reading previous posts on this blog. Maybe the material from this project will give me the "hook" to get into it.  Or maybe this will be my last post.  Guess we'll just have to see.

But thanks for reading.