Brother, can you spare a pixel?

There is a lot of buzz these days about “Rich Internet Applications”. People are finally realizing that HTML is incapable of supporting a sophisticated user interface. AJAX is a reeking pile of hacks and cluges that offers only a glimpse of what could be possible with a halfway-intelligent browser platform. Many people are betting this platform will be Flash. Specifically Flash 9, Flex 2, and ActionScript 3. Maybe — but there is one dirty little secret no one is talking about: Flash is resolution-dependent. Continue reading “Brother, can you spare a pixel?”

No Ifs, Ands, or Buts

Long time no see. I have posted my latest OOPSLA submission.

At long last I feel like I am making progress again. I have been stuck on this problem for the last 9 months. The worst part is that people kept asking me “What are you working on?”, and I would say, “Well, I am trying to figure out how to do conditionals, and I am really stuck”. This produced funny looks. I mean, what kind of moron can’t figure out how to do conditionals? What could be hard about that? Well, I think I have finally figured out how to do conditionals.

The next paper will probably be about how to do loops. But first I need to do some honest coding…

Subtext on Rails

My recent proposal to work on modeling capabilities fell flat, but elicited some good discussion of future directions for Subtext. Peter Marks wrote:

… I would rather see a complete re-examination of what lies underneath the World Wide Web. And then take the Subtext approach of banishing syntax, treating program as data, history, etc. … This would mean initially abandoning the UI demo and focusing more on the development of a system/infrastructure that works with and within the Internet.

Macneil Shonle wrote:

I wonder what “Subtext on Rails” would look like?

Continue reading “Subtext on Rails”

Plan B

Subtext faces enormous obstacles to becoming an accepted programming language. It is still just a sketch, missing crucial pieces. But even as I slowly fill it out, I am encountering unyielding resistance. There is a great deal of skepticism about the whole idea of non-textual programming, due to the past failures of Visual Programming Languages. Overcoming that bad reputation will require proof that the UI and VM can scale to industrial-strength, and that there are unequivocal productivity benefits. I can’t do that alone, and it seems that I won’t get much help (particularly from the academic community) until I can first overcome the skepticism. Chicken and egg. Modern programming languages have dug a deep rut over the last 50 years, and dislodging them will not be easy. It will require finesse. Continue reading “Plan B”

First Class Copy & Paste

I have posted a draft of my latest OOPSLA submission: First Class Copy & Paste. As always, comments are welcome.

I apologize that this paper is so hard to read. It is very technical and formal, and all about internals, not the user interface. I felt that I needed to precisely define how Subtext works, both for myself, and for others who want to try to do something similar. A secondary goal was to document the idea of hypothetical computation that is in the demo. I also added a cool new idea: transactional concurrency. But few people will wade through the technicalities to get to that part. I probably should write a more accessible paper about hypotheticals and transactional concurrency.

The World Wide Dynabook

David Reed gave a keynote at OOPSLA about Croquet and TeaTime. Croquet is a re-imagining of Alan Kay’s seminal Dynabook vision, a vision which has influenced many aspects of modern computers and software. The Dynabook was a personal computing tool, while Croquet is envisioned to be a collaborative environment on the scale of the Web. I would call it “The World Wide Dynabook”. I applaud the grandness of the vision: reinventing how we interact with the internet, all the way from the end-user interface down to the network protocols and the programming language. I found the hints about their underlying architecture to be tantalizing, but unfortunately I got little more than hints, even after reading their publications. I will review what I have learnt so far. Continue reading “The World Wide Dynabook”

OOPSLA report

OOPSLA was great. I got a lot of positive comments and encouragement. It was quite heady to have established researchers, whose work I respect, introduce themselves and tell me that they liked my work. Perhaps a bit too heady: it wasn’t until the last day of the conference that I realized I should be using the opportunity to seek criticism and advice from the masters. Continue reading “OOPSLA report”

Now Playing

I have produced a Flash video of my upcoming OOPSLA presentation. It is divided into two parts, both about 15 minutes long. The first part recapitulates the previous video of building a factorial function. There are some new features, but if you already watched the older video, you can skip it without missing much. The second part demonstrates my new approach to I/O and mutable state.

I am excited about this development, not only because it addresses a big problem lacking good solutions, but also because it is going beyond “mere” usability issues. It has been easy up till now to dismiss my work as just repackaging standard language semantics into a different user interface. Now I am starting to show that fundamentally changing the way we represent programs can fundamentally change the way we think about them.

As always, please let me know what you think.

[10/24/05: updated the slides at the very end to match what I actually presented at OOPSLA]

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”

10K

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.

IDE Focusing

Here is a review of some research on managing the explosion of information in an IDE. Note that all of these are based on Eclipse, which appears to have become the dominant platform for IDE research.

Mylar is an experimental Eclipse plugin that tracks what program elements you are interested in, by watching your editing/browsing behavior. It alters the standard views such as the Package Explorer, Outline, and Type Hierarchy to focus in on what you have expressed interest in. Uninteresting things are filtered out, and the interest-level of the remaining things is indicated by different shades of highlighting. You can manually establish “landmarks” on program elements, which drive certain views to automatically display related elements, such as a type hierarchy filtered down to show only the inheritance structure of the landmarks.

Relo takes a different approach: instead of filtering the system down, it lets you build up a diagrammatic view of just the parts you are interested in as your explore.

JQuery lets you build a custom broswer by writting queries over your program. The results are shown in tree form, and you can expand any leaf with another sub-query, either custom or standard.