Wednesday, April 30, 2003

What do I have against Alan Turing?

It's not usual for me to have a set of Frequently Asked Questions before I even give a talk the first time, but this talk had them.

1. You know he's dead, right?

Yes, I know he's dead. He died in 1954, of a depression-induced suicide, apparantly caused by the hormone treatments that the United Kingdom government forced him to take to cure his homosexuality. God knows how much more brilliant work he might have produced. Pretty good argument against Senator Rick Santorum, if you ask me (oops, I said no politics in the blog).

2. What do you have against Alan Turing?

Nothing. He was a brilliant man, the father of the field of computer science, and probably more than any single person, was responsible for defeating the Nazis in World War II (due to his work breaking the Enigma code). The thing I'm against is refusing to move out of the shadow of his work. As I've written elsewhere, if Alan Turing is the father of computer science, it's time we moved out of the house.

More than the man, the problem is his construct, the Turing Machine (although he didn't call it that; the name came later). The Turing Machine is the abstract representation of a computing device on which all modern computers is based. It's composed of a single finite automaton, an infinite (or semi-infinite) tape that contains symbols, and a set of rules for determining how the automaton changes state and writes symbols onto the tape. A processor and memory.

Ironically, while Turing's great achievement in 1936 was showing the fundamental limits of the Turing machine, in modern imagination his achievement seems to be in proving the universality of the TM, that is, that it can compute any function that is computable. That's not really accurate; in a more limited sense, what he said first was that there existed a Universal Turing Machine that could compute any function that any other Turing Machine could compute. Secondly, he showed that the Turing Machine was an equivalent model to a number of other mechanical models of computation that had been proposed. But it's not really accurate to say that he showed the full universality of the Turing Machine; just that the Turing Machine was no less powerful than any other mechanical device.

In fact, it does appear that there are models of computation more powerful. Generally called hypercomputation, this is an active area of research. Quantum computers seem to be more powerful than Turing machines. The thing that Turing Machines don't model is interactivity, most likely a key ingredient in human intelligence. There's a good review article of some of this research in the April issue of Communications of the ACM.

The point is that the Turing Machine is not the only or the final model of computing, and moving to new models will require us to change many of our assumptions, as well as learning new ways to program and to think about programming.

Tuesday, April 29, 2003

If You Meet Alan Turing on the Road, Kill him!

I'm back from the O'Reilly conference, where I gave a talk with the same title as this blog entry. Since I haven't written up the talk, and as you know if you saw it, the slides don't really stand on their own (mostly photos of Alan Turing and elephants, Buddhist paintings, and a screen shot of Police Quest), I'll try to put the central ideas down in this blog. About once a day, I'll write up the main point of each slide, and then when I'm done I'll clean it all up and post it as a single page.

First, though, I'll just introduce the basic premise. You may recognize the title as a play on the Zen koan (pronounced like Cohen) "If you meet the Buddha on the road, kill him!" With the caveat that I'm neither a Buddhist nor a scholar of East Asian Studies, this doesn't tell us to literally murder the Buddha, but to stop uncritically accepting outsiders as our path to enlightenment.

Similarly, we as programmers and computer scientists have been imprisoned in a narrow, computational, formal mathematics-derived idea of programming for sixty years now, and if we're to make forward progress, if we're to build software that meets the needs of a highly interactive adaptive world, then we need to break some of those assumptions. Over the next few weeks, I'll be variously talking about some of those assumptions (or what Buddhists might call the "mirrors of illusion"), and what new things we could do instead.

Friday, April 25, 2003

Worn Threads

I'd like to talk about what comes after threaded online conversations. But first, a small digression.

I did a little online research to find out when online threaded discussions were invented. Certainly, the oldest BBSes and the first Usenet newsreaders didn't have threads: all of the posts were sorted, usually in chronological order. At some point, newsreaders like trn (threaded readnews) came along, which grouped posts by which post replied to which. It was a great step forward. The digression part of this story is that it was very difficult (and I eventually gave up) to find the "oldest" threaded reader on Google. I searched for "first" or "oldest" or whatever, but of course the pages that are top-ranked are the best or most popular, which (as normally they should) swamp the weaker signal of "oldest."

Back to threads. As I said, threads were a great step forward; if you don't believe me, go read Usenet for a while with all the posts sorted by time. (Isn't it weird that we read email sorted by time and not threads?) However long ago that invention was, it was a long time: at least fifteen years, maybe twenty.

It's time for another step forward, a step I'd like to think will be as big as the step from unthreaded to threaded. And, to be frank, it's a necessary one to save open online discussions, because Usenet is already far beyond its limits of scale.

What's wrong with threads? Theads aren't bad by themselves, but they are limited in their ability to capture aspects of human discourse. For example, sometimes a "thread" (as defined as a series of reply-to posts) will -- gasp! -- change subjects. But reply-to doesn't know anything about that, unless (as almost never happens) a poster edits the title of the post (usually to something appended with "(was...)". This is somwhat analogous to biological speciation over time: at what point in evolution can we say it's a new species? Sometimes it's gradual, sometimes its puntuated. But in any case, eventually it is a new species, but threads often don't acknowledge this.

