Pearls of wisdom

March 6th, 2009

This blog always had more unfinished drafts than posts, but recently it's getting ridiculous. I do have a couple of drafts I seriously intend to finish (usually the drafts which don't make it to posthood during the first 4 hours or so go to the eternal drafthood land.) Until I'm able to think this stuff out to the point where I can share the results of my thinking, I figured I could share the far less scarce resource of Wisdom with ya.


Since I've violated the Golden Rule of Helping Friends with their PC Problems and attempted to help a friend with his PC problem, expectedly wiping out his hard drive in vain, I had many opportunities to explain the Programmer Paradox: how can a programmer fail to make a computer do as he wishes? While the difficulty of debugging a program without the source proved hard to explain to laymen, I think I've found a metaphor that does a good job. A programmer is to the blue screen of death what Mikhail Kalashnikov is to a loaded AK-47: just as helpless a victim as any other mortal, except for having a profound understanding of the mechanisms of his execution.


I would like to get some statistics on file encryption. For example, of all the files on the planet, X% are encrypted. Of all those files, Y% will never be read by someone due to encryption. Of all those files, Z% will never be read by malicious intruders. If I could lay my hands on the value of just one of these unknowns, I'd pick Z, because at least 100-Z% of the files will never be read by their owners. I would bet on Z lying somewhere between 0 and 1.


One of the key traits of good code is the ease at which it can be modified. One of the key traits of bad code is the high cost of modifying it. So good code is likely to deteriorate until it's bad enough to become hard to change, and bad code is likely to stay bad. In short, code has a strong tendency to end up bad.

This can sound worthlessly pessimistic, similarly, for example, to "It is easier to break a leg than it is to cure it, therefore, most legs end up broken." However, I think it's more analogous to aging – the accumulation of changes in an organism, observably causing most animals to end up dead. Similarly, code that is used will be changed, code that is changed will degrade, and code that degrades beyond a certain point will die.


Health tends to be simpler than disease. For example, everybody can brush their teeth but few people can treat cavities. Similarly, it's not very hard to maintain a sane development environment, but pretty hard to deal with the tide of bugs and of long-living branches resulting from a failure to do so. However, I'm generally optimistic about the chances of such cavities to be treated, and as usual, the optimism is based on the pain they cause – a strong incentive to seek and reward treatment.


There's this evolution vs Intelligent Design debate. Well, I don't know about life on Earth, but I sure have hard time believing in Intelligent Design in software. Code has to repeatedly survive exposure to users upon whom its fate depends. Yes, "users" can be a set containing just the author, but only if it's honest-to-God USAGE, that is, the author has to pay a price when the program is hard to use – like not getting important things done properly. Show me a program that someone finds useful and that wasn't subject to such evolutionary pressure, but rather was Intelligently Designed as useful.

I think that my intense hatred of the word "design" has to do with its prominent place in the speech of software creationists. These people are likely to constantly complain about not having enough resources to do The Right Thing in the ugly real world. They are also likely to give you software that you hate enough to wish to kill them, and be articulate enough to convince you that the problem is at your end, and fail to notice how this latter ability quadruples your desire to slash their body into square millimeter pieces.


I'll conclude with an off-topic request: if you know a good text advocating a collectivistic or other kind of heterodox approach to economics, I'd be very grateful for a reference. By "advocacy", I mean a text for laymen expressing support for a certain set of policies (as opposed to merely criticizing the effects of existing policies) – like Milton Friedman's "Capitalism and Freedom", for example.

1. Pramod SubramanyanMar 6, 2009

About the code getting worse until it becomes bad thing, isn't that a bit like the second law of thermodynamics? Taking order and turning it to chaos is free, but increasing order in the system requires energy. If you consider the set of all possible changes as the union the set of "good" changes and the set of "bad" changes, the good changes are a tiny fraction of the bad ones; there are so many ways to screw up and only a few ways to do it right.

Perhaps another way of looking at it is the following: if we assume a programmer has, say, probability p = 0.9 of selecting a good design for each individual change, 0.9^n -> 0 as n->Inf.

