Code that Writes Code
Lately, I’ve heard a lot about frighteningly ambitious startup ideas. Well, here’s one idea: code that writes code.
Today, humans write most computer programs. If you think of a program as a specification (or a proof1), then we fill in its internals. That’s great for developers, but it’s not economically efficient. Human brains are expensive. To the degree that you can limit human agency, without sacrificing software quality, you can create enormous value.
Limiting human agency sounds bad — think Skynet — but it has actually been happening for some time. Consider the existence of two common abstractions: highly opinionated web-frameworks and high-level programming languages. Each of these tools removes a degree of freedom from the human programmer, yet increases productivity.
It’s all about leverage. You sacrifice some control when you switch from Assembly to Python, but in exchange you get to work at a higher level of abstraction, and you can write powerful programs more quickly. Likewise, when you use Ruby on Rails, you trade expressiveness for the convenience of a domain specific language and quicker web development. So although you decrease your freedom when you work at a higher level of abstraction, that’s usually a good thing.
Now let’s get even more abstract. After all, I’m not proposing that someone develop a new programming language or web framework (although these are great things do do). Rather, I think that soon it will be possible to automate some kinds of software development, at the level of program specifications. Perhaps that sounds confusing, so let’s call this specific idea a Magic Compiler.
Give the Magic Compiler a set of specifications, and it will spit out a complete program. Pretty abstract, right? Although this sounds crazy, more than a few people have already begun building tools along these lines. Particularly when you start automating at the level of function-building or bug-fixing2, things start to become quite tractable.
I’ll delve into the practicalities of this idea in a later post. The Magic Compiler isn’t really magic — it just looks like it.
See the Curry–Howard correspondence. ↩
Our group at the UVA and UNM fixed many bugs automatically. ↩