2007-09-09

"The Art of UNIX Programming" Eric S.Raymond 著

立ち読みしていると、おもしろい酒肴(趣向)を見つけた。
「Unixは口承文学だ!」アル中ハイマーはこの宣伝文句にいちころである。本書は専門書風哲学書である。おいらはUnixオンチであるが、勉強意欲がわく。哲学書はこうでなくてはいけない。ただ、美しい思想ばかりではない。醜い部分もさらけ出してくれる。哲学書はこうでなくてはいけない。

文化を語るには、その歴史を振り返るのが一番である。
Unixは幾度となく危機に直面する。BSDとSystemVの内部紛争に始まり、かつてMac文化にユーザ思想を持ち込まれ、今や豊富な物量を武器にMS文化に圧倒される。パソコン市場を支配するMS信望者からは、カルト集団という差別扱いを受けている。しかし、現在ではLinuxを始めとするオープンソースの逆襲は見逃せない。Linux自体はUnixの系譜とは違って最初から書き直されたOSだが、本書では、Unix標準と同じ動作をするという意味で同列に扱っている。
本書は、Unixの生命力の長さは初期段階で開発者達が下した設計上の判断が正しかったことを意味すると語る。また一方で、古いUnixコミュニティが失敗してきた罪も見逃さない。IBMやAT&Tと同じくらい将来見通しを欠いていたこと。旧来の企業組織、金融資本、市場論理の命令機構を全て受け入れたために、プロフェッショナルの自覚を失ったこと。などが語られる。

Unix思想を表す有名な言葉は、
「K.I.S.S.」Keep It Simple, Stupid!
Unixというよりはソフトウェアエンジニアの心得が語られている。
どんなOSにも文化的偏向が見られるだろうが、ここで簡単に特徴を挙げてみよう。
・APIの基本思想で最も重要なのは「すべてはファイル」という考え方。
・マルチタスク機能をサポート。
・プロセス間通信が簡単でパイプやフィルタを可能にする。
また、Unixは、第三者ユーザの入りこむ余地を防いでいる。
・MMUによるアドレス空間の侵入を防ぐ。
・マルチユーザをサポートするための特権グループが存在する。
・重大な影響を及ぼす特権的プログラムを限定している。
ここで、Word, Excel, PowerPointなどのプログラムは互いの内部構造にベタベタの知識を持っていると皮肉っている。Unixでは具体的な通信相手を想定することなく通信できることを前提としている。Unixだからというわけではないが、アル中ハイマーがプログラムI/Fを考える時、基本はテキストストリームである。酔っ払いは単純なものしか受け入れられない。頭が悪いからモジュール構成も簡単である必要がある。よって、単純なコマンドストリームは好きである。
本書では、GUI環境が整っていないOSは問題であるということに異論を唱える人はほとんどいなくなった一方で、CLI環境が整っていないのは、GUI環境が整っていないのと同じくらい問題な欠陥であると語られる。
この見解は同感である。よって、おいは、WindowsにまずCygwinをインストールしている。

データ駆動プログラムとオブジェクト指向の違いについて語られる。
正しいデータ構造を選びうまく構成できればアルゴリズムはほとんど自明なものになる。プログラムの中心はアルゴリズムではなくデータ構造である。こうしたデータ構成が中心である考え方は共通であるが、オブジェクト指向と混同してはいけないと述べている。データ駆動プログラムは、データは単にオブジェクトの状態であるのではなく、実質的にプログラム制御を定義している。オブジェクト指向がカプセル化に関心を持つのに対し、できる限り固定されたコードを少なくすることだ。Unixの伝統はオブジェクト指向よりも深いものをもっていると語る。

