『UNIXという考え方』読書録


定理

スモール・イズ・ビューティフル

  • 小さなプログラムは分かりやすい
  • 小さなプログラムは保守しやすい
  • 小さなプログラムはシステムリソースにやさしい
  • 小さなプログラムは他のツールと組み合わせやすい

一つのプログラムには一つのことをうまくやらせる

  • 一つのことに集中することで、プログラムに不要な部分をなくせる

できるだけ早く試作する

  • 試作によって学ぶ
  • 早い試作はリスクを減らす

効率より移植性

  • プログラムを速くすることに時間をかけない
  • 最も効率の良い方法は、ほとんどの場合移植性に欠ける
  • 移植性のあるソフトウェアは、ユーザーのトレーニングを時間も減らす
  • よいプログラムは死なず、ただ新しいハードウェアに移植されるのみ

数値データはASCIIフラットファイルに保存する

  • データにも移植性を持たせる

ソフトウェアを梃子として使う

  • よいプログラマはよいコードを書く。偉大なプログラマはよいコードを借りてくる
  • 独自技術症候群を避ける
  • コードを他人が梃子として使うのを認める
  • すべてを自動化する

シェルスクリプトによって梃子の効果と移植性を高める

  • シェルスクリプトにはおそろしいほどの梃子の効果がある
  • シェルスクリプトは梃子の効果で時間も節約する

過度の対話的インターフェースを避ける

  • 拘束的プログラムはユーザーを人間と想定している
  • 拘束的コマンドパーサは、大きく醜い
  • 拘束的プログラムは「大きいものは美しい」的アプローチをとる
  • 拘束的プログラムは、他のプログラムと結合するのが難しい
  • 拘束的ユーザーインターフェースはスケーラビリティに欠ける
  • 拘束的ユーザーインターフェースは、ソフトウェアの梃子の効果を利用できない

全てのプログラムをフィルタとして設計する

  • 全てのプログラムはフィルタである

小定理

  • 好みに応じて自分で環境を調整できるようにする
  • オペレーティングシステムのカーネルを小さくする
  • 小文字を使い、短く
  • 紙のドキュメントを用いない
  • 沈黙は金
  • 同時に考える
  • 部分の総和は全体よりも大きい
  • 90パーセントの解を目指す
  • 劣るほうが優れている
  • 階層的に考える