Wednesday, June 06, 2007

The Rest is Mere Usability



I've just been reading this post about how some hacker has written a UNIX shell script that basically does what Time Machine does without the fancy UI. Of course, all Time Machine really does is make backups on a schedule ... right? So anything else it does is just Apple smoke and mirrors -- this stupid UI stuff that they do that confuses journalists and dumb rich people into buying their overpriced computers. Damn it, if folks just realized Photoshop simply performs arithmetic on 2D arrays of integers Adobe's stock would tank and elite command line scripters who only use vi would be paid better.

This kind of idiocy characterizes most of the "iPhone is a piece of junk" and "AppleTV is a failure" stories around at the moment. It's not like anyone much seems to believe these stories (go look at Apple's stock price) but they annoy me nonetheless. A lot of the response has been somewhat off point (iPhone's value isn't in its functionality, it's in its usability; AppleTV is a software device, if it doesn't do the thing you think it needs to right now: (a) don't buy it, (b) wait).

It's amazing how many programmers, in particular, seem to be incapable of getting it through their thick skulls that usability is actually most of what good software does. (Heck, when you consider usability to other programmers, it's often most of what bad software does. How often does your code contain more "functional" code than "interface" (to people or programmers)? Probably never.


Aside: I was talking to a colleague -- a software engineer, and a very bright guy -- who was bemoaning the loss of American programming jobs to places like India. I suggested to him that today, software is like everything else: a bunch of design wrapped around boring components, like screws and bits of wire, that are most efficiently made in factories none of us would care to work in. The value-added part of software requires tight integration of developers and designers and business people.

You don't farm out the design of the next Porsche to guys in a foreign country who don't speak your language (and don't drive on your roads) even though 90% of its components may come from there. The same applies to Photoshop. If software can be specced well enough that it can be outsourced, well it's either not very interesting software (in which case, why do you want to write it?) or very, very interesting software (in which case, it's only going to get written by the few people who are able to write it, regardless of where they live).

When Apple added a new (and excellent) handwriting recognition system to the Newton (following the launch debacle), they got it from Russia. Not because Russian coders are cheap (although they probably are), but because handwriting recognition was hard and those guys had nailed it.


The difference between what Time Machine does and (say) what you can do with a cron script or by dragging icons around in Finder is in (a) what it doesn't require the user to do and (b) what it allows the user to do.

It doesn't require the user to carefully specify what gets backed up and when. Designate where you want your backups kept and everything gets backed up. Done. Complicated decisions made which you're going to regret later: none. Keystrokes required: zero. Cron configuration required: none. Decisions required: none. Knowledge of Dumb UNIX Tricks required: none.

It allows you to, in the folder you're working in, roll back changes interactively and in context. Oh -- that must be when I accidentally deleted that file! Yes, that's basically the same thing as grepping your directory tree against various rotating backups and trying to figure out WTF you're looking at. The difference is merely a flashy UI.

The difference between Photoshop and a program that does arithmetic on 2D arrays of ints is a flashy UI. The difference between Time Machine and "cp" is a flashy UI. I'd like a flashy UI please. Thanks.

I won't even get into the functionality that Time Machine has and some random shell script doesn't have (e.g. ability to seamlessly ignore intermediate files that cache results, such as Final Cut Pro's render files or unlinked object files created by compilers) which allow it to avoid creating backups of things you will never need to restore from backup, and yet which probably occupy far more space (and change far more often) than the stuff you do need to backup, because that would just make these folks seem stupid and clueless.

Anyway, while I impatiently wait for Time Machine I guess I'll just have to rant against folks who think that a few cron jobs will pretty much do the same thing.