If systems were fishes we’d all something something

Peo­ple want sys­tem­atic advice. Uni­ver­sal advice is always best. Lack­ing uni­ver­sals, then some sort of sys­tem­atic advice will do, along with a com­pre­hen­sive but attain­able onto­log­i­cal key that one can use to quickly iden­tify the reader’s posi­tion in their sys­tem so as to get at the advice part faster.

Then there is the lesser sort of advice, framed as a sort of arti­fi­cial appren­tice­ship: pre­sent­ing a series of lessons in the form of a long (and cum­ber­some!) path or jour­ney which—if con­ducted dili­gently and mindfully—will instill in the sup­pli­cant the min­i­mum set of skills that might pos­si­bly help them when “real sit­u­a­tions” arise in their sub­se­quent journeymen’s lives.

And finally, I sup­pose, there is the sort of advice which is no advice at all: a pile of tools, or user’s man­ual, maybe with some shod­dily cat­a­logued “here’s a pretty one” anec­dotes shuf­fled in to ground the vast uncon­nected diver­sity of stuff in some sto­ries. But of course the reader is left hav­ing to map their prob­lems of inter­est onto that ran­dom pile of anec­dotes, and reminded when­ever they ask where to start that it depends, really.…

So I’m writ­ing this book about Genetic Pro­gram­ming. In the seven or eight weeks I’ve been pok­ing at it, it’s been a fas­ci­nat­ing tra­ver­sal of this hier­ar­chy of advice-​​giving. And I think there’s some­thing in the pain I’m feel­ing, a thing I need to get at.

All the other books I’ve ever seen are tool cat­a­logs. Mine is—as far as I’m aware—the first of the long (and cum­ber­some!) jour­ney kind. There are no exam­ples of either if-​​this-​​then-​​that keys, nor of uni­ver­sal principles.

Yet the field is twenty-​​mumble years old. Isn’t that weird? What’s our problem?

Talk­ing about talk­ing about

I’ve just (nine hours ago) fin­ished read­ing John Levi Martin’s excel­lent The Expla­na­tion of Social Action. Not because I’m writ­ing about a social sys­tem, which depends inti­mately on the sub­jec­tive and con­tin­gent fram­ing nar­ra­tives that mod­ern nerds report using when they under­take to solve com­plex prob­lems of a know-​​it-​​when-​​they-​​see-​​it category.

Oh no—heaven for­fend! I’m writ­ing about com­put­ers and arti­fi­cial intel­li­gence, of course. I was read­ing it just because, you know, I needed a break from writ­ing about com­put­ers and tech­ni­cal stuff. Yeah.

Any­way, dur­ing this brief “break” from “tech­ni­cal mat­ters”, I found myself read­ing this book in which Mar­tin essen­tially tears the social sci­ences a new ass­hole. In a pro­fes­sional and well-​​cited and fun­da­men­tally help­ful way, of course. Because his­tor­i­cally, the main stream of the sci­en­ci­est brands in the social sci­ences have been premised on mod­els of peo­ple doing things as if there were exter­nal­i­ties in their lives. As if their goals were inbuilt or con­cocted by exter­nal ratio­nal plan­ners; as if their beliefs were genetic or self-​​contained rules spelled out in some extra-​​social rule­book; as if their inten­tions arose from some rar­i­fied “ratio­nal” think-​​space, or as mat­ters of ingrained habit. Social expla­na­tion of that sort is—to para­phrase and elide a lot of Martin’s won­der­fully snarky overview—trying to make all that messy peo­ple stuff go away.

