On today, this day of endless blogging / talking (and hopefully downloading) of Google Chrome, I thought I’d go retro and write about my renewed hunt for the 4GL. But first, a little context on how this came about.
This summer I spent some time playing around with Google AppEngine to try and understand it better. It didn’t take long before I realized I needed to really understand how to program in Python to do anything. So I spent some time reading about Python and ultimately realized that if I wanted to make any progress, I needed to spend a chunk of time actually learning Python. Fortunately, I found a nice MIT course titled 6.00. I took the equivalent (6.001) in 1984 when it was taught using Scheme; now it uses Python. Oh goody – I can re-live my 18-year old student self if I want.
As I started digging around in Python, I instinctively compared it to the languages we used at my first company, Feld Technologies. We wrote business applications in the late 1980’s and early 1990’s and our language of choice was Clarion. We also wrote one large system using DataFlex and one with Oracle7, did plenty of work with dBase and FoxPro, ultimately adopted Microsoft Access as our 4GL of choice, struggled through some stuff on the Mac with 4th Dimension, and explored doing things with PowerBuilder right at the time that we sold the company. Some of these applications (including some of the larger ones) are still being used.
When I was playing with Google AppEngine, I kept waiting for the 4GL "aha moment." That’s the moment I had using Clarion, DataFlex, Access, and even FoxPro where I realized how easy it was to do certain things. That moment never came during my exploration of Google AppEngine – the deeper I got, the more confused I got.
My plan for Google AppEngine was to write a very simply application to help me manage my art collection. I’ve searched long and hard for a web based application to do this – the closest I’ve come is a program called Yallery written by a local friend Jennifer Ross. Yallery is very cool and does a lot of things that I’d want to do, but like most applications it misses on a handful of very specific things I want, while adding lots of things I don’t want. So – when AppEngine came out, I thought writing a simple art collection management system (ACMS) would be a great way to solve two problems: (1) really learn how AppEngine works and (2) get my little ACMS up and running exactly the way I wanted.
Like all good software developers, I sketched out a quick design. Like 99% of the software I’ve written in the past, the application is table driven – there is a simple data structure underlying all of the various screens that I’d want. I’d use the app via a few different modalities which would be accessed through a simple menu. The screens, menu, and underlying database describe 80% of the application; the final 20% is something any run of the mill report writer should be able to handle.
The optimal time to do this was when I was in Alaska in July. I try to take on a few new things each summer "to learn" and this seemed like a perfect one. I carved out some two hour chunks and went after it. However, two days in and I was completely lost. It was clear that whatever construct I had in my head about what I needed to do didn’t map in any way to how I needed to do it in AppEngine.
Now, some of it may be me. I stopped programming around the time that people were making the shift from procedural programming to object oriented programming. C was the language of my day; not C++. The idea of "Object Basic" or "Object Pascal" was amusing. So – I’ve always struggled a little with object / method syntax. Oh – and at my core there are two languages that have influenced me the most – Basic and Scheme – which probably explains all of my weird programming predilections.
But something just seemed wrong to me. Clearly AppEngine wasn’t the right tool to build my ACMS in. But, I didn’t really know what the right tool was. I know what I want – something like Clarion that works in a web-browser world. Something that provides all the magic Ajax UI goodies for me without me having to really do anything other than specify what I want the screens to look like. Something that knows how to bind data fields to the screens and then to a table to a database and allow me to do all kinds of data entry, sorting, and reporting on them. Something that completely isolates error handling for me so I don’t have to think about it. As I worked through my list of "wants" I realized I was defining what a 4GL does.
I know that there are some companies working on this. In an attempt to be trendy, this is now called PaaS (Platform-as-a-Service). But it’s really the reincarnation of the 4GL. And I’m not sure I really want a PaaS – I think I just want a 4GL that works with today’s web-based environment.