Wednesday, April 23, 2008

The Rise of Platform as a Service

I have some pretty exciting news. A couple of weeks ago, I wrote about moving beyond Assembly language web development, mentioning some of the new technologies playing in the Platform as a Service (PaaS) space. In particular, I wrote about Bungee Labs, who is doing some very exciting things to simplify development of highly-interactive web applications. Well, as it turns out, Bungee Labs and I both agreed that me working for them would be a good idea, and I am now employed by them.

First, the fine print: I am now an employee of Bungee Labs. However, this blog is mine, not Bungee Lab's. Therefore, anything I say on it is my own opinion and should never be taken as an official statement from Bungee Labs. Official statements from Bungee Lab can be found on our official Bungee Connect Developer Network blog.

The same day I received my employment offer at Bungee Labs, Google announced their App Engine beta. I have to admit, that set me back for a few minutes. Google is a huge player and not one that a small company can go head-to-head with and expect to win. I'm sure I'm not the only one who thought that, either.

However, the more I thought about it, the more I realized that this is actually a very good thing for Bungee Labs. How could the entry of the 800-pound gorilla into the PaaS space be a good thing for a small company like Bungee Labs? It is all about defining a market. As Eric Sink has pointed out many times, trying to go into a software market with no competition is incredibly challenging because you have to not only sell people that your solution is worth buying, but you also have to sell them that your solution solves a problem they really have. By having competition, you ensure that people already understand they have a problem, so you only have to worry about the first challenge (which is big enough as it is).

Google has now validated that Platform as a Service is a viable solution to the significant problem of building and managing the network infrastructure around an Internet business. Of course, Amazon's Infrastructure Services had already shown that. The thing that Google brings is the concept of building an application on top of somebody else's platform. That is what Bungee Labs has already been doing.

Obviously, if it were only about deploying an application on a grid managed by somebody else, Bungee Labs would be in trouble and I would still be at my last job. Google is taking care of the letting the market know that PaaS is truly a solution to a real problem they have; now Bungee Labs can focus on showing that we are the platform provider that makes most sense to use to solve that problem. That reduces the marketing overhead significantly and allows us to focus on technology to a greater extent.

In the near future, I'll give a new developer's perspective on the differences between Bungee Labs' and Google's development environments for their PaaS offerings. It is important to understand what you get and what you give up when choosing a PaaS provider.

After spending the last 18 months being several-to-many years behind the cutting-edge of web development, it is very nice to be back on the edge.

Monday, April 7, 2008

Technology, Education, and the Next Generation

I've always believed that kids are capable of way more than we give them credit for. Orson Scott Card explored this idea in Ender's Game. As I've watched my own kids grow, I've seen the depth of capability that hasn't been remotely tapped by current schooling.

When my son was four, he could name any dinosaur you pointed at, from the ever present Tyrannosaurus Rex and Apatasaurus to the much more obscure Compsagnathus and Troodon. His favorite was Deinonychus. His ability to soak up information on this topic was astounding to me. Lilly is astounding in her ability (and it is for real; my wife is good friends with her mom). And, if you are a software developer and want to be humbled, check out Dmitri Gaskin's Google Tech Talk. Dmitri is 12 years old and is a contributor to Drupal. I have no doubt in his ability to code JavaScript circles around me.

Robert Cringely explored the topic of the effects of technology and change on education in a series of posts recently. The gist being that what education means and the whole process of achieving an education is about the go through a major upheaval. Technology, change, and access to information are all combining to alter not just how we learn but what the end-result of learning is.

This is not news to anybody in a technology industry who is continually scrambling to keep up with the changes in their field. If I had left my education when I finished college in 1996, I don't know if I would even be employable today. I certainly wouldn't be doing anything interesting.

The thing that kids like Dmitri show is that the revolution in education is already taking place. The Internet has provided these kids with the access to information that allows them to reach into their own potential. Dmitri did not become competent enough to give a Google Tech Talk through his school learning. It was because he has a passion and the information is now available for him to follow that passion.

Kids like Dmitri are on the leading edge of this wave. A wave that will quickly show that knowing how to learn something will become the most valuable skill; the trained skill will become secondary. This, in my mind, is the most compelling aspect of Unschooling. When a child is interested in something, their potential is truly amazing. Unlocking that potential is something that our traditional educational institutions have not done very well. In my generation, it was very challenging for a kid to excel in spite of the system. Today, it is easy and becoming easier.