There are a lot of ways to make all the messy peo­ple stuff go away in social sci­ence, as it hap­pens; that’s at least one rea­son Martin’s book is so enjoy­ably long. You can con­found cor­re­la­tion with cau­sa­tion, and use regres­sion equa­tions to sug­gest that devi­a­tions from expected behav­ior are “errors” on the part of will­ful rebels. You can impose a good old-​​fashioned Great Chain of Racial Being on folks you quiz in a desert, and ignore the incon­ve­nient facts that folks in a desert have not only never seen line dia­grams of cubes, but have no social frame for “how to answer right when being quizzed”. You can cat­e­go­rize the stuff peo­ple do into a few handy cat­e­gories they them­selves don’t use, and then ignore the lit­tle tense knots of con­tra­dic­tion inevitably tucked in at the cor­ners. And—this is my favorite, for rea­sons you may already be suss­ing out—you can assume that human beings carry around for­mu­laic com­pu­ta­tional and algo­rith­mic rule-​​books in their heads, and as they per­ceive “sit­u­a­tions” in their “envi­ron­ments” they refer to these just like com­put­ers do to decide among “plans”.

This is not an asper­sion cast on indi­vid­ual soci­ol­o­gists (very much), but rather the iden­ti­fi­ca­tion of a sys­tem­atic fail­ure to think of peo­ple liv­ing in the world as being any­thing like peo­ple liv­ing in a world.

As you can tell, I enjoyed the… break it pro­vided. Because of course I’m writ­ing about how you can use com­put­ers to bet­ter per­ceive “sit­u­a­tions” in your “envi­ron­ment” to decide among many “plans”.… Com­pletely dif­fer­ent thing.

Just to fin­ish this arc, Mar­tin is not point­ing and laugh­ing at his col­leagues’ intel­lec­tual short­com­ings here, he’s mak­ing the case for a rather dif­fer­ent approach to the social sciences—a field approach. Not “the field” as in “out there with a pith hel­met and note­book mak­ing obser­va­tions”, but fields as in Maxwell and mag­net­ism (or Pep­per and aes­thet­ics). Fields as com­posed by objects and their rela­tion to one another, and more impor­tantly as per­ceived by the vec­tors imparted on objects by their rela­tions to one another. Very few things are new under the sun, and Mar­tin does a good job build­ing this notion up with an arm-​​long list of paths-​​not-​​taken in the social sci­ences, and ties it all up in a pleas­ant lit­tle bow at the end labeled “What else are you going to do?”

But the inter­est­ing thing, to me, is that in stir­ring the pot of soci­ol­ogy, Mar­tin has wielded the same spoon I’ve been wav­ing for years in… well, what­ever the hell my “field” is. “Genetic pro­gram­ming” maybe (have I told you how much I dis­like the phrase yet today?), or machine learn­ing, or arti­fi­cial intelligence.

That is: the Spoon of Re-​​drawing Sys­tem Bound­aries to Include the User as an Inte­gral Part of the Sys­tem. [Or, as I like to call it, SpoRSyBoIUIPotS]

So it begins

I hang out with well-​​meaning peo­ple who are sad much of the time, because they give good advice and peo­ple for one rea­son or another don’t fol­low it. Includ­ing me1. They are artists dis­ap­pointed with how peo­ple fail to appre­ci­ate art, and crafts­men dis­ap­pointed in how few peo­ple are will­ing to take a crafts­manly approach to their work-​​lives, and var­i­ous other train­ers of cre­ative skills whose focus is not on skills so much as on stance.

And you know, it’s funny. The peo­ple I hang out with who seem least sad about peo­ple not fol­low­ing their advice seem to all be GP peo­ple and Arti­fi­cial Life peo­ple, and the other ones who work in the var­i­ous sub­dis­ci­plines of com­plex­ol­ogy. This is not to say that they don’t try to train peo­ple how to do things, or that the peo­ple they have trained imme­di­ately do them cor­rectly every time, but rather (I think) that they are still—twenty-mumble years into their col­lec­tive adventure—pretty much OK with peo­ple who fail to fol­low in their footsteps.

And, thanks to John Levi Martin’s big blue hard­cover, I may have real­ized what one dif­fer­ence is between the sads and the sad-​​nots. The sad peo­ple have all framed their work in broad sys­tems of expla­na­tion: man­i­festos and First Rules of Fight Club and guild­ish guide­lines. My com­plex­o­log­i­cal peo­ple are still in that heady low-​​hanging fruit stage where one can make a lot of head­way by just mod­el­ing things and see­ing what hap­pens. “Look! emer­gence!” and “the agent is your model of the world; run them inter­act­ing to explore the con­se­quences of your model” and so forth.

