2018-05-27

"インテルスレッディング・ビルディング・ブロック" James Reinders 著

バッハのカンタータを BGM にフィーヌ・ブルゴーニュをやりながら、マイク・ガンカーズの本(前々記事)や、ブライアン・カーニハンとロブ・パイクの本(前記事)でコンピュータ哲学の郷愁に浸っていると、またもや本棚の奥底から考古学的な書物が出土された。オライリー君の本は、手っ取り早く手段を習得し、そしてそのまま... という群れが、納戸の一画を占拠してやがる。コレクションってやつは、集めるという行為の方が目的となって、知識を深めようという本来の目的を見失わせるところがある。
本書もその例に漏れず、満載されたコード事例を辞書代わりに用い、著者が力説する思いについては読み飛ばしたことだろう。仕事が忙しい!とは、威厳をまとった実に都合のよい言い訳である。こうして古書を漁ってノスタルジアに耽り、おまけに、これをネタにお喋りがかっぱえびせん状態になるのも、引退勧告を受け入れているようなものか...

さて、Intel Threading Building Blocks(TBB)とは、C++ の STL を拡張した並列処理用テンプレートライブラリであり、こいつがプログラマのための書であることは言うまでもない。
しかしながら、おいらはプログラマではない。むかーし五年間ほど、リアルタイム OS を書いていた時期があるものの、あくまでもハードウェア設計者であり、専門はプロセッサである。特定用途向けの CPU や DSP など。
とはいえ、効率的で合理的なシステムを構築する上で、ハードウェア側からの視点だけでは不十分である。それは、ソフトウェア設計者とて同じことだろう。
かつて、CPU パフォーマンスを最大限に引き出すためにアセンブラ言語で書き、また、高性能なコンパイラを求めた。今でこそ低水準な扱いを受ける C 言語だが、当時は高級言語として輝き、実装では物足りないほどであった。特にリアルタイム性の厳しい組込み系システムでは、ハードウェアとソフトウェアが協調してカスタマイズされる。命令セットやタスクの同期、あるいは割り込みといった機能を。
やがて、ムーアの法則に従い半導体の性能そのものが向上すると、汎用的なリアルタイム OS によって抽象化が進んだ。アプリケーション設計者は余計なことを考えずに済み、タスク設計に傾注できるようになったのである。
そして、プロセッサのマルチコア化が進むと、言語システムのレベルでマルチスレッド用ライブラリが整備されるとは、凄い時代だなぁ... などと思い本書を手に取ったのが、十年ぐらい前であろうか...
ところで、抽象化ってやつは、恐ろしい戦略である。おまじないを書いただけで、なんとなく動いてしまうし、それで理解した気分にもなれる。プログラミング言語には、おまじないめいた記述が実に多い。その代表といえば、"stdio.h" であろう。アセンブラ言語にも、ハードウェアを定義するためのおまじないがある。これらのおまじないは、時にはテーブルと呼ばれ、時にはやライブラリと呼ばれる。そして、STL を置き換えるように記述する TBB もまた、おまじないめいている。
ちなみに、ライブラリの中身を読むことが、プログラミング言語の習得における良い方法の一つと言えよう。なにしろ達人が書いたコードなのだから。ただ、書き方をパクるのではなく、考え方をパクりたい...

コンピューティングの並列思考そのものは古く、個人的にも三十年前には触れていた。メインフレームがそれだ。当時、TSS(Time Sharing System)という用語が流行った。メインフレーム設計者たちは、キャッシュのアルゴリズムだけが妙に詳しかったり、命令セットの効率性ばかりを追求したり、システムバスのアーキテクチャに執念を燃やしたりと専門技術が細分化され、全体構造となると意外と理解していなかった。
そして今日、パソコンや携帯端末のレベルでマルチコア化が進み、おまけに、マルチスレッド環境までも当たり前になると、もはや専門技術に執着している場合ではあるまい。
ただ、マルチタスクだから、マルチスレッドだからといって、必ずしもパフォーマンスが向上するわけではない。実際、シングルで処理した方が速いケースも少なくない。それは、開発プロジェクトのように、いくら技術者を増員しても日程が縮まらないばかりか、かえって無駄な管理作業を増やして混乱させる状況に似ている。それでも、人海戦術のお好きなお偉いさんをよく見かけるけど。
シングルタスクで十分な処理でも、マルチタスク OS 上で実行させることのメリットはある。例外処理やハードウェア割り込み、あるいは、システム暴走の抑制などの監視機能を、OS 側に任せることができるのだから。
例えば、ファクトリーオートメーションのような分野では、常に製造工程を監視する必要があり、マルチタスクの恩恵をかなり受けている。バックアップ電源が整備されているとはいえ、災害などで起こるイレギュラーなシャットダウンなども考慮される。シングルタスクの時代には、一つのプログラムがシステム全体をよくクラッシュさせていたのである。
そういえば、むかーし、ネイティブコードにこだわるお偉いさんがいた。スクリプト言語がまだ地位を獲得していない時代、技術雑誌に実行効率の側面から言語システムの比較が掲載されると、流行り用語に群がり、開発効率よりも優先させるから頭が痛い!信頼性までも向上すると思い込むようで、おいらはネイティブおじさんと呼んでいた。
そして今、ネイティブスレッドにこだわるお偉いさんがいる...

1. 並列思考
並列思考の基本的な戦略に、パイプライン時分割処理がある。まず、一つの流れ作業を分割してパイプライン化し、複数の流れ作業を時間単位で同時に処理できるようにする。このとき重要なのは、それぞれの作業に待ち時間が生じないように分割単位を一定時間でスライスすること。この一つの流れ作業がタスクであり、分割した単位がスレッドということになる。
そして、スレッドの単位をいかに効率的にマッピングできるかは、プロセッサとの相談ということになるが、アプリケーション設計者が、いちいちプロセッサのご機嫌伺いをしている場合ではない。
そこで、TBB は、そんなことを意識せずとも、自動的にスレッドマッピングをやってくれるというのだから、なんとも狐につままれたような... そんな気分になった記憶が蘇る。
マルチコア環境を与えられれば、それぞれのコアにタスクを割り当てて同時に処理しようと、誰でも考えるだろう。メモリ領域さえ互いに侵さなければ、大した問題にはならないはず。それでもリソースの競合は起こるけど。
さらに、一つのタスクをスレッドに分割して、これを並列で処理しようというのだから尋常ではない。当然ながら、メモリ競合やデッドロックの問題を深刻化させ、スレッドの前後関係などシーケンスの問題までも生じる。
ここで重要な概念は、タイムスライスとウィンドウ(時間幅)、そして、分割の正当性の検証ということになろう。実際、キャッシュの方がはるかに役立つ場面は少なくない。キャッシュで済むなら、わざわざマルチスレッドなんて高度な技を持ち出さなくとも。
ただ、キャッシュはキャッシュで、単純に未使用期間でデータを退避させているわけではなく、連想方式を組み合わせたりと様々な工夫がなされる。
TBB は、タスクとデータの不必要な移動を避けるようにキャッシュアクセスまでも考慮されているという。自動生成されたスレッドがキャッシュと相性がいいのは、なんとも心強い。
プロセッサ効率の最も良いケースは、演算処理が主体となるプログラムで、一つの物理スレッドに一つの論理スレッドがマッピングされているような状況である。
では、TBBってやつは、プロセッサのスレッド構造だけでなく、キャッシュ構造までも知っているというのか?
ただ、いくらハードウェア構造を知り尽くしているとしても、コンパイラが万能とは考えにくい。ロックを避ける価値は大いにあるが、デバックを困難にしかねない。TBB は、ロックの必要性を軽減してくれるが、ロックから解放してくれるわけではなさそうである。デッドロックと競合をいかに回避するかという問題はいつまでもつきまとうだろうし、メモリアロケートの問題もまた、最も悩ましい問題の一つとしてあり続けるだろう...
「プログラミングの真理の1つは、最良の直列アルゴリズムが最良の並列アルゴリズムであることはめったになく、その逆もまためったにない...」

2. スケジューリングと parallel_for
パイプラインの処理能力は、スライスしたトークンによって制限される。パイプラインが n 個のトークンで構成される場合、n より多くの操作を並列に実行することはできない。n値が低すぎると並列性が悪くなり、高すぎるとバッファなどのリソースを浪費する。
また、処理時間の最も遅い直列ステージに引っ張られる。それはプログラムだけでなく、システム I/O やネットワークポートなどのリソースである場合も多々ある。
最適なウィンドウサイズを模索するのは、実に骨が折れる。この面倒な作業を誰かが代替してくれるなら、並列処理は病みつきになりそう。スレッドではなく、タスクで考えるという安心感を与えてくれれれば...
本書は、その醍醐味を語るために、parallel_for テンプレートを中心的な話題にしている。タスク・スケジューラという高度な方法も提供されるが、まずは parallel_for を検討してみては... と勧めてくれる。
「なぜクィックソートのような再帰的なアルゴリズムが再帰テンプレートを使用する代わりに parallel_for テンプレートを使用すべきなのかを理解したとき、アプリケーションにスレッディング・ビルディング・ブロックを実装する方法を理解したことになる...」
ここで注目したいのは、「再帰連鎖反応」という概念である。スケジューラは、ツリー構造のタスクグラフで最も効率良く動作するという。それは、幅優先のスチールと深さ優先の作業という両面の戦略が最もうまく適用できるからであると。
例えば、マスタータスクが n 個の子を直接生成するには、O(n) ステップ必要だが、ツリー構造のフォークでは O(log n) ステップあればいい。ただ、ドメインがツリー構造でないことがよくある。それでもツリーマップは可能で、parallel_for は反復空間で動作し、バイナリーツリーに再帰的にマップするという。こうした並列思考の根底にアムダールの法則を匂わせ、直列ステージをなるべく減らしたいという動機を誘う。
ちなみに、コンピュータアーキテクトのジーン・アムダール氏はこう言ったそうな。
「ほぼ同じ大きさの直列処理の速度が改善されないのであれば、並列処理の速度を改善しようとする労力は無駄になる。」

