As is the case with a majority of software people, I enjoy the content created by Robert C. Martin (Uncle Bob). He’s a special talent and an endearing character. I enjoyed greatly listening to him converse with Wendy Closson on her podcast in the wake of the scandal relating to the software created at Volkswagen that would go into a “test mode” to make the vehicle pass emissions inspections. As always, he was thoughtful and filled with foresight into where the software world is headed and some potentially unpleasant outcomes for software practitioners resulting from public perception of the scandal.
Wendy and Bob talked about the need for software professionals to take upon themselves the task of taking responsibility for what we create. The pointing of fingers by executives of Volkswagen at software people as being the source of the problem was correctly characterized as a cause for concern. Bob’s assertion was that if we don’t take care of our own messes and make our own decisions about ethical behavior in our practice, someone else will step in and make things very unpleasant. Someone else will control and contort our profession in the name of “regulating” those developers on whom so much depends in this, our software-driven world.
It’s true that governments like to use any excuse they can to control anything and anyone they can in the name of serving the people. Regulation is often to the benefit, though, not of the population as a whole nor to the practitioners of the thing regulated, but rather to the lobbies and special interests that are the real power-brokers of governments and of the world. It is a well-founded concern to assert that software world needs to take care of itself if there’s to be any hope that we can write software using the most productive practices that serve our users, clients, customers, and whoever else we choose to serve. It’s easy to envision a future where reams of useless documentation are required to satisfy regulators for any software project. That’s already the case for anything involving medical information or financial data.
Help us Uncle Bob, you’re our only hope.
Interesting that Bob pointed on Wendy’s podcast to the Volkswagen scandal as a breach of an agreement with governments and cautioned against the potential for a future government set of regulations imposed on software development. The thing about agreement with governments is they are never agreements. Governments decide the agreement and people cannot resist. This does not excuse Volkswagen’s executives, managers, and developers in their deception. It adds some nuance, though, to the idea that there was a breach of an agreement. Assuming the regulations skirted in this situation were actually for the good of the people and not just for benefit of powerful government officials and special interests and/or the frivolity often resulting from the mixed incentives of bureaucracy (which is far from given), indeed there was a breach of ethics and morality. Deception is typically a sign of bad intent. There’s no question there’s something very wrong.
On Wendy’s podcast, she and Bob shared the opinion that software developers need something like the Hippocratic Oath, the admonition and commitment doctors make to ethical practice. The common and familiar formulation used to help the masses understand the intent (though not directly in the oath itself) is: “First, do no harm.” The idea is that a code of ethics is needed, that there are moral and ethical choices we face as developers.
Wendy was clear in saying that in a world growing increasingly dependent on software, creators of software have a great deal of power in shaping the world and the future. This is true and it is a great responsibility.
It raises questions about if we should exercise that power to be a force for good and how to do that.
I think it’s pretty safe to assume we can all agree that programmers should not create any code that does any harm.
Uncle Bob made this statement the first of the sworn principles of his “Programmer’s Oath”: “I will not produce harmful code.” I can agree in principle to adhere to this, but it’s difficult and fuzzy to try to come to a conclusion about what it means.
Ron Jeffries pointed out the example of working on software for weapons for governments. This is also something about which Linda Rising and I talked on my podcast. Both of them did not find this to be an immoral act, though Linda did point out that the remoteness of the execution of the harm often clouds judgment in this respect. To me, creation of weapons of war would simply be a violation of this principle and a harmful act. It would not be possible to come to an agreement on what constitutes harm. Aral Balkan shared on my podcast and other places the position that the tracking done by advertisers and companies profiting from advertising is harmful. In many ways he’s correct and in many ways this world of tracking is not predatory, but a choice we’ve made collectively.
It is not easy to conclude what constitutes harm.
Could it be said that when there are scarce resources and competition for said resources, that the winners who achieve success have harmed those without? I find this to be an indefensible position, but I believe I’m in the minority in many populations.
As a personal admonition to always act with consistency to one’s own conscience, I’m with the Good Uncle on the principle of doing no harm. I don’t think this applies, though, only to software developers or that there’s anything special about producers of code that makes us any different than any other human in this respect. This is human advice, not programmer advice. I also think it’s so subjective as to be mostly meaningless in trying to garner any agreement on behaviors acceptable to the community of software people.
As much as I’d like to go along with Wendy Closson and Bob Martin in establishing a society of responsible programmers and though I think there could be a reality of such a collection of mindful geeks, I don’t see any way it can protect our profession. The ethics of such a society are really just an aggregation of the ethics of the many individuals. There will not and should not and cannot be uniformity in the guiding principles of such a society. It’s every bit as absurd as the idea that a binary designation of “liberal” vs. “conservative” can classify the spectrum of human thought on matters of societal interaction. Ultimately, we have to realize that there is no we. We can help each other to be the best we can be, but ultimately, it’s up to individuals to decide what they value individually.
The rest of Uncle Bob’s oath is about always producing the best work you can and relentless devotion to quality. This is fine as an ideal, but I can’t agree to an oath such liberal use of the term always. Eric Evans made the famous proclamation in Domain Driven Design that “Not all of a large system will be well-designed” and that only the core problem domain should have all the devotion to great design that can be mustered. There is a time and a place to fully dedicate to crafting the best thing you can. There is also a time and a place to take shortcuts. Taking on technical debt can be the right move if it’s done consciously and in a supporting subdomain where the cost of a rigorous design and quality approach is not justified or in support of a business objective and with a plan to pay back the debt. Dogmatic adherence to the principle of always doing everything is not always the right choice.
Gregory Brown’s objections to the oath were well-founded and reflect a wisdom of experience in the real world and the truth that always and never are seldom the right approaches in a nuanced world.
Uncle Bob even included promising “I will do nothing that decreases my productivity.” This is near and dear to my heart and I’m all for optimizing the programmer. Still, though, getting things done is not all there is to life. Letting your hair down and getting drunk once in a while and just enjoying yourself is a valuable part of the experience of living. Eating nachos is usually a detriment to your overall productivity, but it’s part of fully experiencing what life has to offer and is occasionally enjoying such things makes you more human and enhances what you have to offer. Generally, care for yourself and don’t do things that decrease your productivity. Don’t make it a “never,” though, or you might forget to live.
The trouble with this oath is that it deviates greatly from the Hippocratic Oath. The intent of the oath for physicians is a practice of humility (“I will not be ashamed to say ‘I know not,’”) and and an exercise in commitment to applying the tools of the trade in a responsible way that puts the patient first. The programmer’s oath is too specific about practices for clean code and loses the idea of first serving the user/customer/client/stakeholder.
I don’t think there’s a way an oath can seriously guide a collective, because there really isn’t any such thing as a collective. What we can do is discuss and find where we agree and differ and all work to be the best individuals we can be. In the words of the great philosophizers, Bill S. Preston Esquire and Ted Theodore Logan: “Be Excellent to each other. And Party on dudes.” But don’t expect a future society where everything is perfect and the air is clean and the dirt is clean.