contrapunctus, by Christopher League
 

Algorithmic intelligence

Inlay

When I wrote last October in defense of strong AI, I promised to take on the ‘uncharitably narrow’ notion of algorithmic used by Ian Tattersall to argue that machines will never achieve consciousness.

In The Monkey in the Mirror (2002), he writes “Computers by their nature are algorithmic, rapidly applying a fixed set of rules to the solution of well-defined questions” [page 71]. He refers here to IBM’s Deep Blue playing chess, the canonical example of a machine accomplishment that, while impressive, is surely not conscious. From this example, he extrapolates:

Human consciousness is very clearly non-algorithmic. Even if we have to conclude [...] that subjective awareness in ourselves and our relatives is due ultimately to a mass of electrochemical events in the brain [...] it is equally clearly not the product of a mechanism that dutifully clicks through a listing of tasks and ‘if-then’ choices.

I bristle a bit at this formulation, and I imagine it must annoy most software developers. It’s too narrow, in at least two dimensions. First, it seems to exclude non-determinism and parallelism: a genetic algorithm is still an algorithm. But more crucially — even if we assume deterministic sequential code — Tattersall appears to underestimate the complexity of everyday computer programs.

It doesn’t take very much code to produce a system whose precise behavior is practically unpredictable, even by the person who wrote it. We may use strategies such as functional decomposition to design a system to target specific requirements, but as the system evolves complex behaviors emerge. If they didn’t then debugging would be easy.

Yes, ultimately any deterministic program is expressed as a list of simple instructions and branches — millions of them, coupled with sophisticated data structures in an infinite number of configurations! Tattersall makes it sound like little more than a flowchart you could hang on the wall.

I don’t claim that our current programs are conscious, or intelligent in any strong sense. But don’t rely on a naïve notion of algorithmic to argue that machines cannot be conscious.

Growl upon job completion in zsh

Growl is a pretty classy system for notifications among Mac applications; there are similar notifications in other desktop environments. Whenever I run a shell command that is going to take a while to complete, it’s natural to switch to something else in the meantime. So I would like a notification as soon as the original command completes.

Growl comes with a script, ‘growlnotify’, that can trigger notifications from the command-line. You could, for example, type something like ‘make; growlnotify done’ — the problem is that I never remember that I would like the notification until after the command is already running.

So here is an alternative: this bit of zsh code will notify me upon completion of any job that takes longer than 5 seconds.

Note that this is specific to zsh, which is not the default shell on OS X, although it is supplied with the system. Possibly it can be made to work with other shells; I really don’t care. :)

Ideas for improvements: filter out commands that are obviously going to be long, interactive jobs, such as ssh sessions, vi, command-line emacs, etc. Also, is there some way not to rely on ‘/bin/date’?