Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Uncle Bob Proposes an Oath to Programmers

Uncle Bob Proposes an Oath to Programmers

Uncle Bob proposes an oath to software programmers as other professions have, considering the importance of this craftsmanship.

A year ago, Robert C. Martin, a.k.a. Uncle Bob, noticed the importance of the software programmer, writing:

We rule the world. …

Nothing happens in our society without software. Nothing….

Without software: Phones don't ring. Cars don't start. Planes don't fly. Bombs don't explode. Ships don't sail. Ovens don't bake. Garage doors don't open. Money doesn't change hands. Electricity doesn't get generated. And we can't find our way to the store. …

Martin went on observing that having such a great role in the society programmers should be responsible and follow a code of ethics, to use the power they have for the good of the society. Programmers should decide what is to be their responsibility and it should not be imposed on them by the government or the employers. And he sketched a code of ethics inspired by the Order of the Engineer. A year later, Martin writes again on ethics, this time more about the quality of the code written, proposing The Programmer’s Oath that every member should take to “defend and preserve the honor of the profession”:

  1. I will not produce harmful code.

  2. The code that I produce will always be my best work. I will not knowingly release code that is defective either in behavior or structure.

  3. I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.

  4. I will make frequent, small, releases so that I do not impede the progress of others.

  5. I will fearlessly and relentlessly improve the code at every opportunity. I will never make the code worse.

  6. I will do all that I can to keep the productivity of myself, and others, as high as possible. I will do nothing that decreases that productivity.

  7. I will continuously ensure that others can cover for me, and that I can cover for them.

  8. I will produce estimates that are honest both in magnitude and precision. I will not make promises without certainty.

  9. I will never stop learning and improving my craft.

Martin’s proposal had various reactions on Twitter, from:

@klenkes74: my assumption is that my employer will fire me if I live strictly by that rules.

@QuiteVague: Most programmers are in no position to commit to these- the balance between quality and business needs isn't in their hands. … I've raised almost every one of these to a variety of managers. And, as I've said, you win some, you lose some :)

@DamienPetrilli: very utopian, totally not applicable in the real world for most.

@asthasr: #9 is the only valid one. Others are impossible ("proofs") or rely on external factors over which we have no control.

@sleepyfox: I would argue that 8. is impossible to uphold, due to inherent uncertainty. An estimate is at best a guess, not a promise.


@brianvhughes: #5 is a hope, at best. #8 is impossible. But, it’s not all bad

@simonbrown: "I will never stop learning and improving my craft." <- yes!

@Khris_Fernandez: I would love we all sign this in every project I work on from now ! Sadly, some will never do. Anyway, thanks Bob.

@GGrell: I laughed, I cried, I rejoiced. This is some of what I strive for writing software every day.

Answering to some of those not convinced by the need of an oath, Martin argued that software engineers should have ethical responsibilities, and like doctors, lawyers and engineers they should have an oath which is “dogmatic by definition”.

On the same note, the founders of Rugged Software have written a few years back The Rugged Manifesto, a collection of principles that programmers are invited to abide by:

I am rugged and, more importantly, my code is rugged.
I recognize that software has become a foundation of our modern world.
I recognize the awesome responsibility that comes with this foundational role.
I recognize that my code will be used in ways I cannot anticipate, in ways it was not designed, and for longer than it was ever intended.
I recognize that my code will be attacked by talented and persistent adversaries who threaten our physical, economic and national security.
I recognize these things – and I choose to be rugged.
I am rugged because I refuse to be a source of vulnerability or weakness.
I am rugged because I assure my code will support its mission.
I am rugged because my code can face these challenges and persist in spite of them.
I am rugged, not because it is easy, but because it is necessary and I am up for the challenge.

With an oath or not, following the lines of a manifesto or not, perhaps everybody agrees that all software engineers should aim at writing good software. What that means and how to achieve it is another story.

Rate this Article