That’s chang­ing, I expect. Smart peo­ple are nib­bling at the philo­soph­i­cal edges of “emer­gence”, try­ing to sys­tem­atize it away. Wol­framism is grow­ing in power, col­lect­ing together under one big Math­e­mat­i­cal umbrella all the work other peo­ple have done in their enthu­si­asm. Peo­ple have filled enough large vol­umes of col­lected papers on Why My Genetic Pro­gram­ming Approach is Bet­ter Than Yours, and they’re start­ing to notice that X writes one of these about Y one year, and Y writes one about X the next, and so they’re start­ing to frown a bit. And (as I’ve pointed out else­where), com­plex­ol­ogy is enter­ing a stage of pro­fes­sion­al­iza­tion war, hav­ing its hand­i­est tools coöpted (sym­bolic regres­sion comes to mind), at the same time it’s den­i­grated into nonex­is­tence wher­ever it threat­ens some other field’s sinecure (the Sta­tis­tics folks already have their frowny faces at the ready).

So yeah; my GP peo­ple are going to start being mopey a lot more. And soon. Which I’ve told them so, but hey. I think it may be ben­e­fi­cial to look at what’s hap­pened in a closely related field, in prepa­ra­tion. Maybe an ances­tral predecessor.

How to write a com­puter program

Some of the sad peo­ple I spend time with are founders of the agile soft­ware devel­op­ment move­ment. I’ve hung out with them for a long time (more than a decade now), lurk­ing in the back­ground since back in heady low-​​hanging fruit days.

They are sad, I think, because they are forced to work with peo­ple whose job it is to think pro­gram­ming is not a social endeavor. Go ahead and parse that; it took me a while to get the words right.

The Agile Man­i­festo starts off talk­ing about peo­ple, not process. And right there, they are snap­ping their fin­gers in the face of an awful lot of peo­ple who want their work to be sim­pler than that. Peo­ple who want aver­ages to be more impor­tant than devi­a­tions from the con­trol chart. Who want pro­gram­ming to be an infi­nitely divis­i­ble pro­duc­tion plant, that can be allo­cated among projects with­out ref­er­ence to geog­ra­phy or soci­ol­ogy. Who want a clean sep­a­ra­tion between the body of work­ers from the mind of plan­ners and managers.

Note, these aren’t all just “man­age­ment” (what­ever that is); it sounds to me as though there are plenty of pro­gram­mers in the world who want to go sit in their cubi­cles for eight hours exactly, Be Very Smart for exactly the nec­es­sary time, and avoid as much as pos­si­ble talk­ing to any­body or let­ting them change “their” code in future.2

Go look at how they write instruc­tional mate­r­ial about their work. Com­pare an agile “How to write a com­puter pro­gram” pas­sage to an inag­ile old-​​fashioned one. What’s different?

As I see it, it’s a mat­ter of SpoRSyBoIUIPotS.

Since the early days of the “agile coa­les­cence”, when Design Pat­terns started pop­ping up, there has been an accel­er­at­ing shift from for­mal­ism and the­o­ret­i­cal abstrac­tion to what I can only call a more con­tin­gent and social view of pro­gram­ming. Look at the tools of the agile pro­fes­sional: they’re social (includ­ing those for self-​​control, and for man­ag­ing the inter­face between you-​​the-​​typist and you-​​the-​​reader-​​of-​​typed-​​code), not any­thing to do with mak­ing code run faster or use less CPU time. They re-​​draw the bound­ary around “writ­ing com­puter pro­grams” to include “how peo­ple write” and “com­puter pro­grams for peo­ple to use”. In doing so, they step away—ready for this?—from the very sort of soci­o­log­i­cal model John Levi Mar­tin glee­fully punc­tures, the one with Gauss­ian dis­tri­b­u­tions of “pro­duc­tion”, and some mag­i­cal exter­nally cre­ated “design” and Pla­tonic “archi­tec­ture”, and lin­early decom­pos­able require­ments (“rules”) that must be com­plete enough to include every­thing that might pos­si­bly hap­pen before any­body actu­ally does any­thing.