2018-05-20

"UNIX プログラミング環境" Brian W.Kernighan & Rob Pike 著

前記事でマイク・ガンカーズの UNIX 哲学に浸りながら本棚を眺めていると、なにやら懐かしい香りのする一冊に目が留まる。ライアン・カーニハンとロブ・パイクの本... 20年以上前に買ったやつだ。
これら二冊を要約すると... 一つのことを確実にすっきりやる!それらをうまく協調させる!そして、インターフェースの基本は標準入出力を介して!... これが、UNIX 哲学ということになろうか。エリック・レイモンドは、UNIX は口承文学!と書いた。ドナルド・クヌースは文芸的プログラミングを提唱した。技術分野とはいえ言語を語るからには、やはり文学的に味わえる余地を残したい...

本書の考古学的な発掘のおかげで、改めて気づかされることがある。それは、辞書的な扱いのために、じっくりと読んだ覚えのない専門書が幾多も埋れていることだ。ヘネパタ本をはじめお蔵入りした高価な書群が、数段に渡って本棚を占拠してやがる。面倒臭がり屋は、これらを横目にハウツー本へ飛びついてきた。なんてもったいないことを...
仕事が忙しい!などという台詞は、自分自身を納得をさせるのに実に都合のいい、威厳をまとった言い訳である。そのために、本質的な考え方を疎かにし、盲目であり続ける。その方が幸せなのかもしれんが...
哲学をやるなら、精神が本当の閑暇を知らねばならない。
しかし、だ。プログラミング環境は、まず慣れろ!というのがある。まず触ってみて、書いているうちにその思想を習得していく。そのために手っ取り早く使い方から学ぶ。実際、理屈をこねても何も始まらない。本書を手にしたのは、sed, grep, awk といったコマンド群の教科書としてである。これらのコマンドを押さえるだけでも、かなりのことができ、しかも、フィルタやパイプの機能を通してシェルの設計思想に触れることができる。標準入出力を基本インターフェースとする考え方は、自分でこしらえるプログラムもこの路線に乗せることで、シェルの有難味を実感できる。そのインターフェースを司るのが、C言語でいうところの put/get 系関数。ただ、あまりコンパクトにしようとすると、正規表現の暗号めいた記述のために悩まされることも多い。
他にも、低レベルの入出力を提供するシステムコールの仕組み、ファイルポインタや i ノードへアクセスできる機構、nohup という端末を off してもプロセスの実行を続けてくれるコマンドなど、重宝したものである。
「複数のフィルタを結合して、1本のパイプラインにすることは、問題を解決可能な小問題に分解するのに役立つ。このようなツールの利用法こそは UNIX プログラミング環境の核心であるといわれることが多い。この見方は一面的に過ぎるが、フィルタはシステムのあらゆるところで利用されており、なぜうまく動いているのかを調べておいて損はない。」

さて、何をもって UNIX と呼ぶか?となると、人それぞれ。コンパイラ、エディタ、コマンド群といった環境の一群を指す場合もあれば、X Window などのグラフィックス環境までを含む場合もあり、はたまた、文書作成ツールや統計解析ツールといったパッケージ群まで含む場合もある。その名が Multics から継承されているので、真髄がタイムシェアリングにあることは確かであろう。
本書は、UNIX の特徴に、まずファイルシステムを強調している。階層化された構造こそが... と。用語ではディレクトリとファイルで区別されるが、マッピングの中身は属性が違うだけ。最初は、現在の作業場としてカレントディレクトリという概念から触れることになるだろう。
そういえば、新入社員の時代、この単純化した仕組みを理解するために、パーティションやセクタで管理されるディスクの物理構造の書に飛びついたものである。低レベルの物理構造を知っておくと、ディスクをアクセスする関数の構造もイメージしやすい。
Windows でも同じ用語を使っていたが、いつ頃からか、フォルダという用語で抽象化された。ディレクトリという用語に不都合を感じないが、文具用語としては馴染みがないからか?あるいは、Mac のパクリか?コマンドプロンプトでは、dir コマンドのままだけど。
「UNIX システム上ではあらゆるものが1つのファイルである。ファイルシステムこそ、UNIX システムの成功と、使い勝手のよさをもたらした核心と言える。」

