Arantium Maestum

プログラミング、囲碁、読書の話題

Hanson & SussmanのSoftware Design for Flexibilityを読み始めた

Chris HansonとGerald Jay Sussmanによる共著のSoftware Design for Flexibility(今後SDfFと略す)が昨日届いたので読み始めた。今は第二章を読んでいるところ。

Gerald Jay SussmanはStructure and Interpretation of Computer Programs(通称SICP)の共著者なので、その本が聖典な一部界隈ではSDfFが出版される前から期待が高まっていた。(SussmanはScheme言語の作者の一人でもある)

副題は「How to Avoid Programming Yourself into a Corner」で、Schemeを使って「開発後の拡張の自由度を最大限確保する手法」をいろいろと紹介する本になっている。Forewordに「This book is a master class in specific program organization strategies that maintain flexibility」、謝辞に「In many ways this book is an advanced sequel to SICP」とある通り、ある程度プログラミングに習熟した読者層を想定しているようだ。

紹介される手法としては

  • コンビネータを使ったDSL
  • マルチディスパッチ
  • パターンマッチや探索のための様々なバックトラック
  • データやコードの階層化による分離
  • 特定の問題解決のためのインタプリタ実装

あたりで、確かにSICPに出てくるモチーフを深化させたような印象。

第1章終わりまでの雑感

  • ForewordがGuy Steele!(SussmanとともにSchemeの作者、Common LispJavaの言語仕様制定にも関わっている)
  • 謝辞でSussmanの恩師としてMinskyとPapertが最初に挙げられてる。Minskyはそうだろうなと思ったけどPapertとの関係は知らなかった
  • 第1章は生物学的な観点から「変化にRobustで進化・対応していけるシステムの構造」を探るような内容になっている。Postel's Law、分離したコンポーネントを組み合わせるためのコンビネータ、冗長性(システムの部品の失敗を許容するredundancyと新しい状況に適応する手段を複数持ち得るdegeneracy)、パターンを作成するgeneratorとそのパターンを選別するtesterの分離とフィードバックなど、ソフトウェア開発に適応できる指針をいくつか提示して(実際の手法を深掘りする)今後の章に繋いでいる。
  • ここらへんの生物学的なシステムを指針とするところは少しアラン・ケイを思わせる
  • 生物学的な問題提起から(SICPでも見られた)Programming Language Theoryに近いトピックでの問題解決に向かうところは面白くもあり、少し我田引水なのでは?という懸念も(少なくとも現段階では)抱いた
  • 個人的にはSchemeで提示される様々な手法のどれほどが別の言語でも使う気になるかが気になっている。例えばC++で使おうと思ったらあまりにもボイラープレートが多くなりすぎてげんなり、というのはありそう。PythonOCamlだとどうだろう。

非常に面白そうなので「早く読みすすめたい!」と逸る気持ちと「個別の手法をしっかり追って理解したい」という気持ちがあって複雑。とにかく読んでいきたい。