There are a lot of other pieces of this, but the bottom line is that I'd like to see online discussion boards using threads as the entry level of functionality, not as the end of the story.

Thursday, April 24, 2003

Everything in Unmoderation

At Clay Shirky's ETech talk, he was kind enough to give me credit for the observation that in any open unmoderated discussion group, the discussion will eventually devolve into a discussion of whether the group should become moderated.

Since I've never actually written that down in a web-accessible place, I'll do so here so anyone who wants to annotate Clay's talk can point here.

It's obviously a generalization, and undoubtedly there are some counterexamples. It's intentionally meant to echo the famous Godwin's Law, which is that eventually, discussion threads will mention Nazis, at which point the discussion usually ends.

So why does this moderation discussion happen? A couple of reasons. First, because people are whiners. More specifically, because in a large enough group, some people will be unhappy with the conversation, because it won't be exactly what they want (and since different people want different things, someone will eventually be unhappy). Some of this unhappiness will be aimed at specific postings, topics, or posters, and these unhappy people figure that if only those posts/topics/posters could be excluded, then the group would be better. And thus, the desire to bring up moderation.

Once someone's played the moderation card, it becomes a hot issue, partly because people, especially in our culture (reading culture at almost any granularity you want) like to argue over rules, and partly because the whole issue of moderation vs openness strike very close to our beliefs and so invoke strong emotions.

Are there technological fixes? Maybe. Usenet has killfiles, so an individual user can block out people without moving the entire group to a moderated policy. Why didn't this solve the problem? I don't really know.

One potential tech fix to Usenet that I came up with is to have optional moderation. Under this scheme, any individual can appoint him or herself a moderator, and do the job of approving or disapproving posts. Of course, they can choose various policies such as default yes, default no, or whatever. Then, other users can pick which, if any, moderator they want to follow (or some union or intersection of moderators). In this view, moderation is a lens into the larger conversation.

There are hard details to this: what happens if threads migrate into or out of the moderated list? But still, I think it would be an interesting experiment to see if ends the inevitability of the moderation discussion.
Social Software Testbed

I went to the first meeting of the Social Software Alliance last night, and had an interesting thought (which I suggested to the crowd to general approval but specific disagreement).

What social software needs is a dedicated testbed. A real challenge in building social software is that it is very difficult to test, since you need a certain critical mass of users before you can really see the interesting emergent behavior. If you're a company like Groove, then you can afford to have large teams of testers, but in general, the lightweight startups or open sourcers have a more difficult time.

If there was a group of people -- call them the Social Software Testbed -- that agrees to move their discussion/collaboration/archives/whatever to a new system every month. Hard stop, new start. There's only a specific kind of person that would enjoy, or even tolerate, such an unstable system, but fortunately that kind of person exists. Even a group of 50 or so would be enough to provide enormous benefits to research, innovation, and visibility for new and interesting projects.

I definitely want to be involved, and want to make this happen. So who's with me?

Wednesday, April 23, 2003

Social Mobility

A while ago I gave a talk at Nokia Research, and Howard Rheingold's talk reminded me that I haven't blogged it.

I don't know if I'm the first, but I've come up with the term "social mobility" to refer to an interesting combination of two well-known technology trends, both of which are always hot topics at these O'Reilly conferences: social software and mobile devices.

Social software, of course, is the kind of software that is used by groups of people to communicate, coordinate, or cooperate. Mobile devices are mobile phones, PDAs, hiptops, etc. Social software has an interesting set of problems and design constraints, about which a lot has been written. And of course the design constraints for mobile devices are very tight and very well-recognized by companies like Nokia.

But what happens when you combine them? What does a mobile-phone Wiki look like? This is a regime I call "social mobility:" social software used by people who are moving. The restrictions aren't just additive; they're multiplicative. Making good social mobility software will require meeting a very high standard.

So what are some of these design constraints? The software has to have an incredibly minimal interface, because the attention of the user will be elsewhere. The software must be able to learn preferences, because people will not bother entering preferences. The software must be able to recognize context (physical, temporal, situational), because both social applications and mobile applications vary enormously depending on what the user is doing right then.

What is an instance of a social mobility app? Imagine a group of ten people, distributed across a city, trying to decide where to meet for dinner. They're in motion, so email is out (and vanilla email would be terrible, anyway). They could use one-to-one phone calls or texting, but there are 500 two-way conversations (the dark side of Metcalfe's law). What they want, ideally, is an application that lets them multicast to the group, and at the same time listens in to the conversation, figures out where everyone is, where their favorite restaurants are, does some distance calculation, and determines (through some magic black box, obviously) what the consensus of the group is, announces that consensus, and maybe even makes reservations. Now if only it could figure out what people wanted on their pizza...
Biological Models of Computing

