Just a Book

I struck out three times at the library this week. One was a Ben Bova novel about two brothers on opposite sides of the stem cell/cloning/immortality issue. It started pretty well, but then kept switching between first person protagonists in the first three chapters. I like the first person perspective, but I guess I don’t like to get into a new head with every chapter. I might give this one another try because Bova is a fine writer whose work I have enjoyed in the past.

The other two looked like good stories too, and the one I began reading started well. However, what I had missed in both cases, and what was not advertised anywhere on the books’ jackets, was that both were buried in the middle of an -ilogy. One was a second book, and the other a third. This fact was not made clear in the frontispieces or title pages either. You really couldn’t figure it out until you read the back cover testimonials carefully. I took both back to the library and made a desultory effort to find the beginnings of each story in the catalog, but our small library either never had the earlier novels, or doesn’t have them anymore. Perhaps the buyers for the library were deceived as easily as I was.

I don’t like to jump into the middle of a multivolume story. In fact, I’m almost to the point where I just disdain -ilogies alltogether. I was introduced to them by Tolkien at the age of 10 or 11, and ruined for them by Jordan at the age of 45, when, after fifteen years of rambling through eleven increasingly incoherent and plodding volumes in the Wheel of Time series, the author departed the mortal plane without finishing it. I think WoT would have made a really great trilogy.

These days it seems more than half the new volumes at the library are part of a series. If I see “Fifth Volume in the Dreams of Balthazar Chronicles” I just put the damn thing back on the shelf, only slightly more quickly than I would if it were the first volume. My aversion is selective. I’ve been known to go out of my way to get complete sets of O’Brien, Gemmell, and Cornwell, not to mention Mary Stewart. In O’Brien’s case the Aubrey-Maturin books actually stand pretty well on their own, and as for Gemmell, Cornwell, and Stewart they are just worth it, and how. But my weariness of the -ilogy marketing approach just makes it a lot harder to win me over. I’d like to see more really good single volume stories. I’ll be fifty years old in a year and a half or so; I can’t even be sure of living through another Robert Jordan.

And while I am on the subject of books it would be remiss of me not to mention the most lamentable trend of all, which is neatly encapsulated by the title of a book I was looking at in the library last night: “Robert Ludlum’s The Bourne Sanction by Eric van Lustbader.” Robert Ludlum cannot write any more Bourne novels, because he is dead, and van Lustbader shouldn’t be writing them either. “Tom Clancy” is another one. He’s still alive as far as I know, but 95% of the stuff I see with his name on it was written by someone else. Hopefully, the publishing industry has been learning along with the rest of us that pursuit of money for it’s own sake isn’t the point. I’d just like to see good books. The rest of the business will take care of itself.

The Completeness of Code

I’ve been thinking a little bit lately about the notion of completeness in programming. I think it’s a valuable concept because those of us who write software have a hard time defining what the word “done” means with respect to our product. The old saw about model railroads is that they are never finished, and I think a lot of us feel the same way about the code we write.

A similarly ephemeral concept is that of correctness. When is a body of code “correct?” Can a given piece of software be “correct” without being “complete”? The problem with correctness is that software is too complex to support any but the narrowest definitions of the term. We could define correctness as the state of development at which a piece of code produces correct outputs for all possible inputs. But it’s difficult to assert that any non-trivial system meets even that fairly specific definition, and that definition leaves out a lot of possibilities for things to go wrong due to external factors.

In practical terms software is perceived to be complete when it does all the big things we asked for it to do. This idea is reinforced by methods of requirements definition such as Use Cases, which focus on large-grained behaviors of actors in the system. I think it’s safe to say that we can get all that stuff right, and yet not have “complete” code.

So what is complete code? I’ll take a stab at a definition: Code is complete when it produces the correct outputs for all possible inputs, and fails safely and gracefully in all possible situations where a correct output cannot be produced. In my experience it’s often that second part of the definition that gets short shrift in the development process. Time and again I run up against code that takes the straightest possible path between input and output, and ignores a slew of potential boundary conditions and failure points along the way.

