ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
コーディングの向こう側

それは不要な知識か - PART1

時代が変わっても・・・度

イメージがわくか

同じプログラムを書いていても、実際にコンピューターの中でどのような動作が行われるのかきちんと理解している人とそうでない人がいます。つまり、メモリ上でなにが起こっているかについてのイメージがわくかどうかということです。例えば関数呼び出しのときにスタックやレジスタで何が起こっているかとか、動的に確保した構造体がヒープ上でどういう構造になっているかなどを想像できるかどうかです。

こういうイメージがわく人とわかない人とではずいぶん差があります。イメージできる人は効率的なコーディングができるでしょうし、イメージできない人はポインタを使うたびに危険を冒すことでしょう。

マシン語は必要か

マシン語をある程度理解していると、メモリ上のイメージがわきます。その逆、つまりイメージがわくようになるためにはマシン語が必要かどうかはわかりませんが、少なくともマシン語を知っているとイメージがわくことは確かだと思います。

10年位前は、マシン語が必須でした。パソコンの速度が今よりずっと遅かったので、マシン語を使わざるを得なかったのです(言うまでもないですが、マシン語を使うと速いプログラムが書けるのです)。しかし今は十分速いコンピューターがあるので、もっと高級な言語で十分です。各方面で標準化も進み、OpenGL や GameSprocket (Mac のゲーム作成用ライブラリ) などのような便利なライブラリもたくさんあります。ですから最近は、大学や専門学校で特別な教育を受けるか、またはよっぽどコンピューターが好きでもない限りマシン語を覚えようという人はいないでしょう。「初めてさわったコンピューターは Windows です」とか「Visual Basic でプログラミングにはまりました」という人にはちょっと厳しい時代なのかもしれません。

実際にマシン語でコーディングをしなければならないこともありますが、そういうことは少ないので、マシン語の使い方を覚えろとまでは言いません。しかし、その仕組みはある程度理解していた方が良さそうです。例えば負数や小数がどのように表現されるのかとか、どうして型によって表現できる値の範囲が違うのかとか、レジスタはどのように働くのかとか、どうしてスタックオーバーフローが起こるのかとか、そういうことを知っているべきです。知っていれば、ローカル変数とグローバル変数の違いとか、引数の受け渡しはどうやって行われるのかとか、スコープはどうやって実現されるのかとか、割り込み処理とはどういうことなのかとか、並列処理はどうやって実現されるのかとか、どうして別の言語で書かれたライブラリと結合できるのかとか、いろいろなことが理解できるようになります。

普遍的なもの

目次へ
次へ

(「コーディングの向こう側」は2000年4月から2001年5月にかけて作成されたコンテンツです。)