<$BlogRSDUrl$>

Friday, January 02, 2004

Was Clinton electable? 

The latest screed from Joe Conason (who is always worth a read) points out this preserved gem from the 1992 election about a previous "unelectable" candidate- Bill Clinton.

The quotes from this article are just priceless (quoting seems to be broken):

***

It is little wonder, then, that a growing number of Democrats are only questioning Clinton's electability in the fall.

"Both of these candidates are so flawed that there is no possibility of their defeating President Bush," former New York Mayor Ed Koch said of both Clinton and former California Gov. Jerry Brown. "Bill Clinton has no credibility."

Koch, among a number of Democrats, wants to force a brokered convention in which party leaders would regroup behind an experienced national consensus candidate as an alternative to Clinton--perhaps Texas Sen. Lloyd Bentsen or Tennessee Sen. Albert Gore.

In a head-to-head match up on March 20, Bush led by only 52-43 percent and Clinton was indeed within striking range. But as the weekly disclosures took their toll during the ensuing primaries, Clinton's margin fell to 54-38 percent on March 29 and then fell further to 54-34 by the beginning of April.

***

Yeah, that's the ticket. Replace the unelectable Bill Clinton with the shoe-in Al Gore. Um, right.

The only number this article quotes which Dean doesn't beat is Bush's negative opinion number- Bush Sr. had a 61% negative opinion rating, while Bush Jr. has only a 49% negative opinion rating. And compared to the scandal problems Clinton already faced (Genifer Flowers, the inhaling thing, draft dodging, conflict of interest accusations against Hillary, etc), by comparison Dean looks ready for sainthood. But we didn't have Faux News back then, and CNN was something approximating objective.

More thoughts on Deans "Disloyalty" 

Thinking about Josh Marshal's take on Dean a little more, it's obvious to me that Josh is unintentionally falling into the trap of beleiving the autocratic fallacy.

Basically, the autocratic fallacy is the assumption that there are a small number of "leaders" among humans- people with special genes or a destiny or what have you that have the ability to make decisions. Everyone else are sheep- lacking a leader forcing them to do something, they tend to just stand around and do nothing. Most people are incapable of making decisions any more monumental than what to have for dinner without some leader telling them what to do.

Stated so baldly, the autocratic fallacy is obviously false and more than a little insulting. And, I'm sure, were Josh Marshall to read this, he'd be saying "That's not what I think at all!" But the assumption Josh is making is that I'm a follower, I've just choosen to follow Dean. And were Dean to play nice, Dean would tell me to go vote for Joe Lieberman- and having no decision making capability of my own, I would. Note that Howard Dean himself doesn't make this assumption- that's what Dean was saying. Simply because he leads doesn't mean we follow.

Actually, there are authoritarian leader/follower power structures out there. The Republican party is a good example. The authoritarian fallacy is the assumption that there are only authoritarian power structures. That everyone is either a leader or a follower.

The cause of this fallacy is obvious. Authoritarian power structures are very comfortable to us on some level. It's a very primate-style of social organization- you are part of a tribe/pack, and the tribe is lead by an alpha male, generally the biggest baddest asshole of the bunch. This organization is very successfull (for all involved, although it is obviously better to be king than serf), predates humans, and is bred into our genes.
This is part of the explanation of the popularity of the conservative movement- and dictatorial movements the world over. They appeal to a deep pre-human part of us, to follow a real mean S.O.B. of an alpha male.

But we are more than primates. In evolving into humans we became more than our monkey ancestors. And one of the things we evolved is the ability to invent our own social organizations, rather than just using the ones that our genes have bequeathed us. And the most powerful of these was the concept of emergent behavior based social organizations. These organizations are exactly like alpha-male lead tribes, but without the alpha-males. No single individual is in charge- decision making for the entire group is instead distributed, each individual in charge of themselves, and the group level organization emerges from the stochastic sum of the parts.

A classic example of emergent behavior organizations, that the conservatives hype all the time, is the idea of capitialistic markets. Many participants, each operating independentally and making decisions by themselves, lead to global emergent structures. Another example of emergent behavior organizations is democracy itself. Democracy is not a contest to see which alpha male has the most followers, democracy is the marketplace of political ideas- it's people deciding for themselves.

In this sense, the Dean campaign is the ultimate emergent behavior. Dean didn't build this campaign- it already existed in the anti-WTO protests and the anti-war protests. People were organizing and communicating, and building a leaderless movement long before Dean came along. But it still doesn't feel "natural". It's not- it's a invention of humans.