2. Michael LeuchtenburgMar 7, 2009

Of course, not every change must be a good one in order for the end result to be a good one. If I'm driving to my friend's house and make a wrong turn, that doesn't mean I don't get there. That equation only works for choices which don't wipe out earlier choices.

3. MarkMar 9, 2009

As regards a text for laymen advocating a particular set of heterodox economic policies, the real problem is there being so many to choose from. Just about any "-ism" has an accompanying manifesto, and often a text setting out its proposals in detail. Are you looking for *any* of them, or something within a particular range? E.g. do you want someone advocating communism? (And if so, which kind of communism?) Or left-anarchism? Or mutualism? Or moderate/reformist socialism?

Classic works advocating decentralized collectivism (i.e. neither capitalism nor communism) are Peter Kropotkin's "The Conquest of Bread" (2nd half; 1st half mostly attacks other economic systems) and "Fields, Factories and Workshops". Both are a bit dated, though, being 1890s, especially since they get pretty specific with some of their proposals for e.g. how farming would take place and how factories would operate.

"A Future for Socialism" by John E. Roemer (1994) is a modern exposition of market socialism, though apart from the politics oddly not all that heterodoxβ€” it's basically a fusion of socialist goals with orthodox neoclassical economic theory.

"Reintroducing Macroeconomics: A Critical Approach" by Steven Cohen (2007) is a decent textbook-like survey of heterodox economics, though it doesn't really advocate any specific one.

And there's always "The Communist Manifesto".

4. Yossi KreininMar 10, 2009

Oh, yeah, there's always "The Communist Manifesto", and I think it's a useful thing to have read, however, I'm looking for something less homicidal or at least masquerading as such in terms of attitude, and something that still hasn't proved as moronic as the abolition of private property in terms of policy.

What interests me in this context is advocacy of an approach with a different view of the optimal role of government than the view of the neoclassical theory. Thanks for your pointers.

Regarding the driving metaphor – to me it's more like driving in the midst of swamps, with most wrong turns bringing your vehicle deeper into a swamp, thus reducing the chance for correcting your path or otherwise proceeding.

5. David MathersMar 14, 2009

RE: heterodox economics.

I don't know the answer, but the major left/heterdox blogger economists appear to have collectivised at:

They will have the answer. Also, you might find this discussion very interesting:

Starts at the bottom.

6. Micky LatowickiApr 14, 2009

Try "against capitalism", by David Schweickart. As the title suggests, a good part is devoted to attacking capiatlism, but he argues that a better alternative exists, based on the experiences of the Mondragon region in spain, Tito's Yugoslavia, and Japan.

The main ideas were: businesses should be cooperatives, investment should be a democratic and distributed process (a local investment bank gets money from gov't, allocates funds to cooperatives), and cooperatives pay a tax proportional to the capital invested in them.

He proceeded to write "After Capitalism", which I haven't read, where he updates and elaborates his proposal.

7. MarkJun 20, 2009

A belated follow-up on this, but for "an approach with a different view of the optimal role of government than the view of the neoclassical theory", one reason it's hard to find a good statement, I think, is that to some extent it's become the dominant view of economics, so is something like orthodoxy now. A book like Milton Friedman's has a manifesto quality because it's arguing against existing consensus. The consensus itself tends to have a more expansive view of the role government should play, from countercyclic fiscal policies to social safety nets, antitrust law, etc. In the current climate, there's a renewed focus on financial regulation and its role in combating systemic risks to the economy, as well. A lot of mainstream economists would also like the government to be more active in taxing negative externalities, e.g. release of pollution, in order to have the market properly account for them.

8. anonymousOct 16, 2009

The deterioration of code sounds like it obeys the second rule of thermodynamics. There is also the continuum law of code: "Between every two bugs there is another".

9. Yossi KreininOct 16, 2009

Actually I usually refer to this as the second rule of thermodynamics for code, I think I didn't call it that here to make it sound smarter than it is (under the assumption that adding a smart word like thermodynamics into a pop tech blog post actually makes it dumber).

As to the continuum rule – thanks for closing a gap in my knowledge of codology.

Post a comment