/ «2009-11-30 (Mon) ^ 2010-01-01 (Fri)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2009-12-05 (Sat)

[Thoughts][Hard] 本物を探せ

機械語はなぜ難しいのか

先日「"割り込み処理" は既に死語と化している」と書きましたが、若い人達はアセンブリ言語や機械語の学習を放棄している訳ではありません。数は少ないかもしれませんが、スクリプト言語からプログラミングに目覚め、やがてコンピュータ内部の仕組みに興味を持ち、ついには機械語を学ぼうとする人達は間違いなく存在します。だからこそ、専門雑誌は定期的に「コンピュータの仕組み」に関する特集を組んできましたし、関連する書籍も多数出版されてきたのでしょう。

それでは、このような特集が組まれ書籍が出版されるたびに、彼らの疑問は解消し、コンピュータ内部への理解は深まったのでしょうか?残念ながら、そうではないようです。"理解" するということは、単純に知識が増えることではありません。ある "閾値" を超える必要がある。閾値を超えて、初めて新しい "視界" が開ける。私自身がそうでしたが、閾値に満たない学習をいくら重ねても、OUTPUT は HIGH にはならない、LOW レベルのままなのです。

次の世代のために樹は植えられているのか

"閾値" を超えることができる教材や書籍が存在しない環境で、若い人達が「機械語がわからない」と嘆くのは、至極当然でしょう。「わからない」ことが正しい、自らを卑下する必要もない。しかし、疎外感は残る。その疎外感にかこつけて、金太郎飴のような特集記事や書籍が、寄せては消える。波のように。

ローマの詩人、スタティウスは「次の世代のために樹を植える」という詩句を残していますが、こと "機械語" に関しては、団塊の世代を始めとする日本の大人達は植樹を怠ってきたと言って良いでしょう。

そして、このような大人達は「プログラマーたるもの機械語を知らずしてコーディングすることなかれ」と説教を垂れる訳です。私が、若い人の立場であれば「アホか」と言い返すでしょう。「学ぶための環境を整えず、教える労もとらずして、偉そうなこと言うな」と。

機械語の理解は必要か

それでは、21世紀に生きるプログラマーが機械語を理解する必要はあるのでしょうか。スクリプト言語であれ、コンパイラであれ、プログラムが意図通りに動くのであれば、必要はないかもしれません。しかし、ひとたびバグが顕在化したり、不可解な挙動が認められるようになれば、状況は変わります。

ここに問題のスクリプトがあるが、何度見直してもプログラムは正しい、間違いはない。しかし、エラーは起きる。あなたがスクリプト言語しか操れないのであれば、早くもここでお手上げ。しかし、C言語が理解できれば、ライブラリ関数やスクリプト言語のソースにまで当たることが可能になります。ライブラリ関数や中間言語の実装に、バグが潜んでいることもあるからです。ライブラリやスクリプト本体にも問題がないとなると、いよいよコンパイラが出力したオブジェクトコードや、カーネル内部にまで踏み込む必要が出てきますが、このレベルの解析には機械語の知識が不可欠です。

その人が持っている実力や応用力は、トラブルに直面した時、如実に現れます。問題を解決するためには、いかに多くの視点から観察し、状況を判断の上、これに対応できるかが鍵となるでしょう。機械語を知るということは、この "視点" をひとつ増やすことに他なりません。

アセンブリ言語と機械語は異なる

機械語の理解について考える前に、アセンブリ言語との違いについて述べておきましょう。"理解" という観点から捉えた場合、アセンブリ言語と機械語は全く別物です。ところが、この数十年間、多くの大人達は両者の違いを曖昧にしてきました。実際、「アセンブリ言語と機械語は同じようなもの」と語る人は、珍しくありません。

この顕著な例が、情報処理技術者試験で採用されている仮想アセンブラ言語 CASL II です(世の中には、assembly language と assembler language のふたつの表記がありますが、私は前者の表記を使用します)。公的試験のため、特定のアーキテクチャからは独立した独自の仮想計算機 COMMET II と、これに対応したアセンブラ CASL II が用意されましたが、COMMET II のオペコード(機械語の一部)は正式に定義されておらず(参考資料が添付されているのみ)、コンピュータ・アーキテクチャの基盤をなす外部入出力命令や割り込み機能も実装されていません。つまり、CASL II ではアセンブリ言語という "見た目" だけが定義され、その実体である機械語は "幻" のままになっているのです。外界との入出力をもたない COMMET II もまた、"蜃気楼" と言って良いでしょう。CASL II で機械語を理解することは不可能ですし、蜃気楼相手に学ぶことほど空しいものはありません。しかし、大人は誰もこの事実を若者に伝えようとしない。

