massa142's blog

くり返す このポリリズム

「新装版 達人プログラマー」を読んだ

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

数多くの技術者がオススメしている名著「達人プログラマー」を読んだ。

ちなみに絶版となっているほうは読んでいない。

Rebuild.fmでomoさんが話していたように、確かに時代背景をきちんと考慮しないと読者のためにならないような情報も多かった。特に技術に関する箇所はそうだったが、取り組む姿勢・技術の根底にある考え方に関しては今でもとても役に立つ内容となっている。

各トピックに関しては広く浅く、エッセンスだけの紹介にとどまるので、「達人プログラマー」となるためには自分でそれぞれ深掘りしていく必要がある。

今となっては当たり前となっていて意識しないようなことも書いてあるが、17年前にこの本を読んだ「達人プログラマー」たちの努力によって技術・環境が進化して今があるかと思うと感慨深い。

総じて、「古典として素晴らしい」というものだった。

合わせて読みたい

読書メモ

第1章 達人の哲学

第2章 達人のアプローチ

  • 直交性
    • 「直交性」という言葉の意味がよくわかってなかったからスッキリした
    • ヘリコプターの操縦の例がわかりやすい
    • 恥ずかしがりなコード
  • 専用の言語
    • Rebuildで話してたようにDSLの話は歴史を感じた

第3章 基本的なツール

  • デバッグの節がよかった
    • パニックに陥らない心構え
    • バグを直すだけでなく、バグを早期発見できなかった原因を考えて改善する
  • 他の節は古典としては楽しめた

第4章 妄想の達人

  • 契約による設計(DbC)
    • 誰の責任かを明確に
  • 早めのクラッシュ
    • 問題発生時点で早めにクラッシュするほうが問題の早期発見や診断を簡単に行える
  • 表明プログラミング
    • もし起こり得ないというのであれば、表明を用いてそれを保証
      • 副作用があってはだめ
      • 本来のエラー処理に表明を使ってはだめ
  • いつ例外を使用するか
    • 例外とは予期せぬ事態に備えるためのものであり、プログラムの通常の流れの一部には組み込むべきではない
    • 例外は例外的な問題のみに使用する

t_wadaさんの話を聞いてたから、この章は理解しやすかった。

【改訂版】PHP7で堅牢なコードを書く - 例外処理、表明プログラミング、契約による設計 / PHP Conference 2016 Revised

第5章 柳に雪折れ無し

基本的な考え方は、任意のオブジェクトが自分以外(サブコンポーネント含む)の構造やプロパティに対して持っている仮定を最小限にすべきであるという点にある。

// デメテルの法則に違反している
console.log(aStudent.class.grade)

// デメテルの法則に違反していない
console.log(aStudent.getGrade())

Ref: 何かのときにすっと出したい、プログラミングに関する法則・原則一覧 - Qiita

第6章 コーディング段階

  • アルゴリズムのスピード
  • テストしやすいコード
    • ユーザにテストさせない
  • 邪悪な魔法使い
    • ウィザードについて
    • 何やってるか自分でわからないものは使うな

第7章 プロジェクトを始める前に

  • 要求の落とし穴
    • 用語集を管理する
      • glossaryは管理し続けるのが難しいから人気ないけど、ユビキタス言語の整理にもなるし必要最低限のものは作りたい

要求とは拾い集めるものではなく、掘り起こすものである

最終的な目標は、要求どおりのものを作るということではなく、ビジネス上の問題を解決するということ

第8章 プロジェクトを始める前に

  • 誇りと愛着
    • コードへの署名を推奨しているけど、属人性を強めるから好きではない
    • おそらくバージョン管理がないような時代背景のせい

達人プログラマーは責任逃れを潔しとしません。 代わりにチャレンジを受け入れること、技術を発揮することに喜びを感じます。