This is exactly the problem I have with the Democrats. We already have an alpha-male party, with it's demagogy and it's mindless following of Der Leader. They're called the Republicans. The Democrats should be the emergent behavior party. But the Democratic leadership still insists on playing alpha-male games with me. Which gets nowhere with me. Howard Dean doesn't control my vote, and neither does John Kerry, Joe Lieberman, Al Gore, Bill Clinton, Terry McAuliffe, Josh Marshall, or anyone else who isn't me. I control my vote. And I will decide for myself who to vote for.

If there was one message I'd like to send to the Democrats and Josh Marshall, it's this: we don't have a king, we're an anarcho-communist collective. But I don't think they'd get the joke.

How Clark may help Dean 

This article, linked to from dKos back on the 29th (hey, I was travelling) qualifies as seriously interesting. It seems that thanks to rules enacted after Jesse Jackson's run, any candidate in any primary that gets less than 15% of the vote gets 0 delegates- the delegates are split up among those candidates who get more than 15% of the vote. Now, in a 2-3 horse race, this prevents boutique candidates from having an "undue" influence on the election. The fact that it was Jesse Jackson who caused these rule changes just adds an interesting race aspect into the debate.

But we don't have a 2-3 horse race, we have a 5-6 horse race- Dean, Clark, Kerry, Gephardt, Lieberman, and maybe Edwards. Not to mention a decent field of strong "boutique" candidates pulling 2-5%- Kucinich, Braun, and Sharpton, who as a group pull 10% or so of the vote away from the "main" candidates, leaving just 90% of the vote for the main candidates. 90/6=15. Life just got interesting.

So, for example, if this poll were the results of the New Hampshire primary, Dean would get 69% (42/(42+19)) of the delegates, Kerry would get the remaining 31%, and Clark would get nada. If everyone who voted for Clark, Edwards, Lieberman, or Gephardt, would instead go over and vote for Kerry, Kerry would get 19+13+7+5+3=47% of the vote,
giving Kerry 53% (47/(47+42)) of the delegates, and Dean only 47% of the delegates.

So, by the exact logic by which a vote for Nader was a vote for Bush (logic, I comment, that I have a slight problem with, but seems to be conventional wisdom), then a vote for Clark, Gephardt, Lieberman, or Edwards is a vote for Dean, at least in New Hampshire. If your candidate isn't going to win 15% or more of the vote, and most aren't, then you are throwing your vote away on a candidate who won't win a single delegate from your state.

I'm looking forward to this meme taking root. Should be fun.

Thursday, January 01, 2004

PNAC rides again 

Perl and Frum have sent a position paper to Bush that we should invade Syria and Iran, blockade Cuba, and declare Saudi Arabia and France our enemies. This is all sounding vaguely familiar to me.

For those who don't know, PNAC- The Project for the New American Century, was a group of second-stringers from Papa's administration who were torqued off that we Pappy didn't invade Iraq back in 1991. The project just happened to include people with names like Dick Cheney, Donald Rumsfeld, Richard Perle, Paul Wolfowitz, and so on- people who came into power with the Bush administration. What is even more scary is that a year before 9-11, PNAC was calling for a New Pearl Harbor to set their plans in motion. Note the link there- I'm not sending you to Alternet or IndyMedia, that's ABC News. The report they're talking about is here, from their own website and in their own words (the quote in question is on page 63).

It has always been PNAC's stated position that Iraq was just the stepping stone to a wider permanent US military prescence in the gulf. From the above report: While the unresolved conflict with Iraq provides the immediate justification, the need for a substantial American force presence in the Gulf transcends the issue of Saddam Hussein. In this context, Perle and Frum's latest paper is seen as a call to stay the course, and not a radical new foreign policy. What is interesting is why Perle and Frum seem to feel the need to call on the administration to stay the course. I don't know anything, but I have my guesses.

My call- based entirely on my lack of inside source, my distance from the power circles in washington, and my inately paranoid nature, is that the PNAC Clique is feeling the heat from two different directions. On one side you have the tattered remains of the realists, mainly Condi Rice and Colin Powell. But the real counter-balance to PNAC in the administration is, I think, Karl Rove- the god of the election. Karl has to hate the war- not that he cares one whit about brown people in foreign lands, they don't vote and therefor don't count towards getting Bush re-elected. But the steady water-torture drip-drip-drip of dead soldiers comming home is slowly but surely wearing away public support for the war, and by extension Bush. Bush's popularity numbers are the lowest they've been in the entire administration. Even worse, the trends are all wrong- steadily downward. If he wants to get Bush re-elected, he needs to reverse those trends.

