UNIXという考え方


『UNIXという考え方』の読書メモ。

UNIXの基本定理

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

シンプルさの追求

[定理1] スモール・イズ・ビューティフル
[定理2] 1つのプログラムには1つのことをうまくやらせる

小さなプログラムのメリット
- 読みやすい
- テストしやすい
- コンピュータリソースの節約
- 移植性が高い
- 無駄な機能を作らなくて済む

YAGNI: You ain't gonna need it
必要になるまで作らない。

単一責任のメリット
- 無駄な機能を作らなくて済む
- 移植性が高まる

継続的改善による学習、進化

[定理3] できるだけ早く試作する

小さく、早く試すことのメリット
- 後の大きなリスクを避けられる
- 学習、進化のスピードが上がる

完璧 or Nothingより、継続的改善と学習の積み重ねによる着実な進化を目指す。

依存しない

[定理4] 効率より移植性を優先する
[定理8] 過渡の対話的インターフェースを避ける
[定理9] すべてのプログラムをフィルタとして設計する

高い移植性のメリット
- 新しい他のハードウェアにも移植するだけで対応できる。
- あらゆるシステムから処理を実行するためのインタフェースを用意することで、あらゆる入出力に対して対応できる。

プログラムの実行速度より、あらゆるハードウェア、システム上で動く移植性の高さを優先する。
プログラムの速度は、次に来るハードウェアの性能が上がることで克服できるが、ハードウェアに依存して移植できなければ、新しいシステムのために、もう一度最初からプログラムを書き直さないといけなくなる。

効率よく

[定理6] ソフトウェアを梃子(てこ)として使う
[定理7] シェルスクリプトによって梃子(てこ)の効果と移植性を高める

  • 自動化できるものはどんどん自動化する。
  • DRY(Don't Repeat Yourself)同じプログラムを何度も書かなくて済む。
  • 巨人の肩に乗り、車輪の再発明を避ける。(時には車輪を再発明することも原理を理解するために必要ではある)
  • 素直に人の力を借りる。