People want systematic advice. Universal advice is always best. Lacking universals, then some sort of systematic advice will do, along with a comprehensive but attainable ontological key that one can use to quickly identify the reader’s position in their system so as to get at the advice part faster.
Then there is the lesser sort of advice, framed as a sort of artificial apprenticeship: presenting a series of lessons in the form of a long (and cumbersome!) path or journey which—if conducted diligently and mindfully—will instill in the supplicant the minimum set of skills that might possibly help them when “real situations” arise in their subsequent journeymen’s lives.
And finally, I suppose, there is the sort of advice which is no advice at all: a pile of tools, or user’s manual, maybe with some shoddily catalogued “here’s a pretty one” anecdotes shuffled in to ground the vast unconnected diversity of stuff in some stories. But of course the reader is left having to map their problems of interest onto that random pile of anecdotes, and reminded whenever they ask where to start that it depends, really.…
So I’m writing this book about Genetic Programming. In the seven or eight weeks I’ve been poking at it, it’s been a fascinating traversal of this hierarchy of advice-giving. And I think there’s something in the pain I’m feeling, a thing I need to get at.
All the other books I’ve ever seen are tool catalogs. Mine is—as far as I’m aware—the first of the long (and cumbersome!) journey kind. There are no examples of either if-this-then-that keys, nor of universal principles.
Yet the field is twenty-mumble years old. Isn’t that weird? What’s our problem?
Talking about talking about
I’ve just (nine hours ago) finished reading John Levi Martin’s excellent The Explanation of Social Action. Not because I’m writing about a social system, which depends intimately on the subjective and contingent framing narratives that modern nerds report using when they undertake to solve complex problems of a know-it-when-they-see-it category.
Oh no—heaven forfend! I’m writing about computers and artificial intelligence, of course. I was reading it just because, you know, I needed a break from writing about computers and technical stuff. Yeah.
Anyway, during this brief “break” from “technical matters”, I found myself reading this book in which Martin essentially tears the social sciences a new asshole. In a professional and well-cited and fundamentally helpful way, of course. Because historically, the main stream of the scienciest brands in the social sciences have been premised on models of people doing things as if there were externalities in their lives. As if their goals were inbuilt or concocted by external rational planners; as if their beliefs were genetic or self-contained rules spelled out in some extra-social rulebook; as if their intentions arose from some rarified “rational” think-space, or as matters of ingrained habit. Social explanation of that sort is—to paraphrase and elide a lot of Martin’s wonderfully snarky overview—trying to make all that messy people stuff go away.
There are a lot of ways to make all the messy people stuff go away in social science, as it happens; that’s at least one reason Martin’s book is so enjoyably long. You can confound correlation with causation, and use regression equations to suggest that deviations from expected behavior are “errors” on the part of willful rebels. You can impose a good old-fashioned Great Chain of Racial Being on folks you quiz in a desert, and ignore the inconvenient facts that folks in a desert have not only never seen line diagrams of cubes, but have no social frame for “how to answer right when being quizzed”. You can categorize the stuff people do into a few handy categories they themselves don’t use, and then ignore the little tense knots of contradiction inevitably tucked in at the corners. And—this is my favorite, for reasons you may already be sussing out—you can assume that human beings carry around formulaic computational and algorithmic rule-books in their heads, and as they perceive “situations” in their “environments” they refer to these just like computers do to decide among “plans”.
This is not an aspersion cast on individual sociologists (very much), but rather the identification of a systematic failure to think of people living in the world as being anything like people living in a world.
As you can tell, I enjoyed the… break it provided. Because of course I’m writing about how you can use computers to better perceive “situations” in your “environment” to decide among many “plans”.… Completely different thing.
Just to finish this arc, Martin is not pointing and laughing at his colleagues’ intellectual shortcomings here, he’s making the case for a rather different approach to the social sciences—a field approach. Not “the field” as in “out there with a pith helmet and notebook making observations”, but fields as in Maxwell and magnetism (or Pepper and aesthetics). Fields as composed by objects and their relation to one another, and more importantly as perceived by the vectors imparted on objects by their relations to one another. Very few things are new under the sun, and Martin does a good job building this notion up with an arm-long list of paths-not-taken in the social sciences, and ties it all up in a pleasant little bow at the end labeled “What else are you going to do?”
But the interesting thing, to me, is that in stirring the pot of sociology, Martin has wielded the same spoon I’ve been waving for years in… well, whatever the hell my “field” is. “Genetic programming” maybe (have I told you how much I dislike the phrase yet today?), or machine learning, or artificial intelligence.
That is: the Spoon of Re-drawing System Boundaries to Include the User as an Integral Part of the System. [Or, as I like to call it, SpoRSyBoIUIPotS]
So it begins
I hang out with well-meaning people who are sad much of the time, because they give good advice and people for one reason or another don’t follow it. Including me1. They are artists disappointed with how people fail to appreciate art, and craftsmen disappointed in how few people are willing to take a craftsmanly approach to their work-lives, and various other trainers of creative skills whose focus is not on skills so much as on stance.
And you know, it’s funny. The people I hang out with who seem least sad about people not following their advice seem to all be GP people and Artificial Life people, and the other ones who work in the various subdisciplines of complexology. This is not to say that they don’t try to train people how to do things, or that the people they have trained immediately do them correctly every time, but rather (I think) that they are still—twenty-mumble years into their collective adventure—pretty much OK with people who fail to follow in their footsteps.
And, thanks to John Levi Martin’s big blue hardcover, I may have realized what one difference is between the sads and the sad-nots. The sad people have all framed their work in broad systems of explanation: manifestos and First Rules of Fight Club and guildish guidelines. My complexological people are still in that heady low-hanging fruit stage where one can make a lot of headway by just modeling things and seeing what happens. “Look! emergence!” and “the agent is your model of the world; run them interacting to explore the consequences of your model” and so forth.
That’s changing, I expect. Smart people are nibbling at the philosophical edges of “emergence”, trying to systematize it away. Wolframism is growing in power, collecting together under one big Mathematical umbrella all the work other people have done in their enthusiasm. People have filled enough large volumes of collected papers on Why My Genetic Programming Approach is Better Than Yours, and they’re starting to notice that X writes one of these about Y one year, and Y writes one about X the next, and so they’re starting to frown a bit. And (as I’ve pointed out elsewhere), complexology is entering a stage of professionalization war, having its handiest tools coöpted (symbolic regression comes to mind), at the same time it’s denigrated into nonexistence wherever it threatens some other field’s sinecure (the Statistics folks already have their frowny faces at the ready).
So yeah; my GP people are going to start being mopey a lot more. And soon. Which I’ve told them so, but hey. I think it may be beneficial to look at what’s happened in a closely related field, in preparation. Maybe an ancestral predecessor.
How to write a computer program
Some of the sad people I spend time with are founders of the agile software development movement. I’ve hung out with them for a long time (more than a decade now), lurking in the background since back in heady low-hanging fruit days.
They are sad, I think, because they are forced to work with people whose job it is to think programming is not a social endeavor. Go ahead and parse that; it took me a while to get the words right.
The Agile Manifesto starts off talking about people, not process. And right there, they are snapping their fingers in the face of an awful lot of people who want their work to be simpler than that. People who want averages to be more important than deviations from the control chart. Who want programming to be an infinitely divisible production plant, that can be allocated among projects without reference to geography or sociology. Who want a clean separation between the body of workers from the mind of planners and managers.
Note, these aren’t all just “management” (whatever that is); it sounds to me as though there are plenty of programmers in the world who want to go sit in their cubicles for eight hours exactly, Be Very Smart for exactly the necessary time, and avoid as much as possible talking to anybody or letting them change “their” code in future.2
Go look at how they write instructional material about their work. Compare an agile “How to write a computer program” passage to an inagile old-fashioned one. What’s different?
As I see it, it’s a matter of SpoRSyBoIUIPotS.
Since the early days of the “agile coalescence”, when Design Patterns started popping up, there has been an accelerating shift from formalism and theoretical abstraction to what I can only call a more contingent and social view of programming. Look at the tools of the agile professional: they’re social (including those for self-control, and for managing the interface between you-the-typist and you-the-reader-of-typed-code), not anything to do with making code run faster or use less CPU time. They re-draw the boundary around “writing computer programs” to include “how people write” and “computer programs for people to use”. In doing so, they step away—ready for this?—from the very sort of sociological model John Levi Martin gleefully punctures, the one with Gaussian distributions of “production”, and some magical externally created “design” and Platonic “architecture”, and linearly decomposable requirements (“rules”) that must be complete enough to include everything that might possibly happen before anybody actually does anything.
All that stuff is, not to put too fine a point on it (and again eliding and rephrasing much of Martin’s excellent book), a load of bullshit as soon as you deign to include human beings in the stories you tell about what human beings actually do.
Stories of how software gets written by agile folks, whether instructional or anecdotal, are about people talking. About stories, and plans that change, and forehead-slapping realizations of what they’ve been missing. About involving the customer and the manager as part of the team.
Stories of how software gets written by inagile folks are about stocks and flows and feedback loops, and predicting the number of days until discrete large-scale events happen, and clean divisions of “human resources” into nonoverlapping abstract categories (Quality Assurance, Database Administration, Architecture, Programmer).3
The tools and design patterns offered up by agile folks are about situations defined as relations between people and objects. They aim to control the flow of information and knowledge, to minimize risks of miscommunication and faulty planning and bad coding, to help steer a course rather than follow a plan. The tools of inagile folks are about ways to bring the observed behavior of a project back in line with its foundational expectations: back on schedule, back under control, minimize “change orders”, how to stay on budget, how to expect it to scale with “resources”.
I don’t think there are any serious (and thoughtful) books on the general subject of “How to Write a Computer Program”. If there were, I imagine the two groups would approach the subject very differently. I can look at screencasts and blogs and think back to the ridiculous classes I’ve moaned my way through, and I sense a difference. The more “agile” ones involve practices, stances for the programmer to take in relation to other people and her own sensibilities and skills. The “inagile” ones involve some kind of catalog of tools—the theoretical and potential kind, like iteration and recursion, object-oriented and functional language structures, computational complexity and parallelization.
When you show the agile ones (insofar as they exist) to inagile folks, they will point out how it sounds more like a frickin’ etiquette book or some sort of martial arts manual, all about purifying your mind and showing the proper respect to some imaginary “user” or “customer” instead of learning the really cool fast way to make your program cool and fast; and by the way, it doesn’t even say how to write programs, it says how to write tests for programs. When you show the inagile ones (insofar as they exist) to agile folks, they will point out how every little cunning tool smacks of premature optimization, and how there is no statement anywhere 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 argument it invokes some weird-ass abstraction like “efficiency” as though every program had to be carved out of a block of wood one punch-card at a time.
The one describes the world as a field created by and among people. The other describes the world as driven by theoretical objectives fully external to people.
Which sounds kind of familiar, if you think about it.
And so?
I have no useful idea about “and so—”.
There’s something in there, and it revolves around how we tell stories to one another about how to succeed. It involves the dynamics of professionalization, the unrest and rebellion and messy frowny mad-making muttering that goes on when people don’t talk about the “same stuff” using the “same models”. It involves the trouble artists I know have had with “art funding” in our little dumb town, and the trouble trainers I know have had with students who have been sent to their “how to program” classes (both agile and inagile), and ultimately about the effective agendas of “statistics” and “bioinformatics” and “artificial intelligence” and some of the other junk that I do.
What I sense, and the noise I’ve been making for some time now, is that “my” “field” (Genetic Programming) is coming quickly up to that transition in its life, where it will start to fly apart into a variety of professions, either subverted and consumed or divided from within.
And maybe this is just me saying “This might sting a little bit” before I start cutting. I am sharpening the saw even now, and eyeing statistics, discrete mathematics, genetics and bioinformatics, finance and public policy all with a keen glint in my eye.
Because it’s time for those to start being seen as social structures that include the practitioner in addition to the “subjects”. Not because that approach is inherently “better” by some abstract external scale, of course. But because insofar as people want to use them to do things, purposive things, then they are social structures. The model of Genetic Programming as a sort of magical black box in which one pours “general problem-solving ability” presupposes that anybody knows what “problem-solving ability” is.
I have good friends and old colleagues (some are the same people!) in the field of Genetic Programming, and they cannot teach people what works—only some things to do. Their books are lists of things people did, without much explanation of why (even in a technical sense). They’ve eaten all the low-hanging fruit you can get without making the work a social construct, in the abstracted inagile stock-and-flow Cold War way that made computer programming degenerate into control chart management in the 1980s and 90s.
Somebody has to start teaching people how to stand in relation to one another. Yet I have no idea about “and so—” Just something something. Nonetheless, at least “something something” makes the line read correctly, in terms of meter…. Sometimes you have to fill in the words later.
The Problem of Genetic Programming that’s most pressing, as I see it, is the one that goes something like, “Why can’t we use the same systems we’ve had success with so far, which have automatically discovered such amazingly cool stuff (as reported in The Press!), and just scale it up a bit until it automatically invents complicated software like a word processor or even a little calculator? Perhaps if we establish benchmarks, more difficult test cases for researchers in the field to approach, then that will spark the technical and theoretical innovations that are needed to overcome this qualitative barrier?”
And so—
-
I “hang out” with myself a lot of the time… you know, typing and stuff. What? ↩
-
I’d like to know what the social dynamics of cathedral stonemasons was like. Were there “cowboy cutters” who made lovely little keystones nobody could use because they weren’t made to match their neighbors? ↩
-
I think there are perfectly reasonable historical reasons for this; they involve the Cold War, and the resource limitations of the period when computing as such was invented, and how hard it has always been to do long division and square roots and junk by hand. But that’s all another rant, with a lot more footnotes. ↩
Pingback: How to write a computer program | Pragmatic Genetic Programming
So you believe that the problem with GP (the field) is that it doesn’t acknowledge the presence of “the practitioner in the loop”.
Interesting .…er stance.
I happen to think that the problem with GP (and other areas of EC) runs deeper; that folks are trying to construct better combustion engines while adhering to the phlogiston theory of combustion.
This is not to belittle the social aspects of engineering, but to say that the time to address those aspects is after the science has been worked out. Evolutionary Computation’s real problem is the poor quality of the science at its foundations. The field wants for scientists (not to be confused with “theorists”, of which there are plenty).
So you’re writing a book on GP. At some point you’ll presumably tell your readers how GP works. (Not to put you on the spot, but … ) What will you say?
After a week’s worth of smiling and nodding at GECCO, I’d say the message depends on the audience.
For people who are technically competent software developers—that is, those who understand how and why to make the extra effort to produce clean code, the message is: GP is a prosthesis for accelerating generative projects. It can speed up the (human) discovery of novel solutions—but only does this reproducibly in the context of serious and active domain modeling, constant introspection and refactoring, and an essentially humane view of the project.
For people raised in the tradition that GP is in some sense “strong AI”, self-contained thinking-in-a-box: good luck with that.
So it may well be that there’s a missing bit of theory about the nature of the research program, as you say. But after twenty years’ time working with GP pretty much constantly, I’m willing to go out on an limb and say the “missing theory” has a lot more to do with poor self-definition and foolish habits among practitioners than it does with “science”.
Thus, what I’m saying in the book is aimed at people who ship working software, and I hope it doesn’t interfere at all with Computer Scientists’ plans to Explain Everything and How It Ought to Be in the Future. Because I’d love to hear what the future is supposed to have been, while the rest of us have been solving problems and doing work and stuff.
I’ve been thinking a lot lately[1][2] about the kinds of social dynamics that require “Re-drawing System Boundaries to Include the User as an Integral Part of the System.” I think the problem applies even more widely than you state here, places that don’t exactly have a ‘user’, cases so disparate I haven’t been able to come up with anything more concrete than:
“Being Welcoming to Outsiders”
Perhaps this is so general as to be useless. I don’t know.
[1] http://plus.google.com/110440139189906861022/posts/7zzuKSoR838
[2] http://michaelochurch.wordpress.com/2012/08/15/what-is-spaghetti-code/#comment-836