ソフトウェアクラフトマンシップとプログラマーの誓い - Forkwell Library #8

117.2K Views

November 02, 22

スライド概要

https://forkwell.connpass.com/event/263023/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ソフトウェアクラフトマンシップと プログラマーの誓い 2022年11月02日 ワイクル株式会社 角征典 (かど まさのり) @kdmsnr kado.masanori@waicrew.com

2.

自己紹介 ‣ 角 征典(@kdmsnr) • ‣ ワイクル株式会社 代表取締 • ‣ 技術書の翻訳・執筆 → アジャイル開発/リーンスタートアップの導入支援 東京工業大学 環境・社会理工学院 特任講師 • エンジニアのためのデザイン思考 2

3.

規律 基準 倫理 ※同心円はClean Architectureのマネ(本には登場しない) 3

4.

きょうお話すること 1. アンクル・ボブのこと 2. ソフトウェアクラフトマンシップ 3. プログラマーの誓い 4

5.

1. アンクル・ボブのこと

6.

アンクル・ボブ(1952〜) https://en.wikipedia.org/wiki/Robert_C._Martin

7.

アンクル・ボブの歴史 ‣ 1952年生まれ ‣ 1970年:高校卒業後に就職 ‣ 1972年(?):結婚、解雇、再就職 ‣ 1976〜1988年:Teradyne社(大企業) ‣ 1986〜1990年:スタートアップにジョイン ‣ 1990〜1991年:フリーランスでRational • Grady BoochとUMLツール開発 ‣ 1991〜2010年:Object Mentor(起業) • 受託開発、コンサルティング、教育 ‣ 1996〜1999年:『C++ Report』誌編集長 • その後、倒産 ‣ 1999年:Kent BeckとTDDに出会う • この頃にC++とオブジェクト指向に出会う ‣ 2001年:アジャイルマニフェストの起案 ・「アンクル・ボブ」と呼ばれる → 最初はイヤだったが、後に愛着がわく 7

8.

https://en.wikipedia.org/wiki/C++_Report 8

9.

その頃の著書 オブジェクト指向、パターン、C++ 9

10.

アンクル・ボブの歴史 ‣ 1952年生まれ ‣ 1970年:高校卒業後に就職 ‣ 1972年(?):結婚、解雇、再就職 ‣ 1976〜1988年:Teradyne社(大企業) ‣ 1986〜1990年:スタートアップにジョイン • その後、倒産 ‣ 1990〜1991年:フリーランスでRational • Grady BoochとUMLツール開発 ‣ 1991〜2010年:Object Mentor(起業) • 受託開発、コンサルティング、教育 ‣ 1996〜1999年:『C++ Report』誌編集長 ‣ 1999年:Kent BeckとTDDに出会う • この頃にC++とオブジェクト指向に出会う ・「アンクル・ボブ」と呼ばれる → 最初はイヤだったが、後に愛着がわく 10

11.

はじめてプログラミングの「規律」を見た(1999) これまでの「パターン」や「ノウハウ」とは違う! 『Clean Coder』Bob C. Martin 11

12.

プログラマーの「規律」 エクストリームプログラミング(特にTDD) 12

13.

https://www.youtube.com/watch?v=Tr8vmTg2NVA 補足:SUnit(1989), JUnit(1997), CppUnit(2000) 13

14.

その頃の著書 エクストリーム・プログラミング 14

15.

アンクル・ボブの歴史 ‣ 1952年生まれ ‣ 1970年:高校卒業後に就職 ‣ 1972年(?):結婚、解雇、再就職 ‣ 1976〜1988年:Teradyne社(大企業) ‣ 1986〜1990年:スタートアップにジョイン ‣ 1990〜1991年:フリーランスでRational • Grady BoochとUMLツール開発 ‣ 1991〜2010年:Object Mentor(起業) • 受託開発、コンサルティング、教育 ‣ 1996〜1999年:『C++ Report』誌編集長 • その後、倒産 ‣ 1999年:Kent BeckとTDDに出会う • この頃にC++とオブジェクト指向に出会う ‣ 2001年:アジャイルマニフェストの起案 15

16.