That doesn't mean that training will not be important. A doctor is still going to need a lot of training to become skilled at her profession. However, as the pace of change increases, the skill of being able to continue learning will differentiate the best doctors from the so-so doctors. Technology will help, but it will still require people to drive it. Of course, this is where Dmitri's, my son's, and Lilly's generation will have a serious advantage: knowing how to find information is something they will have grown up with.

For those of us who are guiding this generation, we need to be careful. Our own innate fears and prejudices about learning could serve as a stumbling block for those we are trying to help. Technology and information access have changed the educational landscape, and we need to understand and work within the new boundaries. For some of us, that will be easier than others. No matter what, though, it is going to change. And, just like learning a foreign language, if we aren't doing everything we can to become fluent, idomatic speakers, we will be left lacking understanding.

Thursday, April 3, 2008

Beyond Assembly Language Web Development

Many years ago, as I was finishing my last year of college (OK, maybe it wasn't that long ago ;), I worked for a game company...err...entertainment software company. I was hired in conjunction with two other junior programmers and handed a shiny, new, smoking-fast Pentium 120MHz computer, the best computer in the company.

At this time, PC games were written for DOS. There was little to no standardization between hardware drivers and getting little things like network game play working was a serious challenge. If you didn't have a SoundBlaster audio card, you likely would be hearing the game, either.

That same year, Microsoft released Windows 95 (OK, maybe it was that long ago...). Microsoft made a strategic decision that they wanted to be the best operating system to write games for, so they released the DirectDraw, DirectAudio, and DirectPlay APIs, to give developers a standard to write to, regardless of the underlying hardware.

With my spanking, new machine and the two other junior programmers, I was given the task of trying to port a DOS game (WWF Wrestlemania, if memory serves) to Windows and DirectX. The game had started life as an arcade game written completely in assembly (68000 processor, I believe). That assembly was converted to i386 assembly by a tool. Our job was to find the graphics hooks and replace them. In the end, we determined the combination of game (too much assembly to digest) and DirectX (immaturity, primarily) were too much and decided against the port.

Two years later, I was working for a company that produced 3D models for just about every purpose imaginable, from car commercials to major movies. We partnered with Microsoft, who was interested in models for the fairly new Direct3D API. At that time, I got to play around with the latest DirectX as well as attend a few game development conferences. The difference those two years had made was astounding. PC games were now exclusively built on DirectX and most work was done in higher level languages.

Aside from a nice stroll down memory lane, what is the point of this story? The point is that between around 1995 and 1998, the game industry made a significant switch out of its "assembly" days and into its "higher level" days. By assembly, I don't mean just coding in op-codes, but also needing to worry about the bare metal, the hardware underneath, from graphics and sound cards to network protocols. As it moved up to its higher level days, game developers, for the most part, were able to worry more about making a great game and not so much about the particular behavior of a piece of silicon.

I've been doing web development of some form or another since 1994. I've watched HTML grow and mature, I've seen tables turn into divs through CSS, and watched JavaScript make that which was static dance. At any given point, to build a significant web application, I have to be proficient in multiple languages and technologies, including HTML, CSS, JavaScript, XML, JSON, HTTP, PHP, JSP, Java, Python, and others. I have to understand the Web at what I consider the "assembly" level.

We are seeing tools like Intel's Mash Maker, JackBe's JackBuilder, Dapper, and others are making it easier to pull together various content sources. That's a start, but it still leaves the majority of the heavy lifting to be done at the assembly code level.

Thankfully, that is changing. One of the most interesting technologies I've seen in the past few years is in beta now. In my opinion, it takes us up above the assembly level for the first time on the Web. Instead of worrying about how to connect things, various pieces of the web are all parts of your object model. Connectivity with them is part of the platform.

Bungee Labs is providing a Platform-as-a-Service (PaaS) offering that is quite amazing in its ability to be both a general purpose framework as well as be a core integration technology. In the process, they've successfully abstracted the developer from the assembly code of the Web, just like Microsoft did for game developers a decade ago.

PaaS is still a fairly new concept. Perhaps the most notable example is Salesforce.com's Force.com, which provides an extension platform for Salesforce.com. Bungee Lab's offering is significantly more interesting, not just for its thoroughness, but also for its generality. Bungee Lab's WideLens calendar application is a great example of the flexibility and strength of the platform.

Anyway, moving on from my sales pitch here, the point being that we are at a very exciting time on the web. Cloud services, PaaS, and very smart people are taking us to a higher level of development on the web. That means we, as developers, will gain the benefits of being both more productive, building more business value, and of being able to build cooler apps.

Technology is cool!