ところで、UNIX の ls というコマンド名は評判が悪いという話も聞くが、どうだろう。list と directory がいまいち合わないらしい。
ちなみに、おいらは、sl コマンド好きで、必ずインストールし、わざと間違えてタイプする。そう、あの蒸気機関車 SL が走るやつだ。

また、UNIX のプログラミングスタイルを四つ挙げている。
  • 第一の姿勢... 汚れ仕事はマシンにやらせよう!人間は思考すべきことに集中すること。
  • 第二の姿勢... 仕事は他人にやらせよう!既存のプログラムを素材とし、それを結合し、シェルの思想、すなわちフィルタやパイプの機能に乗せること。
  • 第三の姿勢... 仕事は順序を踏んで行おう!最も単純なものからこしらえ、その経験を軸に拡張していくこと。無闇にオプションを追加して多機能主義に陥らないこと。
  • 第四の姿勢... ツールを作ろう!環境を自分だけのものにカスタマイズして自由を謳歌すること。UNIX システムは完全ではないので、修正の余地が多分にあるということを理解すること。
これらの姿勢は、今となっては当たり前といえばそうなのだが、当時は感動的であった。そして、構造化プログラミングからオブジェクト指向への布石であったようにも映る。結果論ではあろうけど...
UNIXは、ギークな自由精神を体現する場として発展してきたところがある。その経緯はオープンソース的で、ボランティア的ですらあり、極めて民主主義的である。そのために、やりたければ自分でやれば!と冷たく突き放される。だから自由なのだ。才能なき酔いどれ天の邪鬼は自由が欲しいと大声で叫び、才能あふれる UNIX グルは静かに自由を謳歌する...

ところで、この手の書に触れると、お喋りが止まらなくなるのは悪い癖。歳のせいか... いや、そろそろ引退勧告か...
おいらが UNIX に出会ったのは、30年以上前。マシンが一人一台なんて環境は贅沢、ハードディスクなんて高嶺の花だった。メインフレームを利用するにしても、CPU の使用料を部署ごとに予算化しなければならず、なんで社内の機械を使うのにお金が請求されるのよ?と愚痴ったものである。
なので、朝、出勤と同時にワークステーションの端末に社員が群がる。SunOS か、HP-UX かでも人気度が違い、BSD系と System V系の派遣争いが色濃く残っていた時代で、まだ Solaris の名は聞かない。
当時の記憶として、やたらと TSS(Time Sharing System)という用語を使っていたような気がする。いくらパソコンが革命的に出現したとはいえ、まっとうなマルチタスクを実現できたのはメインフレーム以外には UNIX マシンだけ。しかも、TCP/IP を標準装備し、ネットワーク環境が当たり前のように整っているのが魅力だった。
その時代からの名残であろうか。おいらは、いまだに母艦マシンが手元にないと落ち着かないネアンデルタール人だ。15年前の独立時、Solaris マシンに設備投資したが、今では、Linux が母艦マシンを担っている。厳密に言えば、Linux は UNIX とは認められていないが、UNIX ライクであることに違いはない。タダだし、システム要件も緩い。ただ、タダほど高いものはないとも言う。実際、参考書やらで意外と投資額は大きいが、啓発的な浪費ならば慰めにもなる。
ずっと Fedora を愛用してきたが、周りには Ubuntu 愛好家が多く、変わり者と言われている。Fedora の魅力はパッケージ群が豊富なこと。とはいえ、システム関係をいじれば時々フリーズする。特に、グラフィック系で。それでも、ほとんどリモートで CUI 環境で操作するし、視覚的に覗きたい時はブラウザを経由するので、大した問題にはなっていない。
しかし、だ。UNIX の本分は、やはり安定感であろう。惚れっぽい酔いどれは暗示にかかりやすい。そして、CentOS に鞍替えするも、酔いどれ天の邪鬼ゆえか...

2018-05-13

"UNIX という考え方" Mike Gancarz 著

「オペレーティングシステムは生きている、息をしているソフトウェアの生命体だ。コンピュータシステムの魂であり、神経系であり、電子とシリコンを生き物に変える。オペレーティングシステムは、コンピュータシステムに生命を吹き込む。オペレーティングシステムは、その性質上、創造者の哲学を身にまとって現れる...」

