最近読んだ書籍の紹介(UNIXという考え方)

本の紹介

タイトル

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

読んだきっかけ

  • 確か自分が好きなエンジニアがTwitterか何かで紹介していたから。 ずっと読みたいなーって思っていたけど。実務や資格の学習とかで中々読む時間が無く、ようやく読了。
  • 20年前から現代(令和)まで通ずるエンジニアとしての本質が書かれているとのことで、興味を持った。

要約

  • 概要は以下の9項目。内容はこの9項目について、アメリカ人らしいジョークや実例(20年前の話とあってかなり古い)を 交えながら、解説してある。
  • Small is beautiful.

  • 1つのプログラムには1つのことを上手くやらせる。

  • できるだけ早く試作する。

  • 効率より移植性を重視する。

  • 数値データはASCIIフラットファイルに保存する

  • ソフトウェアを梃子(てこ)として使う

  • シェルスクリプトによって梃子の効果と移植性を高める。

  • 過度の対話的インターフェースを割ける

  • すべてのプログラムをフィルタとして設計する。

この9項目について、自分の所感。

  1. Small is beautiful.

  2. 1つのプログラムには1つのことを上手くやらせる。 -> 上記2点は今の時代では当然かなと思う。ただ、当時の時代はそこまで当たり前ではなくて、 これができていないソフトウェアは、急速なハードウェアのようなプラットフォームに追従できなくて、 敗北していったらしい。今の進歩とはまた違っていて、CPUやメモリ等の本当にハードの部分の進歩。 この辺りの時代背景がかなり具体的に書いてあって、歴史の教科書としてはおもしろかった。

  3. できるだけ早く試作する。 -> これも当たり前なんだけど自分が本当にできているのか、と自問自答したところ、できていない部分もあるな、と思い反省した。 今の時代は顧客側もネットからの情報やIT子会社抱えてたりでそれなりに知識がある状態で、"調べます。"とか"検証します。"みたいな スピード感では、とても追いつけないんだろうなと思った。

  4. 効率より移植性を重視する。

  5. 数値データはASCIIフラットファイルに保存する。 -> ここに対する意見は1, 2と同様。

  6. ソフトウェアを梃子(てこ)として使う

  7. シェルスクリプトによって梃子の効果と移植性を高める。 -> シェルスクリプトには短い文字数で、膨大な処理が書けるんだから、上手く使おうねっていう話。 今のPythonに通ずるような話でおもしろかった。

  8. 過度の対話的インターフェースを割ける

  9. すべてのプログラムをフィルタとして設計する。 -> ここも当然なんだけど、具体例がおもしろかった。特にUNIXは"沈黙を金"と言っている箇所。 WindowsとUNICのファイル一覧出力処理について。

    • Windowsの場合 $> DIR DIRECTORY : NO FILES FOUND $>

    • UNIXの場合 sh> ls sh>

    こんな感じで、UNIXはファイルが何も無かったら、何もメッセージを出力してくれないから、 不親切ですか?そうでもないよね?っていう一例。

    UNIXなら、以下みたいな使い方ができる。

    ls -l | awk '{ print $4}' | sort awkコマンドをパイプで繋げて、lsの出力結果のうち4番目の値のみを出力できる。 これがWindowsのように"DIRECTORY : NO FILES FOUND"っていう結果を出力してしまったら、 "FOUND"を出力してしまうよね。邪魔だよね。UNIX、無駄が無くていいよね。 みたいな話。

所感

  • 本が書かれたのは平成13年(2001年)2月23日。約20年前。最近のバズワードでもある"マイクロサービスアーキテクチャ" みたいな考え方が確かに記載されてあったけど、正直そこまで新鮮な考えは無かった。自分から進んで人に薦める程の書籍では無いかな、という印象。ただ、20年前からこの考えを提唱していることは シンプルにすごいと思った。

  • 本の内容とは関係ないが、休憩の取り方は大事だと思った。休憩時間にスマホとかの電子機器を触るのはNG。 スマホ触ると5分くらいの感覚で15分経ってる。外の景色見ながらぼーっとすると、15分くらい休んだ感覚で3分くらいしか経ってない。 スマホってやっぱり使い方を気を付けないと、無駄な情報を沢山取り込むことになる。

  • ブログでも口頭でもいいが、やっぱり学んだことはアウトプットしないと、自分の理解度は計れない。 こうやって文章にすると、自分が如何に技術的に未術で、普段から感覚的に話をしているかを痛感する。 もっと開発をするなり、勉強をしたことをアウトプットしながら、文字通り体に染み込ませて、自分の知識レベルの基準を高めたい。