海野秀之(うんのひでゆき)の外部記憶
Twitter (twilog) / RSS / アンテナ / ぶくま
最近ちょっと疲れ気味なので、昨日はちょっと早く帰って、早く寝た。 帰りに Pastel のプリンをおみやげに買ってかえったよ。
んでも、今朝は5時に一旦起きるはめになってみたり。 起きてなにをしていたかというと、次男(一歳)をだっこしてお歌をうたってあげて……。
いや、たまーにママ業の一部を負担してみると、その大変さを知ることができます。 恐れ入ります*1。
*1 なんか言葉遣いまちがっている気がする。
僕もちょっと釣られておこう。
僕は、僕自身がマシン語を知っているということに価値があると思っている(思い込んでいる)。 なので、マシン語を知っている方が良い面もあるよねー、ということには賛成できる。
というか、自分自身が、BASIC → Z80 機械語(ハンドアセンブル)→ X-BASIC (SHARP) → C → 68000 機械語(アセンブラあり)→ C → C++ → Perl/Ruby etc. という経路で いろいろ学んできたことを「良かった」と思っている。
だけど、それはコンピュータに出会った時期に大きく依存しているようにも思う。 マシン語なんかに触る機会もなく育つ「子供たち」が、自分達の世代よりも劣った経験しか しないとは、信じられないし、決めつけられないと思う。
マシン語とは別の道具で、同様の概念を獲得するかもしれない。 もしかしたら、(想像はつかないけど)質的に異なった方法で、計算機システムというものを まるっと理解してしまうのかもしれない。
だから、「すべてのコンピュータ者(こんぴゅーた・もの)はマシン語を学ぶべき である」といわれると、ちょっとそこまで断言するのは待とうよと言いたくなるのだ。
まー、反論するほどでもないかと思ったんだけど。
ただ、鵜飼さんのところで、 Shiro さんのコメントについて書いてしまったので、 ちょっと補足したい。ja.reddit のところにはちょっとしか書かれていなかったけど、 Wiliki にはもう少し詳しく書かれている。
http://practical-scheme.net/wiliki/wiliki.cgi?Shiro の、(2007/09/12 20:22:11 PDT 子どもは何にも知らないの) より:
第1章は論理回路。第2章で論理演算と状態機械。第3章でプログラミング言語。第4章でチューリングマシン。第5章でアルゴリズム。以降、暗号や並列計算、機械学習などを扱う。これを読んだからってプログラムがかけるようにはならないし紹介された個々の概念を理解したことにはならないけれど、少なくとも現代のコンピュータがどういう概念の積み重ねで出来ているかという構造がわかるようになっている。
それらがデジタル回路の抽象化の壁を越えてくる確率と「高級言語」で書かれたプログラムのSEGVに出会う確率にはあまりに大きな差がある。
うーん。ちょっと表面的な反論になってしまうけど、SEGV にであったときの対処に、 論理回路の知識は必要ないと思うなぁ。マシン語も、具体的なマシン語ではなくて、 プロセッサとメモリの概念的なモデルがあればいいような気がする。 それを学ぶ具体的方法として、マシン語をつかって書いてみるのが優れているというのには 同意するけど、なんで論理回路まで遡って、かつ、そこで停止するのかがわからん。
論理回路は強固に抽象化されており、そのインプリ方法がかわっても、 論理回路に関する理解モデルはおびやかされないと書かれているようだけど、それが、 そこで止まる理由ではないと思う。
マシン語で表現される計算のモデルが実際にどのようにインプリされるかについて、 論理回路以外のうまい代案をおもいつかないので、説得力がなくなっちゃうんだけど、 その抽象化レベルで数学的にあつかうとか、神様だか小人さんだかが仕様通りに実行してくれると してそれより下に立ち入らないでおいたからといって、不都合はない筈だし。
少なくとも、論理回路とその下と比べて、マシン語とその下に「抽象化の壁の厚さ」に違いが あるとは思えない。
ただ、学びやすさの壁の厚さに違いがあるだけだったりしませんか?
電気力学や量子力学まで遡るのは大変だけど、マシン語からちょっと深入りするくらいなら、 わりと簡単で、そのわりに得るものがおおきいよと。
それだったら、すんなりわかるんだけど。ちがうのかなー。
あー、自分で読み返していて気づいた。書いてみた甲斐があったよ(と思いたい)。
少なくとも、論理回路とその下と比べて、マシン語とその下に「抽象化の壁の厚さ」に違いが あるとは思えない。
あるなぁ。あるかもなぁ。
インプリが論理回路であることを知らなければ、どうしてそこいらへん(どこ?)の 命令セットに落ち着いたのか、とか、えー、例えばなんで二進数が基本になっているのか、とか、 命令によって実行コストに違いがあるのかとかに関して合点がいかないかも。
現在実在する OS はまだしょぼいので、本来なら OS 設計者だけが知っておけばいいような事を プログラマも知っていたほうがよい、みたいな話がひとつ。
これは抽象化のやぶれというより、インプリ上のバグなんじゃないかと思うんだけど、 これを「やぶれ」に含めることにしても、まあいいです。
ただ、「抽象化のやぶれ」をこの意味だけに限定すると、事実上 ISA 違反なんて起こさない 現在のシステムを使うかぎり、ISA より下におりていく必要はなくなってしまいます。
で、僕は、おりていく価値はあると思った(万人に必要とは思わない)のが、いっこ前の追記。
なんで基本操作がそんなもんなのか、とか、実行コストの違いとかのモデルを脳内に構築 するためには、より下を知る必要があって、プログラマにとってそーゆーのを知っていた方が有利と。
うーん。元がネタっぽいだけに、まじれすしてもあれですねぇ。 もともと無いところに論点を無理矢理見つけ出して論じているみたいなとろー感が。
私もそんな気がしてきました>論点無理矢理<br>ようするにこれをネタにして語りたかっただけなのかもしれません。
Shiro さん、はじめまして。<br><br>鵜飼さんのところでは、「それをいうなら、OS はハードを抽象化しているので、べつにその下を知る必要ないっぺ?」みたいに不注意な書き方をしてしまったのを気に病んで、<br>ちょっと多めに書いてみただけだったりします。<br><br>わざわざコメントいただいて恐縮です。。。
私も実感としては、「マシン語しってたほうがよい」に賛成しているんです。<br>でも、「マシン語知るべき」といわれると反発するという。<br><br>それは、もしかして、単なる天邪鬼なんではないか。
この件に関する反応を一通り見た感じでは、うんのさんに<br>限らず、元エントリに反発している人(自分もですが)は、<br>「知ってたほうが良い」ではなくて、「知るべき」である<br>ところに反発していると感じました。また、「知るべき」<br>とまで断言する根拠が必要なはずですが、根拠として挙げ<br>られた例がいずれも機械語関係ないじゃん、というもの<br>だったのでなおさら反発してしまうという。
こんばんは、みずしまさん。<br><br>なんか、こうやっていちいち挨拶するのは、ブログっぽくないんでしょうか。<br>どうも、コメントをもらい慣れていないもので。<br><br>いや、まったくおっしゃる通りだと思います > 「知ってたほうが良い」ではなくて、「知るべき」である<br>ところに反発<br><br>ただ、私は「断言する根拠が必要なはず」とまでは思っていなくて、ブログたるもの、断言できない筈のところをあえて断言するくらいでなければ読者を得られないのかも知れない(←それが良いことかどうかはともかく)くらいに思っています。<br><br>だから、元ネタにはあえて突っ込むこともなかった筈だったのですが。<br><br>つい、魔が差して、shiro さんのコメントに不用意な感想を述べてしまい、えー、なんか良心が痛んで…という展開でした。「隠れ shiro さんファン」だったのに、よりによってなんとゆー first contact!!
ふぉぉ。お歌...聞いてみたい...眠いです。
どうも。挨拶に関しては自分も迷うことがあったんですが、<br>初見のブログにコメントすることが増えて面倒になったので、<br>最近はあまり挨拶はしてないです。ただ、挨拶するべき<br>/しないべきと言う程のマナーはブログ界?で確立してない<br>でしょうし、どちらでも構わないんじゃないでしょうか。<br><br>ちなみに私もshiroさんの隠れファンというか尊敬して<br>いますが、尊敬している人だからと言って、異論/反論を<br>述べるのに躊躇しなくてもいいんじゃないでしょうか?<br>人格批判をするので無い限りは。
そうですね。ちゃんと反論するのは問題はないと思います。<br><br>ただ、「それをいうなら、OS はハードを抽象化しているので、べつにその下を知る必要ないっぺ?」は、あんまりだったかなと。<br>ご本人に読まれる可能性をまったく考えてなくて、あとで焦りました。