A Philosophy of Software Design ch0 Preface

APoSDソフトウェア設計勉強メモ

出典: 


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)
    • 仮定: ソフトウェア設計
  • スタンフォード大で、ソフトウェア設計の講義を行ってみた

    • CS190: Software Design Studio

      • ソフトウェア片を実装する
      • コードレビューを通じて設計上の問題を特定し、修正する
      • これをたくさん繰り返す中で設計原則を学んでいく
  • 本書の内容は、この講義の中で生じた設計原則にもとづく
  • 著者はソフトウェア設計のあるべき論について答えを知ってるの?

    • 本書は、著者自身が多彩な領域・多彩な言語で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

    • 〜に恩義がある