This means the war has to end. And any invasion of Iran or Syria, means either pull out of Iraq, a probably public relations diaster, or instituting a draft, a gaurenteed public relations diaster. Karl wants the troops to come home (preferably to ticker-tape parades), the sooner the better. Which puts him in direct conflict wth the stated PNAC goals of using Iraq as a springboard for permenant troop deployments in the Gulf. But Karl is the golden boy, the rain maker. You don't question Karl. So the PNAC crowd goes after the group they can attack- the realists.

The realists, probably riding on Karl's coattails, have been winning recently. Condi Rice got control over rebuilding Iraq from Wolfowitz, and James Baker v3.0 is back in the headlines looking to get people to forgive Iraq's debt. And they get to say "I told you so" even if they're smart enough not to vocalize it. But the Baker trip was an interesting case- just as he was getting on the plane, Rumsfeld's Pentagon announced that only American companies, and companies from nations that supported us going into Iraq, would be getting the plum contracts for rebuilding- French, Russian, and German companies need not apply. This cut the legs out from under Baker's trip quite effectively. Unfortunately, this was the PNAC crowd reacting, and not acting- and even PNAC thinks this was a dumb idea.

But that is exactly how this fight is being carried on- as a bureaucratic knife fight happening behind closed doors. Perle's position in the Defense Advisory Board and Frum's lack of any official position in the administration relegate both of them to the peanut gallery. Which means they can't do more than shout "Win one for the gipper!" from the sidelines- which is exactly what they're doing.

The danger here is that the realists could be defeated, and Rove convinced that what Bush needs is a wartime boost- that the way to ensure Bush's re-election is to invade Syria or Iran. In effect, that what the problem with both the Kuwait and Iraq wars was a matter of timing. I've been listening for the drums to start up on this, but haven't heard them yet.

An even scarier possibility exists. That plans for us to invade Syria are already in progress, and the Bush administration is just waiting for another convient Pearl Harbor to give as the excuse. Hey, it's worked before...

Our so-called boom 

As always, Paul Krugman is required reading.

Krugman's closing question- "Can an economy thrive on sales of luxury goods alone?"- is one we all should be contemplating. Because it is obvious that what is going on is a transfer of wealth from the poor and middle class to the rich, and the creation of a neuvo-aristocracy.

Even worse, just like the upside gain is not being distributed at all evenly, the downside risk is not being distributed evenly either. This is one case where the poor and middle class are getting more than their fair share. Consider- what happens if the richest parts of our society get scared economically and stop spending? Demand drops, and companies lay people off. Poor and middle class people. You're not benefitting from this upswing, but you will be hurt by the comming downswing. And, as always, the gap between the rich and everyone else will simply widen.

Worse yet, the downswing for the poor and middle class might happen even without the rich slowing spending. Other than the store clerks at Neimen Marcus and Sharper Image, nothing says the stuff they're buying has to be made here. Remember that your job can be shipped overseas as well. "Class war" is already happening folks, and unless you're making at least a third of a million dollars a year, you are losing.

The silver lining in this cloud is that people are, on some level, aware of what's going on. The campaign motto "It's the economy stupid" which was the doom of Senior's presidency will likely also be the doom of Junior's. Junior needs to grow about 300,000+ jobs a month between now and the election or he will go down as the first president since Hoover to preside over a net job loss. Unless there is another major terrorist attack on US soil by arabs (Christian terrorists don't count), this election will be over the economy- a sure loser issue for Bush.

Monday, December 29, 2003

Why the Washington Democrats lost my vote 

Hmm. Interesting aspect of comments on this blog- the comment field allows you to type in as long a comment as you want, but crops you off. So if my comment on Dave's Blog entry seems to cut off in midsentence, that's because it was cut off in midsentence.

I am a Dean supporter, and I will not vote for Kerry, Gephardt, or Lieberman should one of them win the nomination. Dean's endorsement, which I'd expect, will not change this.

The problem is that the Beltway Democrats demonstratably don't bother listening to those of us outside the beltway except when they're running for office. Even then, they listen but they don't follow. They are all so surprised at the depth of opposition to the war that Dean has tapped in to- where the heck where they when I, Dave, and millions of other people were marching in the streets back in '02? How loud do we have to shout to be heard? Only once their presidential prospects were in jeopardy was any change in the rhetoric forthcomming.

