マシン語関連

なんか盛り上がっているマシン語のお話。とても面白いエントリーで、これを読んでいると、拒絶する自分と、共感を覚える自分を同時に感じます。


あたしはマイコン世代ではなく、むしろ Windows95以降のへたれPCユーザなのですが、ファームウェアのお仕事だったため、OSなしでマイコンに触れる機会に恵まれました。

新人の私の目の前に、ドーンと置かれた TK-85 (TK-80の後継機)。研修として、7SEG LED とかマトリクスキーボードとかを制御して「コンピュータってすごーーいっ。おもしろーいっ」と思った口だから、id:shi3z さんの話にとても共感を覚えます。(その次に置かれた78K/0のトレーニングキットでのアセンブラも楽しかった。)

単純に「おもしろいから!ぜったいやって見た方がいいって!」と思います。ただしアセンブラならなんでも良いわけじゃなくって、正直 DEBUGコマンドなんてぜんぜん面白くもなんともない。目の前に剥き身のコンピュータを置かれてそれを制御するというのが肝心で、それはホントに楽しいです。


* * *

でも、果たしてその経験が直接役に立ってるかというと、どうかしら。少なくとも私はあんまり直接活用してないです。

よく「アセンブリ言語をやっておくと Cでも ポインタと配列 が簡単に理解できるようになって良い」という話を聞きますが、そうかなーっ? 元から ポインタと配列なんて難しくもなんともないですし*1、上記のshi3zさんのエントリでかかれているような「トラブルになったとき低レベルを知っているとぜんぜん違う」も、今では半分は嘘かなぁ。たしかに「仕組み」を知っていると...というのはそのとおりですが、その「仕組み」がマシン語の方角である必要は無いと思います。(Smalltalkを使ってると、特にそう思います)

お仕事面でも、書いたとしてもインラインアセンブラがせいぜいといったところ。昔はアセンブリ言語で書かれたプログラムを C に書き直すという仕事も結構あったのですが、最近ではとんと聞かなくなりました。マシン語は遠くなりにけりです。


この手のお話は「個体発生は系統発生を繰り返す」的に学んで欲しいなぁという、年寄り話になってしまいがちです。マイコン世代の人々は個体発生の過程でマイコンそのものも発生していった幸せな世代だから。でも「低レベルの話を知っていると良い」話を書けば書くほど、理由の後付け感が強くなるのはなぜかしらん(T△T


やっぱり、ナンセンスを感じるのは「低レベルを知らないとプログラマとして役に立たない」と言う下り。でもそれは「ローカルルール」よね、と言いたくなってしまいます。

たとえば、Java屋さん。彼らに ビット演算の問題を出すと驚くほど出来ない。もう誰も答えられないんじゃないかしらってくらいできません。ファーム屋さんが OOP が出来る人ってことで Java屋さんに募集をかけて、そんな問題を出すと、ついつい「ビット演算もまともにできないなんて、この人は大丈夫なのかしら」と思ってしまいます。

でも、それが彼ら が優秀か優秀でないかとは、(あたりまえですが)なんの関係もありません。だってビット演算なんて Webアプリ作ってたら使う機会ないもん。

関係もないのにそれを基準に評価するのはナンセンス。だから、

 「やった!TK-80で受注ゲットだぜ」

 「え、なにそれ」

 「先方の技術部長がうちの技術力を確認したいというので、TK-80のデモをしたんですよ」

 「そしたら?」

 「マシン語から理解できてるんなら安心だ、と言ってその場で契約してくれました」

 「そのひとはマシン語理解してるの?」

 「もうバリバリ、TK-80世代だったみたいですよ。もうかなり年配の方で」

 「へー」

長文日記

は、失礼ながらとてつもなくデスマな話にしか聞こえません(w (でも私がその場に居たらいっしょになって喜んじゃうんだろうな〜)


* * *

なんか結構否定的な日記をここまで書いてきましたが、しかし、マシンアーキテクチャを直に叩くという経験は、私も多くのプログラマが得て欲しいと思っています。(ここにきて手のひらを返してしまったw)

確かに「この知識を知らない奴はイザというとき役に立たない」というほど役に立つ知識ではないですが、でも「これ知っているは宝物だよ」という程度には役に立つ。表現が難しいなぁ。

なんか良い言い回しがないかな、とおもって閃きました。この感覚は、そうだ、 Lisp です!

LISP は、それをモノにしたときのすばらしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。たとえ、実際には LISP そのものをあまり使わなくても。

How To Become A Hacker: Japanese

マシン語云々は「たとえLisp を使わなくても、Lisp をやった経験があることは宝物だよ」という程度には役に立つと思うのです。だから多分「層の下のほうに降りていくから重要」なのではなくって、大切な点は、違う視点を経験したと言うところにあるのです。きっと。


というところで私の結論! 「もしプログラママシン語が必須なのなら、LispSmalltalkも必須です!」



...結局これが言いたかっただけかいっ(^^;

*1:アレが多くの入門者を門前返しにしてるのは、単にポインタ周辺のCの構文が酷すぎるせいだと思います