As you probably know if you've heard me talk for couple of minutes, I'm a big fan of biological models of computing. That is, the idea of borrowing structural, process, and relational ideas from biology, and using them in programmed software artifacts. We've used kinds of these for a while: neural nets (inspired by a simple model of neurons), genetic programming, cellular automata, etc.

I'm at Eric Bonabeau's keynote now, which is as always interesting, but my frustration in this field (which came up more at last night's birds-of-a-feather session on biological models) is the paucity of different kinds of inspiration.

Biology is an incredibly complex, rich, and broad field, and yet computer scientists seem to use the same biological idea over and over again. Yes, evolution is a powerful process, and the brain is great, and ants do a lot of impresssive stuff, but where's everything else?

What about metabolism, or protein signalling, or ecology, or circulation, or developmental biology, or metamorphosis, or predation, or protein folding, or gene expression regulation, or social primates, or meiosis, or pheromone communication, or flocking, or coral colonies, or morphogenesis,... you get the idea.
What are Groups?

For a couple of years, I've been asserting the following statement: "Groups are first-class objects." I suppose that at some point, I should have explained what I mean by that, and listening to Howard "Smart Mobs" Rheingold's keynote seems like a good time.

"First-class object" is computer science techy-speak for an idea or construct that can be directly addressed or manipulated by a program. More formally, first-class objects are those that can occur on the left-hand side of an equals (assignment) statement. Less formally, people use it to mean something of importance, or a central design element of a system. And "group," here, means a group of people.

So when I say that groups are first-class objects, I mean that groups of people have a solid reality to them just as equivalent to individual people. Some scientists actually imply that groups have more reality than individuals. Certainly, groups have more reality than many of the formal, legal entities that recognize or define a large number of people, such as corporations or countries.

To expand on that, I argue that our abstractions and legal code work at the wrong level. Right now, our laws, our social networks, our vocabulary work at two levels: individuals and large, formal organziations. But the real action, the real activity, the place where the real work happens, is at some harder-to-define-but-I-know-it-when-I-see-it intermediate level of a group of people.

So what is that group? It can't just be a random selection of people, and it can't just be what people call "social networks" of people-who-know-other-people.

I think (but I'm not sure) that a useful idea here is what graph theorists call a clique, which is the maximal set of nodes that are all connected. So in a clique of friends, every friend knows every other friend. Some other person that might be known to only one member of that clique, or even most members, isn't a member. Of course, cliques have a built-in, if soft, size limit.

Social group psychology tells us that those cliques will tend to amplify and reinforce opinion and standards of action, although of course this will happen different in different cultures.
At O'Reilly

So far, the O'Reilly Emerging Technology conference has the same good buzz and excitement of last year. I won't be directly live-blogging all of the talks, but I'll try to write down some of the various thoughts that occur to me.

Monday, April 21, 2003

O'Reilly Emerging Technologies Conference

I'm off tomorrow morning to the O'Reilly Emerging Technolgies Conference in Santa Clara, CA. If you're going, too (and if you're the kind of person who reads my blog, you either should be going, too, or you're my dad), come to my talk, If You Meet Alan Turing On the Road, Kill Him! I don't really have anything against Alan Turing; if you want to know more, come to the talk. It's at 3:15 on Friday in the Winchester room.

I'll be intermittently blogging the conference.

Saturday, April 19, 2003

End-to-End Software, Continued

So, what would it mean for software to be end-to-end? It has to do with the ways that modules or objects invoke services from libraries or other objects.

Library methods can offer many different semantics or options: synchronized or not, logged or not, various degrees of precision, etc. Now, library methods must offer their own versions of each.

In an end-to-end software system, these different options, or orthogonal modifiers would be specified at the call site at runtime, and the library methods would be dynamically rewritten to conform to the requested semantic. The advantages of this approach are that new options could be added to existing library methods without recompilation, and, as in the basic e2e argument, the burden of the extra features are not imposed on callers that do not require it.

I'm working on developing a programming language that offers this feature, and I'll talk about that more later.

Friday, April 18, 2003

End-to-End Software

Arguably, the single greatest success that computer science has had, and the single greatest contribution to society, is one really good protocol. The fundamental insight of the IP protocol stack--indeed, the idea of a protocol stack--and the distributed, end-to-end design of the Internet have transformed, and continue to transform, society. This architecture, known as end-to-end, places the burden of functionality at the endpoints, rather than in the network. As a side effect, the Internet is built on top of an unreliable, failure-prone layer.

This architecture has provided significant advantages. The Internet is resilient to failure, is amazingly scalable (from hundreds to hundreds of millions of nodes), is supportive of an astounding degree of innovation.

Can this architecture be applied to software? Software suffers usually suffers failure if even a single module fails; it generally scales poorly, and is brittle in respect to new uses. If only software could be written end-to-end, it might be able to perform as well as the Internet.
I'm Back

Took some time off to write a paper and finish up some other projects. I'll get back to posting more regularly.