Entry

プログラミング言語の意味論に破れたらハードウェアと向き合ったらどうだろう

2009年05月07日

えらそうなんですけど,こちらの話を読ませていただいて。

ものすごく大雑把に言うと 4 割から 7 割の人はプログラマーに向いてない、ということになる。ポインタと再帰はかなりの難関だけど、それ以前の段階でつまづいている人がかなりいるのでは、と俺は思う。ポインタと再帰までは騙し騙しでやれてるだけなんじゃないかなぁ?

プログラマーになれる人なれない人 - kagamihogeのblog

おそらく,プログラムを書けない方は,単純にプログラミング言語の文法になじめていないだけなんだと思ったりしています。例えば,「a = b」という「表現」から,「a に b を代入する」という「意味」をつかむのに必要な要素は,計算機科学の領域で決定できる問題はなくて,「意味論」(セマンティックス)の問題だったりする。同様に,メモリ上の一領域を,「a」のような記号(識別子)で表すことができる,というのも意味論の話。で,この意味論になじむことができるのかが,大きな分かれ道になるんじゃないだろうか。

この点で,よくプログラミング言語の設計話やメタプログラミング界隈では,「こゆ表現の方が『自然』」ということがあるけれど,ここにいわゆる「自然」について,何をもって自然というかは,数学やそこらへんの伝統とか風習とかと密接につながっていると思うんですね。そゆのになじめるかどうか,という話なんじゃないか,と。

で,こゆのになじめない方は,ハードウェアの動きから理解を進めていく方が効率的なんじゃないかと思ったりします。具体的には,半田ごてをもって,自分で回路を作って,それを動かすプログラムを作るわけです。x86 系の CPU は,メモリの使い方がやや特殊なので,8bit とか 16bit とかの小さ目のマイコンを使うのがいいと思う。また,RAM を外付けするモノの方がわかりやすいんですけど(Z80 とか),最近のマイコンはほぼ確実に RAM が内蔵されているので,外付けもできるモノがいいと思う。AVR とか ARM とか。PIC はあまり勧めない(メモリ配置が面倒だから)。

で,アセンブリでも C でもいいんですけれど,小さなレベルで,CPU(MCU)のどの足に電気を通すのか……なところを意識しながら,プログラムを組んでみる。こゆレベルで考える場合,C よりもアセンブリの方が分かりやすかったりします。

たしかに引用の通り,C/C++ でポインタや再帰は躓きの石なんですけれど,ハードウェアのレベルで考えると,それほど難しいことをしていないことが分かると思います。(物理)メモリにアクセスするためには,どうやってプログラムを書けばいいのか,とか,どうして OS のようなソフトウェアが必要なのか,とか,そこら辺が分かるんじゃないかと思います。その気になれば,あたしみたいなハードウェア素人でも,ゲーム ROM 吸い取り器なんかが作れます(参照:qune: BASIL - game ROM reader writer)。

C/C++ のプログラマでも,ハードウェアがどうやって動いているかを踏まえてプログラミングしている人はあまりいないと思います(※組み込み技術者を除く)。そもそも,仮想メモリが間に入っちゃうと,言語の意味論だけを頼りに,それこそ「騙し騙し」使うことにもなりがちです。個人的には,上のような回路を作ってとても勉強になったし,C/C++ の見晴らしがよくなった気もする。

ただ,こゆのって,相当ヒマがないとできないことなんですよね。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN