「プログラミングを学びたいなら、まずアセンブラから始めろ」は適切か?
「プログラミングを学びたいなら、まずアセンブラから始めろ」というのは適切でしょうか?
もしあなたがアセンブラを知らないプログラマーなら、「アセンブラを知らなくてもプログラマーになれるよ」とか、「アセンブラなんかできなくても、困らんよ」と答えるかもしれません。実際、アセンブラでプログラムを書くことは稀でしょう。
しかし、中堅プログラマーが「スタックオーバーフローって何?」とか「UTF16LEのLEって何?」などと聞いてくると、「基礎がなってないなぁ〜」と感じるし、ポインタやスレッド、再帰なんかでつまづいているプログラマーを見ると、「アセンブラやっとけば楽勝なのになぁ」と感じるのも、また事実です。
たとえ直接アセンブラを使う機会がなくても、基礎や仕組みを理解しておくことが間接的に役立つことは、よくあります。発想が豊かになると言うか、引き出しが増えるというか……。
例えば、フレームワークやコードジェネレータを使うと、ほんのちょっとコードを書くだけでWebアプリが作れたりします。これは便利だし賢く使いこなせばいいのですが、それに加えて原始的なやり方も理解しておけば、何かでトラブったときの原因探しに直感が働くようになると思います。当てずっぽうがホントに当たるようになるのです。
そして、原始的の極みがアセンブラでしょう。「アセンブラから始める」必要は無いですが、なるべく早い段階で、コンピュータの仕組みやアセンブラを理解しておくことは重要だと思います。
実際にアセンブラでプログラムを書く必要はありません。理解(納得)すれば十分です。例えば、↓こんな内容です。
- コンピュータの仕組み
- CPU, ROM, RAM
- アドレスバス, データバス
- I/Oポート
- アセンブラ、機械語
- レジスタ, PC, SP
- スタック, 関数コール, リターン
- IN, OUT
- 割り込み
この程度なら、1日か2日あれば足りるでしょう。それだけで、「アセンブラなんて必要ない」と高をくくっているプログラマーより(ある面において)優位に立てます。アセンブラを知らないプログラマーには、「もしアセンブラを知っていたら、どんなに役に立っていたか」も分からないわけです。
上記のような基礎が分かっていれば、例えば、Javaの仮想マシンというコンセプトは苦もなく理解できるでしょう。また、OSがマルチスレッドをどのように実現するか、といったことも理解しやすくなるはずです。