(Editor's note: see this blog post for the beginning of the discussion of an Apgar score for software [1].)
"The division of the world into important and unimportant matters, which has always served to neutralize the key phenomena of social injustice as mere exceptions, should be followed up to the point where it is convicted of its own untruth. The division which makes everything objects must itself become an object of thought, instead of guiding it."
The doctor can start with observations of the patient that are more or less objective, although even in medical science, the observation of the patient factors out the patient's reaction.
The problem in MIS development is that the starting point is not objective, consisting instead of texts which are a mixture of honesty and obfuscation, and the interests of a subset of the real stakeholders.
For example, Apress author statements were a surprise simply because they provided enough information so that the author could spot a contradiction, and could "crossfoot" the amounts. This was a surprise because most statements, whether for author's royalties or utility bills, are not in this way self-checking, so that a billing error does not appear as a failure to crossfoot.
This occurs because in modern MIS shops, each line of code emitted by the programmers is reified and measured, and the ability to judge whether a feature is needed has been taken away. In some exceptionally tight ships it is a termination offense to write a single line of code or an Easter Egg that can't be "justified" by a business rule, whether or not the business rules (in turn cost-justified exclusively from the standpoint of profitability and, perhaps, following the letter of applicable law) serve all the stakeholders in the system.
Suppose a programmer, reading a "reinsurance" data base for doing accounting for insurance firms that insure other insurance companies against large claims and creating a distinct object for each distinct policy (which lists 1..n other policies it ensures) worries about direct or indirect "loops" in the policy network, such that policy A insures policy B down to policy D, which lists and insures...policy A.
This may occur in Hong Kong and other financial centers with intent to defraud, by arbitraging insurance policies with these loops as secret bombs, where the abitrageur gets paid for an uncollectable policy. In a fictional short story called HOUSE OF CARDS, Hong Kong writer Peter Gregoire in fact describes just such a scheme from the viewpoint, not of the programmer but of a scheming arbitrageur (in SWEAT AND THE CITY, Stories and Poems from the Hong Kong Workplace, Hong Kong Writer's Circle 2006).
The reinsurance programmer would probably be instructed to simply call the module for the start policy, and then enumerate through the first level of policies insured, recursively calling the starter module for each policy to price or otherwise process that starter policy.
However, his program will "loop" if a policy contains a direct or indirect reference to itself, since the data base NEED NOT BE INFINITE for an infinite loop to occur: this is because each policy appears to the module as an object reference in the heap, and there of course can exist multiple such references to one object.
I encountered this in building a software tool that analyzed module references by iterating through the tree structure of a build. My solution was to create a collection of found references as I processed the reference tree, obtaining quick rather than linearly slow access to the collection by replacing a linear search (which, in VB, used IS to detect object identity) by a keyed reference using object instance names which I sequenced and controlled from the constructor of the object itself.
The reinsurance programmer could probably use policy number to quickly check for a loop, whether direct or indirect.
But consider the situation of the programmer in a reinsurance company where the possibility of a cycle has not been considered.
We assume that people who work in such companies and wear sober suits would know about this problem and specify a check in the business rules, but in today's world, this assumption cannot be maintained!
Many people in business are simply unable to "think like a programmer" (eg., systematically in a way which is only human as in homo sapiens), and they cover up what should be a shameful fact by pretending to a passionate knowledge of life and people which they simply do not have over and above the shrewdness of the street, and office gossip. Typically, working on "the requirements" they will in fact probably miss this possibility since it demands a MATHEMATICAL insight into what constitutes a tree of references (which are all distinct nodes and therefore distinct, forming a proper tree) versus what is a graph with cycles, which from the viewpoint of the code is what you have as soon as a reference to the same object occurs in the tree.
And, Peter Gregoire's story raises the interesting point that in Hong Kong and other world financial centers, employees and managers of reinsurance firms are doing deals on the side which in fact, rely on the program seizing up when there is a loop.
Both sets of "users" can get a clever, and surplus-conscientious, programmer fired.
The business "vision thing" remains that the programmers will as automatons NOT "think for themselves" UNLESS they find some clever way of increasing profits.
Now, I do not know in the case of reinsurance whether regulatory boards require such a check, but Peter Gregoire's story seems to be a *roman a clef*, a writer with a day job writing about the finagling and shenanigans he knows.
I do know that when I worked on Cobol reinsurance, the original author used a fixed array in place of a stack for the processing, which limited the customer to only a few levels of reinsurance, and the array had to be continually rebounded. I do know that one of the programmers on this "software maintenance" project, one day, said "I got into computers to explore space and make the blind see: why am I working on this crap?"
There is in this data smog simply no verifiable, observable set of facts such as whether the poor little tyke is pink or blue.
Instead, the ultimate quality of a data system has to involve the legitimate needs of all of its users, not just its contribution to the "bottom line": in my reinsurance case study, the actual managers of the firm were arbitraging reinsurance on the side, and selling ever more complex policies to each other, and they didn't care about the bottom line; yet, they were self-appointed Users whose word, as far as Mere Programmers were concerned, was law.
Programmers want, desperately, to be considered as scientists serving some vision of the truth: are we not men? However, absent a guildlike organization of the profession, which is a non-starter in a world where the consumer rules, any social untruth, such as the failure to anticipate and prevent what would necessarily be an infinite loop in a reinsurance application, means that the programmer is instead using the network to defraud.
He can of course remove himself from liability, but he still has to live with himself.
For Adorno, in the quote from Minima Moralia with which I started this essay, the key was the division of the world into an agenda...of what is important "today" and what is unimportant and may be postponed, perhaps forever.
In cases where a manager doing arbitrage on the side didn't forbid the "feature", code to check for a loop would in most MIS shops fall into the famous categories of bells and of whistles, which is a convenient category for people who unlike real programmers get a headache when they think.
Adorno names the inferior, castaway term in "the division", social injustice. In fact, the media is a binary sorting tool "for winners only": losers, and geeks, need not apply for anything but a supporting role, and their concerns are always a detour and frolic.
Part of the "chaos" of the 1960s in France, and elsewhere, was the phenomenon of mere coders and cameramen and techs redescribing their daily work in political terms, and demanding, in Paris, some say in this direction. An early book on data processing I used to own describes a manager sitting down with everyone in the company to make sure his system would be accepted: such scenes are the exception and not the rule.
Anything is better than the sick powerlessness many nice, liberal, Kerry-voting, white wine swilling programmers must feel when they learn that Air America is going off the air because Microsoft has directed traffic managers not to place its ads with AA.
For while some programmers are fat thugs, most are NPR-listening and vaguely liberal, vaguely critical of what passes for political talk on hate radio. But a firewall exists between their political life and their all-consuming 16 hour day.
To connect "unrelated" issues is a disturbance because it raises the possibility that "George Bush" is no more the problem than "Richard Nixon" was in 1972. It was clear enough to me in 1972 that "Nixon" was part of the *zeitgeist*, not of course of the fashionable crowd, but of the men and women who made society go by getting up, like my Nixonian father, and going to work every day.
Likewise Bush perfectly expresses a more contemporary zenophobia...a generalized zenophobia that is terrified by slippage off topic, even a subroutine call from which our mental stack can guarantee return. An incuriosity correlated with hyperfocus on today's bullets, coupled with an acceptance, an almost infantile and regressive trust, that the PowerPoint has in actuality anything to do with reality "out there", the very notion of "out there" being in play at least until "human voices woke us, and we drowned" on September 11.
In GROUND ZERO, French theorist Paul Virilio questions the entire basis of many programmer's lives, which is based on assigning a hard cash value to "information", something which we can score as we do a baby's health.
But the baby is among other things a creature with rights and claims against all other creatures and things in the world, in a sense an "instance" of the class "human being" whose methods, in my OO terminology, exhibit a certain moral grammar.
For the physician, this pre-organizes the raw observables: trivially, the uterine cord is not included in the Apgar score.
Whereas any MIS system is in reality a relational set of human practices and procedures embedded in human relationships...such as misusing a field labeled "family member" to enter a business reference when the employee has no next of kin who is not a psycho abusive lunatic.
No clear boundary exists between the data system, the code, and everyday life. For example, Oracle can produce metrics that show that Oracle is better than SAP, but so can SAP produce its own metric. Oracle users in good faith laud its standard SQL and decry SAP as a sort of Kool-Ade in which SAP users have to be carefully trained in what is a far more complex, almost proprietary-complex, product. And guess what: if you talk to Steve Ballmer, SQL Server is better than either because its Total Cost of Ownership is low.
No conceivable "Apgar" score could ever resolve this three-way Budweiser challenge: this spaghetti western *paredon* between the Good, the Bad, and the Ugly (we cannot even decide into what slot SAP, Oracle and SQL Server belong in the spaghetti western).
This is because in a well run shop, the users are more productive in the system they know, and they've long ago been permitted to workaround its flaws. We talk of "the human interface" as if it may be separated, but absent this interface there is nothing at all, merely code running until the power runs out.
Shortly after Sep 11, "Microserfs" author Douglas Coupland wrote a fantasy about life after the death of human, animal, and plant life, a world in which software code randomly directed containerships and oil rigs in actions without meaning until the power gave out.
The thrilling conclusion is that a computerized society should in fact be run by people who know the difference between a tree and a graph, but who also know literature and law.
Tim Berners-Lee has been speculating about this too...but all too typical for you young whippersnappers, he wants "teams" of techs and scientists and philosophers to work together on the epistemology of the Internet.
The miserable record of "teams" unguided by a Chief Programmer, a J. Robert Oppenheimer should assure us that Berners-Lee's teams will accomplish nothing, since they will exhaust themselves in playing footsie and grabass.
But "in the matter of J. Robert Oppenheimer", the deliberate and malicious sacking of the inventor of the atom bomb for "being off topic" and suggesting political solutions in addition to scientific solutions, American society made it clear that it expected to be able to use high technology for its former ends of power and control by the wealthy. The result is George Bush, whose amorality, aliteracy, and incuriosity are music to our ears, because it whispers into the collective ear that it's same shit, different day, and we can just sit back, do our narrow jobs, and relax.