22 February 2015

The oldest programmer joke in the world, yet one I continue to find enormously amusing after all these years, is this:

Q: How many developers does it take to change a lightbulb?
A: None – it’s a hardware problem.

It’s interesting and mildly surprising how little software developers know about hardware.  I am pointing some of my numerous fingers at myself while making this accusation.  It should not be like this.  Among family and friends, I’m viewed as a “computer expert.”  There is a common assumption in this characterization that it means I know how to repair a problem with a machine regardless of the problem.  This is true to an extent and I’m able to diagnose and fix more things than the common man on the street and I can distinguish software problems from hardware problems in many cases, but it is not always an efficient process and I feel out of place dealing with the nuances of BIOS or EFI and cooling systems, boot records, power supplies, and such.  Tweaking and moving and replacing parts in a computer always takes me longer than it should.  To an extent, that’s Ok.  To an extent, this is a matter of not needing to know everything and you should be really good at some things and leave other things to other people.  At the same time, though, knowing more about the workings of a machine and the hardware inside is valuable and helpful and an excellent learning experience.  With the ease of buying a laptop and taking it for service if there’s a problem, it’s a hard case to make that you should be dealing with building your own hardware.  I’d argue, though, that all software developers (and all computer users) should build a machine for themselves at least once in a lifetime – and even better, at least once every few years, even if it’s not your primary machine you use for getting work done.

Knowing about how your computer works is valuable for several reasons.  First, it is useful to know what is going on in case you have problems.  A person with knowledge of how a software application was built is vital in supporting that software.  When production problems strike and an operations worker doesn’t know how to deal with it (which is a situation that arises because of a deficiency in the documentation and/or the software itself), it is the developer who ultimately gets the call.  This is because the person who built the thing is the person who knows the most about it.  When you build a computer for yourself, you may not get to know it as well as you know a system you wrote, especially when software is your primary area of expertise.  Still, though, you’ll gain an appreciation for the hardware and an understanding of the roles of the different parts you may not have had before.  You’ll be better equipped to understand problems you may face or ways of achieving greater performance from your system.  You’ll be able to communicate more clearly and intelligently if you do outsource dealing with hardware problems.  You’ll be better able to take advantage of what your hardware provides in software you write and use if you understand it better.

In addition, building a computer is analogous to building your body.  Proponents of the idea of Intelligent Design say that the Universe and all it contains, including the creatures of the earth, and particularly the human body and mind, seem like they were designed and this is evidence of a Creator.  I do not desire to argue about religion, but I do want to point out that there is another possibility for the similarity of human designs to natural “designs” – that rather than being evidence of an intelligence that designed nature, it could just reflect that humans take nature for their inspiration and examples of how to build.  One way or another, the design of computer systems and parts and the working together of the whole of a computer has a lot in common with the working of the human body.  Organs with distinct functions (that can be replaced with sophisticated medical capabilities), mitochondria supplying power on a cellular scale, cooling systems, circulation of resources like fuel, message passing via electrical signals, and information storage are concepts that have parallels in both computing and in biology.  You can learn a lot about yourself and those around you by getting into the parts that make up a working computer.

The nature of humanity and what it is that makes us persons is something worthy of debate and is a question of philosophy.  The characteristics of what constitutes a soul and/or the consciousness of a being is an interesting question without, it seems (at the present time and for the foreseeable future), objective answers.  To me, a human consists primarily of a consciousness enclosed in a meat case.  This case, like a computer case, serves to offer support to the operation of the consciousness via the bringing together of multiple different parts with different roles.  It is an organic case and motherboard set up for running a consciousness smoothly.  The system has multiple input devices and is capable producing output in many forms.  There is an abstraction over the input of materials for energy, building and repair of components, cooling, lubrication such that one port receive many different types of material and they are then directed appropriately.

Also, learning is just good in and of itself.  It’s never a bad thing to learn something new.

The best way to learn about something is by doing.  Learning about the human body is best done by using the human body in various ways and see how it responds to the task, what impact the operation has on the system, and how it recovers and returns to its previous state (or adjusts and moves into a new state).  Dealing with computer hardware is no different.  Building a system and going through the inevitable path of troubleshooting why things don’t go as planned, searching for information on how to diagnose which piece is causing which problem, and trying to tie together the parts that make up a whole is an exercise in learning rivaled by few other things.  In my last build, I received a faulty power supply and had to figure out how to use my volt-meter to test the power supply in isolation to prove that was the problem and to get a replacement before I could make the thing work.  It is a exhilarating feeling, much like what I would imagine Dr. Frankenstein would feel, to see what was chosen and assembled by one’s own hands come alive and perform in the intended manner.  In addition, you don’t want to be a “computer expert” who hasn’t built a computer.

blog comments powered by Disqus