つよく、やさしく、泥臭く生きていくブログ

日常とポエムと、ときどき技術

「UNIXという考え方」を読んだ

評判どおりのめっちゃ良い本だった。。。
まじで良いことしか書かれてない。いいことづくし。
もっと早くにちゃんと読んでればよかった。

そもそも、帯に書かれているように考え方のことが書かれている。だからUNIXに限らず当てはまることがたくさんありそう。

そういえば序盤の序盤で、初期のUNIXに貢献した人々の紹介として我らがラリー=ウォールの名前も上がってました。

UNIXの考え方として重要な9つの定理と、いくらか重要度の低い10の小定理が書かれている。そんな中から特にわかりみ溢れる箇所について適当に書く。

定理1: スモール・イズ・ビューティフル
定理2: 1つのプログラムには一つのことを上手くやらせる

この2つは特に引用されたりして目にする機会が多い気がする。 小さいものはわかりやすくて保守しやすく、1つのことに専念させれば堅牢で、他のプログラムと組み合わせやすい。

一つのことをうまくやるようにアプリケーションを書けば、それは必然的に小さなプログラムになる。

一つのことを上手くやるようにプログラムを作れないのであれば、おそらく問題をまだ完全には理解していないのだろう。

モジュールや関数を書く時は普段から意識してる点ではある。普段はできるだけ「◯◯する関数」と言えるレベルにしようと努めてる。「◯◯して△△する関数」だとまだ単純にできるだろうと思う。けれど難しいところで、◯◯と△△を分ければその分 sub hoge {の行と my $self = shift; の行が余分に増え、肝心の中身は 1行程度になるようなとき、分けるほどか?と悩む時がある。といいつつ、あとから見るときに分けるほどか?というほど単純な関数は見た瞬間何を返すかが分かりやすかったりして
つまり、やっぱりスモールイズビューティフルなのだなと。
そういえば、「これ分けたほうが良くない?」っていうレビューは受けたことあるけど「分けなくて良くない?」は無い気がする。

定理3: できるだけ早く試作する

アジャイル的というかプロトタイピング的というか、なんとなく最近ぽいなと勝手に思ってた考え方がもう既にずっと前から言われてたってことですな。
もう31ページと43ページから45ページをまるっと引用したい。
試作することで何がうまくいくかと、何がうまくいかないかが分かる。
どれだけ仕様書を書いてもどんなものが出来上がるのかは想像するしかないのに対して、作ってしまえばそこからイメージを膨らませてもらえるし、気に入らない部分を具体的に教えてくれる。
これは今の職場ではやりやすいことなので、これからもとにかく早くに見れる・触れる状態で確認してもらうようにしたい。

定理6: ソフトウェアの梃子を有効に活用する
よいプログラマはよいコードを書く。偉大なプログラマはよいコードを借りてくる 勝者となる条件は、車輪を発明し直すことではなく、既存の車輪を光らせることにある

これほんと最近思うことで、自分でガリガリとコードを書いて実現するんじゃなくて、既にあるソフトウェアやwebサービスや、もちろんAWSとかもそうなんだけど、それらを上手く組み合わせて使って、 その組み合わせる部分とかちょっとした部分だけを自分で書くっていうのを上手くやれるようにならないとイカンなって思う。

定理8 過度の対話的インタフェースを避ける

たぶんこの辺だったと思うんだけど、UNIXは「ユーザは自分が何をしているのか分かっている」ことを前提としているらしい。UNIX以外は、何をしているのか分かっていないユーザのためにたくさんのヘルプやメッセージをだしたりしている。だそうだ。
「ユーザは自分が何をしているのか分かっている」のあたりを上手く的確に捉えられるようになりたい。というのも、アプリケーションに過剰に注意書きを書きたくないから。

定理9: すべてのプログラムをフィルタとして設計する

これ読んで「たしかに…」と思った。今後プログラム書く時に意識したい。
プログラムは、何らかのデータを入力として受け入れて、何らかの形でデータとして出力するものである。
シェルのコマンドがパイプでどんどん繋げられるのを意識すると分かりやすいかもしれない。 出力されるのはデータであり、データはまたなんらかのプログラムの入力になりえる。

あー、めっちゃハッとさせられたんだけどこう書こうとすると上手く咀嚼できてない感がある。
この、出力がデータだという点が今まで曖昧だった気がする。データ入力→データ出力じゃなくて、データ入力→何か動く みたいな考え方だったと思う。
たとえば、DBに入れるプログラムがあったら、
データ → SQLでDBに入れる ってイメージしてたけど、
データ → SQLを通す → DBのデータになる ってイメージが良いのかも。(SQLからDBのデータの間も幾つかプログラムがあると思うけどそこは割愛)

めっちゃいい本だったしちゃんと読んだのでこれからは人に勧められる