All that stuff is, not to put too fine a point on it (and again elid­ing and rephras­ing much of Martin’s excel­lent book), a load of bull­shit as soon as you deign to include human beings in the sto­ries you tell about what human beings actu­ally do.

Sto­ries of how soft­ware gets writ­ten by agile folks, whether instruc­tional or anec­do­tal, are about peo­ple talk­ing. About sto­ries, and plans that change, and forehead-​​slapping real­iza­tions of what they’ve been miss­ing. About involv­ing the cus­tomer and the man­ager as part of the team.

Sto­ries of how soft­ware gets writ­ten by inag­ile folks are about stocks and flows and feed­back loops, and pre­dict­ing the num­ber of days until dis­crete large-​​scale events hap­pen, and clean divi­sions of “human resources” into nonover­lap­ping abstract cat­e­gories (Qual­ity Assur­ance, Data­base Admin­is­tra­tion, Archi­tec­ture, Pro­gram­mer).3

The tools and design pat­terns offered up by agile folks are about sit­u­a­tions defined as rela­tions between peo­ple and objects. They aim to con­trol the flow of infor­ma­tion and knowl­edge, to min­i­mize risks of mis­com­mu­ni­ca­tion and faulty plan­ning and bad cod­ing, to help steer a course rather than fol­low a plan. The tools of inag­ile folks are about ways to bring the observed behav­ior of a project back in line with its foun­da­tional expec­ta­tions: back on sched­ule, back under con­trol, min­i­mize “change orders”, how to stay on bud­get, how to expect it to scale with “resources”.

I don’t think there are any seri­ous (and thought­ful) books on the gen­eral sub­ject of “How to Write a Com­puter Pro­gram”. If there were, I imag­ine the two groups would approach the sub­ject very dif­fer­ently. I can look at screen­casts and blogs and think back to the ridicu­lous classes I’ve moaned my way through, and I sense a dif­fer­ence. The more “agile” ones involve prac­tices, stances for the pro­gram­mer to take in rela­tion to other peo­ple and her own sen­si­bil­i­ties and skills. The “inag­ile” ones involve some kind of cat­a­log of tools—the the­o­ret­i­cal and poten­tial kind, like iter­a­tion and recur­sion, object-​​oriented and func­tional lan­guage struc­tures, com­pu­ta­tional com­plex­ity and parallelization.

When you show the agile ones (inso­far as they exist) to inag­ile folks, they will point out how it sounds more like a frickin’ eti­quette book or some sort of mar­tial arts man­ual, all about puri­fy­ing your mind and show­ing the proper respect to some imag­i­nary “user” or “cus­tomer” instead of learn­ing the really cool fast way to make your pro­gram cool and fast; and by the way, it doesn’t even say how to write pro­grams, it says how to write tests for pro­grams. When you show the inag­ile ones (inso­far as they exist) to agile folks, they will point out how every lit­tle cun­ning tool smacks of pre­ma­ture opti­miza­tion, and how there is no state­ment any­where of why you would want to “unroll the loop” instead of just using a human-​​readable loop instead, or that if there is such an argu­ment it invokes some weird-​​ass abstrac­tion like “effi­ciency” as though every pro­gram had to be carved out of a block of wood one punch-​​card at a time.

The one describes the world as a field cre­ated by and among peo­ple. The other describes the world as dri­ven by the­o­ret­i­cal objec­tives fully exter­nal to people.

Which sounds kind of famil­iar, if you think about it.

And so?

I have no use­ful idea about “and so—”.

