はじめに
Ateam Lifestyle Advent Calendar 2020 の8日目はWebデザイナーの@ayumikが担当します。
今回の記事は、「UNIXという考え方-その設計思想と哲学-」を読んだまとめをシェアしたいと思います。
「哲学」とまで言われると構えてしまうかもしれないですが、2〜3時間でさくっと読める本でした。
もっと早く読んでおけばよかったと思うほど、読んで良かったです。
技術本でもないので、難しい専門用語もないので、エンジニアでない人も読みやすいと思います。
今回の記事は、UNIXとは何かや、歴史などは割愛させていただきます。
「UNIXやそれに影響を受けている何かには、おそらく今誰もが触れている」ことは認識して読んでいただければと思います。
1969年に生まれて50年以上、改善され使い続けられた技術の考え方は、色々なところに影響を受けていますし、知らないうちに自分の価値観にも入っているんだなぁという感動が、この本にはありました。全力でオススメします!!
(いや誰かわからない人にオススメされても、全力かて...と思いますよね...苦笑、調べたら起業家や凄そうなエンジニアもオススメしてました。Amazonでの評価も良いので是非に)
(もし感想や間違っている記載などありましたら、コメント頂けると嬉しいです)
補足&注意
この本では、「哲学」と書かれていますが、UNIX公式で発表されているわけではありません。
著者がUNIXに長く関わっていて、まとめたものになっております。他のOSでも同じ考え方をしているものもあり、UNIXから必ず生まれているという保証をされているものでもないです。(そのことは本にも記載されています。)
またこの記事では、この考え方の反対の考え方を、否定していません。
UNIXやエンジニアの自由な世界に尊敬しながら書いています。
この本は定理10個と、さらなるUNIXの考え方10個が紹介されています。
今回はその中でも、3つをピックアップさせてもらいました。
UNIXという考え方を、一言でまとめると?
本の最後の一言につきると思います。
UNIXの理念は、そういう未来に向かうアプローチの一つだ。その本質は柔軟であり続けることだ。嵐が何度やって来ても、風に揺れる木は折れることはない。
※そういう未来≒予測できない未来です。
UNIXは未来を想定するが、そもそも現実的にできないということを前提に設計されているそう。
結果、未来に柔軟に適用しつづけ50年以上生きているのは、面白いですね。
では、3つも続いて見ていきましょう。
1 ) 小さいことは美しい(スモール・イズ・ビューティフル)
UNIXは、とことんシンプルさを追求します。
コピーシステムについて例が出ていたのが、分かりやすかったです。
引用のようなシステム設計は、よくありますよね。
1.ユーザーにコピーするもとのファイル名を尋ねる
2.ファイルがあるかチェックする
3.ファイルがなければ、それをユーザーに通知する。
:
割愛します
:
10.データをコピー元のファイルからコピー先のファイルにコピーする
:
割愛します
:
しかし、よいUNIXプログラムは、10とその他ちょっとした機能だけを提供します。
それ以外は、他のまた小さなプログラムから与えられ、組み合わせて作ります。
なぜ小さなプログラムなのでしょうか?
「分かりやすさ」からくる「保守のしやすさ」のためです。そして「他のツールとの組み合わせがしやすさ」があると考えられています。小さなプログラムは、人間にもマシンにも優しいのです。
前提として、未来の予測は最初から諦めているそう。「あらゆる不測の事態に対応できるように」と考えは誤っていると考えているため、どんな未来がこようと変更しやすい、小さなプログラムを作るそう。
なるほど確かに...。その予測や準備は本当に必要なのか?自身に問うていきたいところです。
2 ) できるだけ早く試作を作成する
これは、アジャイル開発の考え方に通じていったのでしょうか...?
なるべく早い試作のメリットに、「試作によって学べる」というものがあります。
あるアイディアがものになりそうか、目に見える現実的な場面でテストするために、試作を作るのです。そのことでリスクを減らすことができます。
人間には、「3つのシステム」しか作れないそう。
詳細は省きますが、少ない人生経験のなかでもあるあると思ったシステム構築あるあるのことが書かれていたので、本当にそういう進み方しかできないのかもと思いました。
そして試作を作る目的は、「第3のシステム」に早く到達するためです。試作を作って、満足してはよくないですね。
UNIXの他の考え方に、「90%の解を目指す」というものもあり、すべての人にすべてのものを与えようという考えを捨てて、90%のニーズを満たすことに徹しているそう。
ニーズを満たせていない理想のシステムができていないうちは、改善を忘れてはいけないですね。
私は改善が終わったらしばらく達成感に浸ってしまうので、カツを入れられた気分でした。
3 ) ソフトウェアのてこ(梃子)を有効に活用する
この章は、サブタイトルの引用だけでも、伝わると思います。
よいプログラマはよいコードを書く。偉大なプログラマはよいコードを借りてくる
独自技術症候群を避ける
コードを他者がてことして使うのを認める
すべてを自動化する
どれだけ、優秀なエンジニアだとしても、1人の時間は限られていますものね。
良い意味で「パクる」は、大切であることを再実感しました。
そして、「パクられる」大切さも書かれていました。
UNIXの成功は、皮肉なことに、開発者が価値があるものと思っていなく、ソースコードを秘密にするなど強くコントロールする必要を認めなかったことにあると考えられています。
その他 ) 面白いなと思ったUNIXの考え方
木を守る
著者が書くすべての定理や考え方の表現が面白く、くすっと笑えたのですが、この章は特に面白かったです。
この「木を守る」、タイトルから面白すぎませんか?
(昔はプログラミングは紙に印刷をして作るのが当たり前でした。)
その頃からデータを紙に印刷してしまったら、もうそれ以上操作できない。コンピュータ上で並べ替え・移動・フィルタ処理・変形・修正など全て完結するべきだと考えていたのですね。
紙には気をつけることだ。それはデータの死亡証明書といっていい。
はい、おっしゃるとおりです...
(2020年にFAXなど、まだあることを著者に大変伝えにくいですね)
沈黙は金
UNIXは「ドライ」で「事実」だけを伝えます。
例えば、ファイルを探して、ファイルがなかった場合、下記のように返ってきますよね。
>ls
>
「ユーザーフレンドリ」なプログラムは下記です。
$> DIR
$> DIRECTORY: NO FILES FOUND
「明かりがついていない」と「部屋がくらい」という微妙な違いですが、重要な違いとのこと。
まず1つめのメリットは、画面がすっきりとするので、データが探しやすいからです。
あとは、パイプでコマンドをつなげて、やりたいことを拡張できます。
確かにメッセージが返ってきたら、こんな処理はできないですものね。
ls -l | awk hoge | sort
UNIXにおいては、言うべきことだけを言うのが重要だ。それ以上でもそれ以外でもない。
階層的に考える
ディレクトリ階層を使ったファイルの整理って、当たり前に使っていますけど、これもここから発明されたのですね...!
この「単純なアイディア」の大きな意味を実感しました。
最後に
最後まで読んでいただき、ありがとうございました!
何気なく使っているコマンドも、理念がつくられながら、試行錯誤を繰り返しながら、作られてきたのだと思うと感動しますね。素敵な世界です。
UNIXが更に好きになり、なにか業務でシェルスクリプト書いて効率化できることないかなと思える本でした。
明日は@hurikake06が「【テスト初心者向け】新卒が「テストコードを書く」を習慣化させるために大切なこと」を公開いたいます。どうぞお楽しみに!