読書要点「プリンシプルオブプログラミング」第3章 UNIX哲学


UNIX哲学

UNIXの考え方とも言えるUNIXの設計の哲学である。
今なお使われるUNIXがもつ設計判断の正しさを考えれば、設計判断及びその理由は現在の開発でも通用する重要な考え方である。
これから紹介する定理の他に、小定理と呼ばれる群がある。

  • 環境カスタマイズ
  • 軽薄短小カーネル
  • 小文字使用
  • 森林保護
  • 沈黙は金並列思考
  • 部品コラボレーション
  • 90パーセント解
  • 劣るが優る
  • 階層指向

小は美なり

小さいソフトウェアはシンプルで扱いやすく、優れている。
大きいソフトウェアは複雑な上に不測の事態に対応しにくい。
ソフトウェアはできる限り小さく作り、各所の小ささを保つようにすべきである。

1つ1仕事

1つのソフトウェアには1つの仕事をさせるようにする。
問題が複雑化するとコードも複雑化させる方向に行きがちだが、ソフトウェアの仕事を1つに絞り、それを連携させていくことでそれぞれがピュアとなり扱いやすくなる。

即行プロトタイプ

できるだけ早くプロトタイプに着手するのが良い。
設計段階で構想段階のものよりも、プロトタイプが完成しており製品の全体像を把握できている方が開発の上では圧倒的に安心感がある。
要件の不備の発見など、設計の初期段階にも関わるため、その作業は早ければ早いほど良い。

効率性より移植性

ソフトウェアの開発の上では、開発の効率性と移植性とであれば移植性を取るべきである。
様々なハードウェアで動作する移植性の高いソフトウェアは、結果的に寿命が長くなる。
ハードウェアに依存しないコードで書くことで、様々なハードウェアで利用しやすくなる。

データはテキスト

データを保存するときはテキストファイルに保存するのが良い。
テキストファイルはバイナリとファイルと比べて使い勝手が良い。
移植性、人による可読性がよく、特別な変換処理も必要ない。
オペレーティングシステムに依存しないフォーマットのテキストファイルを採用していきたい。

レバレッジ・ソフトウェア

レバレッジとは梃子のことである。
この定理は、ソフトウェアを組み合わせて利用することで、梃子のように個々以上の力を発揮できるようになるということを示す。
他のソフトウェアを利用することで、少ない労力で大きな成果を得ることにつながる。
使う側も使われる側も価値が増す。
ソフトウェアは小さく作り、ソフトウェアをつなげていくことで機能を実現していくのが良い。

シェルスクリプト活用

シェルスクリプトは広範に使われているため、ソフトウェアの連結の際に利用することで、梃子の効果を高めたり移植性を高めることにつながる。
シェルスクリプトは信頼の置ける動作、高い移植性という面で環境依存のものに比べて大きなアドバンテージを持っている。

対話インターフェース回避

ユーザーとマシンが対話する形式のインターフェースは避けるべきである。
対話形式だとユーザーもマシンも束縛されてしまうことになる。
ユーザーは独自の対話に対応しなければならない。
マシン側もソフトウェア同士の対話を制限されたり、人間の入力待ちというマシンでどうにもならないボトルネックが発生してしまう。
人間用のインターフェースに合わせたコードは煩雑になりがちで、結果的に望ましくない他機能主義的なソフトウェアになりかねない。

ソフトウェアの対話の相手はソフトウェアであるべきで、処理を一つ行ったらコマンドインタプリタに制御を返すようなソフトウェアにすると接続性が高まる。

フィルタ化

ソフトウェア設計時は、入力からデータを受け取り、加工されたデータを引き渡すフィルタとして設計するのが良い。
データを生成するのはユーザーたる人間であり、ソフトウェアはそれを扱うフィルタである。
ソフトウェアは断りもなくデータを生成し続けるようなものではなく、受け取ったデータを処理するものである。良くなる。

標準の入出力を利用できると接続性が