アジャイルソフトウェア開発宣言(2001) 私たちは、ソフトウェア開発の実践 あるいは実践を手助けをする活動を通じて、 よりよい開発方法を見つけだそうとしている。 この活動を通して、私たちは以下の価値に至った。 プロセスやツールよりも個人と対話を、 包括的なドキュメントよりも動くソフトウェアを、 契約交渉よりも顧客との協調を、 計画に従うことよりも変化への対応を、 価値とする。すなわち、左記のことがらに価値があることを 認めながらも、私たちは右記のことがらにより価値をおく。 https://agilemanifesto.org/iso/ja/manifesto.html 詳しくは『Clean Agile』を読んでください! 16

17.

その頃の著書 アジャイル、オブジェクト指向、デザインパターン、UML 17

18.

ヘロヘロスクラム(2009) https://martinfowler.com/bliki/FlaccidScrum.html 日本語訳:https://bliki-ja.github.io/FlaccidScrum/ 18

19.

アジャイルの二日酔い ‣ 多くの組織では、アジャイルとスクラムが同義語になっている。 ‣ アジャイルコーチは、テクニカルプラクティスをコーチできるほどの技術スキ ルを持っていない。エンジニアリングについて話すこともほとんどない。 ‣ アジャイルと開発者はお互いに離れようとしている。 『Clean Agile』Bob C. Martin, Sandro Mancuso 19

20.

ソフトウェアクラフトマンシップ宣言(2009) 私たちは意欲的なソフトウェアクラフトマンとして、ソフトウェ アクラフトマンシップの実践あるいは専門技術の学習の手助けを する活動を通じて、プロとしてのソフトウェア開発の水準を引き 上げようとしている。この活動を通して、私たちは以下の価値に 至った。 動くソフトウェアだけでなく、精巧に作られたソフトウェアも 変化への対応だけでなく、着実な価値の付加も 個人との対話だけでなく、専門家のコミュニティも 顧客との協調だけでなく、生産的なパートナーシップも すなわち、左記のことがらを追求するなかで、 右記のことがらも不可欠であることがわかった。 https://manifesto.softwarecraftsmanship.org/ アンクル・ボブは署名しただけっぽい 20

21.

クリーン・シリーズ(2008〜) 「クリーン」とは何か?は次ページ 21

22.

おまけ:「クリーン」とは? 「クリーンコード」なんて傲慢で偉そうな言葉だが、 年をとって(当時56才)十分偉そうになったから書いたんだ。 https://agile-douga.tv/products/an-interview-with-uncle-bob-on-clean-agile 「クリーン」は「アンクルボブの」という意味 22

23.

クラフトマンシップと裂け目(2011) https://martinfowler.com/bliki/CraftmanshipAndTheCrevasse.html 日本語訳:https://bliki-ja.github.io/CraftmanshipAndTheCrevasse/ 23

24.

それでも、クラフトマンシップ(2回目) 規律 基準 倫理 ※同心円はClean Architectureのマネ(本には登場しない) 24

25.

規律、基準、倫理 ‣ 規律 • テスト駆動開発、リファクタリング、シンプルな設計、 協力的プログラミング(ペア + モブ)、受け入れテスト ‣ 基準 • 生産性、品質、勇気 ‣ 倫理 • プログラマーの誓い(十戒) • 3つのテーマ(有害、誠実、チームワーク) 25

26.

なお、最後の本になる(らしい) たぶん私の最後の本になるね。 Clojureの本なら書くかもしれないけど https://www.youtube.com/watch?v=QnmRpHFoYLk 26

27.

2. ソフトウェアクラフトマンシップ

28.

クラフトマンシップの定義 ‣ 「クラフトマン」とは、特定の分野に関する高度なスキルを持ち、物事を成し 遂げる人である。道具や業界に精通しており、仕事に誇りを持ち、仕事に対す る尊厳とプロ意識を持って行動できると信頼されている人である。 『Clean Craftsmanship』Bob C. Martin 28

29.

クラフトマンシップの定義(その他) ‣ ソフトウェア開発者のコーディングスキルを重視するアプローチ。開発者の説明責 任よりも金銭的な問題を優先させるなど、ソフトウェア業界の悪弊に対するソフト ウェア開発者の反応である。(Wikipedia) ‣ ソフトウェアクラフトマンシップは、熟練への長い旅です。ソフトウェア開発者が 自らのキャリアに責任を持ち、常に新しいツールやテクニックを学び、自分を高め ていくことを選択するマインドセットです。ソフトウェアクラフトマンシップは、 ソフトウェア開発に責任、プロフェッショナリズム、プラグマティズム、そしてプ ライドを取り戻すものです。(Sandro Mancuso『The Software Craftsman』) 29

