In the past few weeks, I have been helping out some friends and customers, and the comments they made were akin to “but you are a genius!”. While it is flattering and everything, I must say that (unfortunately?) it is not true.
In my view, there are three different aspects in computers:
Knowing anything about the innards of a computer is just like knowing the innards of a car. Yes, it does require a good memory, and some experience, but there is absolutely nothing exceptional about it. Almost no one congratulates a mechanic, although he certainly deserves is much more than we do. After all, a computer crash isn’t likely to cause any fatalities, at least not the home/work computer…
If you open your computer, what you will find is just a bunch of cards, big and small, connected to each other. Each card has a specific role, but in theory, a computer can work without everything but the main one : the motherboard. When you have a hardware problem, its just a matter of guessing which one of the removable parts is faulty. Nothing esoteric here : we just remove everything we suspect until the computer works again.
The Operating System / Applications
This is more complex, as there is no visible part. It’s purely virtual. Supposing your hardware works correctly, a software problem lies in one of the various layers of the execution stack. Let’s clarify :
- the hardware is powered up
- the kernel (smallest possible set of instructions making a computer “usable”) starts, and inspects the hardware
- the OS is booted, helped in that by the kernel
- the applications run on top of the OS
So you see, just like with the hardware, the key thing is to identify at which point of this chain things go awry. Here too, the “repair” work is mechanical in essence : the pieces are virtual, but they all connect in a very specific way for a very specific role. Identifying and replacing the faulty one is the key. Nothing magic in there either.
Here, we change scope a bit. We don’t repair, we create. We are still based on a computer, though, so it helps to know the software well enough, as well as some tidbits about the hardware.
However, we operate in a very tight universe : the OS. The second constraint is the language. Basically, once we know the language and the boundaries of its effectiveness, we create a “formula” that answers to a specific problem.
Without going into too many details, developing is practicing a language in a specific context. Not so different than learning a foreign language and learning the specific customs of the country then. There too, no genius.
We are no aliens. We don’t have special powers. It doesn’t take more than any other technical skills to get. While it’s true that sometimes I feel like a computer has a personality rather than life, it usually takes after its owner. Mine is grumpy, but sturdy ;)
Just like doctors or mechanics, we have an area of expertise that doesn’t come without dedication. Just like them, the ultimate goal of our jobs are to put ourselves out of employment. Even though it means we would have to go in the mountains raising goats or suchlike, we strive by making the end-user capable of living without our help.
Another conclusion (because it’s what gets me itchy)
By the way, if you are yourself a non-technical person, and have a problem with your computer, and you know a “computer guy”, make sure his area of expertise includes your problem. Most of the people I went to computer class with wouldn’t know a thing about your printer. And most of the hardware-repair people won’t know the difference between IPv4 and IPv6, even if they both bit their backsides… Just like doctors and mechanics, each and everyone of us has a specialty, a specific area we like to work on. Don’t trust people who say they know everything about every hardware and every OS and every application and every language.
I’m sure you wouldn’t go to a proctologist to fix your eyeballs…