Deciding About AppEngine
In preparation for a training course I’m running next week, I spent the night learning and deploying my first Google AppEngine site. This is a reincarnation of Decide For Me replacing the Rails version which replaced the original PHP version.
The real intent of this admittedly simple web site is to provide an admittedly simple, but not overtly trival, web application which can be ported to other programming languages and web frameworks with relative ease. The goal then is to first learn and ultimately compare different web frameworks and languages on something slightly more complex than Hello World but not quite a pet shop. A competent web programmer should be able to port the whole application in a day or two, even if addressing completely new technology. With expertise on your side, implementing it in your favorite framework should take an afternoon.
At the moment, I have the Google AppEngine code available in subversion along with a dated and somewhat poor Rails implementation (it was one of my first forays). I don’t make any claims about the quality of code yet. I’m more interested in the learning process and the release early elements of this endeavour. Though I do hope to clean up the code over time, or find gracious volunteers to correct my mistakes.
Ideally, I’d like to do one port a month, but with my current schedule, even that is a bit aggressive. In any case, with each one port, I’ll try to also capture thoughts on what I learned. With that in mind, I’ll hopefully have a full report on Google AppEngine sometime next week. In the meantime, my first impressions are sketched out below:
Google AppEngine
I haven’t done any serious Python programming in years and even then I was never very skilled at Python, so I had to learn a bit about the language in addition to AppEngine. From start to finish, the project took around 12 hours, including going through the AppEngine tutorial and a brief detour into the Django tutorial.
Having only used Rails for webapps for a while now (two, three years?), going back to a framework with less magic was both refreshing and awkward. Refreshing in that there wasn’t any magic that needed to be learned, so I picked everything up quickly. Awkward in that one becomes quite used to the conventions in Rails and forgets about a lot of the little busy work that goes on in web programming. Of course, my decide-for-me application is intentionally simple, so this overhead is slight.
A lot as been said about the AppEngine datastore. I personally don’t like ORMs all that much. They’re prefect example of a leaky abstraction if you ask me. But in the case of AppEngine, we aren’t dealing with hiding a relational database behind the scenes, so the datastore model feels much more natural. There are some pieces that feel missing if you’re used to the relational style like JOIN queries or even an OR in your conditional WHERE statements. But I found I didn’t miss them much and by the end of the project I was starting to feel like I was getting the hang of the API.
Debugging was sometimes less than ideal, but that had more to do with my poor Python skills than AppEngine. Deployment was a breaze. Scarily simple.
All in all, I’m happy with the result. I want to try another using Django and stretch things a bit more. There are certainly issues due to limited python libraries and no background jobs. But I’m impressed enough to seriously consider using AppEngine for larger projects in the future.