原題には、"The UNIX Philosophy." とある...
OS の参考書というものは、たいてい大量のツールの使い方について解説されるもので、なぜ UNIX なのか?と素朴な疑問を投げかけるやつはあまり見かけない。OS の選択では、周りの影響を受けやすく、慣習とも強く結びつき、宗教的ですらある。宗教ってやつは、その根源にある思想を理解せずに、信じる者は救われるの原理に働きかける。現在では、ユーザに OS の存在を意識させるべきではない!という論調も強くあり、これも世の趨勢というものか...
スマホの世界ともなると、無意識に「愛の電話」教に入信していたり、知らず知らずに「人造人間」に仕立てられていたり。実際、OS と他のソフトウェアとの境界はますます曖昧になり、カーネル自体も巨大化し、どこまでをカーネルと呼ぶべきかも議論が分かれる。
それでも、だ。たとえ境界面が曖昧になっても、やはり区別しておいた方がいい。ノイマン型の思想哲学を体現する場として... それを語る場として... そしてなにより、文芸的に楽しめる場として...

ノイマン型コンピュータを現実世界にしたのはメインフレームということになろうが、思想哲学を植え付けたのは UNIX ということになろう。MS-DOS は文句なしにパソコンの革命児であったし、MacOS にしたって視覚に訴えるユーザインターフェースで魅了した。
しかし、その思想哲学となると UNIX に負うところが大きい。デスクトップ環境のシェアでは、これだけ Windows や Mac で占められながらも、UNIX 信者は根強く生き残っており、使い勝手の良し悪しや技術的な優位性だけでは説明のつかない、実に人間社会学的な多様性を示している。
おいらの周りにもメイン環境が UNIX となると少数派になるが、サブ環境で UNIX ライクな環境を確保していない人となると皆無。Xen, KVM, VMWare などで仮想マシンを構築したり、Cygwin のようなソフトウェアで Windows 上に仮想環境を構築したり。
エンジニアが、UNIXライクな環境を手放せない理由の一つに柔軟性があろう。柔軟性が高いということは、自由度が高いということ。自由度が高いということは、それだけ知識を要するということ。おいらのような面倒臭がり屋には、ちと高級過ぎる感もある。実は能力のない人間にとって、自由ほど不自由なものはないのである。
ユーザに分かりやすく、間違いをしたくないというなら、これしかできない!ってやればいい。対して、お好きなように!ってやるのが UNIX 流。自由への道は険しい。「UNIX グル」なんて呼び名には、他とは違う!という思いが込められている。ソフトウェア魔術に憑かれた人々はギークな香りを漂わせ、憧れもする。
そして、この領域に一度踏み込むと、待ち受ける学習曲線から降りられなくなる。まるで麻薬だ!酔いどれ天の邪鬼は、このジレンマにずっと悩まされつつも、コマンドライン環境を絶対に手放せないネアンデルタール人なのである...

ところで、MS教(= SM狂)の十字架バージョンの WUuu... (Windows Update の略)にこれだけ悩まされて来たというのに、いまだにデスクトップ環境のメインが、Windows とはどういうわけだ?本書は、その答えを一言で片付けやがる。群集心理!と...
実に頭の痛い御指摘。これだけシェアが高ければ、この選択で間違うはずがないという思いがどこかにある。しかも、人間ってやつは、自分だけが不幸になることは絶対に許せないもので、みんなで不幸になる分には安心できるという奇妙な意識を持っている。
いつの時代でも、良いものが勝つとは限らない。いや、やや劣るぐらいの方が勝つケースが多い。実際、苦労して整えた環境ほど親しみがわく。出来の悪い子ほど可愛いと言うが、出来が悪過ぎれば見放される。Windows とは、そういう人間心理をうまくついた絶妙な出来栄えということは言えるのやもしれん...

1. 軍隊方式
軍隊経験のある人ならば、世の中には、「正しいやり方」「間違ったやり方」、そして「軍隊方式」があることを知っているという。正しいか間違っているかは互いに対極にあり、立ち位置も分かりやすい。だが、白とも黒ともつかないやり方では、うまくいくはずのものが、なぜか失敗したり、惨めに失敗するはずのものが、空前の成功を収めたり、まったくわけが分からん。この得体の知れない方式が、UNIX にどこか似ているというのである。
純粋主義者の言い分を信じれば、20年も前に消滅していなければならないが、評論家の厳しい非難を食べては肥え太り、寄生虫のごとく生き長らえている。滅亡しなかったからには、少なからず信者がいて、なんらかの理由があるだろう。
UNIX 方式には、「劣るほうが優れている」という逆説的な法則が染み付いているという。そして、コンピュータの設計で考慮される特性を四つ挙げている。単純さ、正しさ、一貫性、完全性の四つ。設計というものは、単純で、観察可能で、どこから見ても正しく、バグがなく、全体に一貫性があり、予想されるすべての場面に対応しているという意味で完全でなければならない。
だが、四つすべての特性を満足するのは、現実的ではなく、優先順位が重要となる。一般的に「適切な」と表現すれば、単純さを犠牲にしてでも完全性を追い求めるだろう。
しかし、UNIX 開発者は、なによりも単純さを優先するという。ここが、しばしば非難の的とされるところだ。結果的に単純さが完全性へ導くという信念であろうし、単純さを犠牲にすれば、やがて完全性も見失われていくという警鐘でもあろう...

