JavaScript勉強会

JavaScriptの学習日記

UNIXという考え方

プログラムの設計について参考になる本がありました。

UNIXの考え方」という本です。

  • 小さなプログラムを組み合わせて大きなシステムを作る。
  • プログラムはデータを作るものではなく、データを加工するフィルターである。

 

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

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

 

 

(参考)本書の内容は「UNIX哲学」として、広く知られているようです。

UNIX哲学 - Wikipedia

 

目次

 

 序文

 謝辞

 日本語版刊行に寄せて

 日本語版監訳者より

 

イントロダクション

 

第1章 UNIXの考え方:たくさんの登場人物たち

 1.1 UNIXの考え方:簡単なまとめ

 

第2章 人類にとっての小さな一歩

 2.1 [定理1]:スモール・イズ・ビューティフル
 2.2 やさしいソフトウェア工学
 2.3 [定理2]:一つのプログラムには一つのことをうまくやらせる

 

第3章 楽しみと実益をかねた早めの試作

 3.1 [定理3]:できるだけ早く試作を作成する
 3.2 人間による三つのシステム
 3.3 人間による第一のシステム
 3.4 人間による第二のシステム
 3.5 人間による第三のシステム
 3.6 第三のシステムの構築

 

第4章 移植性の優先順位

 4.1 [定理4]:効率より移植性
 4.2 事例研究――Atari 2600
 4.3 [定理5]:数値データはASCIIフラットファイルに保存する
 4.4 事例研究――あるUNIXプログラマの道具袋

 

第5章 これこそ梃子の効果!

 5.1 [定理6]:ソフトウェアの梃子を有効に活用する
 5.2 [定理7]:シェルスクリプトを使うことで梃子の効果と移植性を高める

 

第6章 対話的プログラムの危険性

 6.1 [定理8]:過度の対話的インタフェースを避ける
 6.2 [定理9]:すべてのプログラムをフィルタにする
 6.3 UNIX環境:プログラムをフィルタとして使う

 

第7章 さらなる10のUNIXの考え方

 7.1 (1) 好みに応じて自分で環境を調整できるようにする
 7.2 (2) オペレーティングシステムカーネルを小さく軽くする
 7.3 (3) 小文字を使い、短く
 7.4 (4) 木を守る
 7.5 (5) 沈黙は金
 7.6 (6) 並行して考える
 7.7 (7) 部分の総和は全体よりも大きい
 7.8 (8) 90パーセントの解を目指す
 7.9 (9) 劣るほうが優れている
 7.10 (10) 階層的に考える

 

第8章 一つのことをうまくやろう

 8.1 UNIXの考え方:総括

 

第9章 UNIXとその他のオペレーティングシステムの考え方

 9.1 Atariホームコンピュータ――芸術としての人間工学
 9.2 MS-DOS――7000万人以上のユーザーが間違っているはずがない
 9.3 OpenVMS――UNIXへのアンチテーゼ?

 

索引

 

 

出版社情報

shop.ohmsha.co.jp

 

www.ohmsha.co.jp

 

著者紹介

Mike Gancarz マイク・ガンカーズ

 

UNIX哲学 - Wikipedia

1994年、マイク・ガンカーズ(X Window System開発チームの一員)は、UNIXで得た経験と、同僚プログラマーUNIXに依存する他分野の人々との議論を活かし、以下の9つの至上命令に集約される「UNIX哲学」を創出した。

 

UNIX/LinuxのXウィンドウを作った方でした。

 

https://www.linkedin.com/in/mike-gancarz-66a1204

f:id:jsstudy:20180315084930j:plain

 

職歴

Digital Equipment Corporation 1984年 – 1998年

Bank of America 2001年 – 現在

 

出版物

Linux and the Unix Philosophy 2003年7月

The UNIX Philosophy 1994年12月

 

元DECのエンジニアで、UNIXLinuxの本を執筆されていました。

 

The UNIX Philosophy

The UNIX Philosophy

 

 

Linux and the Unix Philosophy

Linux and the Unix Philosophy

 

 

書評

元々は、Elixirの本を読んでいたときに、UNIX哲学が紹介されていたので、興味を持ちました。

 

jsstudy.hatenablog.com

 

  • プログラムはデータを変えるもの
  • UNIXシェルのパイプラインのように、単純な機能をつなげて複雑な処理を実現

 

元ネタの本があったので、原典を読んでおこうと思い、本書を読んでみました。

この本は、結構人気みたいで、ネットで書評やまとめを探すといろいろヒットします。

 

qiita.com

 

UNIXという考え方 The UNIX philosophy · GitHub

 

自分が気に入ったところ、なるほどな~と感心したところを抜粋してみます。(メモ)

 

(p.98)

6.2 [定理9]:すべてのプログラムをフィルタにする

コンピュータの出現以来、書かれてきたすべてのプログラムはフィルタだ

 すべてのプログラムは、簡単なものでも複雑なものでも、何らかの形式のデータを入力として受け入れ、何らかの形式のデータを出力として生成する。プログラムがどのようにデータをフィルタするかは、そこに含まれているアルゴリズムによる。

 ほとんどの人は、テキストフォーマッタや変換プログラムをフィルタとしてみなすことにはそう抵抗を感じない。しかし、フィルタとはみなされない他のプログラムも同じだということを受け入れるのは難しいようだ。

 

プログラムはデータを作らない。人間がつくる

 一般にはアプリケーションがデータを作ると信じられているが、実際のところ、アプリケーションにはデータを作る能力などない。データを作るには、創造力が必要だ。そして、オリジナルの情報源が必要だ。コンピュータは情報源を持たない。

 現実世界についての情報を収集するリアルタイムプログラムも、データを生成してはいない。データはすでに存在している。環境から測定値を抽出することによって、プログラムは選択のプロセスを実行する。重要なデータだけが、プログラムのフィルタを通貨して格納される。

 世界は、人間が作り出したデータであふれている。コンピュータが発明されでいなくても、データは存在していただろう。コンピュータは、データの収集とフィルタリングを効率よく行えるようにする道具にすぎない。生成された「新しい」データは、実は少しも新しくない。コンピュータを使えば、データの管理方法が広がるというだけのことだ。

 世界がコンピュータであふれていても、人間がいなければデータはない

 

コンピュータは、データを一つの形式から別の形式に変換する

 データについて別の角度から見てみよう。アプリケーションプログラムでデータを有効に使うためには、操作しやすい形式でデータを格納しなければならない。例えば、キーボード上のキーを押すという動作は、ソフトウェアにとってなんの意味もない。しかし、これがバイナリデータを表す一連の電子パルスに変換されると、突然、その動作に新しい生命が宿る。ソフトウェアは、それをさまざまな形式に変換し、さまざまな目的に役立てることができる。

 

プログラムは、「データ」と「処理」という2つの要素から成り立っています。

プログラムは、データを「入力→処理→出力」という流れで扱います。

入力される一番最初のデータは人間が作っている=人間によってもたらされる、という分析がなるほど!と思いました。

言われてみたら、いちいち最も話ですが、普段はあまり意識してなかったですね。

 

  • データを作るのは人間
  • データを加工(フィルター)するのがプログラム

 

この観点に立つと、プログラムはフィルターなので、メソッドチェーン=処理をつなぎ合わせたものとして作れます。

これは、関数型プログラミングで、関数を合成する考え方と同じだと思いました。

 

この視点が、「小さなプログラムを組み合わせて、大きなシステムを作る」という考え方の基礎になっていると思いました。

 

迷ったときは原点に返る~UNIXの設計を参考にして、プログラムを作ってみたいと思います。