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
- 散在する