2. UNIX 教のドグマ
UNIX 人を名乗るなら、守るべき九つの定理が提示される。

・Small is beautiful.
ヒトラーのような独裁者の思考回路は、融通のきかない巨大なオモチャがお好き。対して、自由人は小さなもので大きく動かそうとする。機動性と小回り、その積み重ねによって。これが柔軟性の根本原理と言えよう。

・一つのプログラムには一つのことをうまくやらせる。
余計な脂肪分を削り落とし、一つの仕事を確実にこなす。"Small is beautiful." とセットで考えたい。

・できるだけ早く試作。
最初から完成度の高い仕様書が書けるはずもなく、まずはプロトタイプで実験して、必要に応じて仕様をまとめていく。

・効率より移植性を優先。
スクリプト言語の持つ利点は、C言語よりも移植性が高いこと。最も効率の良い方法は、たいてい移植性に欠ける。

・数値データは ASCII フラットファイルで保存。
プログラムの移植性もさることながら、データの移植性も重要だ!いや、こちらの方を優先すべきかもしれない。データ構造で ASCII 形式を意識していれば、エディタで手軽に開ける。酔いどれネアンデルタール人にはエディタの存在しない環境なんて想像できない...

・ソフトウェアを挺子として使う。
梃子の原理... 支点をいかに自分に向けるか。これが UNIX が成功してきた理由の一つだという。優秀なプログラマが書くコードは黄金律となる。自分だけの技術だとして囲い込まず、惜しみなく披露する。オープンソース的な思想原理は、民主主義的な機構とすこぶる相性がよく、なによりも自由を重んじる。

・シェルスクリプトによって挺子の効果と移植性を高める。
スクリプト言語が流行る最大の理由は、やはりこれであろう。

・過度の対話的インターフェースを避ける。
拘束的なユーザインターフェースを避けよ!誘導尋問で導くような!拘束的なプログラムは、ユーザが人間であることを想定しているという。しかも、そこには多機能主義が忍び寄る。これだけ自動化が進めば、相手がコンピュータであることも想定すべきということ。

・すべてのプログラムをフィルタとして設計。
プログラムの本質はデータを生成することではなく、データを処理することだという。データを生成するのは人間の役割ってか。ただ、巷で騒がれる AI ともなれば、どうだろう。人間の役割を狭めているのは人間自身ということか。フィルタ機構によってパイプが機能し、標準入出力ライブラリによって、コマンドライン環境がより強力となる。
ただ、本書に登場する grep, sort, sed, awk といったコマンドは、古びた感を漂わせ、こうした機能はほとんどスクリプト言語で置き換えている。いや、ちょっとした時はいまだに使っているか。diff を重宝し、make は嫌いではないし、やはりネアンデルタール人...

これらの定理は、すべて失敗から導かれたものという見方はできるだろう。少なくともおいらは、これらを教訓にできるような失敗をすべて経験している。いや、経験させられた。組織に所属していれば、政治的な思惑で意思に反することを強いられることもしばしば。特に、モジュールの流用で痛い目に...
開発会議でまず強調されるのが、開発期間の短縮だ。思想に則っていないものを流用すれば、却ってスパゲッティ状態になる。お偉いさんの口癖は、日程を死守せよ!しかも、一旦遅れれば人海戦術を採用するのがお好きときた。そして、余計に日程をスパゲッティ状態にする。
したがって、ここに提示されるドグマは、なにも OS の開発に限ったことではないということを強調したい!
「覚えておいてほしい。ソフトウェアは、実は作るものではなく、成長していくものなのだ。成長したソフトウェアを新しいハードウェアにも移植できれば、そのソフトウェアの価値は上がる。新しいアーキテクチャは頻繁に現れる。移植性の高いソフトウェアは、すぐにその新しいアーキテクチャの長所を利用できる。そこで、試作では効率よりも移植性を優先させる。その結果、移植できるものは生き残る。」

2018-05-06

"世界の技術を支配するベル研究所の興亡" Jon Gertner 著

