UNIXという考え方を読んだ

はじめに

 今回は「UNIXという考え方」を(半年以上前に)読んだのでその感想をかいていきます。

f:id:ryu955:20171217020042j:plain

 UNIXにおける考え方やプログラミングをする上で大切なことはもちろん,研究や普段の生活でも言えるようなこともたくさんかいてあって面白い本でした。

本の感想

 UNIXの考え方 : 基本的な9つの定理と10このUNIXの文化がかいてあり、それぞれ実例などを踏まえて解説していくって感じでした。

 その中でも個人的に面白かったところや絶対覚えておこうって思った以下のセクションについて、ざっと簡単にまとめて思ったことをかいていこうかなと思います。

  • スモール・イズ・ビューティフル
  • できるだけ早く試作する
  • 1つのプログラムには1つのことをうまくやらせる
  • 森林を守る
  • 部分的総和は全体よりも大きい
  • 90パーセントの解を目指す

スモール・イズ・ビューティフル

内容

小さいものは、大きいものにはない利点がいくつもある。小さいもの同士なら、簡単に独自の便利な方法で組み合わせることが出来るというのもその一つだからだ。

 目的とそれに対するアプローチを明確にして、細分化して実装すれば、似たような場所には同じプログラムを再利用できるよね。 ほかにも、小さいと再利用できるだけじゃなくて、わかりやすいし保守もしやすい、他のツールと共存しやすいなど様々なメリットがある。

思ったこと

 最近はプログラムをできるだけいい感じのまとまりを関数にするように意識してプログラムを書くようにしました。

1つのプログラムには1つのことをうまくやらせる

内容

一つのことに集中することで、プログラムに不要な部分をなくせる。不要な部分があると、実行速度が遅くなり、不必要に複雑になり、融通が効かなくなる。

 一つのことをうまくできるプログラムを複数組み合わせたりカスタマイズすることで、目的に沿った処理を果たせるほうがいいよね。 じゃないと、似たような目的なのに、それぞれに対して全て新しいものを作る「車輪の再発明」をするのは無駄だよね。 さらに、一つの機能に絞ることで、プログラム自体も小さくできるよね。

思ったこと

 細分化するメリットがこれだなっていうのが分かった気になった。

できるだけ早く試作する

内容

あらゆるプロジェクトにおいて、試作は重要だ。一般的に試作は設計全体のうちのほんの一部として扱われているが、UNIXにおいての試作は、効率的な設計には欠かせない重要な一部だ。

 仕様書とかをかいてないでとりあえず試作を作ったほうがいいよね。 試作を作ると何がうまくいき、何がうまくいかないかがわかるようになる。 これによって、様々なリスクを減らすことができるよね。

思ったこと

 キレイなプログラムを書こうと考えてる暇があったら汚いプログラムでいいからとりあえずかいて、そのあとリファクタリングするのを意識するようにした。 あとは、研究でもとりあえずプロトタイプとかをさっさと作ったほうがいいのかなって思った。

森林を守る

内容

UNIXユーザーは紙のドキュメントを嫌う。全てのテキストファイルをコンピュータに保存して、強力なツールでそれらを操作するのだが、このことには十分な理由がある。

 プログラムを印刷してメモをするひとがいるけど、印刷するとそのプログラムは並び替えも移動も編集もできなくなってしまって無駄だよね。

思ったこと

 昔、印刷されたプログラムとにらめっこをしてるひとをみてワオっておもったことが、言葉にされてて個人的に感動した。 他にも、メモとかも電子化したほうがメリット多いよねって思う。 りんごペンを買ってからは紙に何かをすることをほとんどしなくなった。

部分的総和は全体よりも大きい

内容

小さい部品を集めて大きなアプリケーションを作るほうが、大規模プログラムを単体で構成すっるよりも柔軟性に富、したがってより役に立つ。どちらのアプローチでも同じ機能は達成できるかもしれない。しかし、先のことを考えると、小さい部分の集合によるアプローチのほうが有利だ。

思ったこと

 これは上のスモール・イズ・ビューティフルに近いきがする。 細分化してモジュール化するのが良いよね。

90パーセントの解を目指す

内容

どんなことであれ、100パーセントうまくやることは大変だ。90パーセントのことだけうまくやれるようにするほうが、はるかに効率的であり費用対効果も最も大きい。UNIX開発者は、対象ユーザーの90パーセントが満足するかいを目指す。残り10パーセントは自分でなんとかしてもらうしかない。

思ったこと

 昔、ツイッターでゲームに当てはめてこれを言ってたのを見た気がする。 完璧にやりこんで上級者になるのは大変だけど、中級者ならさくっとなれるしそのゲームを楽しめるよねみたいな。 最近やってるゲームが辛いのでふわっと楽しめるゲームをやりたい。

おわりに

 150ページくらいしかなくてサクッと読める本だし、書いてある事も面白いので、こんなざっとした感想じゃなくてちゃんと本を買って読んでみると良いと思います。

 どのセクションにかいてあったのか忘れたのですが、個人的に気に入ってるフレーズは「ソフトウェア開発に終わりはない。あるのはリリースだけだ。」という言葉です。 言われればそのとおりだなってなるんですけど、文字として表現されているのを見ると、自分の中でもやっと思ってたことが明確化されていく感じがします。