Putting the blinders on and dashing straight for the finish line is usually defended as pragmatism and a “get ‘er done” attitude, and there are times when it is absolutely a virtue. If you ever do a technology start-up you’ll encounter many of those occasions, often strangely correspondent to meetings with potential investors. But for just about any system that has to actually run reliably and do important stuff in a production context completeness is a more important quality than brevity. Brevity will make you feel good now, but it will cost you in the long run.

Unfortunately completeness is hard to see, doesn’t provide any immediate benefit in the eyes of users, and is therefore something they hate to pay for. Buying an incomplete piece of software is like buying an old, worn out car with a new paint job and refurbished interior. It feels great, and it’s fun to show it to your friends, but step on the gas and the wheels fall off. I’ve seen the wheels fall of a few software systems when the throttle was opened. I guess it’s a lot easier to place a value on completeness when the lack of it means you have to walk.

Deep Doodoo

The New York Times has an interesting article today on various efforts to search the “deep web”, including a project at Google (of course). The deep web is defined as all the information in web-connected databases, in contrast with all the information that is encoded in HTML on static pages.

I’m using the Times’ descriptions, but obviously there’s a lot of slop here. First, the deep web would really be anything that is hidden behind a form POST or querystring, as opposed to being statically encoded in a page. Querystrings can be linked to, and search engines can already crawl those links when they are presented statically. For example, Google does a very good job of indexing messages written on forums, which are always accessed through a querystring or posted form data.

So, the term “web-connected” database must be taken loosely, even though it applies to the vast majority of cases. The real challenge is how to get past the data submission layer which human surfers use to tell the back-end engine what they are interested in. This is, as Alon Halevy of Google says in the piece, “the most interesting data integration problem imaginable.”

But it is also a business problem, and one that is unlikely to be solved. This isn’t really distinguishable from issues I wrestled with back in the late 1990’s, while engaged in the development of online banking technology. The holy grail of such technology, for companies that are not banks, has always been to integrate all the account information from various financial institutions. Quicken and Microsoft have been pseudo-collaborating for years to try and make this happen. They may have given up by now.

If they have, then it’s because such integration is not at all the holy grail for companies that are banks. They have no interest in having their information, which they pay to create, store, maintain, and retrieve on demand, de-branded and used to add value to some third party’s website.

These “deep web” initiatives face the same challenge. The NYT piece talks about the difficulties of understanding the semantics of the search interfaces, with solutions described that include querying on the entire dictionary to find out what the database contains. Well those semantics are perfectly understandable to the customers and users of the people who paid to create those interfaces. If I owned one, and noticed Google’s bot driving up my database utilization by trying to query huge blocks of semantically-related terms I would block it in an instant.

These efforts are misguided, because they attempt to do an end-run around the whole value proposition for putting this data on the web in the first place. It would be better to focus on a collaborative API that allows database owners to make certain slices of their data visible to search engines via semantic queries, in return for greater traffic and more convenience for their users.

To The Person Who Did This

I’m sure you felt, as I did, that today was a surprisingly fine day to be out in the Pine Barrens. The weather was sunny and warm, a rarity for February even in this mild state. The roads were very wet. That’s probably because there is still a layer of frozen soil a foot or so down that is preventing drainage, and creating the deep mud holes you and your buddies look for on days like this. Most people, myself included, don’t mind that you enjoy “mudding” in the Barrens. Despite the fact that you chew up the roads and make passage harder for everyone, we recognize that these woods belong to you too, and that you deserve to enjoy them. There’s a certain amount of cameraderie, however miniscule. We didn’t buy 4WD vehicles to drive on pavement either. So we wave and smile when we see you and your posse coming, mud dripping from every exterior surface, eyes bloodshoot and heavy-lidded, beer cans rattling around in the bed. Just some boys having some fun, is what I imagine most of us think.

