Clean Code ch1 Clean Code

Clean Code勉強メモ

出典: 

Clean Code

  • プログラミング言語の抽象化がいくら進んでいっても、最低限必要な詳細度は残る
  • コードは無くならない

    • コードこそ仕様

Bad Code

本書は「良いコードというのが重要である」というはかない仮定にもとづき… (Implementation Patterns by Kent Beck)

  • ボブおじ見解: 最も強固な前提のひとつである

Later Equals Never. (LeBlanc’s law)

  • 「動かないよりは汚くても動くほうがマシ」
  • 「急いでる」
  • 「あとで綺麗にする」

The Total Cost of Owning a Mess

  • メチャクチャコードを放置すると、生産性は時間とともにゼロに漸近する

    • 自覚症状あり
  • コードはもつれ、ねじれ、絡み合う
  • いずれ手に負えなくなる
  • マネージャは、生産性の向上を願って開発者を増員する
  • が、改善には結びつかない

    • 新参はそのシステムに精通していない
    • ので、設計思想とマッチする変更/マッチしない変更がわからない
    • さらにメチャクチャになる

The Grand Redesign in the Sky

  • にっちもさっちもいかなくなると、開発は作り直しを要求するようになる
  • いざ作り直すとなると、とても時間がかかる

    • 新旧並行開発
    • 旧システムの機能がすべて新システムに積まれるまで、リプレースされないから
    • 著者経験では10年かかったケースも
  • 新システムをちんたら作っているうちに、その新システムも作り直し対象になる…
  • 綺麗なコードを書くことは、(長い目で見た)コスト低減のみならず、生き残り戦術でもある

Attitude

  • なぜメチャクチャコードを生み出してしまうのか

    • 要件がコロコロ変わるから?
    • スケジュールがきついから?
  • プログラマのせいです
  • 上司に従わないと首になる?
  • たぶんそんなことはない
  • 上司がスケジュールを気にするのは、それが職務上の役割だから
  • 同様に、綺麗なコードを主張するのはプログラマの役割
  • 医者が、患者から「手なんか洗ってないで早く手術して」と言われて、手洗いをスキップしますか

    • するわけがない
    • 医者は患者よりも病気や感染症のリスクについて知っているから

The Primal Conundrum

  • 「締切に追われて汚いコードを受け入れる」
  • 逆です
  • 汚いコードを受け入れると生産性が落ち、締切に間に合わなくなる

The Art of Clean Code?

  • 綺麗なコードを書くことは、絵を描くことととても似ている

    • 良し悪しを見分けることは容易い
    • が、実際に描けるか(書けるか)は別問題
  • 「良いコードのセンス」は苦労して習得するもの
  • 悪いコードを目にしたとき、良いコードに変形していく戦略が見えてくるか

What Is Clean Code?

  • 大御所の考える「clean code」の定義多数

Bjarne Stroustrup

  • エレガント

    • pleasingly ingenious and simple
    • 読んでいて「気持ちが良い」(pleasingly)
  • 効率的

    • 非効率だと、最適化のために汚いコードを書きがち
  • エラーハンドリング
  • 一つのことをうまくやる

Grady Booch

  • 可読性

    • よくできた散文のように読めること
  • crisp abstraction

“Big” Dave Thomas

  • 可読性

    • 他の開発者が変更しやすい
  • テストが書かれていること
  • ミニマル

    • 小さいことはいいことだ

Michael Feathers

  • シンプルで秩序があるよう、育てられ世話されてきたコード

Ron Jeffries

  • 重複がない
  • 一つのことをする
  • 表現力
  • 小さな抽象化

    • コレクションとかの

Ward Cunningham

  • 驚きがないこと
  • その言語が、その問題を解決するために作られたかのように見える

    • 言語がプログラムをシンプルに見せるのではない
    • プログラマが言語をシンプルに見せるのである

Schools of Thought

  • 本書では、本書の考え方を正としている
  • とはいえ世の中にはいろいろな考え、いろいろな派閥がある
  • 他の考え方にも触れよ
  • 本書の考え方は、議論を呼ぶようなものも多い
  • とはいえ、本書の視座を理解せず、尊敬せずに否定するのは恥ずかしいことですよ

    • 本書の考え方は、何十年来も叩き上げられてきたものである

We Are Authors

  • JavaDocで@authorフィールドがありますね
  • プログラマはauthor(著者)だということ
  • 著者ということは、読者がいる
  • 読者との良好な意思疎通は著者のつとめ
  • コードは、書くよりも読むほうが多い

    • 比率は10:1
  • 読みやすさは書きやすさ

    • 周りのコードを読まないと新しいコードを書くことはできない

The Boy Scout Rule

Leave the campground cleaner than you found it.

  • 継続的な改善がプロフェッショナリズムの本質

Prequel and Principles

  • 本書はAgile Software Development: Principles, Patterns, and Practices (PPP)の続編
  • 本書の登場する設計原則はPPP本で詳細に述べられている

Conclusion

  • 本書は「良いコードのセンス」のための手がかり

    • 会得を保証するものではない
  • Practice!

英語

  • premise

    • 前提
  • be versed in

    • 精通する
  • bemoan

    • 嘆き悲しむ
  • blather

    • たわごと
  • drive a point home

    • 納得させる、痛感させる
  • conundrum

    • なぞなぞ
    • 解決困難な状況
  • painstakingly

    • 労を惜しまずに、苦労して
  • juxtaposition

    • 対比
  • hath

    • hasの古語
  • spew

    • 吹き出す
  • compatriots

    • 同胞
  • behoove

    • する必要がある
  • sporadic

    • 散在する