HyperDev, HyperCard and a Small Matter of Programming
HyperDev (now out of beta and renamed GoMix) is a new web development product from Fog Creek, and it looks very promising. It aims to remove the friction from creating a web application by getting rid of all the incidental complexity usually associated with development. To quote from Joel’s introductory post:
Step one. You go to hyperdev.com.
Boom. Your new website is already running. You have your own private virtual machine (well, really it’s a container but you don’t have to care about that or know what that means) running on the internet at its own, custom URL which you can already give people and they can already go to it and see the simple code we started you out with.
All that happened just because you went to hyperdev.com.
Notice what you DIDN’T do.
- You didn’t make an account.
- You didn’t use Git. Or any version control, really.
- You didn’t deal with name servers.
- You didn’t sign up with a hosting provider.
- You didn’t provision a server.
- You didn’t install an operating system or a LAMP stack or Node or operating systems or anything.
- You didn’t configure the server.
- You didn’t figure out how to integrate and deploy your code.
This is a big deal. If you’ve been programming for a while, you cease to notice the rituals and rain dances required to get things working. You build up mental callouses, and after a while forget that the accidental complexity is even there. To someone just getting started, this is a major impediment1. HyperDev shows that it’s an unnecessary one.
Crucially, HyperDev isn’t a toy environment, a sandbox for learning the basics. It produces real applications, running on a real platform2. You can take what you’ve created, deploy it elsewhere, and expand it on any way you choose. This turns it from a dead end into a launch pad.
All this makes it interesting as a platform for end user development — allowing users who aren’t developers, and don’t necessarily want to be, to use web technology to solve their own problems. However, while they’ve removed most of the rough edges, one thing remains that makes it less than perfect for this use case: programming itself.
Consider two end-user development systems (perhaps the only two) that have seen widespread success: HyperCard3 and Excel4. Both are notable in that you can start using them interactively and directly, and immediately get value from them without programming at all. Excel is a useful tool even if you just type figures into a grid and make charts. Not everyone needs to bother with formulae, and even fewer with Visual Basic, but those facilities are there as and when you need them. Similarly, HyperCard allows you to start with a simple graphical editor, and move on to links and then scripts.
In the case of Excel, the overall architecture is geared towards the simple case, and it shows the strain when pushed into more complex use. HyperCard was had a better model in this regard, but the vagaries of the market meant it never got a chance to keep pace with changes in the technology landscape. HyperDev’s story for progression is stronger than either, at the expense of missing out the first step.
In summary, HyperDev does a fantastic job of removing unnecessary friction from traditional development. It’s shaping up to be a useful tool in its own right, and it also acts as an existence proof to make us reexamine the assumptions embedded in our existing environments. In terms of empowering end users to solve their own problems, though, there’s still more to explore.
The title of this post is a reference to A Small Matter of Programming, by Bonnie Nardi, a great book covering the motivation and theory behind end-user programming.
Some regard this as a badge of honour, a shibboleth, a bouncer on the door keeping out the riffraff, and see it as a good thing. It isn’t. [back]
I assume that the name “HyperDev” is a nod in this direction. [back]
Fog Creek founder Joel Spolsky worked on Excel when at Microsoft; I’d be interested to hear how his experiences there shaped the development of HyperDev. [back]