プログラミングに対する考え方の80%ぐらい影響を受けた「UNIXという考え方」の素晴らしいまとめがあった

「UNIXという考え方」という本がある。

僕は図書館でふらふらと本を物色しているときに偶然見つけて借りて読んだ本なのだけど、その内容は素晴らしく、かつコンパクトにまとまっていて、改めて内容を思い返してみると自分のプログラミングに対する考え方の80%ぐらいがこの本に影響されているのではないかと思えるぐらい影響力の強い本だ。

しかもそのページ数、たかだか148ページ。同じぐらい影響を受けた「小さなチーム、大きな仕事」もたいがい薄い本だと思うのだけど、こちらは269ページ。どれだけコンパクトに重要なことが収まっているのかよく分かる。

UNIX哲学

UNIXについては今更説明するまでもないだろう。かの名著、K&Rの名で知られる「プログラミング言語C」の共著者デニス・リッチー博士が、元々アセンブラで開発されていたUNIXの移植性を高めるためにC言語を開発した、ということでも有名なマルチタスク・マルチユーザーのOSである。

AT&Tの大人の事情により市場に販売することができなかったUNIXは、関係者の手によってソースコードが希望者に配布されることになる。そして様々な人々の手に渡ったソースコードがあらゆる人の手によってバグ修正を施される中、OSとして独自の成長を遂げていくことになり、企業がブラックボックスの中で独自にソフトウェアを開発するというような文化とは全く違う、オープンな文化が花開いた。

このオープンな文化の中で結実した哲学はUNIX哲学と呼ばれる。そしてこれをマイク・ガンカーズがまとめたのがこの本、「UNIXという考え方」だ。

9つの定理

この考え方は以下の9つの定理で構成される。

  • 定理1:スモール・イズ・ビューティフル
  • 定理2:一つのプログラムには一つのことをうまくやらせる
  • 定理3:できるだけ早く試作を作成する
  • 定理4:効率より移植性
  • 定理5:数値データはASCIIフラットファイルに保存する
  • 定理6:ソフトウェアの挺子(てこ)を有効に活用する
  • 定理7:シェルスクリプトを使うことで挺子(てこ)の効果と移植性を高める
  • 定理8:過度の対話的インタフェースを避ける
  • 定理9:すべてのプログラムをフィルタにする

この定理は今見ても色あせない。これら全ての要素は、保守性の高いプログラムを作る上での基本的な考え方を体現している。「スモール・イズ・ビューティフル」は「小さいものは分かりやすいし直しやすい」という本当に当たり前のことを言っているし、「一つのプログラムには一つのことをうまくやらせる」というのはプログラムを小さくするための基本的な考え方だ。

「一つのプログラムには一つのことをうまくやらせる」という考え方は計算機科学の名著として名高い「計算機プログラムの構造と解釈」にも「抽象の壁」としてあらわれるし、オブジェクト指向設計の基本原則「単一責任の原則(Single Responsibility Principle)」にもあらわれる、とても大事な考え方だ。

(「計算機プログラムの構造と解釈」は以下のページで無料で日本語訳を読めます)

計算機プログラムの構造と解釈 第二版

これらの話の素晴らしいまとめがあった

ここまで長々と話をしてしまったのは、「UNIXという考え方」が更に素晴らしくコンパクトにまとまっているページを見つけたからだった。

[プログラミング原則][Unix哲学]UNIXという考え方

UNIX哲学の一部かどうか議論が絶えない10の定理も取り上げてくれている。ここまで読んで興味をもった方には、ぜひ読んでみていただきたい。

実はこの本、コマンドラインをバリバリに使いこなしていて日頃プログラマとして活躍している人にというよりは、新しくWebサービスを開発するためにMacを買ったような人に、ぜひ読んでもらいたい。Webサービスを動かすことになろうサーバは大概UNIX互換OSであるLinuxで動いているし、MacOSXも、実のところPOSIXに準拠した列記としたUNIXなので、Macのコマンドラインを使う上でもとても参考になるだろう。上辺のコマンドを覚えるより、その背景に流れる思想を理解した方がよっぽど腹落ちする。ぜひ手にとって頂きたい。

UNIXという考え方―その設計思想と哲学
Mike Gancarz
オーム社
売り上げランキング: 42,512
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 82,524