アカウント名:
パスワード:
>でもコンピュータサイエンティストなら、アセンブラはやって欲しいけどね。 それってハードウェアサイエンティストのことですか?ソフト(上層)ではなくて?
サイエンティストがアセンブラやるべきかどうかは分からないけど、エンジニアならやっておくべきかも。
例えばここで話題になっているC言語のポインタにしても、最初に
#ポインタって結局は、四角と矢印の組み合わせからなる図で、ぜんぶ説明できますよね。
#四角はメモリ領域(byteやWord)。矢印はポインタがどこかの領域を指してる様子。
ま、この辺り、メモリ上の具体的なイメージさえ湧くなら、アセンブラやらなくてもC言語をやれば良いということも言えますけどもね。C言語と聞いてまず「ポインタ! 理解不能!」と思っちゃう人は、たぶんアセンブラを知らない人に限られるんじゃないかなあと思います。(検証したことはないですが)
ただ、以上は「泥臭いプログラミングもできなきゃいけない」エンジニアにとっては学ぶべき範疇と思いますが、大学の(コマ数の限られた)教養で学ぶプログラミングの知識として適切かというと、それはまた別の問題ですね。そういう意味では、個人的には、やっぱLispを推しちゃうかな。あるいはMLとかもいいかなあ。
ま、ぢつはLispもアセンブラ知ってた方が分かりやすいって面もあるけどネ^^;。なにせCARだのCDRだのの語源がそもそもアセンブラらしいし……。抽象的議論に耐え、かつぢつは結構泥臭い、てところがLispのミ・リョ・ク☆ :-) どうせ限られた数の言語しかやらないなら、後で訳もなく愛せてしまう言語を選ぶってのもいいカモネ! :-) :-)
その点C#はどうなのかな?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
計算機科学者とは、壊れていないものを修理する人々のことである
いい方に考えると (スコア:0)
ポインタバリバリ使ってバギーなコード書かれるよりはましかも。
卒業したらJavaに移行して貰えばいいし。
でもコンピュータサイエンティストなら、アセンブラはやって欲しいけどね。
Re:いい方に考えると (スコア:1, すばらしい洞察)
でも、同じ問題は結局JavaだのRubyだのでも生じますよね。ポインタつーか参照については。
単に症状の出方が違う(いきなりコアダンプするか、NullPointerなんたらExceptionが出るか、の違いというか)だけで。
ポインタって、その概念的原理(つまり、なにかがなにかを「参照」する)と、 C独特の構文と、
の2者さえ理解すれば、逆にいえばたいして難関でもないと思います。
あの程度のことを理解*できない*ような人ならば、情報系の学生だろうが仕事だろうが趣味(フリーソフトとか)だろうが
こっちとしてはちょっと
エンジニア向けと一般向け (スコア:1)
サイエンティストがアセンブラやるべきかどうかは分からないけど、エンジニアならやっておくべきかも。
例えばここで話題になっているC言語のポインタにしても、最初に
なんていう風に端から抽象化して説明されちゃうと、かえって分かりづらくなると思うのです(JavaやLispのような動的メモリ管理をしてくれる言語だとそれでもなんとかなるかもしれませんが)。最初はむしろ具体的に、インデックスレジスタ(アドレスレジスタ)でアドレッシングするんだよ、というような、 という方に近い説明の方が直截的で分かりやすいと(私は)思います。「C言語とは高級アセンブラの一種である」なんていうことを言う人もいますが、後でCを使うのならアセンブラから入るのが反って分かりやすい(場合もある)というのが私の考えです。ま、この辺り、メモリ上の具体的なイメージさえ湧くなら、アセンブラやらなくてもC言語をやれば良いということも言えますけどもね。C言語と聞いてまず「ポインタ! 理解不能!」と思っちゃう人は、たぶんアセンブラを知らない人に限られるんじゃないかなあと思います。(検証したことはないですが)
ただ、以上は「泥臭いプログラミングもできなきゃいけない」エンジニアにとっては学ぶべき範疇と思いますが、大学の(コマ数の限られた)教養で学ぶプログラミングの知識として適切かというと、それはまた別の問題ですね。そういう意味では、個人的には、やっぱLispを推しちゃうかな。あるいはMLとかもいいかなあ。
ま、ぢつはLispもアセンブラ知ってた方が分かりやすいって面もあるけどネ^^;。なにせCARだのCDRだのの語源がそもそもアセンブラらしいし……。抽象的議論に耐え、かつぢつは結構泥臭い、てところがLispのミ・リョ・ク☆ :-) どうせ限られた数の言語しかやらないなら、後で訳もなく愛せてしまう言語を選ぶってのもいいカモネ! :-) :-)
その点C#はどうなのかな?
Re:エンジニア向けと一般向け (スコア:1)
そう?俺はそのほうが判り易いと、昔も今も思っているけど?
四角だの矢印だのの絵を、いきなり具体的な(具体的ゆえに、レジスタだのメモリだのといった
記憶領域の種類が複数有って不均質だったり、銘柄ごとに非互換だったりする)モデルに
マップして考えようとすると、その具体的ぶりに「振り回されて」しまうと思います。
俺もCの後で少しアセンブラやったりしましたが、
アセンブラをやる前と後とで、Cを書いたときに出すバグの量が
劇的に変わった(減った)なんてなことは、無かったです。
つまりCへの理解モデルは、アセンブラに影響されなかった(される必要がなかった)わけです(^^;
「メモリつーものがあるらしいぞ。1次元配列らしいぞ。」「ふーん」
という程度の具体性しかないモデルで理解しておくほうが、楽でしたね。
実際、C言語がメモリについて担当している抽象化は、まさにそういう部分なのであって。
実際、例えば、CPUが備えているIndexレジスタの数を遥かに超えた数のポインタ変数を作れるC言語
を理解するにあたって、Indexレジスタ(とメモリとの値のやりとり!(レジスタが指す領域の話じゃないですよ))を
いちいち意識するほうが「理解」が進むとは、ちょっと思えません。
なお、四角の絵には工夫があります。#って、べつに俺がした工夫ではなく、たしかK&Rでもそうなってたような…
「連続した」メモリ領域は、四角もまた「連続して」並べて描く。
「連続しない」領域は、四角も離して描く。
こうして、絵に「適度な(過剰でない)」具体性を与えることで、それは十分な情報を人に伝えられる媒体になる、と思えます。
過剰な具体性はウザイだけです。
>メモリ上の具体的なイメージさえ湧くなら、アセンブラやらなくてもC言語をやれば良いということも言えますけど
>もね。C言語と聞いてまず「ポインタ! 理解不能!」と思っちゃう人は、たぶんアセンブラを知らない人に限られるんじゃないかなあ
「抽象的な」イメージでもOK(なことも有る;-P)と思います。
アセンブラ知ってればポインタOKってのはTRUEなのかも知れません(俺は知りません)が、
逆にポインタOKになるための条件としてアセンブラが有るわけでは、ないと思います。
>ま、ぢつはLispもアセンブラ知ってた方が分かりやすいって面もあるけどネ^^;。なにせCARだのCDRだのの語源がそもそもアセンブラらしいし……。
出自に絡んでたまたま設定された用語の1つ2つですから、関係ないと思うけどな;-P
上記の抽象化されたメモリのモデルで、(C以上に)あっさり説明可能であって、それ以上は要らないっす。
Re:エンジニア向けと一般向け (スコア:0)
Re:エンジニア向けと一般向け (スコア:0, 余計なもの)
いや、本当にそうだと言い切れるなら、むしろ歓迎したいのですが。
蛇足:
Webでのリンクの違法性がどうのこうのなどという下らない(私見)議論がいつまでも世の中に有るという状態を見ると、
少な
Re:エンジニア向けと一般向け (スコア:0)
Re:エンジニア向けと一般向け (スコア:1)
Re:エンジニア向けと一般向け (スコア:0)
Re:エンジニア向けと一般向け (スコア:1)
Re:エンジニア向けと一般向け (スコア:0)