「UNIXという考え方」を読んだ
「UNIXという考え方」を読みましたので、簡単ではありますが学んだことや読み終えた感想を書き残しておこうと思います。
謝辞
この本は @gim_kondo 様に Amazon の Wishlist 経由で投げ本していただきました。この場をお借りして感謝申し上げます。
概要
- 書籍名: UNIXという考え方 ― その設計思想と哲学
- 著者: Mike Gancarz
- 監訳者: 芳尾 桂
- 出版社: オーム社
- ISBN-13: 978-4274064067
Amazon: https://www.amazon.co.jp/dp/4274064069
以下は第 1 版第 23 刷(平成30年4月10日)を読んだまとめ、感想です。
n言紹介
UNIX開発者たちの中で特別決めたわけじゃないけど、皆こういう考えを大切にしてUNIXを作って(きた|いくよ)というものをまとめた1冊。1994年に言語化されたことを中心に書かれているのに、今これからそのことが大切にされようとしていることがたくさん載っている、まさに時代を超える名著。
学んだこと
この本を読んで知ったこと、理解したことを紹介します。
9の定理
UNIXの考え方を構成する9の定理、本書は殆どこの定理の解説に費やされています。
- スモール・イズ・ビューティフル
- 一つのプログラミングには一つのことをうまくやらせる
- できるだけ早く試作する
- 効率より移植性を優先する
- 数値データは ASCII フラットファイルに保存する
- ソフトウェアを梃子として使う
- シェルスクリプトによって梃子の効果と移植性を高める
- 過度の対話的インターフェイスを避ける
- すべてのプログラムをフィルタとして設計する
どれも特別難しいことではありません。「あぁ、確かにそうだよな〜」と思うものばかりです。2番の「一つのプログラミングには一つのことをうまくやらせる」なんて Single Responsibility Principle(単一責任原則)そのまんまじゃないですか。あくまでも UNIX 開発者の持つ考え方をまとめたものですが、まさに今のプログラミングにおける土台のようなものなのかなと思います。
IT、特にプログラミングの世界では数カ月前の情報が使えないということはザラにあります。しかし、20年ほど前に書かれた内容が今もなお最先端でナウいものとして生き残り続けているところに Philosophy を感じました。
これらの定理は良さげなものを選んで使っていくのではなく、それぞれが互いを支えありながら真の力を発揮するのもであると本書では述べられています。本書で各定理の説明を読んでみると、そんなことを言われなくても考えてたら全部やってたわみたいな感じになりそうです。定理は9つもありますが、その根底にあるのは「ソフトウェアの繁栄」です。そのことを脳の片隅に残しながら本書を読むとより一層理解が深まるかもしれません。
更なる10の考え方
こちらは先ほどの定理と違い、一部の UNIX 開発者から共感は得られないが大体の人が賛成してくれる10個の考え方です。こちらは少し OS 設計に依存した話や漠然とした話が多いです。私は先ほどの定理のほうが好きです。
- 好みに応じて自分で環境を調整できるようにする
- オペレーティングシステムのカーネルを小さくする
- 小文字を使い、短く
- 森林を守る
- 沈黙は金
- 並行して考える
- 部分の総和は全体よりも大きい
- 90パーセントの解を目指す
- 劣るほうが優れている
- 階層的に考える
「好みに応じて自分で環境を調整できるようにする」は環境変数の話で、今では当り前じゃんと思える話ですが昔はそうでもなかったようです。そもそもユーザ好みにカスタマイズできる項目が多いと学習コストが高く、複雑にもなってユーザ受けはよろしくないだろうというのが当時の考え方だったようです。しかし、筆者が開発していた uwm
というウィンドウマネージャにカスタマイズ機能を追加したところ、ユーザがそのカスタマイズ性を受け入れ、まさに手足のごとくそのマネージャを使いこなした、というエピソードが本書で紹介されていました。まさにこの経験が UNIX にも利用されたようです。確かに、ソフトウェアを選定する際に自分好みにカスタマイズできるかどうかは一つの基準にはなりますが、一般の方々からしたらそんなことよりなるべく簡単なものがいいとなりますね。
昔のOSについて
今 OS と言えば Windows/Mac OS/Linux が三強で、他にも BSD 系や Solaris 系などはありつつもそこままでメジャーではないかなといった感じです(個人の見解)。しかし、UNIX が出来た時代は MS-DOS や Atari、OpenVMS など現物を見るどころか名前すら聞いたことない OS の時代でした。本書の最後では各 OS の思想が少し紹介されており、UNIX 以外の思想にも触れることが出来ました。
感想
某Slackグループで読んだほうがいいと言うことで干し芋に突っ込んどいたら、まさかのオススメした本人に買ったいただけましたw
オススメされるだけあって、読んで損を感じない、もっと早く読めたら良かったなと思える本でした。現役のプログラマはもちろん、将来プログラマになりたくて今勉強しているという方にもオススメです。ぜひ読んでみてください。将来僕がプログラマとして社会に出て部下を持つようになったら、まっさきにこの本をプレンゼントしようかなと思います。
OJIの投げ本リスト: http://amzn.asia/gosDyXu (優先順位つけてますので投げ本してくださる場合はぜひご参考に!)
OJIのレジュメ: https://www.resume.id/oji
Twitter: @OldBigBuddha