The Currency of Development

One of the anonymous reviewers of my OOPSLA paper made the point, paraphrasing, that the main problem in software development is not the difficulty of programming, but the difficulty of getting a development project to function effectively. This is usually seen as the subject of methodology, with “extreme” and “agile” methods being the latest trends. My initial reaction to this criticism was to point to the example of spreadsheets, which make a certain class of problems simple enough to be solved by an end-user or power-user themselves, without enduring the trials and tribulations of a professionally staffed development project. Even on such multi-person projects, reducing the programming effort ought to reduce the size of the team and the number of interactions subject to error. However the fundamental point of the criticism remains true: the biggest problem in software development is teamwork. It has occurred to me that the design philosophy of Subtext can contribute to solving this problem. Continue reading “The Currency of Development”


My little screencast has now gotten over ten thousand hits. Amazing. It seems there is a large pent-up desire for a better way to program. I have gotten lots of positive feedback, much of it endorsing not so much the particulars of Subtext as that I am making an attempt to improve things. Thanks to everyone.

I have also triggered some fairly negative reactions. I take this response also as a positive sign, that my work is threatening enough to warrant a backlash. I have written an FAQ to answer some of the recurrent criticisms.

This might be a good time for a progress update on Subtext. I have decided to change direction somewhat. I was previously working on “getting factorial right” with new representations for conditionals, iteration, and higher-order functions, as described in the Future Work section of my OOPSLA submission. I now think I should shelve that and instead face the issue of I/O and mutable state. This nasty problem has been the bane of much programming language research, particularly leaving functional languages tied up in knots. It could be the critical issue that makes or breaks Subtext. My new goal is to show how to build a GUI in Subtext, and to do so while maintaining the principles of WYSIWYG and the unification of edit-time with run-time, just as with factorial. I haven’t figured out all the details yet, but if I can pull it off it would make an eye-opening demo, and also make Subtext dramatically more realistic and relevant.

No Assembly Required

Building a toy for my children suggested an analogy with programming. Many toys come knocked down, requiring assembly, with instructions of the form “insert peg A into hole A, slide tab B into slot B, …”. This is just like the way we use names in programming languages, indicating parts that need to be attached by labelling them with the same name. The function call A is to be attached to the function definition A. Programming with names is like creating a program as a big pile of pieces with labels attached, and leaving it to the compiler/interpreter to assemble the pieces into something that works. Textual programs are knocked down.

The problem is that this approach boggles the mind when used with thousands or even millions of pieces. Modern IDE’s like Eclipse strive valiantly to help us imagine how things will plug together, but this is an impossible task. Even my kids know that all the King’s horses and all the King’s men can’t put Humpty together again.

The goal of Subtext is to fabricate programs as working wholes. No assembly required.