30.

👉「個人」としてのプロ意識 30

31.

ソフトウェアが世界を支配する時代(2011) 社会はまだそのことを理解していない。 我々プログラマーもそのことを理解していない。 『Clean Craftsmanship』Bob C. Martin 31

32.

「ソフトウェア」の誕生 決定問題(1936)、ACE(1945) 「計算可能数とその決定問題への応用」(1936) あくまでもアンクルボブの定義 32

33.

これからは(問題を)計算可能な形にする 能力のある数学者がかなりの人数必要になるはずだ。 困難となるのは、我々が何をしているのかを 見失わないために、適切な規律を維持することである。 ―アラン・チューリング A.M. Turing's ACE Report of 1946 and Other Papers - Vol. 10, "In the Charles Babbage Institute Reprint Series for the History of Computing", (B.E. Carpenter, B.W. Doran, eds.). The MIT Press, 1986. Bob C. Martin『Clean Craftsmanship』 33

34.

能力や規律を持たないプログラマーの増加 8 log210 ≈ 27 75 ÷ 27 ≈ 2.8 プログラマーの人数 数億人(10^8)▶ ▼ 約3年で プログラマーが倍!? ▼ チューリングから75年▲ いつも半数が #駆け出しエンジニア Clean Coder (Clean Coders Video Series) by Robert C. Martin 34

35.

『Clean Craftsmanship』Bob C. Martin

36.

世界で最も影響力のある100人(2013) Notch and Jeb (Minecraft) https://time100.time.com/2013/04/18/time-100/slide/markus-persson-and-jens-bergensten/ 補足:他にも リーナス(2003)、パンジー創業者(2005)、ヴィタリック・ブテリン(2021)など 36

37.

高校生の「大人になったらなりたいもの」(2022) “リモートワークの普及が加速したことで、 働く場所を選ばない自由な働き方やワークライフバランスについて意識が高まっている” 出典:第一生命/第33回「大人になったらなりたいもの」調査結果 37

38.

規律を持たなかったことによる問題 ‣ VW社が競合他社に比べて簡素な排ガス対策装置で対応でき ていたことに、かねて疑問を抱いていたからだ。疑問の答 えは、優れた技術にあったわけではなく、「いかさま」だっ た。排ガス対策装置の作動を弱める「デフィート・ソフ ト」を使い、公式試験のときにだけ、「ジェッタ」などに 搭載する排気量2.0Lのディーゼルエンジンの排ガス成分が 規制値内に収まるようにした。通常の走行時は、規制値を 大幅に超える有害な排ガス物質を垂れ流す。 https://xtech.nikkei.com/dm/atcl/news/16/080808697/ 38

39.

クレッシーの「不正のトライアングル」 神戸製鋼品質不正問題(*)の分析例 動機 不正 機会 飯野 大介, 小松原 明哲, 2B1-2 正当化 不正のトライアングルによる組織的不正の評価について, 人間工学, 2019, 55 巻, Supplement 号, p. 2B1-2, 公開日 2019/07/31, Online ISSN 1884-2844, Print ISSN 0549-4974, *: https://www.kobelco.co.jp/releases/1199080_15541.html 39

40.

クレッシーの「不正のトライアングル」 神戸製鋼品質不正問題(*)の分析例 動機 顧客や上司からの過度な期待 不正 機会 飯野 大介, 小松原 明哲, 2B1-2 正当化 不正のトライアングルによる組織的不正の評価について, 人間工学, 2019, 55 巻, Supplement 号, p. 2B1-2, 公開日 2019/07/31, Online ISSN 1884-2844, Print ISSN 0549-4974, *: https://www.kobelco.co.jp/releases/1199080_15541.html 40

41.