And then you go and do something like this. I wonder if you know, or would care if told, that the road in front of the hole you were playing in was once the route of the Tuckerton Stage, which for many decades in the late 18th through middle 19th centuries was the fastest way from Camden to the shore; that the bricks your wheels were churning up (I doubt you noticed them) were hand made from Jersey clay, and once formed the foundation of Cranmer’s Tavern, a major stop on the stage road; that the depression you were spinning your wheels in is an unexcavated archaeological site dating to the colonial era, when the Pine Barrens hummed with industry, and towns like Mount, Washington, Harrisville, Martha, Hampton, and many others formed a web of life throughout the now-empty woods. If you haven’t heard of these places, you can be forgiven; not that many people have. But Mount, at least, you should know, because it’s the place you were trying to plow with your Gumbo Mudders.

You probably don’t know this, but many of the state forests in New Jersey do not allow much vehicle traffic at all. If, in the future, it happens that all of us are locked out of the Pine Barrens, we’ll have you to thank for it. Unlike you, the State knows that Mount was once there, and that Cranmer’s Tavern was once there, and the good people whose charge it is to see that neanderthals like you do not rob future generations of their heritage for an afternoon’s thrills don’t like to see people driving their trucks through archaeological sites. That’s why there’s a fence at Martha, and ten feet of earth over everything of interest. That’s why there’s a fence at Harrisville, or at least that’s why there was one, before people I imagine to be very much like you started ripping it down. In the end, it will be a lot cheaper to just ban vehicles than to fence off everything you try to destroy.

Do us all a favor: stick to the roads from now on. There is plenty of deep stuff for you on marked ways. If you can’t manage to stop acting like the entire forest was placed there for the sole purpose of your thrill-seeking enjoyment, then none of us are going to have access to it at all. And that would be a shame.

The Best Use in the World for AJAX

Everyone likes the AJAX client-server interaction model for websites. Using Asynchronous Javascript and XML the client browser can display a page and then issue requests for additional or updated data in the background. It’s very cool, and frameworks like Google Web Toolkit or AJAX extensions for ASP.NET have made it easier than ever to accomplish. Gone are the days when everyone worked with raw XML, the DOM, and XMLHttpRequest. Now you can write client-side code in Java or even C# and have it compiled into client-side javascript that is fully AJAX enabled. So here’s a modest proposal: now that it is so easy to do, let’s all agree to use AJAX to load banner ads. I don’t know how many times per day I end up staring at “Waiting for ads.doubleclick.net” or something similar in the status bar, while the browser page remains blank or incomplete. What would be wrong with displaying some text in the banner space and then fetching the image from the ad servers in the background?

Firefox

Well, today is the day I removed Internet Explorer’s icon from my desktop. I have to admit that my capitalist principles were trembling a bit as I relegated the little ‘e’ in its orbit to the trash bin. Surely a well-run corporation can make a browser that is more complete, better tested, and more reliable than a bunch of guys working for nothing! Oh, well. The fact is that I have had Firefox’s icon on my desktop right below IE’s for a couple of years now. If you’re a developer then testing scripts and pages under both is a requirement, and Firebug, a “peel the onion” web forensic tool that runs as a Firefox plug-in, is probably the most useful web development tool I have ever downloaded. But FF was my back-up browser.

Lately I’ve been running into more and more sites that don’t render correctly in IE. I think the first one I noticed was Slashdot a few weeks back. Articles that didn’t display correctly in IE displayed just fine in FF. A couple of forums based on PHP Nuke were next. Again, articles and posts displayed correctly in FF but not IE. What was going on? Was there some wide agreement among web developers to stop catering to IE’s eccentricities? One could hardly blame them. As a developer who has done extensive javascript and HTML with styles I have wanted to tear my hair out a few times, and it isn’t even my primary gig. The last straw for me was when I downloaded the Google Android SDK and found that some of the local html docs didn’t work right in IE… but again worked fine in Firefox.