精神を完全に解放できれば、時間の概念がぶっとぶ。研究に没頭できれば、崇高な気分になれる。この喜びは、なにものにも代えがたい。その原動力は純粋な好奇心に発し、自由な風土が優れたアイデアを生み出す。そして、個々の喜びが使命感にまで高められた時、強力な産業研究所として成立する。まさにアイデア工場!
原題には、"THE IDEA FACTRY... Bell Labs and the Great Age of American Innovation." とあり、ジョン・ガートナーが、その熱き技術者魂を代弁してくれる。ここで紹介される選りすぐりの人材は、マグネトロンの開発で U ボート撃沈に貢献したジム・フィスク、接合型トランジスタの発明で伝説となったウィリアム・ショックレー、純粋な好奇心に邁進して情報理論の父となったクロード・シャノン、異分野の専門家たちの学際的な知の結集を図って組織論を確立したマービン・ケリー、天才シャノンと経営者ケリーの中間的な位置で技術を見抜き牽引する仕掛け人ジョン・ピアース、作家のごとく完璧な文法を操って聴衆を煙に巻く饒舌家ウィリアム・ベーカーといった奇人、変人、狂人の面々... 彼らが世界のイノベーションハブとしての存在感を示し、史上最強の部類に入るプロジェクトチームであったことは間違いない。ゲーテはカントを評して、こんなことを言った... たとえ君が彼の著書を読んだことがないにしても、彼は君にも影響を与えている... と。エレクトロニクスに携わる技術者ならば、ベル研究所からなんらかの影響を受けてきたはずである...

ベル研究所が発明した功績を挙げても、なかなか言い尽せるものではない。第二次大戦を制したレーダー、電子機器の米と言われる半導体を開花させたトランジスタ、蜂の巣型に無線局を張り巡らせて携帯電話の原型となった移動体通信網、GPS の先駆けとなった通信衛星...
ここではハードウェアばかりが注目され、ソフトウェアにはほとんど触れられないが、ケン・トンプソンが編み出した UNIX や、デニス・リッチーが開発した C 言語も付け加えたい。UNIX は基本的なソフトウェアアーキテクチャの生みの親的存在であり、C 言語は世界中のプログラマに愛されると同時に嫌われ者であり続け、その影響力は今日でも絶大なのだから。そして、なによりも見逃せないのは、これらの技術が今日のデジタル社会を根底から支えるシャノンの情報理論と結びついてきたこと。すなわち、2 を底とする対数の世界と完全にマッチすることである。
その名が、グラハム・ベルに由来するのかは定かではないが、電話交換機から派生してきたことは見て取れる。20世紀初頭、AT&T が掲げた「ユニバーサル・コネクティビティ」という壮大な構想は、今日のクラウド・コンピューティングに受け継がれている。
情報を制する者が世界を制す!と言われるが、それは古代から証明されてきたこと。人間の本能には、なんでもいいから繋がっていないと不安でしょうがいない性分があり、概してコミュニティやコネクティビティってやつに憑かれる。情報交換こそが繋がりをもたらし、それが友好を温めるものであったり、欺くものであったり。いくら名目上の実力社会を言い張っても、本性上のコネクション社会を免れない。世間では悪魔のように攻撃を受ける情報隠蔽体質にしたって、感情的で本性的なものだ。自分だけが知っているという事が自尊心をくすぐり、自意識を肥大化させる。おまけに、誰かに喋りたくてしょうがないという相い反する性分まで抱え込む。ベル研究所は、こうした人間の本能をくすぐる領域を制したことで、技術史上比類なき成功を収めたということは言えるだろう。
産業史上これほど大規模な独占企業を生み出したのは奇遇といえば、そうかもしれない。ただ、電信通信業界では「自然独占」という形態がよく指摘される。安定したサービスを隅々にまで行き届かせるためには、都市部の収益で地方を賄う必要があり、こうした業界体質に便乗して巨人化していった様子が見て取れる。それは鉄道業界や運送業界にも言えることだ。物流、郵便、情報の集中する場所が... あらゆる流れを支配する者が... そして、彼らが開花させたエレクトロニクス業界は、様々な種のネットワークを形成し、いまや知のハブとしての存在感を示そうとしている。
一方、現在のベル研究所はと言うと、皮肉なことに一大企業に属す一産業研究所という地位に甘んじている。どんなに優れたアイデアも、どんなに優れた技術も、やがて模倣され、改良され、庶民化し、凡庸化していく。生き残るには、この道しかなかったのやもしれん...

