When I was visiting MPI-M earlier this month, I blogged about the difficulty of documenting climate models. The problem is particularly pertinent to questions of model validity and reproducibility, because the code itself is the result of a series of methodological choices by the climate scientists, which are entrenched in their design choices, and eventually become inscrutable. And when the code gets old, we lose access to these decisions. I suggested we need a kind of literate programming, which sprinkles the code among the relevant human representations (typically bits of physics, formulas, numerical algorithms, published papers), so that the emphasis is on explaining what the code does, rather than preparing it for a compiler to digest.

The problem with literate programming (at least in the way it was conceived) is that it requires programmers to give up using the program code as their organising principle, and maybe to give up traditional programming languages altogether. But there’s a much simpler way to achieve the same effect. It’s to provide an organising structure for existing programming languages and tools, but which mixes in non-code objects in an intuitive way. Imagine you had an infinitely large sheet of paper, and could zoom in and out, and scroll in any direction. Your chunks of code are laid out on the paper, in an spatial arrangement that means something to you, such that the layout helps you navigate. Bits of documentation, published papers, design notes, data files, parameterization schemes, etc can be placed on the sheet, near to the code that they are relevant to. When you zoom in on a chunk of code, the sheet becomes a code editor; when you zoom in on a set of math formulae, it becomes a LaTeX editor, and when you zoom in on a document it becomes a word processor.

Well, Code Canvas, a tool under development in Rob Deline‘s group at Microsoft Research does most of this already. The code is laid out as though it was one big UML diagram, but as you zoom in you move fluidly into a code editor. The whole thing appeals to me because I’m a spatial thinker. Traditional IDEs drive me crazy, because they separate the navigation views from the code, and force me to jump from one pane to another to navigate. In the process, they hide the inherent structure of a large code base, and constrain me to see only a small chunk at a time. Which means these tools create an artificial separation between higher level views (e.g. UML diagrams) and the code itself, sidelining the diagrammatic representations. I really like the idea of moving seamlessly back and forth between the big picture views and actual chunks of code.

Code Canvas is still an early prototype, and doesn’t yet have the ability to mix in other forms of documentation (e.g. LaTeX) on the sheet (or at least not in any demo Microsoft are willing to show off), but the potential is there. I’d like to explore how we take an idea like this an customize it for scientific code development, where there is less of a strict separation of code and data than in other forms of programming, and where the link to published papers and draft reports is important. The infinitely zoomable paper could provide an intuitive unifying tool to bring all these different types of object together in one place, to be managed as a set. And the use of spatial memory to help navigate will be helpful, when the set of things gets big.

I’m also interested in exploring the idea of using this metaphor for activities that don’t involve coding – for example complex decision-support for sustainability, where you need to move between spreadsheets, graphs & charts, models runs, and so on. I would lay out the basic decision task as a graph on the sheet, with sources of evidence connecting into the decision steps where they are needed. The sources of evidence could be text, graphs, spreadsheet models, live datafeeds, etc. And as you zoom in over each type of object, the sheet turns into the appropriate editor. As you zoom out, you get to see how the sources of evidence contribute to the decision-making task. Hmmm. Need a name for this idea. How about DecisionCanvas?

Update: Greg also pointed me to CodeBubbles and Intentional Software

Many moons ago, I talked about the danger of being distracted by our carbon footprints. I argued that the climate crisis cannot be solved by voluntary action by the (few) people who understand what we’re facing. The problem is systemic, and so adequate responses must be systemic too.

In the years since 9/11, it’s gotten steadily more frustrating to fly, as the lines build up at the security checkpoints, and we have to put more and more of what we’re wearing through the scanners. This doesn’t dissuade people from flying, but it does make them much more grumpy about it. And it doesn’t make them any safer, either. Bruce Schneier calls it “Security Theatre“: countermeasures that make it look like something is being done at the airport, but which make no difference to actual security. Bruce runs a regular competition to think up a movie plot that will create a new type of fear and hence enable the marketing of a new type of security theatre countermeasure.