クレッシーの「不正のトライアングル」 神戸製鋼品質不正問題(*)の分析例 動機 顧客や上司からの過度な期待 不正 改ざんや捏造が 容易にできる環境 機会 飯野 大介, 小松原 明哲, 2B1-2 正当化 不正のトライアングルによる組織的不正の評価について, 人間工学, 2019, 55 巻, Supplement 号, p. 2B1-2, 公開日 2019/07/31, Online ISSN 1884-2844, Print ISSN 0549-4974, *: https://www.kobelco.co.jp/releases/1199080_15541.html 41

42.

クレッシーの「不正のトライアングル」 神戸製鋼品質不正問題(*)の分析例 動機 顧客や上司からの過度な期待 不正 改ざんや捏造が 容易にできる環境 機会 ・上司の指示だからヨシ! 正当化 ・みんなやっているからヨシ! ・クレームがないからヨシ! 飯野 大介, 小松原 明哲, 2B1-2 不正のトライアングルによる組織的不正の評価について, 人間工学, 2019, 55 巻, Supplement 号, p. 2B1-2, 公開日 2019/07/31, Online ISSN 1884-2844, Print ISSN 0549-4974, *: https://www.kobelco.co.jp/releases/1199080_15541.html 42

43.

“倫理的な「滑り坂論法」は、現実に存在する。小さな倫理的妥協をする 機会を与えられた人は、大きな倫理的過ちへとエスカレートする可能性が 2倍もある。絶対的な倫理観を持つことが、滑り防止につながる。” https://twitter.com/emollick/status/1582954628076871681 (via https://twitter.com/hiyori13/status/1583004042120220675) 43

44.

クレッシーの「不正のトライアングル」 神戸製鋼品質不正問題(*)の分析例 動機 顧客や上司からの過度な期待 たぶん減らない 不正 改ざんや捏造が 機会 容易にできる環境 ・上司の指示だからヨシ! 正当化 ・みんなやっているからヨシ! ・クレームがないからヨシ! ルールが増える 飯野 大介, 小松原 明哲, 2B1-2 不正のトライアングルによる組織的不正の評価について, 人間工学, 2019, 55 巻, Supplement 号, p. 2B1-2, 公開日 2019/07/31, Online ISSN 1884-2844, Print ISSN 0549-4974, *: https://www.kobelco.co.jp/releases/1199080_15541.html 44

45.

クレッシーの「不正のトライアングル」 神戸製鋼品質不正問題(*)の分析例 動機 自ら規律や倫理を 持つしかない! 顧客や上司からの過度な期待 たぶん減らない 不正 改ざんや捏造が 機会 容易にできる環境 ・上司の指示だからヨシ! 正当化 ・みんなやっているからヨシ! ・クレームがないからヨシ! ルールが増える 飯野 大介, 小松原 明哲, 2B1-2 不正のトライアングルによる組織的不正の評価について, 人間工学, 2019, 55 巻, Supplement 号, p. 2B1-2, 公開日 2019/07/31, Online ISSN 1884-2844, Print ISSN 0549-4974, *: https://www.kobelco.co.jp/releases/1199080_15541.html 45

46.

倫理を持つエンジニアが必要 会誌自動車技術4月号「エシカル・エンジニア−技術の外側へのエクスプローラー−」 https://www.jsae.or.jp/ikusei/rinri.php 46

47.

倫理を持つエンジニアの証「鉄の指輪」 “鉄の指輪は、カナダで教育を受けた多くのエンジニアが、 その職業に伴う義務や倫理を象徴し思い出させるものとして 身につけている指輪である” https://en.wikipedia.org/wiki/Iron_Ring 47

48.

クリーンコーダーの証「グリーンバンド」 テストがパスした「グリーン」を意味する http://butunclebob.com/ArticleS.UncleBob.GreenWristBand 48

49.

ミラー・テストで判断する ‣ 倫理についての原則はただ一つだけである。 判断の方法は簡単である。 それをミラー・テストという。 倫理の問題とは、 朝、髭を剃るとき、あるいは口紅を塗るとき、 どのような顔を見たいかというだけの問題である。 49

50.

ミラー・テストで判断する ‣ 仕事から家に帰ったとき、鏡に映った自分を見て 「今日はいい仕事をした」と言うだろうか? それとも、すぐにシャワーを浴びるだろうか? 50

51.

『Clean Craftsmanship』Bob C. Martin 51

