Vulcans vs. Apes

The biggest problem with programming is that we don’t agree on what the problem is. The comments on the previous posts reveal fundamentally incompatible views. I am equally shocked by the opinions held by some distinguished academics and leading practitioners. Our views of programming are so at odds that it’s almost as if we were from different planets. Wait – that’s it! It all makes sense now… Read More »

Posted in General | Comments closed

Mea Culpa

Reflecting upon my previous post, I am wondering why LISP triumphalists like Paul Graham annoy me so much? Perhaps it is because I used to be one myself, in spirit if not in syntax. And also because I now see them as a major symptom of what ails programming. Read More »

Posted in General | Comments closed

The Myth of the Super Programming Language

I just read yet another recycling of the old myth of how some esoteric programming language (often Lisp or Haskell) is the secret weapon that allowed a team to outperform expectations by an order of magnitude. Paul Graham has strongly encouraged this myth (see Beating the Averages), but it has been circulating for ages. It is totally false. Worse, it reinforces the intellectual elitism that is the bane of our field. Read More »

Posted in AgitProp, General | Comments closed

The Greater Apple Co-Prosperity Sphere

Much has been written lately about Apple restricting iPhone and iPad apps to only use Apple programming languages and libraries. This is indeed an alarming development for the future of programming.

Opinion is split as to whether this decision shows Steve Jobs to be a visionary hero seeking only to improve the quality of the user experience, or that he is a megalomaniac Fascist. But I think people are missing what this is really about. It’s about the money. The Ad money.

App Ads are potentially a Google-scale cash flow, and Jobs wants it. He wants to sell ads and inject them into apps on the iPhone/iPad/iDesk, just like Google injects ads into web pages. He can’t do that unless all the apps are using his libraries. If he lets Flash apps in, then Adobe would be able to sell the ads instead. That is why section 3.3.9 of the new developer agreement says “the use of third party software in Your Application to collect and send Device Data to a third party for processing or analysis is expressly prohibited”. Like, for example, Ad networks.

Help me, Google; you’re my only hope.

Posted in General | Comments closed

Coherent Binding

Abstract for my talk at Emerging Languages Camp:

We cannot evolve beyond imperative programming until we solve the problem of coordinating changes to state. Functional programming and transactions segregate the problem, but don’t solve it. I am exploring a new kind of language, inspired by modern “Model-View-Binding” application frameworks. The language uses bidirectional data binding as its fundamental mechanism, generalized into arbitrary change-triggered actions. Bindings propagate changes coherently: execution order is determined automatically based on the interdependencies between bindings. The programmer does not have to worry about execution order. A side benefit is the automatic discovery of parallelism. Unfortunately coherence doesn’t work in a conventional heap of objects with arbitrary dynamic pointers to each other. I propose a data model in which objects and collections of objects are nested to form trees. Pointers are replaced with cursors constrained within a collection. This richer structure permits coherent and deterministic execution of bindings. Coherent binding offers the simplicity of declarative programming while maintaining complex dynamic state.

Comments? The idea is to use data binding as a metaphor that many programmers are already familiar with. Can I assume people will get what “Model-View-Binding” is, even though I just invented the term?

Posted in General | Comments closed

Haskell damage

Per Vognsen suggests a Haskell version of the damage function from my Schematic Tables talk:

data Attack = Magic | Melee
hit surprise defense attack = damage
  where effectiveness = power * (if surprise then 3 else 2)
      (power, damage) = case attack of
                        Magic -> (5, max 0 (effectiveness - defense))
                        Melee -> (4, 2 * effectiveness / defense)

This passes pairs of values (power, damage) through conditionals. That allows the conditionals to multiplex more than one value, rather than being repeated. I suspect I could stymie that approach with more complex data flows, but I am happy to acknowledge that Haskell does OK on this example. Thanks, Per.

Posted in General | Comments closed

Emerging Languages Camp

I have been invited to the Emerging Languages Camp. Sounds like fun. Let’s meet up.

Posted in General | Comments closed

Code Bubbles