And rhetoric was all that changed. I watched the New Mexico debate, with every candidate bragging about how they stand up to Bush. Well, when the time came to stand up and oppose the cutting of accountability for contractors in the $87B Iraq budget came, where were they? When the Patriot II act was being passed, where were they? Oh, right- busy piling on Dean for daring to sugest that capturing Saddam didn't make us any safer (an observation that, given the high security alert and dozens of dead soldiers in Iraq since the capture shows as prescient). In at least one case, the rhetoric didn't even stay changed- after the capture of Saddam, Kerry was up bragging about how much he supported the war. Well, guess what? Just like capturing Saddam didn't make us one whit safer, capturing Saddam didn't change my opinions on the war one whit either.

This is ignoring the last three years of craven appeasement of the Bush adminstration before this last quarter- the war itself, Bush's tax cuts, Patriot I, the Clear Skies act, the No Tree Left Behind act- every dumb idea that's come down the hill from the Bush Whitehouse has found widespread support among the Democrats. A large part of the reason the last three years under Bush have been so bad is because these morons have fallen down on the job. Before you try to blame me for being responsible for Bush's tenure for not voting for these Beltway Democrats, consider how much responsibility they hold for voting for Bush proposals.

They've had their second chance, and their third chance, fifth chance, and fifty seventh chance. They're out of chances with me. This isn't a case where I'm leaving the party, here the party has left me.

Why strong type checking is important 

Bognomicon is about more than opinionated political rants. We have opinionated technical rants as well! And just to prove that, I thought I'd fire off a rant on a subject that has been annoying me for a while (although probably not you)- the increasing trend in new programming languages away from strong compile-time type checking, especially in the open source world. The two big "post-Java" languages to have caught on- Python and Ruby- both are run time type checked. But the trend goes farther back than that- Perl, SmallTalk, and Scheme are all run time type checked. It has been stated to my face that compile time type checking was going the way of the dinosaur.

In a way, I understand the genesis of this movement. I did some Java programming over Thanksgiving. The problem with the Java type system is that there is no way to express an "of" type- I wanted an iterator of iterators of strings, and an arraylist of hashmaps from strings to doubles (or should I say Doubles- a minor but annoying design flaw of Java). But the Java type system has no way of expressing these types in the type system. Which was state of the art- for Algol 68, maybe. So you are required to be typecasting everything to and from type Object and depending upon the run time type checks to catch any errors. Which is the one thing Java, Perl, Python, Ruby, Scheme, and SmallTalk all have in common- none of them have a more powerful type system than Algol 68 did.

Run time type checking comes at a cost. It comes at a cost of memory, as every object needs to keep type information with it (this extra type information is especially unwelcome if basic types like ints and booleans are also objects). It comes with a performance penalty as the program needs to check the types for compatibility at run time- a non trivial cost. And unlike bounds checking of array accesses (which can generally be optimized away via strength reduction), these checks can never be elided- simply because one element of the list happens to be of type foo doesn't mean that the next element will be as well.

Run time type checking also comes at the cost of code stability as well. ML was originally invented as an experiment in proving code correct- now many bugs can the computer detect a-priori? In the general case, proving code correct is equivalent to solving the halting problem- so is perfect optimization. But that doesn't mean we shouldn't optimize our program, nor does it mean that if the computer *can* detect the error it should. And as a tool for detecting software bugs type checking has succeeded beyond our wildest dreams. As any ML or Ocaml or Haskell programmer will tell you, a good type system will find a surprising number of bug (surprising to those programmers only familiar with Algol-68/Pascal style type systems)- forgotten cases, bad algorithms, and more will generally show up as type errors in ML programs. More recent research (moving into the 1990s) have pushed type checking systems every farther- for example, type checking has been extended to detect race conditions.

Yeah, yeah- unit tests are the silver bullet and answer to all of our prayers. Well, for every programmer I know that come close to providing complete unit tests for their code, I can name at least 10 others who don't even try. Plus you have to deal with Murphy's law. You only need one moron who doesn't play by the rules to spoil the entire game. And I've yet to see a development team of more than 3 people which didn't include at least one moron. By being built into the compiler, strong compile-time type checking keeps everyone honest. Strong type checking isn't a replacement for unit testing, I strongly agree- but unit testing is not a replacement for strong type checking either.

"What about C++ Templates?" I hear you cry. Yes, as much as it pains to me admit it, in this sense C++ is better than Java, Python, or Ruby. Via templates C++ actually can express "of" types- my iterator of iterators of strings would have a type Iterator<Iteterator<String> >. C++ templates are a cure almost as bad as the disease. First off (though this is a minor nit), they're unparsable without type information. If you see the string "a < b, c > d;", do you parse it as two comparison operations conjoined by the comma operator (a holdover wart from C)- like
"(a < b), (c > d);", or as a variable declaration of an instantiation of template a, with parameters b and c, and a name of d- like "(a < b, c > ) d"?

