名著と名高い「UNIXという考え方」を読みました

f:id:karaage:20200724150128j:plain:w640

「UNIXという考え方」を買ったきっかけ

 以下のネット記事を読んで、「UNIXという考え方」が読みたくなり、珍しく紙の本を買ってしまいました(電子版がないので)。

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

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

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

 原題は「The UNIX Philosophy」なので、かなり強い言葉ですね。副題の「その設計思想と哲学」という方がタイトルにふさわしい気もしましたが、ちょっとライトな感じのタイトルにしたかったのでしょうか。

UNIXのPhilosophy

 この本では、UNIXのPhilosophy(あえて原題のPhilosophyを使います)における定理は、最初の章に以下の9つだと書いてあります。

  1. スモール・イズ・ビューティフル(小さいものは美しい)
  2. 一つのプログラムには一つのことをうまくやらせる
  3. できるだけ早く試作する
  4. 効率より移植性を優先する
  5. 数値データはASCIIフラットファイルに保存する
  6. ソフトウェアを梃子(てこ)として使う
  7. シェルスクリプトによって梃子の効果と移植性を高める
  8. 過度の対話的インターフェースを避ける
  9. すべてのプログラムをフィルタとして設計する

 そして、次の章からはこの9つの定理を1つずつ詳しく説明していくという構成になっています。なんたる潔い構成でしょう。

 ただ、そのどれもが説明を読むと、それがソフトウェアだけに止まらない、モノづくりをする際の大切な思想であることがわかります。これが、1994年に発刊して以来、20年以上読まれ続けている理由なのでしょう。実際読んでみると、「できるだけ早く試作をする」のところでは、その当時では常識であったはずの「ウォーターフォール」的なソフトウェア開発を否定し「アジャイル」的な開発手法を推奨しているように読み取れます。

 また、ソフトの高速化を追求するより、移植しやすいソフトを作るべきだというのは心に刺さりました。たしかに、ディープラーニングで、一生懸命ラズパイでも動くようにソフトの工夫している間に、ラズパイ3がラズパイ4になってあっさり動いたりと「ソフトウェアを頑張るより、ハードウェアの進化を待っていた方が良いのでは?」という疑問は、確かに感じることもあります。

 ただ、進化を1年待つというのも、今だと致命傷になりかねない気がするので、バランスも大切では無いのかな?と思います(まだ真理に到達できていないだけかもしれません)。個人的には、TensorFlowを始めとするディープラーニングのフレームワークの開発で、ソフトの移植性がもうちょっと考慮されていると良いなと思います(バージョンアップが激しすぎてついていけません)。

 あとは、とにかくシェルスクリプトをオススメしてきます。「シェルスクリプトをC言語で書き直すんじゃないぞ!」と何度も念を押してきます(笑)よっぽど嫌なことがあったのでしょうね。シェルスクリプトを使う利点としては、移植性が良いこととコンパイル(ビルド)をしなくても良いことを主に挙げていました。

 今だと、Pythonも多くのハードウェアに対応し、移植性が良いですし、スクリプト言語でビルドも不要なので、UNIXのPhilosophyに合致するのではないかなと思ったりしましたが、UNIX原理主義者からは、怒られてしまうかもしれませんね。

まとめ

 「UNIXという考え方」の本を読んだ感想を書きました。時代を超えて通じる哲学があるのは、多くの名著の共通点だなと感じました。最新の開発手法にも通じているところが凄いな、と思いますし、結局モノづくりの重要な本質って、ソフトウェアだろうと何だろうと、昔からそんなに変わってないのかもしれませんね。

 実際問題として、自分がソフトウェア関係の技術のうち、身につけてから一番長く使えている(ある意味コスパの良い)ものは、UNIXがベースとなったLinuxのコマンドやスクリプトだったりするので、UNIXのPhilosophyは一つの真理であり、知っておくべき考え方ではないのかなと感じました。

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

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

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

関連記事