本書は言語の紹介もしている。
アル中ハイマーは、すっかり、CやC++でプログラミングする機会が無くなった。最近は面倒なのでスクリプト言語で済ませる。酔っ払いには、動的な記憶管理などランタイムに任せるのが身のためである。
シェルについてはUnix伝統でもあり触れられるのは当然である。ただ意外な一言があった。
「これらの中でもっともよく知られているのは、おそらくcshだが、これはスクリプトを書くのに適していないことで悪名高い。」
へー!おいらはbashを主に使っているが、周りにcshを使っている人も少なくない。
Perlは、行指向のテキストをパターン処理する組み込み機能は強力である。この点はPerlを凌駕するものは今のところないようだ。おいらも時々使う。ただ、表現が醜い。自分で書いたコードでさえ暗号文に見える時がある。そこで、Pythonに興味を持っている。本書でも紹介しれくれる。
Pythonはモジュール化のための優れた機能を持ちクリーンでエレガントな設計になっているそうだ。Perlと比べても癖は強くないらしい。これだけで勉強してみる価値がありそうだ。標準Pythonディストリビューションには、インターネットプロトコル(smtp,pop3,ftp,imap,http)のクライアントクラスとhtmlのジェネレータクラスが含まれているという。ネットワーク管理ツールの構築に適しているようだ。これで更に興味を持つ。その分重そうでもある。
Javaは一度勉強したことがある。ただアル中ハイマーは政治的な話が嫌いである。SCSL(Sun Community Source License)には多くのプログラマが失望しているようだ。OSに依存しない独自環境というのは魅力があるので再挑戦したいと思っている。しかし、Java1.2とJ2EEEで分裂の話を紹介してくれるだけでもやる気は失せてしまう。
Emacs-Lispは、Emacs上でmewを動かすために数十行書いた程度で全く勉強したことがない。Paul Graham著の「ハッカーと画家」では、Lispの魅力を述べている。Lispハッカーはデータ構造を柔軟に持つことの価値を知っているという。アル中ハイマーには、こうしたリスト型言語を避けてきたところがある。一度は踏み入れてみようという意欲がわく。
makeの話も出てくる。おいらの好きなツールの一つだ。ただ、許せないのがコマンド行の先頭にタブを置く思想である。これは、Unixの歴史で最悪の設計ミスの1つだと認めてくれている。そうだろう!そうだろう!
インターフェースの醜さでは、アル中ハイマーはもう一つ言いたい。正規表現がそれである。まるで暗号文である。慣れれば良いとしても、ものによって微妙に表現が違うのは許せない。

Unix文化の問題点も明記している。
そこにはコミュニティ問題としてエリート主義の克服が語られる。Unixはもともと専門家相手に発展してきた経緯がある。特に年長者は自分の方が賢いという強い意識があるらしい。一方、Mac文化はエンドユーザが限りなく素人であることを念頭においている。ただ、恐ろしくインフラストラクチャーが脆弱である。Unix文化はインフラストラクチャーが全てである。Mac文化はUnix文化を取り入れ始めている。Mac OS X はUnixを基盤としている。逆に、Unix陣営は、これからはMac文化の一意的な合理性を認められるかどうかであると述べている。オープンソースの世界では、GNOMEやKDEなどのプロジェクトに力を注いでいる。これらの文化は融合されていくように見える。
Unix文化は、あまりに長い時間、非技術系のユーザを無視してきたために、MS文化がソフトウェアの品質の標準を酷く押し下げる横行を許した。
「今までは、Unixのハッカーの負けに賭けると短期的には賢く、長期的には愚かだという結果になってきた。」と締めくくる。
本書のおまけに、Master Fooの話もある。これは禅の世界へ連れて行ってくれる。哲学書はこうでなくてはいけない。

本書はUnixの話だけに留まらない。中でもオープンソース運動には魅力がある。ベンダーが握っていた主導権から市民権を獲得した感がある。道徳とは、コミュニティの中で育つ規定であり、一部のエリートが定めた法からは生まれないのである。自然のコミュニティから生まれた暗黙の規定にこそ説得力がある。技術者は上司に押し付けられた規定よりもエレガントなものを取り入れたがる。そして、良いものはコミュニティを通して広がる。
おいらは、使うツールまでもが規定されるような宗教じみたコーディングルールに縛られることを嫌う。それは、ルールを守りたくても守る能力がないからである。アル中ハイマー病とはそうした病である。

0 コメント:

コメントを投稿