Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2007-09-11 マシン語を知らない子ども達

マシン語を知らない子ども達 15:56

あまりも当たり前過ぎて21世紀に入ってから言葉にだしたことはあまりないのですが、当然のことながら、プログラムというのは、マシン語を理解して初めて「書ける」と言うのです。

プログラムが書ける、という状態は「マシン語が書ける」という状態の延長線上にあるべきで、マシン語を理解していないということはマシンを理解していない、つまりプログラムを理解していないのとほぼ同じだと思います。

最近はLLと呼ばれる、いわゆる軽量スクリプト言語がメインになってきていますし、僕も普段はPHPでプログラムを書くことが増えてきましたが、それでも依然として、コンピュータというのはマシン語で動くもので、プログラムというものは全てマシン語の延長上にあると思っています。

その意識がないと、たとえPHPやJavaScriptのコードを書いていても、不可解な動きをしたり、遅くなってしまったりしたときに「なぜだろう?」ということがピンとこないことになります。

まだ大学に入って無くて、趣味のプログラミングを楽しんでいる若い人たちには、ぜひマシン語を勉強してみることを勧めます。

最近は素晴らしい時代になったもので、ごく初歩的な入門はC言語のインラインアセンブリでもすることができます。

しかし本格的にマシン語で遊びたくなったら、マイコンキットやマイコンエミュレータを使うのがお勧めです。

今のCPUは複雑になりすぎていて、初心者が全ての機能を知ろうとすると膨大な時間と労力がかかります。

しかし、最終的にはそれは全て知らなければならないことですし、知っておくべきことです。

最近は、全くの文化系の女の子が、わずか数ヶ月の研修で「システムエンジニア」や「ITコンサルタント」と称してJavaのプログラムを書くような商売もあるらしいのですが、そんなときにもぜひマシン語を勉強してもらいたいと思います。マシン語が解らないと、そもそもメモリの構造やコンピュータの動作の仕組みがわからないということなので、何が問題なのかわからないことの方が多くなると思います。

どれだけデバッガやコンパイラが進化しても、その仕組みを理解していることは絶対に必要です。

筆算ができない人が電卓を使い続けたときに答えが正しいのか間違っているのかわからないのと同様、マシン語ができない人が書いたプログラムは、一見うまく動いているように見えたとしても、それは奇跡のようなバランス、自転車で言えば補助輪がついた状態で奇跡的に動いているに過ぎず、なにか未知の問題が発生したときに素早くコンピュータ内部でおきていることに直感を巡らせ、適切な処置・対応をするためにはマシン語の理解は不可欠と言って良いでしょう。

さらにいえば、マシン語よりさらに下のレイヤーである、論理回路を理解しているとさらに理想的です。

昔、マイクロコンピュータの本といえば論理回路の本を意味しました。しかし、今の若いプログラマ達は、下のような図をみても何を意味するか瞬時にわからないのではないでしょうか

コンピュータは全て論理回路の組み合わせでできています。

マシンを構成する論理要素は全て論理回路なので、論理回路を理解しないとコンピュータの動作原理を理解していないことになります。

最低でも、論理回路だけで桁上がりをサポートした加算機を作れる程度の理解はしておいて欲しいと思います。

論理回路、マシン語、C言語の3つは、現在でもあらゆるコンピュータの基礎になっているので、最低限おさえておきたいところです。

最後に参考文献をまとめておきます。

ただ読むだけでもとても面白い本ばかりです。

はじめて読むPentium マシン語入門編

はじめて読むPentium マシン語入門編

マシン語についてとてもわかりやすく解説してあります。入門に最適です。

ザ80386ブック (MicrosoftPRESS)

ザ80386ブック (MicrosoftPRESS)

現在の主流CPUであるPentiumやCoreDuoシリーズなど、全てのCPUの元祖ともいえるのが80386です。

80386を理解することは現代のCPUを理解するということであり、これを理解しないままマルチタスクOS上で動作するプログラムを書くことはほとんど自殺行為です。

しかも本書は、80386の設計者自らが書いた貴重な本で、あらゆるところにその工夫が書かれています。386以降のCPUは単に386を拡張しただけと言っても過言ではなく、その思想の完成度の高さが伺えます。

全てのプログラマに読んで欲しい本です。

Intel 80386 - Wikipedia

80386についてはWikipediaにも解説があります。

歴代CPUの解説を眺めるのも良い勉強になるでしょう