52.

👉「集団」としてのプロ意識 52

53.

3. プログラマーの誓い

54.

「プロ意識」は重要 ...とはいえ、難しい💦 54

55.

あたらしい倫理的な問題 自動運転車はどうすべき?(by MITメディアラボ) https://wired.jp/2019/01/02/moral-machine/ https://www.moralmachine.net 55

56.

改めて「3つの正義」を考えてみる ‣幸福の最大化(帰結主義):ビジネス • > 価値があればええやろ、動けばええやろ(結果重視) ‣自由の尊重(義務論):アジャイル • > みんなが自律的に動けばええやろ(プロセス重視) ‣美徳の促進(徳倫理学):クラフトマンシップ • > より良いエンジニアになるべきやろ(性質重視) • > アリストテレスを読め 56

57.

ニコマコス倫理学 最近は「ファスト教養」と呼ぶらしい? 57

58.

アリストテレスの徳(卓越性) ‣ 思考の徳(知的徳) • エピステーメー、テクネ、フロネーシスなど ‣ 性格の徳(倫理的徳) • 勇気、節制、友愛、正義など 58

59.

「実践知」としてのフロネシス エピステーメーが「なぜを知る」知識、 テクネーが「いかにを知る」知識だとすれば、 フロネシスは「何をなすべきかを知る」知識といえる。 ―野中郁次郎・竹内弘高『ワイズカンパニー』 それぞれ、科学的知識、工学的知識、実践的知識と言い換えてもいいかも? 59

60.

徳(卓越性)を高めるには? ‣ "上手に家を建てることから人はすぐれた建築家になり、 下手に建てることから劣悪な建築家になる" ‣ "要するに一言でいえば、同じような活動の反復から、 人の性格の状態が生まれるのである" 60

61.

TDDの“習慣”がプロを作る TDDを実践していなければ、プロのソフトウェア開発者になれない。 私は本気だ。というより、それが真実になりつつある。 『Clean Craftsmanship』Bob C. Martin ※TDDが唯一の解ではないとも言っている 61

62.

プログラマーの徳(卓越性) ‣ 規律 • テスト駆動開発、リファクタリング、シンプルな設計、 協力的プログラミング(ペア + モブ)、受け入れテスト ‣ 基準 • 生産性、品質、勇気 ‣ 倫理 • プログラマーの誓い(十戒) • 3つのテーマ(有害、誠実、チームワーク) 62

63.

余談:TDDは万能ではない ‣ ‣ Jim Coplien:ボトムアップで優れたアーキテクチャは考えられない • https://www.infoq.com/interviews/coplien-martin-tdd/ • https://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf Rich Hickey:テストはセーフティネットにすぎない • ‣ DHH:テスト容易性のために、システムを分断する設計にする必要はない • ‣ https://www.infoq.com/presentations/Simple-Made-Easy/ https://dhh.dk/2014/tdd-is-dead-long-live-testing.html Kent Beck:グリーンテストは好きだが(複雑なシステムでは)幻想で自己満足でもある • https://youtu.be/l3f9Vxxs1S4?t=691 http://blog.cleancoder.com/uncle-bob/2014/05/02/ProfessionalismAndTDD.html 63

64.

プログラマーの徳(卓越性) ‣ 規律 • テスト駆動開発、リファクタリング、シンプルな設計、 協力的プログラミング(ペア + モブ)、受け入れテスト ‣ 基準 • 生産性、品質、勇気 ‣ 倫理 • プログラマーの誓い(十戒) • 3つのテーマ(有害、誠実、チームワーク) 64

65.

医師の倫理「ヒポクラテスの誓い」 https://www.med.or.jp/doctor/rinri/i_rinri/a06.html 出典:Wikipedia(CC 表示-継承 4.0) → ジュネーブ宣言 65

66.

