I always seem to be reverse-engineering software now, even as a user, subconsciously. For example: Cmd-Space to bring up Quicksilver—type “Language”—up pops the “Language & Text Mac OS X Preference Pane”—at the location /System/Library/PreferencePanes/Localization.prefPane.

Ah, so the title of a preference pane and its filename (sans suffix) are two separate pieces of data. Given what I’ve learned about Cocoa patterns from my experience with iPhone development, perhaps the title is stored in Info.plist inside the .prefPane. So I look at the file.

Nope, no title. But wait, this is a core piece of the OS, so it’s probably localized… and I find a likely candidate in the value of CFBundleName, ”Language & Text”, in Resources/English.lproj/InfoPlist.strings.

So perhaps Quicksilver appends “Mac OS X Preference Pane” to all .prefPane files. Perhaps it acts similarly for other file types. I wonder…
This sort of digression seems to be a central aspect of how I learn to work with software. It’s a similar kind of seemingly-undirected absorption of seemingly-insignificant facts. I suppose it’s a cost of complexity; one becomes accustomed, when working with software, to being constantly engaged in modeling, little by little, the behavior of systems created from the efforts of dozens, thousands, millions of people working in the field of computing over many decades.
Now, we in the field have striven to be careful and clever and have devised many strategies for making this complexity manageable, mainly through tactics of abstraction. But it’s still pretty damn difficult.
To update an old koan, “If you think you have a problem that you can solve with an abstraction: now you have two problems.”