It's probably your fault: humility and other virtues programming taught me

Lesson 1: Humility

As a programmer:

If you want to learn humility, become a programmer. A thousand times a day I am not-so-gently reminded by my trusty computer that I have made a mistake. I know of no other profession where you can make multiple mistakes every minute and still somehow be considered “good” at your job. Failing is inevitable. Where to place the blame for that failure is a lesson that good programmers must learn and take to heart: it’s probably my fault. Over the years, I have worked with many developers who first look to external factors outside their control. I call these the “circles of blame.” The circles are concentric. In the innermost circle is code that I have written. That code rests upon the language it is written in, say JavaScript for example. That JavaScript is run in some kind of runtime engine. That engine is on top of a browser, like Chrome. Chrome runs on top of an operating system like Windows. Windows runs on top of the CPU. This is simplified. There are even more circles, but the point is that it is certainly possible that as you move out from your own work, there may be a problem in a different circle of blame; maybe it’s not your fault. The truth, however, is that the circle of blame usually stops with you. The problems and error I encounter are nearly invariably my own. This ought not to be depressing though, because it means that I have the ability to fix the problem. In the case where the problem really is not my fault, I will have done enough research that I am almost certain where the problem really does lie. Then, when I approach the person who I believe is responsible, I can say with some degree of assurance that I believe I know where the problem lies, and why I believe that.

As a human:

My experiences as a programmer ought to lead me to interactions with others where my default position is not that they are in the wrong, but that I am. Why? Because I know how fallible I am. I make mistakes all the time. We’ve all met people who blame everyone and everything around them for their misfortune. Perhaps that may be true, but we should always return to the circles of blame. These circles of blame are also circles of influence. The further from the first circle you move, the less influence you can exert. You can exert a lot of influence over yourself, less with those you know, and practically none as you move out to the public and society as a whole. Yes, those circles can be influenced, but they won’t be influenced by someone who hasn’t proved that the first circle, I, or you, haven’t shown that they are clear headed and thoughtful about why the problem exists. This is the entire purpose of Jesus’ admonition, “You hypocrite, remove the wooden beam from your eye first; then you will see clearly to remove the splinter from your brother’s eye.” Jesus’ words here are clearly about the fact that unless you understood your own circle of blame first, something you have the most understanding of, how could you possibly judge someone else’s fault, about which you know little? Implicit in this admonition is how the hearer will receive the message from the hypocrite. “This person always looks to others to find fault, yet never finds it in himself. Why listen to them?” On the other hand, if we develop a reputation for serious self-reflection, and an instinct to look first to ourselves for improvement and correction, then when we approach someone else about some fault they have that is affecting us, they will (should) take this admonishment with all seriousness. This will especially be taken seriously if we approach them with a spirit of humility: “These are the possible ways that I have considered that I may be in the wrong about this. This is what I am seeing, but I am always open to correction in case the fault may lie with me.”

Final lesson:

To stop failing, admit you are failing. If you are not willing to humbly admit where the fault may lie, you can not start taking meaningful steps to begin correcting your failure. Now, back to fixing this bug I created.