So, out with the old, in with the newer. I changed the file associations in the registry for .htm and .html files. I visited all the news sites and forums where I have perma-logins and established the cookies in Firefox, and then deleted the IE icon as previously related. I’ll give IE another go when 8.0 is released, probably, but for the moment the team at Mozilla is doing a much better job. I read recently that some young Aussie Microsoft developer had the nerve to ask Steve Ballmer at a conference why the company continued to invest in IE when open source renderers like Webkit were much better? Ballmer didn’t fire the guy, and actually seemed to be listening. It was a good question. Perhaps they will come up with the right answer.

Little Hucksters

When I was a kid we went out at certain times of the year and knocked on people’s doors and sold stuff. Mostly it was wrapping paper and greeting cards, or perhaps Girl Scout Cookies if you were a girl. There were pretty much just two kinds of children’s organizations that did this back then: Scouts of either gender, and Little League teams. It was a way to augment the amounts that parents paid, with the rationale that as a purchaser you were supporting good things being done in the community by these organizations (such as keeping a bunch of kids occupied on weekends).

When something works, it gets adopted. Over the years more and more organizations started pushing their littlest members out onto the sidewalks of America. Few people resent the GSA for peddling cookies, but they are the original masters of door-to-door heartstring tugging. What about everyone else? This year my three daughters were asked to sell pies, magazines, wrapping paper and greeting cards, nuts and chocolates, cookies, and fruit door-to-door. The basketball and soccer teams wanted in. The chorus wanted in. The PTA wanted in. The schools themselves wanted in. Wait… what’s that? Aren’t our schools supported by property taxes, which in this area are damned high, along with state and Federal contributions? Why yes, they are, but that doesn’t mean they don’t want more! Everybody wants more money and a bigger budget, so the schools now send kids out selling, and the organizations inside the schools send them out, and the school even holds a yearly Christmas Store where my kids can use dollars that they extracted from me by crying piteously to buy (for me!) little plastic Chinese-made products of zero utility or value.

It’s getting ridiculous, don’t you think? My daughters are kids, not little Tin Men in the grass-roots marketing division of China Inc. I don’t mind a little exposure to this sort of thing. I do think it teaches some important lessons about interacting with people, doing business, and the essentials of the customer relationship. But enough is enough, folks. If my kid belongs to an organization and they need the $25 or $30 in profit share that they will receive for the parcel of cheap goods she sells to her neighbors, then I will happily write a check. If what they want to do costs more than I am currently paying, then tell me that, and I will raise my contribution. But don’t assume that our whole family will hit the street to sell junk so you can pad out the budget. It ain’t happening anymore. I don’t want the stuff they’re selling, and I am pretty damn sure none of my neighbors want the stuff they’re selling. With money tight and the economy missing on a few cylinders, now is a good time to question the wisdom of this approach to fundraising.

A Cheap Piece of Crap

I have a family. We live in a frame house in the suburbs. What we do here on our acre is process Chinese appliances. I’m not sure how we got the job, or when, but it’s not that big of a deal because it isn’t that big of a job. In fact all we have to do is use the appliances until they break, and then throw them out. It takes very little time from when a new applicance is unpacked until it fails, so we are able to do quite a few per year. We use one, break it, then look at each other and say “What a cheap piece of crap!” Then we bin it and head down to Walmart for another assignment. Over the last ten years we have processed approximately 124 hair dryers, 76 curling irons, 40 coffee makers, 32 motorized dental appliances, 21 toaster ovens, 15 vacuum cleaners, 7 electrically powered devices of unknown purpose, and 3 dishwashers. So I think we’re doing our part.

There are also the things we buy that break at some point, but which actually cost more than the gas + time to go get another one at Home Depot, and so some of these we have had repaired, like the $450 clothes dryer that burned out a circuit board after three years, or the “Schwinn” elliptical exercise machine constructed of welded steel that just broke in two. Okay, I am pretty heavy, but it was steel, and it broke. Just a cheap piece of crap. At certain times I can’t help thinking back to my Mom and Dad and their household. Sure, it cost a month’s pay to buy a new washer or dryer back then, but once you had one it lasted twenty years instead of ending up rusting in some landfill within the decade. Like my percolators. All 12 of them. I happen to like percolated coffee. Keep your $20,000 six-cylinder Japanese steampunk brewer and give me a pot with a basket and a bubble on top.