プログラマーの誓い コンピュータープログラマーの職業の名誉を守り、維持するために、 私は自分の能力と判断の限りにおいて、以下のことを約束する。 1. 私は、有害なコードを作らない。 2. 私が作るコードは、常に私の最高傑作である。振る舞いや構造に欠陥のあるコードを故意に残すことはしない。 3. 私は、コードが正常に動作する証拠をリリースごとに用意する。それは、迅速で、確実で、再現可能な証拠である。 4. 私は、誰かの進捗を妨げないように、小さく何度もリリースする。 5. 私は、あらゆる機会において、恐れることなく執拗に私の作品を改善する。決して作品を劣化させることはしない。 6. 私は、私や誰かの生産性を高めるために、できる限りのことをする。決して生産性を落とすようなことはしない。 7. 私は、他の人が私をカバーできるように、私が他の人をカバーできるように努める。 8. 私は、規模と精度の両方を正直に見積もる。合理的な確実性がないときには約束をしない。 9. 私は、仲間のプログラマーの倫理、基準、規律、スキルを尊重する。その他の属性や特性を尊重の要因にすることはしない。 10. 私は、私の技術の学習と向上を怠らない。 『Clean Craftsmanship』Bob C. Martin 66

67.

が、似たものがないわけではない 67

68.

ソフトウェア・エンジニアリングのための 倫理ならびに専門職実務綱領(ACM/IEEE-CS) ‣ The Software Engineering Code of Ethics and Professional Practice • https://ethics.acm.org/code-of-ethics/software-engineering-code/ (日の丸アイコンをクリックすると日本語のPDFが閲覧可能) 1 公共性 ソフトウェア・エンジニアは公共の利益と調和するよう行動すべきである。 2 顧客ならびに雇用者 ソフトウェア・エンジニアは,公共の利益と調和しながら,顧客と雇用者の最高の利益を実現するよう行動すべきである。 3 製品 ソフトウェア・エンジニアは,その製品と,製品に関する変更が,専門家として可能な限り最高の基準に合致していることを確保すべきである。 4 判断 ソフトウェア・エンジニアは専門家としての判断において誠実さと独立性を維持すべきである。 5 管理 ソフトウェア・エンジニアリングの管理者とリーダーは,ソフトウェア開発の管理ならびにソフトウェア・メンテナンスの管理に対する 倫理的アプローチに賛同し,それを推し進めるべきである。 6 専門職 ソフトウェア・エンジニアは公共の利益と調和するよう,その専門職の倫理性と評判を高めていくべきである。 7 職業上の同僚 ソフトウェア・エンジニアは他のソフトウェア・エンジニアに対して公正で協力的であるべきである。 8 自己の向上 ソフトウェア・エンジニアは自己の専門職実務に関する生涯続く学習に参加し, かつその専門職実務に対する倫理的アプローチを推し進めるべきである。 ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ でも、広く浸透しているわけでもないらしい。 68

69.

「クリーン」プログラマーの誓い コンピュータープログラマーの職業の名誉を守り、維持するために、 私は自分の能力と判断の限りにおいて、以下のことを約束する。 1. 私は、有害なコードを作らない。 2. 私が作るコードは、常に私の最高傑作である。振る舞いや構造に欠陥のあるコードを故意に残すことはしない。 3. 私は、コードが正常に動作する証拠をリリースごとに用意する。それは、迅速で、確実で、再現可能な証拠である。 4. 私は、誰かの進捗を妨げないように、小さく何度もリリースする。 5. 私は、あらゆる機会において、恐れることなく執拗に私の作品を改善する。決して作品を劣化させることはしない。 6. 私は、私や誰かの生産性を高めるために、できる限りのことをする。決して生産性を落とすようなことはしない。 7. 私は、他の人が私をカバーできるように、私が他の人をカバーできるように努める。 8. 私は、規模と精度の両方を正直に見積もる。合理的な確実性がないときには約束をしない。 9. 私は、仲間のプログラマーの倫理、基準、規律、スキルを尊重する。その他の属性や特性を尊重の要因にすることはしない。 10. 私は、私の技術の学習と向上を怠らない。 『Clean Craftsmanship』Bob C. Martin 69

70.

有害 😈 70

71.

約束1:有害なコードを作らない ‣ フォルクスワーゲンのプログラマーが破ったのはこのルールだ。 ‣ 彼らのソフトウェアは雇用主(フォルクスワーゲン)に利益をもたらしたかも しれない。だが、社会一般には害をもたらした。 ‣ 我々プログラマーは、そのようなことを決してやってはならない。 『Clean Craftsmanship』Bob C. Martin 71

72.

約束2:欠陥のあるコードを故意に残さない ‣ コードを動かすことはゴールではない ‣ 振る舞いは緊急なだけ。構造こそが重要。 • → アイゼンハワーのマトリックス ‣ コードの構造に責任を持つのはプログラマーである ‣ 構造を変更できてこそ「ソフト」ウェアである 『Clean Craftsmanship』Bob C. Martin 72

73.

約束3:コードが正常に動作する証拠を用意する ‣ コードを数学的に証明することはできない(あるいは難しい) ‣ でも、実証的な証拠なら残すことができる ‣ それは、テストコードである 『Clean Craftsmanship』Bob C. Martin 73

74.

誠実 😇 74

75.

約束4:小さく何度もリリースする ‣ 継続的にデプロイしろ 『Clean Craftsmanship』Bob C. Martin 75

76.

約束5:執拗に作品を改善する ‣ 約束5には「作品」という言葉が使われている。プログラマーが作成するのは コードだけではない。設計、ドキュメント、スケジュール、計画なども作成す る。これらも継続的に改善すべき「作品」である。 ‣ どうするのか? 作品に対して「親切な行為」をすればいい。 ‣ ボーイスカウトの規則: 「チェックインするコードはチェックアウトしたときよりも美しく」 『Clean Craftsmanship』Bob C. Martin 76

77.

約束6:生産性を高める ‣ 速く進みたければ、うまく進むしかない • 自動化しよう • 集中力を高めよう • 時間管理をうまくやろう(ポモドーロテクニックおすすめ) 『Clean Craftsmanship』Bob C. Martin 77

78.

チームワーク 👥 78

79.

約束7:他の人が私をカバーできるように、 私が他の人をカバーできるように努める。 ‣ チーム全体に知識を広げよう。 ‣ 知識を広げる最善の方法は、一緒に(ペアかモブで)働くことである。 ‣ 車を運転しているときに他のドライバーを怒鳴りつけたことはないだろうか? これは「フロントガラス効果」と呼ばれる。フロントガラスを挟むと、他人の ことをバカ、マヌケ、敵だと見なすようになる。 ‣ フロントガラス効果を回避するには、1年に数回は物理的な部屋に集まる。 『Clean Craftsmanship』Bob C. Martin 79

80.

約束8:正直に見積もる ‣ 見積りは確率分布(幅)なので、以下のように考えてみてはどうか? • 平均値:(2 • 最有力 + (最良 + 最悪) / 2) / 3 シグマ:(最良 - 最悪) / 6 ‣ 無理なものは無理と言おう ‣ 「とりあえずやってみます」には気を付けよう 『Clean Craftsmanship』Bob C. Martin 80

81.

約束9:仲間を尊重する ‣ そのまま! ‣ 人を属性で判断しない(性別、人種、宗教など) ‣ 「規律、基準、倫理」を持っているかどうかで判断すべき • ただし、能力や規律を持たない人が入ってきても歓迎してあげましょう • むしろ、そういう人たちを育てる責任が私たちにはあります 『Clean Craftsmanship』Bob C. Martin 81

82.

約束10:技術の学習と向上を怠らない ‣ プログラマーは学習をやめてはならない。学ぶべき領域は事実上無限だ。我々 の業界は過去何十年かけて急速に変化している。これからもその変化はしばら く続くだろう。あなたはそれに追いつく必要がある。 ‣ 書籍やブログを読み続けよう。ビデオを観続けよう。カンファレンスやユー ザーグループに参加し続けよう。研修に行き続けよう。学習を続けよう。 ‣ 過去の偉大な作品に注目しよう。1960年代、1970年代、1980年代に書かれ た書籍は、素晴らしい洞察と情報があふれている。 『Clean Craftsmanship』Bob C. Martin 82

83.

まとめ

84.

まとめ ‣ アンクル・ボブはいろんな経験をしているおじいちゃん(70歳) • 70歳で何かを伝えようとしてくれるプログラマーは少なくない? ‣ クラフトマンシップはプロ意識(個人 → 集団) • まずは、家に帰って鏡で自分の顔を見てみよう ‣ 徳(卓越性)は日々の習慣や誓いを守ることから生じる • 有害なことをせず、誠実な態度を示し、チームワークを重視しよう 84

85.

読んでみてください! 85