雑誌や書籍上で、何度も繰り返される「コンピュータの仕組み」に関する解説も同様です。これらのほとんどは、CASL と同様にアセンブリ言語について言及するのみで、機械語に関しては解説していません。しかも、題材として用いているもののほとんどは手軽な x86 アーキテクチャと相場は決まっています。8086, 80486, Pentium を始めとする x86 のオペコードマップは、継ぎはぎだらけで初心者が到底理解できる代物ではないにも関わらず。

オジサンの推薦書やマイコン談義に惑わされるなかれ

困り果てた若者は遥か年上の先輩に問います。「アセンブリ言語や機械語を学ぶために、何か良い教科書はありませんか?」と。得意げに答えるオジサン達のレパートリーは、大概決まっています。x86 の入門書、もしくは有名な外人二人による分厚いテキスト。いずれも悪い本ではありません。悪い本ではないが、読み手は選びます(残念ながら、この中に初心者は含まれていない。タイトルや書評に騙されるべからず)。また、これらの書籍だけで "閾値" を超えることができるとは、私には到底思えません。

そして、オジサンは遠い目をしながら「昔は ○○-80 というキットで勉強したものよのぅ」と、思い出話にひたるのであります。一半導体メーカーが作った販促キットとして見れば、このキットは確かに良く出来ていましたし、実際売り上げも凄かった。しかし、教育システムとしてはどうか。理解の境地に至れず、途中で挫折したユーザの方が多かったのではないでしょうか。なぜ、30年前の初心者達は挫折したのか。日本の半導体メーカーや出版社は、その理由を解明しないまま、現在に至っているのです。

ツェペリ家の掟に学ぶ

本物を探せ2007年3月、敬愛する荒木飛呂彦先生の手になる STEEL BALL RUN 第11巻「黄金長方形をつくれ!」を手にして、私は感動で身震いしました。「荒木先生、次なるステージに上がったな」と。サンドマンとジョニィの死闘は、ブチャラティとプロシュートの戦いを彷彿とさせるものでしたが、私はツェペリ家の掟を理解した瞬間に発せられた、ジョニィの一言に心が釘付けになりました。

本物を探せ・・・

自分の目で・・・

「本物」を見なければ回転しないッ!

ツェペリ家の掟は!

それが言いたいのでは・・・


敬意を払え!ジョニィは、古(いにしえ)の芸術家達が誰に教わるでもなく、深い自然観察から黄金比を発見したことに気づき、黄金長方形を自らの目で捉える訳ですが、ここに戦いの序章で登場するジャイロの一言、

おまえに全ては説明したッ!

LESSON 4だッ!

『敬意を払え』ッ!

が掛かってきます。実に実に実に、深いッ!

先日、柿衛文庫で許六離別の詞を見た後、私は芭蕉の「その細き一筋をたどり失ふことなかれ」、ジョニィの「自分の目で本物を見なければ回転しない」、ジャイロの「敬意を払え」、この三つの言葉が相互に反響し合い、同じ真理を伝えようとしているとしか思えませんでした。まさか、ヴァンパイアの荒木先生は、元禄年間に森川許六として生きていたとか・・(ちなみに、許六は絵の名手)。

ジョニィの言葉に登場する "本物" は、"基本" に置き換えることもできるでしょう。

基本を探すことは、容易ではない

しかし、自分の目で基本を見なければ、回転しない

基本を探せ、自分の目で探せ

基本は、古人に対する敬意の先にある

世の中、決して捨てたものではありません。機械語を学ぶための道は、もはや風前の灯火ではありますが、完全に途絶えた訳ではないのです。誰の手にも届くようなところには残っていませんが、注意深く時間をかけて探せば、今の時代にも "本物" は残っています。わずかですが。

次回は、本物のいくつかをご紹介しましょう。

わかったよプロシュート兄ィ!

余談ですが、プロシュート兄貴の話が出てきたとなると、"アットマーク・ジョジョのリンクについて" に触れずにはおれません。

「リンクしてもいいですか?」・・・そんな言葉は使う必要がねーんだ。

 (中略)

「リンクする」と心の中で思ったならッ!

その時スデに、行動は終わっているんだッ!

兄貴の覚悟が言葉でなく、心で理解できました。ちなみに、Wataru's memo もプロシュート兄貴宣言に準じます(資料への直リンクもOK、但し permalinkの保証なし)。