Thankfully you can still find percolators amidst the barren waste of drip machines. They cost $59 and last about six months. A friend of mine received a 25 year-old percolator from one of his relatives, and it works like a champ. As it should, since there is very little in our technology-fueled world that is as dumbass-simple as a percolator. For that matter there isn’t anything all that complicated about toaster ovens, or vacuum cleaners, or dishwashers. I’m a programmer, and what I do is the most complicated thing there is in time and space, so I laugh loudly at the crude simplicity of these greasy electromechanical devices. The only excuse for not building a percolator that lasts longer than a political news cycle is that you can’t afford to, because nobody will pay you for it. And why should they when they can grab a cheap piece of crap at some big retail outlet, use it until it collapses from shame, then toss it to the curb where it will magically disappear?

I used to be a staunch free-trader. I sincerely believed that free-flowing trade would increase the prosperity of the entire world. All it seems to have done instead is fuel the growth of big-box retailers as the US-side logistics and fulfillment arm of China Inc. I’m rapidly becoming a protectionist, because I can’t see one positive thing that has come out of it. Yes, everyone can afford a new vacuum cleaner now, because it costs less than spit. But if they can afford to buy a new one every two years because the old one broke when the cat looked at it, then they can save up and buy a good one that will last ten years. Free trade hasn’t made vacuum cleaners affordable: modern production methods have. U.S. manufacturers can make good products that are much more affordable than their equivalents were 40 years ago, but nobody will buy them as long as companies like Walmart can flood the market with throw-away crap.

Companies don’t have to operate this way. Walmart doesn’t exist because cheap goods are available overseas and readily importable into our economy. That trade has made them larger, but they would be successful even a world where everything had to be made here. Scale matters, and so does efficiency. Walmart sells cheap Asian goods because they can, and because they can people have come to expect these things to be cheap, and because people have come to expect these things to be cheap all the old-line American names like Magnavox, and Raytheon, and Westinghouse, and Schwinn have been sold off to Asian manufacturers, and their U.S. businesses are nothing more than marketing front-ends. Can you really be a world-class power when you don’t remember how to make anything? We need trade, but we need trade to be put in its proper perspective. We need a level playing field, so that Americans have jobs building things that Americans use. We need to relearn how to complete on quality, rather than price. Economic security is still security, and it’s time U.S. politicians remembered that.

FJourneys

I don’t write often about things I own. I don’t, for that matter, own all that many things. Well, that’s a lie, sort of. I “own” a lot of stuff, but most of it is household crap, or actually belongs to my kids, or my wife. I’m talking about things that are mine, and that for the most part nobody else cares about. I have a Martin D-18, and a couple of good computers, a few hundred books, my Canon A650-IS, and a 2007 Toyota FJ Cruiser. Pretty much everything that isn’t clothing or tools fits in my small office off the kitchen. Except the FJ.

When I bought my truck (from Muller Toyota in Glen Gardner, which dealership I heartily recommend to prospective Toyota buyers) gas prices were just starting to head north again. Sales had fallen off. A lot of people had bought one when it was the coolest new thing, only to encounter its true character and trade it in. Inventories were building on the new and used sides of lots across the country. I was able to get a good deal. That was a little over a year ago, and in the last fourteen months I have had a chance to put the FJ through just about every kind of terrain that it will ever encounter under my hand. That covers just about everything except rock-hopping, which I have no interest in unless the rocks stand between me and something neat. I have collected a few pictures of the truck in various places. Hope you have a chance to check them out.