Check out the cool demo of Code Bubbles. This is some very nice, fresh thinking. As Gilad Bracha says, standard IDE’s look like the console of a B-52. I look forward to reading the details, which they are embargoing until their papers are presented. I wonder what UI they used? I see zooming, transparent overlays, and animation. I am guessing Silverlight.

Posted in General | Comments closed

Typed Subtext

The last several months I have been trying to make coherence deterministic, using what PL theoreticians call a type and effect system. The effect system is telling me to return to the tree data model of Subtext (which I had set aside as too complex), but with static types. Therefore I am redefining Subtext as a statically typed language, with classes and inheritance and so on. I have sketched this out, and it seems to magically resolve many of the complexities that were stumping me before. Read More »

Posted in General | Comments closed

Call for Onward workshops

I am chairing workshops at the Onward conference this year.

The Onward! conference is dedicated to new ideas at the frontier of knowledge about software and programming. Onward! workshops are located a day’s ride past the frontier. They are where groups can explore uncharted ideas. They are an ideal base for intellectual insurrections. Workshops proposals are welcome on all topics related to software and programming, especially topics unacceptable at mainstream Computer Science conferences.

Details here.

Posted in General | Comments closed


Bad news: co-action is incomplete. Read More »

Posted in General | Comments closed

NEPLS slides up

Here are the slides from my NEPLS talk. People seemed to enjoy it, and I got a bunch of laughs. Positive comments afterwards. Mitch Wand couldn’t stay for my talk, but I got a few minutes to talk with him, and he gave me a promising suggestion for the completeness theorem. Overall a good experience, though as usual I am relieved now that it is over.

Posted in General | Comments closed

NEPLS submission

I submitted the following to NEPLS: Read More »

Posted in General | Comments closed

OOPSLA report

Back from OOPSLA, with mixed feelings. This was the smallest OOPSLA ever, and there are some big changes coming next year: they are renaming the conference SPLASH (Systems, Programming, Languages, Applications: Software for Humanity). OOPSLA becomes a colocated conference within the SPLASH umbrella, along with Onward and Dynamic Languages. The Onward program was perhaps the best ever this year, with some interesting preliminary work that was more than just metaphors and hand waving. Jonathan Aldrich’s Plaid language is worth following. Read More »

Posted in General | Comments closed

Onward talk

Here is a video of my Onward talk.

Posted in General | Comments closed

The Eclipse of Java

Java is the new Cobol. But there has been a burst of language innovation on the JVM, for example Groovy, Scala, and Clojure. These languages can not become mainstream without a first-class IDE like Eclipse. Eclipse may not be that IDE. Read More »

Posted in General | Comments closed

Lost in the forest

I am lost. The essential idea of coherence is a year old, and I still haven’t implemented it. I blame the trees. I have been struggling to integrate coherence with the tree-based model of computation in Subtext. It just isn’t working. In fact it hasn’t been working for years – I have struggled with the subtleties of trees in my last 4 papers. And the reviewers seemed to have struggled as well. My conclusion is that these trees are standing in the way of progress, and they have to come down. Read More »

Posted in General | Comments closed

Scala is Groovy

Groovy’s creator endorses Scala. Scala is very promising. When I first read Odersky’s academic paper several years ago, I was put off by the complexity of the type system. But it becomes more attractive when you look at the everyday programming aspects of the language. It does a very nice job of synthesizing functional and OO programming, and eliminating a lot of the boilerplate in Java. I would consider Scala for my own work, except that it depends on Java for UI, which is an epic failure. But for server-side programming Scala is a promising alternative to Java.

Posted in General | Comments closed

Illustrative Programming

Martin Fowler has a new post in which he coins the term Illustrative Programming for what I have been calling Example Centric Programming. He gives me a nice plug too. Martin is a keen observer of trends in programming, and his terminological inventions have had an enormous influence on the practice of patterns, refactoring, and now DSL’s. I see his latest neologism as an indicator of the increasing relevance of the idea.

Posted in General | Comments closed


Check it out. Cross between a Wiki and a database. And a semantic database at that, where all fields/attributes are binary associations. See plus cards and formatting. Very cute. Has an embedded query language, using JSON syntax. Needs an embedded update language.

Posted in General | Comments closed