Now Jon Udell joins the dots and points out that we have an equivalent problem in environmentalism: Carbon Theatre. Except that he doesn’t quite push the concept far enough. In Jon’s version, carbon theatre is competitions and online quizes and so on, in which we talk about how we’re going to reduce our carbon footprints more than the next guy, rather than actually getting on and doing things that make a difference.

I think carbon theatre is more insidious than that. It’s the very idea that an appropriate response to climate change is to make personal sacrifices. Like giving up flying. And driving. And running the air conditioner. And so on. The problem is, we approach these things like a dieter approaches the goal of losing weight. We make personal sacrifices that are simply not sustainable. For most people, dieting doesn’t work. It doesn’t work because, although the new diet might be healthier, it’s either less convenient or less enjoyable. Which means sooner or later, you fall off the wagon, because it’s simply not possible to maintain the effort and sacrifice indefinitely.

Carbon theatre means focussing on carbon footprint reduction without fixing the broader system that would make such changes sustainable. You can’t build a solution to climate change by asking people to give up the conveniences of modern life. Oh, sure, you can get people to set personal goals, and maybe even achieve them (temporarily). But if it requires a continual effort to sustain, you haven’t achieved anything. If it involves giving up things that you enjoy, and that others around you continue to enjoy, then it’s not a sustainable change.

I’ve struggled for many years to justify the fact that I fly a lot. A few long-haul flights in a year adds enough to my carbon footprint that just about anything else I do around the house is irrelevant. Apparently a lot of scientists worry about this too.When I blogged about the AGU meeting, the first comment worried about the collective carbon footprint of all those scientists flying to the meeting. George Marshall worries that this undermines the credibility of climate scientists (or maybe he’s even arguing that it means climate scientists still don’t really believe their own results). Somehow all these people seem to think it’s more important for climate scientists to give up flying than it is for, say, investment bankers or oil company executives. Surely that’s completely backwards??

This is, of course, the wrong way to think about the problem. If climate scientists unilaterally give up flying, it will make no discernible difference to the global emissions of the airline industry. And it will make the scientists a lot less effective, because it’s almost impossible to do good science without the networking and exchange of ideas that goes on at scientific conferences. And even if we advocate that everyone who really understands the magnitude of the climate crisis also gives up flying, it still doesn’t add up to a useful solution. We end up giving the impression that if you believe that climate change is a serious problem you have to make big personal sacrifices. Which makes it just that much harder for many people to accept that we do have a problem.

For example, I’ve tried giving up short haul flights in favour of taking the train. But often the train is more expensive and more hassle. If there is no direct train service to my destination, it’s difficult to plan a route, buy tickets, and the trains are never timed to connect in the right way. By making the switch, I’m inconveniencing myself, for no tangible outcome. I’d be far more effective getting together with others who understand the problem, and fixing the train system to make it cheaper and easier. Or helping existing political groups who are working towards this goal. If we make the train cheaper and easier than flying, it will be easy to persuade large number of people to switch as well.

So, am I arguing that working on our carbon footprints is a waste of time? Well, yes and no. It’s a waste of time if you’re doing it by giving up stuff that you’d rather not give up. However, it is worth it if you find a way to do it that could be copied by millions of other people with very little effort. In other words, if it’s not (massively) repeatable and sustainable, it’s probably a waste of time. We need changes that scale up, and we need to change the economic and policy frameworks to support such changes. That won’t happen if the people who understand what needs doing focus inwards on their own personal footprints. We have to think in terms of whole systems.

There is a caveat: sacrifices such as temporarily giving up flying are worthwhile if done as a way of understanding the role of flying in our lives, and the choices we make about travel; they might also be worthwhile if done as part of a coordinated political campaign to draw attention to a problem. But as a personal contribution to carbon reduction? That’s just carbon theatre.