There’s some­thing in there, and it revolves around how we tell sto­ries to one another about how to suc­ceed. It involves the dynam­ics of pro­fes­sion­al­iza­tion, the unrest and rebel­lion and messy frowny mad-​​making mut­ter­ing that goes on when peo­ple don’t talk about the “same stuff” using the “same mod­els”. It involves the trou­ble artists I know have had with “art fund­ing” in our lit­tle dumb town, and the trou­ble train­ers I know have had with stu­dents who have been sent to their “how to pro­gram” classes (both agile and inag­ile), and ulti­mately about the effec­tive agen­das of “sta­tis­tics” and “bioin­for­mat­ics” and “arti­fi­cial intel­li­gence” and some of the other junk that I do.

What I sense, and the noise I’ve been mak­ing for some time now, is that “my” “field” (Genetic Pro­gram­ming) is com­ing quickly up to that tran­si­tion in its life, where it will start to fly apart into a vari­ety of pro­fes­sions, either sub­verted and con­sumed or divided from within.

And maybe this is just me say­ing “This might sting a lit­tle bit” before I start cut­ting. I am sharp­en­ing the saw even now, and eye­ing sta­tis­tics, dis­crete math­e­mat­ics, genet­ics and bioin­for­mat­ics, finance and pub­lic pol­icy all with a keen glint in my eye.

Because it’s time for those to start being seen as social struc­tures that include the prac­ti­tioner in addi­tion to the “sub­jects”. Not because that approach is inher­ently “bet­ter” by some abstract exter­nal scale, of course. But because inso­far as peo­ple want to use them to do things, pur­po­sive things, then they are social struc­tures. The model of Genetic Pro­gram­ming as a sort of mag­i­cal black box in which one pours “gen­eral problem-​​solving abil­ity” pre­sup­poses that any­body knows what “problem-​​solving abil­ity” is.

I have good friends and old col­leagues (some are the same peo­ple!) in the field of Genetic Pro­gram­ming, and they can­not teach peo­ple what works—only some things to do. Their books are lists of things peo­ple did, with­out much expla­na­tion of why (even in a tech­ni­cal sense). They’ve eaten all the low-​​hanging fruit you can get with­out mak­ing the work a social con­struct, in the abstracted inag­ile stock-​​and-​​flow Cold War way that made com­puter pro­gram­ming degen­er­ate into con­trol chart man­age­ment in the 1980s and 90s.

Some­body has to start teach­ing peo­ple how to stand in rela­tion to one another. Yet I have no idea about “and so—” Just some­thing some­thing. Nonethe­less, at least “some­thing some­thing” makes the line read cor­rectly, in terms of meter…. Some­times you have to fill in the words later.

The Prob­lem of Genetic Pro­gram­ming that’s most press­ing, as I see it, is the one that goes some­thing like, “Why can’t we use the same sys­tems we’ve had suc­cess with so far, which have auto­mat­i­cally dis­cov­ered such amaz­ingly cool stuff (as reported in The Press!), and just scale it up a bit until it auto­mat­i­cally invents com­pli­cated soft­ware like a word proces­sor or even a lit­tle cal­cu­la­tor? Per­haps if we estab­lish bench­marks, more dif­fi­cult test cases for researchers in the field to approach, then that will spark the tech­ni­cal and the­o­ret­i­cal inno­va­tions that are needed to over­come this qual­i­ta­tive barrier?”

And so—


  1. I “hang out” with myself a lot of the time… you know, typ­ing and stuff. What? 

  2. I’d like to know what the social dynam­ics of cathe­dral stone­ma­sons was like. Were there “cow­boy cut­ters” who made lovely lit­tle key­stones nobody could use because they weren’t made to match their neigh­bors? 

  3. I think there are per­fectly rea­son­able his­tor­i­cal rea­sons for this; they involve the Cold War, and the resource lim­i­ta­tions of the period when com­put­ing as such was invented, and how hard it has always been to do long divi­sion and square roots and junk by hand. But that’s all another rant, with a lot more foot­notes. 

Items of some interest:

These are my recent Pin​board​.in links: