Clean Coder ch1 Professionalism

The Clean Coder勉強メモ

出典: 


Professionalism

Be Careful What You Ask For

  • プロとは

    • 名誉と矜持のしるし
    • 責任のしるし
  • プロでない場合

    • ミスは雇い主が責任を負う
  • プロ

    • ミスは自分で責任を負う
    • バグが原因で会社に10000ドルの損害を出したなら、自腹を切る

      • 実際に払わないにしても、心の姿勢は本質的にそうあるべき

Taking Responsibility

  • ソフトウェアのテストを納期優先でサボって本番環境でバグが出た話
  • 顧客にかけた迷惑

    • 夜間バッチで採取されるはずのデータが失われた
    • ソフトウェアの巻き戻しにより、新機能お預け
  • 納期を優先したのはメンツのためだった

    • 顧客のためでも雇い主のためでもない
  • 「テストが終わっていないから納期に間に合わない」と申告すべきだった

First, Do No Harm

Do No Harm to Function

  • 「望むとおりに動作する」ソフトウェアを作らなければならない
  • プロたるものバグを作り込んではいけない

    • ソフトウェアは複雑で、バグを含まないことは困難だが、言い訳にはならない
    • 人体もまた複雑だが、医師はヒポクラテスの誓いを掲げている
  • まず練習すべきは謝罪
  • 同じ誤りを繰り返してはならない
  • プロとして成熟するにつれ、誤りはゼロに漸近していくべき

QA Should Find Nothing

  • 正しく動作する確証のないコードをQAに投げて不具合を見つけさせるものがいる

    • 発見した不具合数に応じてQAに報酬を出す組織もある
  • プロとしてあるまじき態度

    • Do No Harm原則に反する
  • QAが不具合を見つけたら謝罪準備

    • なぜ不具合がすり抜けたのか調査し、何らかの再発防止を

You Must Know It Works

  • テストしろ
  • 時間を食うので自動化せよ
  • コードのうちどれだけの部分をテストすべき?

    • 全部に決まってるだろ
    • 「べき」ではなく「必要がある」
  • カバレッジ100%は「漸近線」

    • 実行される想定でコードを書いているのだから、全行実行されることを目指すべき
  • テストしやすいコードを
  • テストから書くのが最良(TDD)

    • 後の章にて取り上げる

Automated QA

  • 自動化ユニット・受け入れテストを実行すればデプロイ準備完了
  • ミッションクリティカルで、数分の自動化テストでは不十分なプロダクトもある
  • その場合でも、自動化テストが通っていることは「QAをパスする確度がとても高い」ことの裏付けになる

Do No Harm to Structure

  • 変更しやすい構造を維持する
  • 変更の簡単さを計るには、実際に簡単な変更を加えてみる

    • 思ったよりも大変だったら設計を見直す
  • ソフトウェアを柔軟にするには、ほぐす必要がある

    • ほぐさないと、いざ変更を加えるころには凝り固まってしまう
  • いつやるの

    • 常に
    • merciless refactoring、ボーイスカウト・ルールとして知られる
  • 人々は逆に考えがち

    • 「動作しているソフトウェアに手を加えるのは危険」
  • 変更を加えたがらない理由

    • 壊してしまうことを恐れている
  • なぜ壊してしまうのか

    • 高速で高カバレッジな自動化テストがないから
  • プロフェッショナルたるもの、コードとテストに確信をもち、彫刻家が粘土をこねるかのごとくコードを扱うべき

Work Ethic

  • エンジニアとしての市場価値は自分の責任。雇い主の責任ではない

    • 訓練
    • カンファレンスに出る
    • 本を買う
  • 提供してくれる雇い主もあるが、親切であって、当然期待すべきものではない

    • 感謝せよ
  • 週60時間仕事せよ

    • 40時間は雇い主のため
    • 20時間は自己研鑽

      • だいたい日に3時間程度
        • 昼食時間を読書に充て
        • 通勤時間をポッドキャストを聴き
        • 90分程度新しい言語の習得に費やす
  • さんすう

    • 週168時間

      • 40時間 for 雇い主
      • 20時間 for 自己研鑽
      • 56時間 for 睡眠
      • 52時間も残るじゃない
  • この類のコミットメントが嫌ならプロを名乗るべきではない
  • 燃え尽きてしまわないか?

    • プロになりたいという動機の源泉はソフトウェアに対する情熱であったはず
    • 自己研鑽の20時間は、この情熱をあおる、楽しいものであるべき

Know Your Field

  • この領域は、この50年間でめざましく進歩してきた
  • 今なお残っているアイデアもあれば、一線を退いたものもある
  • 古い考えも「関係ないもの」と切り捨てず、良い点悪い点を知るべき
  • 50年来残っているアイデアは、つまるところよいアイデアだということ

過去を記憶できないものは、その過去を繰り返す運命を背負っている (米 サンタヤーナ)

  • 知っているべき

    • デザパタ

      • GoF
      • POSA
    • 設計原則

      • SOLID原則
      • コンポーネント原則
    • 方法論

      • XP
      • スクラム
      • リーン
      • カンバン
      • ウォーターフォール
      • 構造化分析
      • 構造化設計
    • 規律・統制

      • TDD
      • オブジェクト指向設計
      • 構造化プログラミング
      • CI
      • ペアプロ
    • 成果物

      • UML
      • DFD
      • 構造化チャート
      • ペトリネット
      • 状態遷移図・表
      • フローチャート
      • 決定表

Continuous Learning

  • 業界はすごい勢いで進歩していく
  • たえず学ばないと置いていかれる
  • 知識をアップデートしない医者にかかりたくないでしょう
  • 最新の税法を知らない税理士を雇いたくないでしょう
  • 慣れていない領域を学ぶ

    • .NETプログラマならJavaを学んでみよ
    • JavaプログラマならRubyを学んでみよ
    • CプログラマならLispを学んでみよ
    • 本当に頭を悩ませてみたければPrologとForthを学んでみよ

Practice

  • 日々の業務は本番であり練習ではない
  • ことさらにスキルを磨くために行う行為が「練習」
  • 音楽家も演奏以外に練習するでしょう
  • ソフトウェア開発者はどんな練習をする?

    • 著者が「型」と呼んでいるもの

      • 素因数分解などの定形問題を日々繰り返す

        • 異なる言語で
        • ショートカットキーやリファクタリングの練習
      • 朝のウォームアップと夕のクールダウン

Collaboration

  • 2番目によい学びの方法は、他人と協働すること
  • ただし一人の時間も重要

Mentoring

  • 教えることは最良の学びの方法
  • 初級者が監督されずにもがいているのを見捨てない

Know Your Domain

  • プロとして最もあるまじき姿勢: 受け取った仕様を、ビジネス上の意味を理解しようとせずコードに落とし込むだけ
  • プロたるもの、ドメインを理解して仕様の誤りがないか検証すべき

Identitfy with Your Employer/Customer

  • 雇い主の問題はあなたの問題
  • 雇い主の立場に立って、開発中の機能がニーズを満たす確証をもて
  • 開発者 vs 雇い主 のような様相になりがち
  • プロたるもの、雇い主との対立はなんとしてでも避ける

Humility

  • プロは自信家・傲慢
  • しかし失敗することもある
  • 自分で自分を笑いものにしても、他人がしくじったとき面目を潰したりしない

    • 明日は我が身

Bibliography


英語

  • baud

    • ボー
    • 変調レートの単位
  • lambaste

    • こき下ろす
  • double-blow

    • ダブルパンチ
  • earfuls

    • たくさんの話、ゴシップ
  • reputation

    • 世評
  • Hippocratic oath

    • ヒポクラテスの誓い
    • 医師の倫理・任務などについての、ギリシア神への宣誓文
  • aspire

    • …に抱負を持つ、熱望する
  • off the hook

    • 責任を逃れて
  • asymptote

    • 漸近線
  • undermine

    • 土台を壊す -> 蝕む
  • chagrin

    • 悔しがらせる
  • on a whim

    • 気まぐれに
  • at the expense of

    • …を犠牲にして
  • errand

    • 用事
  • undercut

    • 価値を下げる
  • exorbitant costs

    • 法外な(変更)コスト
  • mired

    • 泥沼にはまって
  • morass

    • 沼地
  • impediment

    • 障害、遅らせるもの

      • インピーダンス的な
  • maddeningly

    • 気も狂わんばかりに
  • burnout

    • 燃え尽き症候群
  • ferocious pace

    • ものすごい速さ
  • condemned

    • 運命を背負っている
  • conversant

    • 精通している
  • frenetic

    • 熱狂的な
  • copious quantities

    • おびただしい量
  • woe

    • 悲哀
  • by the same token

    • そのうえ
  • show someone the ropes

    • やり方を教える、コツを教える
  • flail about

    • あがく
  • due diligence

    • 払ってしかるべき注意義務及び努力
  • in one’s shoes

    • …の立場で
  • humility

    • 謙虚
  • boldly

    • 勇敢に
  • butt of a joke

    • 笑いもの