書籍「プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則」を読んだメモ
UNIX哲学とは、UNIXの背後にある設計哲学
小は美なり
- 小さいソフトウェアは美しく、価値が高い
- ソフトウェアを設計するときは、小さく設計して1つの仕事に専念させる
- 機能が足りなければ、他のソフトウェアと連携させる
- 解決する問題をきちんと理解する
1つ1仕事
- 1つのソフトウェアには、1つのことをやらせる
- 問題が大きかった場合は、まず問題を小さく分割する
- 大きな問題を解決するには、1つの仕事をこなす複数のソフトウェアを作成する
- 新たな問題が発生した場合は、既存ソフトウェアに機能を追加するのではなく、新たなソフトウェアを作成して連携させることで、スパゲティコードになることを防ぐ
即行プロトタイプ
- できるだけ早くプロトタイプを作成する
- プロトタイプのメリット
- 前提の誤りを早期発見できる
- 要件不備による手戻りを減らせる
- 早いうちから誤りを取り除く作業を始められる
効率性より移植性
- 移植性と開発効率性は二律背反だが、移植性を優先すべき
- 移植性を高めるには、
- ハードウェアに依存しないコードを書く
- ハードウェアに依存する部分と依存しない部分を切り離した設計をする
データはテキスト
- データの移植には、一般的で移植性の高いテキストファイルを使う
- データはテキストファイルに保存するようにし、各テキストファイルを入出力に使用するように設計する
- テキストファイルの中でも言語やOSによらない標準的な形式(CSV、XMLなど)を選択する
レバレッジ・ソフトウェア
- 既存のソフトウェアを再利用しながら、ソフトウェアとソフトウェアを組み合わせる
- 機能満載の大きなソフトウェアを書くのではなく、それぞれが単機能で単価値に集中した小さなソフトウェアを作る
- それらをグルー言語でつなげ、大きな仕事を成し遂げる
シェルスクリプト活用
- シェルスクリプトを活用して、他のソフトウェアやコマンドをつなげる
- シェルスクリプトはインタプリタでプラットフォーム専用のバイナリにコンパイルする必要もなく移植性が高い
- シェルスクリプトをグルー言語として利用する
対話インターフェース回避
- ユーザもマシンも拘束される対話インタフェースは回避する
- 1つ仕事をして、それを終えたらコマンドインタプリタに制御を返すようなソフトウェアを作成する
フィルタ化
- ソフトウェアはフィルタ化として設計する
- フィルタ化: 入力ストリームをデータとして受け取り、何らかの加工を施し、加工したデータを出力ストリームに送り出す
- ソフトウェアはデータを処理するフィルタとして設計し、コマンド起動できるソフトウェアの場合は標準出力を使う