1. あぁ、産業研究所よ...
皮肉なことに戦争が発明の母となったことは否めない。人間なんてものは、必要に迫られなければなかなか実力を発揮できないもの。アルキメデスの時代から、最先端を突っ走ってきたあらゆる科学技術は、まず軍事の応用として現実味を帯びてきた。レーダーの開発者たちは、よくこう語り合ったとそうな。
「戦争に勝てたのはレーダーのおかげである。原子爆弾は単に戦争を終わらせただけだ...」
レーダーは、対象物から反射波をとらえるという科学的には単純な原理であっても、技術的にはなかなか手ごわい。微小信号につきまとう雑音と減衰という S/N 比の問題は、通信制御の基本中の基本。米国政府のレーダー開発への投資額は推定30億ドルに達し、原爆の20億ドルを大きく上回ったという。
戦争の最大の発明は、VT 信管だという意見もよく耳にする。だが、社会的なインパクトという意味では、原子爆弾ということになろうか。なにしろ悪魔の代名詞とされるのだから...
動機はなんであれ、光学、音響学、反響学、磁気学、有機化学、冶金学、気象学など、実に多くの科学的知識が結集した結果、エレクトロニクス時代の幕開けとなった。ベル研究所の社員は、人間のコミュニケーションにわずかでも関係のあることなら何でも研究するという。有線であろうが、無線であろうが、音声データであろうが、画像データであろうが。この時代にあって生理学や心理学までも研究対象にしていたとか。
彼らの哲学的動機には、なんとなく共感できるところが多い。おいらが、ある電機メーカで研究所と名のつく職場に十年ほど籍を置いていたこともあろうか。研究者という人種は、世間で無価値とされるものに価値を見出そうとする。それも執念めいたものによって。ただし、失敗を恐れない挑戦!と言えば聞こえはいいが、贅沢な資金を後ろ楯に失敗感覚が慢性化していくことにも留意したい...

2. あぁ、偉大なトランジスタよ...
近代技術の最大の発明は何か?と問えば、酔いどれ天の邪鬼は、即トランジスタ!と答えるだろう。仕事柄もあろうけど、トランジスタを語り始めると、かっぱえびせん状態になるのだ。
何が凄いかって?
まず、増幅作用を挙げよう...
電流が流れる固体物質といえば鉱物だが、こいつを経由すると電流が増幅するとは、まさに物質の偉大さを示している。電力源が貧弱でも中継器で増幅すれば、いくら遠距離でも電力を供給することが可能となる。そして近代科学は、電子の流れを研究するための専門分野、とりわけ、表面準位を研究する結晶学、バルク特性を研究する界面化学、金属素材を研究する冶金学といった学問を開花させてきた。いわば、基礎物理学の領域である。あの仮説を嫌ったニュートンも錬金術に執着したという説があるが、まだ妖術や占星術の域を脱していない。あるノーベル賞級の経済学者はこんなことを言った... 基礎物理学者には金融アナリスト並に報酬を払うべきだ... と。尤も真理を探求しようという者が、報酬にこだわりを持つことはあるまい。ちなみに、おいらが美少年と呼ばれていた頃、この増幅特性に感動したものである。物性学は赤点だったけど...
次に、スイッチング特性を挙げよう...
電流を流したり、遮断したりする制御が、外部から電圧を加えることで簡単にできる。それは、トランジスタの ON/OFF 制御がそのままデジタル値の 0 と 1 に対応し、シャノンの情報理論とすこぶる相性がいいことを示している。ブール代数が電子回路の基本原理となり、いまやトランジスタの構造を知らなくても回路設計ができるという寸法よ。
さらに、物理構造に目を向ければ、奇妙なことに気づく。抵抗などの回路素子が無いにもかかわらず、それだけで等価回路が実現できるのだ。天の邪鬼な美少年は、教科書に掲載されるトランジスタの等価回路にいつも懐疑的であった。物質をくっつけていくだけで多段回路が形成できるということは、いくらでも集積可能ということだ。そして、半導体業界は微細化との戦いを強いられてきた。そろそろムーアの法則も息切れ気味で、それを量子コンピュータが引き継ぐのかは知らんが...
また、半導体をくっつけるだけで得られる重要な特性に、整流作用がある。ダイオードってやつだ。電流を一方向にしか流さないという性質が、交流を直流に変換することを可能にする。遠隔地へ電力を供給するには交流が有利で、細かい電子制御には直流が有利なので、その住み分けが明確にできる。ダイオードを片トランジスタなんて表現すると差別用語と言われそうだけど、PN 接合という単純な構造こそがトランジスタの基本特性を引き出している。
ただ、天の邪鬼な美少年は、マクスウェルの悪魔くんがどこかに一人ぐらいいるのでは?と懐疑的であった。実際、逆電流がわずかながら流れるってこと、それを安定的に動作保証するのが技術者の使命だ。
こうして改めて眺めていると、トランジスタこそが物質に情報を結びつけた立役者であり、トランジスタこそがデジタル社会の牽引役であったと言うのは、ちと大袈裟であろうか...