マシン語を知らない子ども達というエントリを見かけました。
プログラムが書ける、という状態は「マシン語が書ける」という状態の延長線上にあるべきで、マシン語を理解していないということはマシンを理解していない、つまりプログラムを理解していないのとほぼ同じだと思います。
マシンを理解しているというのは、「ソフトウエアから見たCPUアーキテクチャ(レジスタ、プログラムカウンタ、スタック、アドレッシングモードなど)を理解している」に近い意味と取って良いのかなぁ?ヘネシー&パターソンの「コンピュータの構成と設計」あたりを理解しておくと良いという感じでしょうか?まあ、確かに理解していた方が良いですよね。ただ、あくまで知っていた方が役に立つよ程度で、これらを理解していないことが、プログラムを理解していないのとほぼ同じとまでは言えないのかなと思います。
ちなみに、上記のエントリ、あるいは、コメントでは80386やZ80系のCPUがあがっていることが多いようでしたが、私個人は、昔、Z80とMC6809のアセンブラを書いていたことがあります。特に、MC6809はお仕事で書いていました(残念ながらファミコンやApple IIで使われていたMC6502ではありません)。最近のCPUでは、気にする必要はないと思いますが、本当にアセンブリ言語(ニーモニック)で、プログラムを書くということが重要だとするのであれば、たとえば、乗算や除算命令を使わず、ビットシフトと足し算で掛け算を実現した方が使用するトータルのクロック数が少ない場合があるとか、C言語のswitch相当の処理をアセンブリ言語で記述するときとかの方法とか、パイプラインを考慮した命令順序とか、その手の話が出てきそうなのにまったく出てこないところを見ると、マシン語云々とか、本当にアセンブリ言語でプログラムを書くというよりも、あくまでソフトウエアからみたCPUアーキテクチャを理解していることが重要だよと言っているエントリなのかな??
Perl、PHP、Javaといった言語でプログラミングしているときに、この辺の知識はあれば便利だけどプログラムを理解していないとまでは言えないでしょうね。そりゃ知っているに越したことはなけど。それに、これらの言語では「データ構造とアルゴリズム」に関する知識の方が重要な気がします。個人的には、アセンブラでパフォーマンスチューニングするより前にアルゴリズムを検討した方が格段にパフォーマンスがよくなると思っていますし、実際、それでパフォーマンスが上がることが多いです。アセンブラレベルのパフォーマンスチューニングはアルゴリズムによる改善が見られないときに行う方法でしょう。アセンブリ言語で実装する場合にもデータ構造とアルゴリズムは非常に重要ですし・・・
まあ、個人的には、アセンブリ言語を知っていたおかげで、コンパイラのバグを発見できたことは3?4回あるので役にはたっています。興味のある方は多少お勉強してみても良いかもしれませんね。あと、実は、LispやPrologやMLといった良く使われている言語とは違うモデルの言語でのプログラミングを知っていると本当は便利なときがあったりますが、Lisp以外はなかなか試す環境がないですね。
ただ、これらのことをちゃんと理解しないままプログラミングをやっている方が多いために、海外に比べて日本のソフトウエアのレベルが低いと言われているのかもしれないなぁとちょっとだけ思ってしまいました。インドや中国とかのソフトウエアエンジニアは、コンピュータサイエンス学科を出ていたりすることが多いので、この辺の知識はありますからねぇ・・・
※このエントリは CNET Japan ブロガーにより投稿されたものです。朝日インタラクティブ および CNET Japan 編集部の見解・意向を示すものではありません。
メンバー限定サービスをご利用いただく場合、このページの上部からログイン、またはCNET_ID登録(無料)をしてください。