I’m not quite a motorhead. I don’t have time to get greasy very often. But I am a motorheart. I love my vehicles, and I love to be nuts about them. By the time I buy something I have spent six months, minimum, researching every angle of it. Success, to me, is when I get into the thing a year after taking delivery and still get a charge out of driving it. The FJ does that for me, and more. It ain’t the perfect vehicle, about which more below, but it is hands down the best 4WD truck I’ve ever owned, and one of the best vehicles of any type that has ever graced my driveway. It’s funny-looking from some angles, pugnacious from others, but tough as nails and more capable in stock trim than any 4WD to come down the pike in a long time. The first time I test-drove one I broke into a spontaneous grin that lasted an hour and cramped my cheek muscles, and I swear to God that still happens, even if I’m just heading to the deli for cigars.

Let’s face it, very few people really need a truck like this. If the ones who do were the only market they’d have to pay $80k to get a base model. Truck manufacturers have long been selling these rigs to the armchair suburban adventurer, and many of those units never see anything more challenging than some snow in the winter time. Over time the realities of this market have pushed SUV’s, as we now call them, from simple, tough utility vehicles to AWD-equipped crossovers with leather seats and all the acoutrements of luxury. Many of the people who buy these things rushed to get the FJ when it was new and interesting, only to discover that it is a throwback: it’s a simple, tough vehicle. Note that I didn’t say “utility” because even I couldn’t keep a straight face while typing that. The FJ has about as much practical utility as a Harley Soft-tail.

Not that it matters. What you get with the FJ is a combination of a few things that make it shine: the welded body on a heavily-gusseted 4Runner frame; the nearly 10 inches of clearance under the differentials; the torquey 4.0 liter V6; the old-fashioned tough-as-titanium part-time 4WD drive train; active traction control and rear lockers; the generous amount of suspension travel; sharp approach angles; the truly excellent road manners and driveability. The truth is that it’s the closest thing to my 1980 Ford Bronco that you can get today: it’s just a truck. If that’s what you’re looking for, and pickups are out, then what else are you going to buy? A Jeep? Please. We FJ guys occasionally get a little good-natured attitude from Jeep guys. I tell them there are only two words needed to explain the wisdom of my choice: “Chrysler,” and “Toyota.” Jeeps are good vehicles, but you have to get a Rubi to have the capabilities of a stock FJ, and as far as road manners and handling go… it’s not even close. Like I said… Chrysler… Toyota… just repeat that a few times. We’re not comparing apples and oranges here.

As for capability in the terrain the vehicle was built for, I’ll line my stock FJ up behind any Jeep and go where it goes, as long as we aren’t hopping rocks. People who hop rocks break stuff, and the ones who are good at it will admit they break stuff. They’ll even joyfully relate exciting tales of breaking stuff. I’m into not breaking stuff. Beyond that, if you’re laughing at the FJs offroad abilities then you haven’t driven one. Ask the guy who had to stop his Wrangler and air down his 35’s on Cape Hatteras the other day, while I scooted past him on 32 PSI stock Bridgestones. The FJ pretty much goes where you point it. A couple of days later and not far from there I used my strap to yank a 3/4 ton Home Depot utility truck out of the sand. Didn’t even bother getting into low and locking up the rear. A good-looking blonde girl standing nearby pronounced herself surprised that the FJ could do it. She shouldn’t be, but I guess it’s that whole funny-looking California surf beach vibe thing that the Yota marketers were shooting for. Underneath the retro-cute exterior this is a ballsy damn truck.

So what’s not good about the FJ? A lot, actually. Enough that, if you are the ordinary American truck buyer and you’re perusing this site, I can say confidently that you don’t want one. The gas mileage is abysmal for a small 4WD. If I can get 18 mpg on the open highway I’ll write a ballad about it. The truck is boxy, the windshield is nearly verticle, and it just shoves its way through the air at great cost in naptha. The suicide doors are stupid. The rear seat is barely usable. There are no windows that roll down behind the front seat, and the rear is like being stuck in coach class on a packed flight with no ventilation. The windshield is so narrow and forward that you have to lean in to see stoplights. Rear visibility is not worth discussing. There is a lack of interior storage. The plastics scratch too easily. The factory roof rack is ridiculous. The bumper wouldn’t stop a trotting poodle. In fact the only thing standing between Toyota and having a truly legendary utility vehicle is that it has so little true utility. It’s a two-seat adventure machine that sucks on gas. Oh yeah, you need to be an optimist to own one of these.

