Uncle Bobが”プログラマの誓い”を提案

Uncle Bobがソフトウェアプログラマたちに対して,他のプロフェッショナルたちと同じような誓いを立てて,クラフトマンシップの重要性を意識するように提案している。

Uncle BobことRobert C. Martin氏は1年前,ソフトウェアプログラマの重要性について次のように書いた。

我々は世界を支配する。…

ソフトウェアがなければ,社会は何もできない。そう,何も ….

ソフトウェアがなければ,電話は鳴らない。車は走らない。飛行機は飛ばない。爆弾は爆発しない。船は航海しない。オーブンは焼けない。ガレージドアは開かない。貨幣は取引されない。電気は作られない。店に行く道順さえも分からないのだ。…

そしてMartin氏は,社会においてこれほど重要な役割を担うプログラマならば,自らの力を社会利益のために使う責任感を持ち,倫理の規定に従うことが必要だ,と述べる。プログラマは自分たちの責任を自ら決めるものでなくてはならない,政府や雇用者によって課されるべきではない,とする氏は,“Order of the Engineer”にヒントを得た“コードの倫理規定”について,その概略を説明した。その1年後,氏は再び倫理規定に関する記事を書いた。今回は記述されるコードの品質をより重視して,すべてのメンバが“プロの名誉を守り,保つ”べきだとする“プログラマの誓い(The Programmer’s Oath)”を提案した。

  1. 私は,有害なコードを作りません。

  2. 私が作るコードは常に私の最高作品です。私は,動作または構造のいずれかに欠陥のあるコードを,故意にリリースしません。

  3. 私は,すべてのリリースにおいて,コードのすべての要素が必要とされる動作を行うことを,迅速,確実,再現可能な方法で証明します。

  4. 私は,他の進行を妨げないために,小さなリリースを頻繁に実施します。

  5. 私は,すべての機会において,躊躇と妥協のないコード改善を実施し,コードを悪化させません。

  6. 私は,私自身とその他の生産性を可能な限り高く保つために,私に可能なことはすべて実行します。生産性を低下させることは一切行いません。

  7. 私は,他の人が私に代われること,私が他の人に代われることを,絶えず確実にします。

  8. 私は,規模と正確性の両面において誠実な見積を行い,確信のない約束をしません。

  9. 私は,常に学び,自分の技術を向上させます。

Martin氏の提案には,Twitterからさまざまな反応があった。

@klenkes74: このルールに厳密に従ったら,私は多分クビになるでしょうね。

@QuiteVague: ほとんどのプログラマは,このようなコミットのできる立場にないと思います – 品質とビジネスのバランスは,彼らの手中にはないのです。... 私は,この中のほぼすべてをマネージャに申し入れしていますが,前にも言ったとおり,勝ったり負けたりの状態です :)

@DamienPetrilli: 極めて理想主義的で,現実の世界ではどれひとつ受け入れられないものばかりですね。

@asthasr: #9だけは意味があります。 他は(“証明”)不可能か,自分たちではコントロールできない外部要因に依存しています。

@sleepyfox: 本質的な不確実性があるので,8.は実現不可能だと思います。見積はあくまでも推測であって,約束ではありません。

さらには,

@brianvhughes: #5はよく言って希望,#8は不可能。ですが,全部が悪い訳ではありません。

@simonbrown: “私は,常に学び,自分の技術を向上させます。” <– そのとおり!

@Khris_Fernandez: 今後行うすべてのプロジェクトで,全員でこれに署名したいですね!署名しない人もいるでしょうけれど。残念ですが。とにかくありがとう,Bob。

@GGrell: 笑って,泣いて,喜びました。毎日ソフトウェアを書く上で,このいくつかを目指します。

誓いの必要性に納得しない回答のいくつかに答える形で,Martin氏は,ソフトウェア技術者は医師や弁護士や技師のように倫理的責任感を持つ必要があり,“本質として教義的な”誓いを持つべきだ,と論じている。

同じような話題では,Rugged Softwareの創設者たちが数年前に,プログラマが従うべき原則集を“The Rugged Manifesto”としてまとめたものがある。

私は逞しい,さらに重要なこととして,私のコードは逞しい。
ソフトウェアが現代世界の基礎となっていることを,私は認める。
この基礎としての役割が大きな責任を伴うものであることを,私は認める。
私のコードが,私の予想し得なかった方法で,私の設計したものではない方法で,私が意図しなかった長期に渡って使用されることを,私は認める。
私のコードが,私たちの物理的,経済的,国家的安全を脅かすような,才能のある永続的な敵によって攻撃されるであろうことを,私は認める。
これらの事を認めた上で,私は逞しくあることを選ぶ。
脆弱性あるいは弱点の源であることを拒否するために,私は逞しくある。
私のコードがその使命を確実に果たすために,私は逞しくある。
私のコードがこのような課題に直面し,それでも持続できるために,私は逞しくある。
容易でなくても必要であるために,そして課題に立ち向かうために,私は逞しくある。

誓いをするかどうか,原則集に従うかどうかはともかく,すべてのソフトウェア技術者の目標がよいソフトウェアを書くことであるべきだというのは,衆目の一致するところだろう。それが何を意味するか,どのように達成するかは,また別の話だ。