An even bigger problem is the code bloat that instantiating the various templates costs- given a template of type foo, foo creates one instance of the code for foo, foo another, foo another, foo another, and so on. This is even assuming the compiler is smart enough to recognize that foo, foo, foo, foo, foo, foo, etc. can often all use the same implementation. All of sudden you're looking at dozens or hundreds of copies of essentially the same code- while even Java's cast-everything-to-Object implementations only need one. This is non-trivial, with the cost of a cache miss at 100-350 clock cycles, the amount of time your program takes to run (assuming it isn't I/O bound) is much better predicted by the number of cache misses it generates, and not the number of instructions it executes. By unnecessarily duplicating code, you are increasing the number of cache misses and thus increase the run time of your program. This problem gets to be an even bigger problem when the moron factor is taken into account. I have seen (no kidding) a templated array class that took not only the type of element held in the array, but also the length of the array as a parameter to the template. So the compiler generated different blocks of code for arrays of length 4 and arrays of length 5.

But both of those could be fixed with slightly different design decisions. If the standard committee had pick just about any other symbols other than < and > to designate a template, it'd be parsable. And if C++ had declared everything an object (and mandated unboxing for some types), templates could have been implemented as a type-checking wrapper around old Java-style Object (or C-style void *) data structures. Maybe Java's templates will fix these problems (probably not- to me it looks like Java is morphing more and more into C++). No, the biggest problem I have with templates is that they make generic programming exceptional or unusual. Generic programming should be the norm, not the exception. C++ programmers are beginning to approach this with their heavily templated programs.

Nor does strong type checking mean annotating the source code with lots of unnecessary type information- thanks to a wonderful invention known as type inference. This allows the compiler to automatically determine what type a variable or function should be without input from the programmer. Unfortunately, type inference wasn't invented until the later half of the 1970's, meaning that most programmers haven't ever seen a language with it. Those who do know about it tend to associate it with "fruity" functional languages, despite the fact that, like garbage collection, type inference does not require functional programming.

The problem with type checking is that it's sole purpose is to improve the quality of code- to detect and localize bugs. There is no incentive in the industry to improve code quality. Customers pay for features- and if they cared one whit about code quality, Microsoft would have declared bankruptcy years ago. Open source software is primarily driven by the commercial software world- your average open source developer is not an undergrad CS major with too much time on his hands, it's a professional programmer doing weekend or evening programming.

Without any market push to increase code quality, management is not just ambivalent about improvements, they are actively hostile. Think about it- how often does a manager go "we really should push the release off a month or two for code cleanup. Oh, and after this release I want to send a bunch of programmers off to train in some new language I hear will improve our code quality. A little delay now will be made up later on down the road three fold." No, managers go "We're moving the release up three months to release before our competitors do- time to market is everything. Weekends are now canceled from now until release. Get something out the door- no major changes if they can be possibly avoided! Just get something, anything working, and we'll worry about tomorrow , or maybe the day after." And customers reward this behavior. Combine this with an environment that punishes risk taking and not following the herd (i.e. you average corporate culture), and you have an environment where major advances are impossible, where real technological change has come to a complete standstill. Which is exactly what we see- an industry mired in 1968 and unable to advance forward.

The solution, I think- and this will be very controversial among my fellow programmers- is software liability. I'm not talking about anything extreme- just the same implicit guarantee that Ford motor company or Firestone tire company is forced to give. And, to a large extent, what we programmers and software companies want is rapidly going to become immaterial. Software bugs and maldesigns are already costing billions of dollars a year, and increasingly costing lives. This doesn't mean "release a program with a bug in it and immediately go bankrupt"- which is what people assume. When Ford releases a new car whose brakes, for example, fail after 4,000 miles, what do they do? They send everyone who bought the car a little note basically saying "we have discovered your new car has a tinsy little problem with the brakes- if you'd be so kind as to bring it by any Ford dealer, we'd be happy to fix it for free." Ford simply guarantees that they tried to fix all the problems before shipping the car, and that they're willing to fix reasonable problems if and when they arise. If you response is still "no one will be able to afford to develop with that sort of litigation overhead!" you are probably right- development as it occurs today will be lawsuited out of existence. The problem is that we're sweeping back the tide here- the question is not if the software engineering field will be subject to the same requirements the other engineering fields are, the question is when.

But what if I told you that there was a magic way to detect software errors automatically, at compile time? I'm already using it. Perhaps you might take a look too.

This page is powered by Blogger. Isn't yours?