As for me, I’m an optimist, and I’m optimistic that when another twelve or fourteen months have passed I will still be getting a thrill from driving my FJ to new places, or old ones for that matter. If you think you’re like me, then you might want to give this truck a try. If not, then please don’t buy one. If I want to sell mine and get a ’09 sandstone I don’t want to be competing with your trade-in. You’d be better off with almost anything else short of an Excursion.

Covering the Bases

Something occurred the other day that got me thinking about complexity and the huge costs of covering your bases. It was just a little thing, but it caused a fair bit of trouble. We have an Eclipse project that builds remotely on an AIX box. The make target refers to a build variable that contains environment settings and other important information to pass to the server-side make. One of the experienced devs on the project was helping me debug the build and sent me some terms to add to the build variable. To get them to me he IM’d them. I copied the variables out of Kopete and into the build variable edit box in Eclipse.

Thereafter the build started failing repeatedly on the remote end. The dev looked at the build variable. I looked at the build variable. Everything was perfect… but it wouldn’t run. It took about half a day of trying various things to make it work before we realized that when I had copied the text from Kopete into the edit box in Eclipse it had included a carriage return. That was causing the issues with the make command on the AIX machine. To my mind this is a clear bug. A single-line edit should not invisibly accept carriage returns. I can understand a few rare cases where you might want to accept a CR/LF, but then you should display it as something other than whitespace, since by definition in a single line edit there is no other way to indicate the presence of a CR/LF.

But this is by no means a rant about that. This isn’t the first time I’ve lost a chunk of productivity to a silly error. Eclipse has hundreds of inputs and for whatever reason a bad decision was made on this one, or something was left unnoticed or undone. It happens. The occasion simply served to highlight for me something which has prompted me to climb up on the soapbox more than once over the last twenty years: inherent complexity. Everyone wants software to be simpler and more robust, but few recognize that the current complexity of software is inherent in the things we ask it to do. My Dad sometimes has reason to rant about the complexity of his computer when it doesn’t work right. He’s an engineer, and I occasionally remind him that a CNC drilling machine is difficult to learn to use correctly too, and the average personal computer is one hell of a lot more complex than that, because it is not tuned to a specific purpose.

The increases we are able to achieve in usability are subject to the same laws of diminishing returns that govern investment in any technology or method. We got a big jump when we went from punch cards and tape to terminals. We got another big jump when we went to GUI interfaces and pointing devices. Additional big gains will be hard to come by until, or unless, computers themselves are able to be much more autonomic, and be of much more assistance in guiding their users. That doesn’t mean we need animated paper clips that pop up and offer to fill in an email address for us. It does mean we need self-organizing interfaces that recognize the nature of repeated tasks on a per-user basis and internally proceduralize them so that they can be accessed and actuated at a higher level.

In the meantime, the average general purpose computer loaded with software will continue to appear dauntingly complex, because it is dauntingly complex. And in complex engineering environments it costs big bucks to cover your bases. Ask NASA. If it costs x dollars to shake out 95% of a given program’s inputs, controls, and environmental constraints then it costs 2x to smooth out the remaining 5%. What this says about the long-term viability of free software and the collaborative development model I am not sure, however I am sure that this whole concept is related to the general feeling that there is a lot of amazing FOSS software out there… and that most of it has more than a few rough edges remaining. Getting rid of those rough edges requires dedicated, and costly, testing and quality control, and to date only companies like Microsoft and IBM have had the economic punch to play that game. That’s why Visual Studio, for all its flaws, is a much more polished product than Eclipse is now, or perhaps ever will be. Money is still important.