Post-structuralist programming?
In saying that structuralist and post-structuralist developments in French theory might apply to programming, I am not trying to be fashionable.
Structuralism originated in Ferdinand de Sausurre's Course of General Linguistics in 1916, in which he made the case that language isn't a system of objects that magically "mean" other objects: there is no necessary connection between the symbol "Eiffel Tower" and that enormous thing in Paris.
Instead, for de Saussure, we call it a "tower" to make sure our listener doesn't think we're talking about a church, and we add the qualifier "Eiffel" to make sure that the listener doesn't think we're talking about some other tower.
As best I can determine, language is to de Saussure a set of operators that simply differentiate one phenomenon which interests us from another. It may have (at some hypostatized and thus untrustworthy story of origins) been originally an operator, such as yawp or blarg, which distinguished "good to eat" from "might eat me".
I am by no means an expert on Chinese; however, "expertise" carries with it its own careerist aporias (blind spots). Thus I remark while studying Chinese the radicals, a set of operators from some sort of dawn of time (that moment it is impossible to think behind): man, knife, speech, water, heart, roof, door, walking, grass.
These symbols don't separate "emotion" from "reason" for the very good reason that the categories of emotion and reason are themselves linguistic.
However, the post-structuralist phenomenon was the recognition, by Derrida et al., that de Saussure had to self-apply.
It is all very well to say from on high "language is a system of differences and no one symbol is anything but an arbitrary difference operator". But if you say it from on high, like Charlton Heston's Moses, you don't see that you are part of the system you'd describe from the outside.
We know at some level that whenever we make such broad statements, we're attempting the Godlike role of describing the system from the outside, and the refusal to recognize this knowledge produces buffooons, of advanced age, like Heston, who gave a talk in support of transcendant gun rights two days after the Littleton massacre: for if you can stand outside the system including the pain of the Littleton families, you can stand at a podium and act as if your language is beyond such considerations. This, is beneath contempt.
Post-structuralism recognizes that like a data base relational operator that produces relations from relations, language is a closed system which we view from the inside. Thus it uses different tools including infamous "deconstruction" which are less scientific or technical tools applied from the outside and more stylistic quirks applied remorselessly.
It recognizes that we're able to think about the system from the inside but could never think past "man, knife, speech, water" to become inhuman, and reveal the underlying "mechanism" (which doesn't have to be a "mechanism": this is shown by the fact that as software mechanisms get more complicated, they become more biological and less mechanical).
The problem in programming is that we think pre-deSaussure about the user's problem. We have these reified and fascinating formal languages which unlike human language let us stand outside the system like gods and we want to so formalize the user's world so as to be able to do the same: an effort which repeatedly comes to grief.
But this, is well known, and American computer professionals don't need the Frogs to tell them this.
Where it goes deeper is that the "deconstruction", the dissolution of our formal texts, goes one level deeper.
We think we can partition the data processing world into two sets of concerns: the "user's problem" and "communication" on the one side, and "code" on the other. Then we think that business-oriented guys with suits and MBAs can talk to the user, and English majoring wimmen can write communicative technical documents, while we continue to code...despite the little-acknowledged reality: the best programmers write and speak clearly about code.
What this misses is the status of any one program text, which Dijkstra pointed out (in, I think, so many words) is not (ever) a singular perfect text. It's a member of a set of alternative solutions, and the set's boundaries, considered as a set of reasonable alternative solutions, are fuzzy.
A program, in English-teacher language, is like Shakespeare's First Folio or the "text" (should read: the texts) of Joyce's Ulysses.
Gary Wells of Oxford has shown that in the primitive conditions of Jacobean England, mere typesetters of the First Folio may have merely mis-set Shakespeare's sloppy handwriting to come up with lovely but meaningless texts such as "a man almost damn'd in a fair wife", in the Othello play. Likewise, the very density of Joyce means its hard, after only 75 years, to determine his original intentions and accurately reproduce what he wrote.
But we can clearly recognize the fuzzy boundary, the post-structuralist difference between Ben Jonson and Shakepeare, or Yeats and Joyce, because we can sense what they are about: just as we can tell the difference in intent between a program that prints hello world and a void main() program that intends to do nothing. From the inside of a system we will never know from the outside, we in the final analysis make differences.
Appreciation of the fact that in programming, we're always and forever dealing with an abstraction (the "reasonable set of alternatives") allows us to remove our focus from any one member.
Furthermore, programming appreciative of this fact can ultimately REPLACE the current system of MBAs in suits, technical writers with issues, and "coders" and its failure rate. It already does so in Open Source, in which MBAs play no role and in which programmers tend to do their own documentation...with no loss in quality: quite the opposite.
Linus Torvaldys, after all, did not release circa 1990 a single text called "finished Linux". He unleashed a fuzzy concept called "hey, kids, let's write an operating system!"
This is why in my experience women, who code, generally are better than men, who code. Women in our society naturally start with knife, speech, water and heart and needs that must be met by pre-theoretic action whereas men are socialized to sit on their butts awhile and theorize...perhaps because mastodon hunting demanded a plan.
[Here I am on dangerous ground and I sound like Larry Summers: but unlike Summers I am not being paid to be a college president and I am not the magnifying and reflective glass of authority.]
Torvaldys succeeded because he proposed a verb and a community of action.
He did not need to read Derrida, of course, but his practice was post-modern: indeed, at the same time, Derrida was trying to deal, philosophically, with the very fact that institutions produce stone soup and dead-on-arrival "systems" while people produce value.
That is, we're told as programmers dependent upon the grace and favor of institutions to work as team members which is an implicit message that institutions can produce value...in contradiction to Marx who maintained that all value comes from human labor.
A post-structuralist programmer would, I think, use a number of practices honored more in the breach than the observance. Of course, he would not use Go To or hard-coded labels, etc. But more than this his code would tend systematically to be "more than what the user wanted".
This is because he'd view his role as necessarily marginal (a stance demanding humility). He'd reason that computers SHOULD understand the user's language directly, AND that we should live in a world in which organizations can even afford to state their business rules in a clear form.
And precisely because Moses isn't coming down from a transcendant, outside this world system to tell us how to code, even the humblest programmer has I think the right to think like Descartes, in terms not always of "the user's problem" and the "business needs" but in terms of the evolving rules of his craft, in whose building he participates.
What I mean here is that when I started using objects in a primitive OO language (Visual Basic 4) I found no guidance in textbooks written for C++ developers and had to Build My Own. But if we live inside systems then nobody can stand outside them and tell us what to do, although they can give sage advice from other loci inside systems.
Even if the user could use Prolog or SQL to express what C. J. Date calls "the what and not the how", we live in a society in which secrecy and lack of transparency are no accident. From the point of view of the organization, systems have to be "secure", which means excluding certain participants including the employees of the organization from all information.
[Discussions by programmers of "security" need in all cases to be informed by the knowledge of what "security" means. At Enron, it meant that the network admin, who installed Ken Lay's computer, could not access emails in which Lay advised his buddies to sell stock. Ultimately, it creates a world described by Dijkstra, aka the "real world": "at university we were told that only Truth matters: but here at Mathematica, Inc., we know that only Secrets matter."]
The code of a “post-structuralist†programmer would always be supplementary to "what the user wanted" in the sense that it would give the user everything she wanted, but suggest alternative solutions rigorously.
This post-structuralist idea is disruptive in corporate environments in which programmers are at one and the same time: valuable and scarce, not as good as they should be at what they do, and considered as necessary evils marginal, as programmers, to the mission of the business in all cases.
Post-structuralism would I think counsel the programmer to accept this marginality and at the margins exercise his marginal craft.
We'll never, even the best of us, be Chief Programmers as described in Frederick Brooks' The Mythical Man Month. Indeed, if you read the history of computers you may be struck by the marginality of the characters who participated, especially the participants who (like Ada Lovelace) actually "programmed" as opposed to the movers and shakers who avoided actual "programming".
My father was a Chief Neurosurgeon on surgical teams. What this meant was that unlike a humble "nice guy" programmer like Andy Hertzfeld or the late Jef Raskin, my father had to deliberately cultivate a formidable, nineteenth-century, and forbidding personality.
He "had" to keep nurses subordinate to his will and one of the ways he did so was by telling dirty jokes in surgery both to lighten the tension, and to continually assert the sort of authority that a traditional airline pilot also needs to, or thinks he needs to, maintain.
When nurses ceased in the 1960s to wear tight-fitting white short skirts, my father was all sad because in their dumpy surgical scrubs, the nurses seemed naturally willing to talk back: and when gay paramedics entered the scene, I could sense his anxiety in the way he’d complain about those fruitbaskets at the dinner table. Fortunately, he resolved the anxiety by becoming an honored teacher of whom younger physicians spoke well to me years later (I noticed that physicians from foreign lands liked him the best, just as today, I seem to relate better to "foreigners" from cultures of teachers and gurus). He also generalized his personal setbacks successfully into a critique, freed of self-interest, of the ways in which medical commodification undercuts the right to life of the aged, who are unreasonably deprived of life, he claims, by an overly narrow definition of brain death.
But circa 1980, I realized that any attempt on my part to become a Chief Programmer using my father's position as a model was doomed to failure. The wimmen of My Generation (including my lady wife) weren't having it, including on the job arrogance and late arrivals home) and instead of being well-received, my writings for Computerworld at the time seemed to generate hostility and anger in the company in which I worked.
In fact, around that time, any discussion, by any person in data processing, of "good" as opposed to "bad" praxis was immediately reduced to a Hobbesian "war of all against" all and a discussion of who was a "good" programmer (deserving in other words of absolute job security and annual raises) and who was a "bad" programmer (deserving of the flames). My supervisor, after reading my Computerworld articles, told me that I was to desist because unnamed fellow programmers had seen themselves in my discussion of bad style, and who was I to speak, after all.
If anything, on the Internet, this reduction of discussion of high professional praxis to interpersonal "trashing" is now today absolute. Comp.programming in particular is dominated by some characters who have made this reduction a fine art.
In 1981, I bailed therefore out of the struggle to be like what was necessarily an idealization of my father and replaced him with role models like Andy Hertzfeld, and, at my own company Bob Gaskins (who invented PowerPoint) and Whit Diffie (the encryption guru). These guys were unlike my father in that they were not armored in suits: later in life, Diffie did start buying fancy suits but he kept the beard.
But as the years went by, I found that even these role models, except perhaps for Dijkstra and Hertzfeld, had feet of clay. In particular I realized that they existed, in relation to the larger society, in a technical Bantustan in which they could only speak, in the political sphere, only about narrow technical concerns.
Furthermore, when they did speak out, I noted it was always in defense not of fairness, a political good I value, but in defense of absolute liberty as in the case of Diffie's crusade to keep public keys out of the hands of the FBI...a laudable goal, but one that did NOT empower Colleen Rowley to catch the highjackers.
Furthermore, their "libertarianism", their default political philosophy, seemed so often in both technical and nontechnical spheres to curdle into selfishness and "let's blame the victim, and feel all right". I began in other words to miss Nixon (who the Chinese liked because he did his homework) and my own father's Depression acknowledgement of the need for fairness and equity.
I came to the realization that programming, and by extension programmers, is/are essentially MARGINAL, and marginalizing. It's not rocket science or brain surgery and carries little of what Bourdieu called distinction. It is writing and as such feminized in our society, whence today’s geek anxieties: predominantly male, programmers seem always overanxious as regards sexual politics.
Ada Lovelace was a nutbar with substance abuse issues and her boss Babbage was the very type of "computer consultant" I knew, and worked for, in the 1970s: like the various charlatans I knew then, who for example tried to convert banks from Cobol to PL/I only to discover that programmers who couldn’t do good Cobol did worse PL/I, Babbage was a flawed man who wasted a great deal of Her Majesty's time and money in pursuit of a dream impossible given the state of Victorian machine tools.
Alan Turing was homosexual at a time when buggery in Britain was an offence; this of course is not a personality flaw: but he was marginalized. And while at Princeton, I noted John Nash's attraction towards hard-core programming and how terribly good he was at it, in contrast to more successful members of the maths faculty who didn't like to program and had graduate students "code".
Prior to Mathematica, Nash just went ahead and coded extra-precision arithmetic in C for his research in number theory.
I don't think programming makes you marginal or spooky, for I was both prior to 1971 when I first was able to use a mainframe and in fact programming helped me to straighten out a bit. Nor do I think there is any sort of systematic personality disorder like the fictional "Apsberger's Syndrome" than draws you to programming: the late Jef Raskin's biography makes it clear that he was a completely normal California kid in 1959 who just wanted to work on technology.
Instead, programming bears an objective relationship to society that is, I think, unprecedented in the history of labor and capital because programming combines labor and management.
Which is to say I'm old enough to actually believe that a well-ordered and just society could run on the basis of transparent and accessible rules under which the people agree to live under, and programming is definitive: the programmability of the Constitution, in whatever layers of well-structured complexity that have to be mastered, is a necessary condition of its fairness. Today, people generally don’t believe this.
Here, I am out on a limb. In this week's New Yorker the New York author and MacArthur "genius grant" recipient Rebecca Goldstein relates how when Kurt Go\del received United States citizenship, he sat up all night close reading our Constitution, and claimed to the examining judge that he'd found a bug or contradiction that would allow the US to be taken over by a dictator...and this was way before Bush v Gore.
When I first read about Godel (I will drop the indication of the diacritic), he was still alive at Princeton, and word on the street was that he had "gone crazy". He did, but we now know that the "craziness" was biochemical, based on self-starvation, and perhaps treatable with modern combinations of medication and talk therapy.
It had in other words nothing to do with Godel's hyper-rationality. Godel believed in the reality of mathematical abstractions and for him this belief meant that he could trust "logic" in reading even a natural language Constitution. For Godel, his famous "proof" (that any mathematical system is incomplete or contradictory) was less an indication that "the world is, ultimately, irrational" and more that mathematics is independent of our minds, because it does not conform to our hopes.
Modern Americans, and of course most programmers, "deconstruct" Godel's merciless rational reading of political texts by saying that "you have to use your common sense to know that people are irrational and not everything in politics is under control: lighten up, willya?"
They shudder at the very idea of some clown in a Ming the merciless suit using SQL to rule ze world for its own good. They prefer the current system, in which an elite, represented by Bush, which is in fact aliterate both as regards literacy and technology, which has little people do the actual work, uses channels of emotional manipulation to rule ze world.
For example, most Americans understand Social Security's essentials: work 'til you can't work no more, get a small check based on being dinged on your paycheck for so many years until you die. FDR explained it to their grandfather and he passed the word on to the kids.
During the era in which I started out, many ordinary programmers were still coding payroll systems because there were no service bureaus, and I wrote a payroll system at my university. The rules of FICA were explained to me and I coded them in assembler language. I used virtually structured techniques and sensible commenting in hopes that the code would be maintainable, and did not try to make myself indispensable. Silly me, not to have gotten “rich†(in some petty bourgeois sense) by having coded, like the character in Dilbert, an indispensable program and then holding the company to ransom: but owing to my imaged, idealized Father, I actually thought this was unprofessional and DISTINCTLY lower-clawss. Doctors, I thought, would doctor people up independent of their desires to get rich, and not make unmaintainable people by sewing them up with spaghetti after an operation even if they had to work 16 hours.
[I had not met the quack who advised me, at a prestigious Chicago teaching hospital, to keep smoking because he wanted to send his kids to college, who in other words was not able to talk to his patient man to man without pretending he was a tough guy, talking to another tough guy, who’d get the message.]
Today, however, we can be certain that ANY "reengineering" towards private investment accounts will be a nightmare and will be "coded" incorrectly by necessity because of the powerful political pressures on both sides of Congress, and the Bad Faith in which the Bush administration is acting: for in fact they cannot state what they believe, and this is that the American people do not need social insurance of any kind: "are there no prisons? are there no workhouses?"
[For if we lose the ability to talk straight we cannot even narrate our own lives, now. Can we.]
We would not after all agree to reduction in already small Social Security benefits. My Dad has voted Republican since the days of Tom Dewey, but you'll get his Social Security check when you pry it from his cold., dead fingers: all people except the superrich need the check as a basis for their retirement planning.
It used to be thought that the "conservative" would be rule-bound: hyper-rational: but modern "conservatism" is actually what the British marxist writer E. F. Hobsbawm called "the anarchy of the lower middle class", which thrives on political fantasy. It generates scenes where programmers are terminated for insisting that what the user wants is wrong and in which tax lawyers are forced by wealthy clients (new rich with upper class incomes and lower middle psyches) to hide income.
Like Godel in miniature, many programmers are "too" rational in that they see problems others don't see: I myself got into Hot Water at Nortel for discovering that a compiler failed in undefined, nonrepeatable ways because its parser had been hacked to violate the language syntax, and was told to be a Modern Guy, willing to hack the hack and not to do what I needed to do, which was bring back the compiler into compliance with the syntax BEFORE even addressing the "needs" of the "user".
At Nortel, I wanted to "factor" the problem into two distinct phases or parts for my own sanity, but was told not to do so, not so much by management as by fellow team members...for Nortel used team pressures in place of old-fashioned management. The team members were desparate to be on a successful project, where Nortel had defined success to mean nothing but "on time", and as such could not let me say "in week one, I will bring the compiler into conformity with its BNF: in week two, I will adapt its object code generator to 24 bits."
Instead, for FOUR weeks, I worked on the object code generator while working, after hours, on BNF compliance, while at the same time being audited by Ottawa's programmers...who concluded I was on track. The system was a success but I now have an ex-friend, another engineer who could never bring himself to admit that "compiler writing" was distinct from telephony. Instead, he said "all you compiler types are crazy!".
I was in other words not the image of my father. I had no traction: no authority, because my ex friend himself had no real authority: he thought of himself as an engineer, but Nortel thought of us both as replaceable parts in a business whose only goal was to create value for shareholders. As such, my hyper-marginality (as a "compiler developer" in a company moving, at warp speed, away from in-house development of tools) activated his own sense of marginality and deprofessionalization.
[I am here violating a Baby Boom rule: thou shalt not narrate your work life because thou are a small part of a Great Whole, and Your Story might hurt somebunny’s Feelings. But let us not speak falsely now, the hour is much too late, said the Joker to the Thief.]
Post-structuralism is the only way of reconciling your marginality with sanity, for it teaches you 'this too shall pass". Words DO have definite meanings in the sense that man, knife, speech, and water are important differences. It's not true that "pomos" are just irresponsible academics who don't have to meet a payroll or punch a time clock.
Reading Derrida at the time of the compiler struggle, I was able to realize that we were enmeshed in an uncaring system and that the fact that I had my own self-interest, in carving out a role as "the" compiler guy, was logically independent of the value of the compiler to the firm. As a result I was able to rid myself of any need to be recognized as I had thought my father was celebrated, and just, day after day, do the best job I could for the team...while responding briskly to their occasional abuse: in fact, for the most part, we got along and partied together. The ex-friend is an ex-friend because the wounds were never healed and recently, my lack of financial success seems to have frightened him: I am ten years older than he, and perhaps he sees the writing on the wall: if even a brilliant guy like me is living in motels or working in China, what’s in store for him: I tried to communicate the fact that I made unique choices for which I am responsible, but the lesson did not take.]
We're trying to persist in using rationality in an irrational world in which we are imprisoned within bodies and cannot think outside our needs but have to any way.
The American founding fathers tried to and failed to write a Constitution, a sort of very high level specification or program, that would be independent of their passions and needs, but they failed because of the ever-irreconcilable South and its ruling class. The French succeeded...only to be possessed for a fearful time, the Terror, by the very words they had written-down. The Soviet Union added economic justice to the list of demands, which only made things much worse.
Which is why, today, programmers have trouble with rationality: its dark side. All I can conclude is that like capitalism and democracy, rationality is pretty bad but the best we have. But it is a serial rationality consisting of the "next right thing", not some overarching plan: man, knife, speech, water.
In a recent book, philosophy is called “therapy for the saneâ€. This is why reading Derrida was helpful for me while working 16 hours a day on compilers.
Piaget
Must confess to unfamiliarity with his work in detail, boss. The post-structuralists were, I think, more pessimistic about "meaning" without being nihilistic, and that's why in the 1980s I was drawn to their work as applicable to data processing.
It seemed to me to be always the case that at some scale, data processing systems would become post-structuralist in that their users would use multiple meanings to confuse the situation.
For example, some guys in business use and when they mean or, as in "the requirements include both owning and renting".


Meaning and Objects
Piaget had some interesting ideas on the development of meaning, and the attachment of meaning to symbols like words "Eiffel Tower." With dictionary in hand, I read some of his work some years ago, and found it quite fascinating.
Based on what I read, your basic programming objects would start out dumb as a stump, and you'd have to keep on presenting them with their meaning and, suddenly, over time, they would grok their interfaces and methods, which were suddenly inherited from other newly understood objects. The richness of object interfaces and their abilities would grow over time as more and more object interfaces and methods defined themselves withing the context of the applications life.
That would make for some interesting QA test plans!