Cars and Computers
April 2007 (perspective of a Ph.D. student)
Recently one of the headlights on my car burned out, and the first thought that popped into my head was that I would have to take it to the local mechanic to get it fixed (if you actually know anything about cars, please refrain from laughing at me for a little bit longer ...). I was dreading having to go to an auto body shop, tell them that I needed to have my headlight replaced, and trying to look calm and confident while they told me that it would cost who-knows-how-much money (fifty bucks? a hundred bucks? the light bulb can't be that expensive, but maybe it's some proprietary foreign part so it's expensive, and labor costs may be ridiculously costly, I dunno). I knew next to nothing about cars, so I had no clue how I should proceed.
After asking some friends and doing a bit of research on the Internet, though, I came to realize that it was definitely possible to replace the headlight myself. I took out the owner's manual from my car's glove box and looked up the section on replacing the front headlights. The diagram didn't really make much sense since I had never popped opened the hood in order to see what the headlight enclosure actually looked like. Nevertheless, I decided to go to the local auto parts store, accompanied by my friend for moral support (since I had never gone to purchase auto parts before), buy a headlight, and try to install it myself. In the store, we looked so out of place as two shrimpy Computer Science grad students amongst a sea of tatooed, gruffy-looking auto buffs, but I managed to tell a clerk (in my manliest possible voice) the make and model of my car, and he promptly looked it up in their computer system and told me which kind of lightbulb to buy. It was only like $12 or something.
With lightbulb in hand, my friend and I drove my car back to campus and proceeded to try to figure out how exactly to install it. After opening the hood and looking around for a bit, we realized that it was actually pretty straightforward to install. However, I was overly cautious when I was installing the bulb because I didn't want to risk damaging any of the internal parts around the headlight. In the end, everything worked out really well, and I was able to change my own headlight for a tiny fraction of the price that I would have had to pay had I actually gone to a mechanic (and spare myself from being the butt of jokes in that body shop for days).
The main lesson I learned from this headlight-changing experience is that many tasks that initially seem daunting are actually not so difficult given that you have some knowledge of the domain. However, at the moment when my headlight actually broke, I was anxious and annoyed due to my complete ignorance of car mechanics. I had no clue whether it was even possible to replace a headlight without professional assistance, but it turned out that it was almost as easy as replacing a regular lightbulb.
Fear of Computers
The reason I just told this story about my headlight-changing experience is that I believe it is indicative of the feelings that arise in many people when something goes wrong with their computers. If something unexpectedly fails, many people have absolutely no clue what it would take to fix it. Is it just a minor glitch? A fatal unrecoverable crash? Can I just re-start the program? Will I have to re-install it? Will I have to buy a new hard drive? How much will it cost, both in terms of time and money? Remember, I had no clue how much it would cost to replace my headlight, and in fact, I grossly overestimated the difficulty of the procedure itself, simply because I had no experience with fixing car parts. If you are computer-saavy, then you know that many types of so-called software errors that people face are simply minor hiccups, like 'oh crap, the web browser crashed'—just re-start it. Or some annoying program is always running at boot-time and hogging the CPU, so just disable it. But if you're not computer-saavy, then it's very difficult to separate benign annoyances from major catastrophic failures.
The easiest (but most costly) solution is to bring the computer to an expert, such as a paid service, the IT team at work, or (a better alternative) a geeky friend or family member. Software is still not easy enough to install and configure 'out of the box' that non-experts can do it themselves—there is still a need for IT staff to install, configure, upgrade, and maintain software. Most people simply want to be users, not maintainers, just like how I am a user of my car, and not a maintainer. However, it's often intimidating for people to bring their computers into a shop to get it repaired, because they are unfamiliar with the geek culture surrounding computers, just like how I was out of my element when I walked into the auto parts store. People value the data on their computers, so they are afraid that if they let other people try to repair it, they might lose their valuable data.
By now, the Slashdot-reading, Dorrito-eating-in-Mom's-basement, hardcore 1337 computer geeks are probably rolling their eyes, thinking "how hard could it be? c'mon! everyone should be able to do these basic tasks on the computer and not ask such inane questions!" Well, think about it ... imagine a domain where you are merely a user and not an expert, and if something goes wrong, what are you going to do? For example, if you're not a car expert and something goes wrong with your car, you are likely to be just as confused or daunted as someone when their computer misbehaves.
Moreover, even if someone musters up the courage to do some research online for what could possibly be wrong with their computers and stumbles upon suggested solutions, he will likely be hesitant to fiddle around and experiment due to a fear that something will get irreversibly screwed up and their computer will cease to function. It's kind of like how, even though I can understand how to change my headlight in theory, when I actually went to do it, I was pretty paranoid that I was going to disconnect the wrong wire or push too hard on some tube or notch and screw up some other sub-system within my car. I didn't have any clue about what steps were safe to make, how hard I could push on certain parts, etc., simply because I had never really experimented with my car 'under the hood' before.
The Difference (yes, another Wallflowers song)
I think that the most important distinction between cars and computer software is that the internals of the car are comprised of physical parts whereas software is invisible and intangible. What this means is that, when dealing with cars, we can use the intuitions about the physical world that our primitive monkey brains have evolved to be good at reasoning about. I picked up a Dummies guide to auto repair and skimmed through it in an afternoon and got a decent idea of what lots of car parts looked like and how they functioned, mostly from reasoning about common-sense physics. I'm by no means a car expert, but at least I can begin to intuitively see how the parts fit together. However, the same cannot be said for software; it's very difficult to build up a mental model of how pieces of software fit together within a computer, simply because we cannot apply intuitions about the physical world to it. It took me years to learn about how operating systems, hardware, and user applications interact in a modern computer, and it's very difficult to learn how this works using an abridged Dummies guide.
Because all physical intuition is lost when dealing with software, it makes diagnosing software errors even more frustrating for most people because they can't even apply 'common sense' to help them along. For example, even though I was pretty inept at changing my car's headlight bulb, I knew that even if I pushed too hard on some panel near the bulb, my rear tire wouldn't suddenly explode. That's because it's common sense (due to our monkey-brain models of physics) that fiddling with the front headlight will not suddenly cause anything to happen with the rear tire since they aren't connected at all. However, when dealing with software, things like rear tires exploding when you try to fiddle with the headlight happen all the time ... for example, sometimes you can upgrade your anti-virus program and all of a sudden, Microsoft Word crashes sporadically more often. What's the link between them? I have no freaking clue. This is why dealing with software can be more frustrating than dealing with physical entities like cars or house plumbing, because we can no longer apply our intuitions from the physical world, and it takes years of training to build up a new set of mental models for how things work within the invisible software world.
Along similar lines, software can be extraordinarily complex because it's not bounded by the three dimensions of physical space. There are only a few logical ways that the parts in your toilet can be connected together or the components of a car can fit together (although cars are becoming more and more reliant on embedded software), and their interfaces are well-defined and have been refined over decades of field testing to achieve extremely high rates of reliability. There are also very stringent standardized quality standards for building cars ... there aren't car start-ups that just hack together cars in long hacking sessions in the garage, then receive tons of bug reports and fix them on demand. If they did that, thousands of people would die in horrific accidents.
Since I didn't want to write a conclusion, instead here are some other random tangentially-related tidbits that didn't really fit in elsewhere into this article: