No Purpose

If I must say, it's for me.

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

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

  • 作者:Mike Gancarz
  • 発売日: 2001/02/01
  • メディア: 単行本

モチベーション

  • 「ひとつのことをうまくやる」「小さいことはよいこと」「パイプでコマンドをつなぐ」といった、UNIX哲学とされるものはなんとなく聞きかじったことがあって、その哲学に心地よさを覚えながら名著とされる原典をスルーしているのはなんとなくの居心地の悪さがあったので読んでみた。
  • 年末年始にかけて業務が逼迫していてあんまり読書する心身の余裕がなく、先月末に無事リリースできて以降は大きく怠惰に振れていたので、リハビリがてら薄い本を読もうとした。

感想

その時代を知る読み物として

作中で登場するプログラミング言語アセンブリC言語シェルスクリプトで、本格志向のC言語ではなくてコンパイルがいらず移植性にも優れたシェルスクリプトを使おうといったことが繰り返し語られていた。

じゃあJavaはいつ頃登場するんだっけ...?と思って調べたらJDK 1.0は1996年1月だった: Java - Wikipedia

Windows 95登場前夜ながらも、Windows NTの時点でマーケティングに大成功していたのかなんてこともあまり知らなかった。

え、ちなみにLinuxは...?と思ったら、Linuxは「1997年ごろより商用目的への応用が注目され」という感じらしい: Linux - Wikipedia

...といった自分が知らなかった時代における、当時の人たちの"常識的"とされた考え方や「UNIXという考え方」がなぜ新しかったのかといった背景を知るのは結構おもしろかった。「クリーンアーキテクチャ」を読んだときにボブおじさんの昔ばなしもなんだかんだ言って楽しめたことを思い出した。感覚的には「スティーブズ」を読んでいるときに近い。

現役で通じる価値観を学ぶ読み物として

上述したような自分が知らなかった時代に書かれた"古典"ではありつつも、(よく言われているように)そこに書かれた価値観が現役で通じることに改めて驚いた。

「スモール・イズ・ビューティフル」「ひとつのことをうまくやらせる」「部分の総和は全体よりも大きい」といった価値観はマイクロサービスにも通ずるし、「効率よりも移植性」において重要視される移植性については現代ではコンテナという手段を得るに至ったんだなぁということを思い浮かべながら読むことができた。

「できるだけ早く試作を作成させる」については、(耳が痛い)言葉通りのことだけでなく、「人間には、三つのシステムしか作れない」という話がとても興味深かった。「三つのシステム」とは、特定の機能/領域が成熟するにつれて、それを担うシステムの変遷が起こるライフサイクルのような話だと理解している。

  1. 第一のシステムは、「追いつめられた人間」が作る。追いつめられているので「『正しく』やっている時間などない」。そのコンセプトは革新的なので「人間の想像力を刺激」する。
  2. 第二のシステムは、「第一のシステム」の成功に惹かれた専門家たちが作る。これまでの欠点を改善すべく「正しさ」を追求し「委員会」で設計する。結果、商業的な成功を納めることも多い一方で「ぜい肉がつき、遅い」「三つのうちで最悪のシステム」となる。
  3. 第三のシステムは、「第二のシステムで『火傷』した人が作る」。「ようやく『正しく』やることができる時間が与えられ」、「オリジナルのコンセプトはそのまま残り」、「第一のシステムと第二のシステムの最良の特徴を組み合わせる」。

ポイントは、どうすれば第三のシステムを作れるかというと「最初に他の二つのシステムを作るしかない」というのがおもしろい。だからこそ「できるだけ早く試作を作成させる」ということかと得心した。

そのうえで、僕はこれを読んで、以前の職場で関わった...

  1. 創業期に書かれた、「ひどい」と言わざるをえないがたしかに事業に売上をもたらしたコード
  2. 1を嫌った人たちが書いた、過度な抽象化(あるいは間違った抽象化)が施された結果、見通しが悪い(と感じる)コード
  3. それらを置き換えるべく、事業毀損しないようにポーティングしていくプロジェクトが発足

という流れを思い出した。 僕は3のプロジェクトに関わった。今振り返ると、あのとき作ったものが「第二のシステム」とみなされるべきものになってしまっている可能性は否定しないものの、少なくとも1と2については「第一のシステム」「第二のシステム」と称してよさそうに思う。

「3」から関わった身からすると「『1』において、もっと『正しく』作れなかったのか」「『2』において、もう少し現実的で適切な設計はなかったのだろうか」とついつい考えてしまうこともあったが、それ以上にこれらの「システム」が生まれてしまうこと自体は否定せず、そのライフサイクルのスピードをもっと上げられないか考えるというのがよりUNIX哲学的だったかもしれない...なんて振り返りを今さらした。

もっと早く読めばよかったという後悔

同僚はこの本を「はやく読めば読むほどお得な名著」と評していたが、その意味がようやくわかったようにも思う。

「ひとつのことをうまくやる」「小さいことはよいこと」などの哲学は、あまりにも普遍的になっていることで日常で触れる機会も多く、驚きはあまりなかった。

もっとこの本にガツンと頭を殴られ、UNIX哲学に麻疹のようにかかってしまう頃に触れておくべきだったという後悔を少ししつつ、今も色褪せぬ価値観のオリジン(と言っていいのかな)に触れられたことを嬉しく思う。