Preface
- 人類が計算機でプログラムを書いて80年
-
あれこれ議論されてきた
-
開発手法
- agileとか
-
ツール
- デバッガ
- VCS
- テストカバレッジツール
- OOP/FP
- デザインパターン、アルゴリズム
-
- しかし、ソフトウェア設計についてはほとんど論じられてこなかった
-
45年前 — 1971年の論文から大きくは進歩していない
- On the Criteria to be used in Decomposing Systems into Modules (David Parna)
-
コンピュータサイエンスの本質的な問題は「問題を分解すること」
- 複雑な問題を独立したピースにバラす
- プログラマが日々直面するタスク
-
しかし、これを主題にすえた大学の講義はない
- for文やOOPを教える講義はあれど
-
よいプログラマをよいプログラマたらしめる、凡百の者との違いは?
-
何かのスキル?
- 何人かと話してみたが明文化できなかった
-
生まれつきの才能?
-
否
- Talent is Overrated (Geoff Colvin)
-
- 仮定: ソフトウェア設計
-
-
スタンフォード大で、ソフトウェア設計の講義を行ってみた
-
- ソフトウェア片を実装する
- コードレビューを通じて設計上の問題を特定し、修正する
- これをたくさん繰り返す中で設計原則を学んでいく
-
- 本書の内容は、この講義の中で生じた設計原則にもとづく
-
著者はソフトウェア設計のあるべき論について答えを知ってるの?
- 否
- 本書は、著者自身が多彩な領域・多彩な言語で250000行のコードを書いてきた経験の結晶
- すべての問題は著者が実際に経験したもの
- すべての提案は「著者はうまくいった」もの
-
本書は設計上の「鶴の一声」ではない
- 有用なテクニックの見逃しがあるかもしれない
-
長期的には良くないアイデアがあるかもしれない
- 【補】答えがないのでまだわからない
- 【補】GoFのSingleton等、後世でアンチパターンとされるのはままあること
- 鵜呑みにせず、ソフトウェア設計についての議論の糸口にしてほしい
-
異論求む
- 鵜呑みにせず、話半分で読んでね
- 一番大事な目的は「複雑性を減らすこと」
- 本書提示の考え方に沿っても複雑性を減らなそうなら、固執する必要はない
-
その場合はフィードバック求む
- 何がうまくいき何がうまくいかないかを知りたい
- 連絡先等。略
-
謝辞
- 略
英語
-
the state of the art
- 最先端
-
divide up
- 分割する
-
articulate
- 明確化する
-
perplex
- 困惑させる
-
put forth
- 考え・アイデア等を出す
-
assimilate
-
吸収する
- 文中では学びを「咀嚼する」の意に近いか
-
-
final word
- 鶴の一声
-
with a grain of salt
- 話半分で
-
be indebted to
- 〜に恩義がある