- - PR -
今から始めるJAVA
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-03-12 12:24
こんにちは。maruです。
>講義としては、面白いアプローチだと思いました。 >しかし、普遍的で誰にもわかりやすい、とは言いかねる説明だと思いました。 同感です。 話は外れるけど、けっこう、うちの会社の会社の若い人は、コンピュータの仕組みや言語の 本質(抽象的でごめんなさい)を理解せずに、なんじゃこりゃ!?というようなプログラム を組む人間は多いですね。外注さんでも多いけど・・・。 この世界はいろんな技術が増えたり、複雑になったり、隠蔽されたり、連携されたりですが、 とくに細かい仕組みを知らなくてもプログラムを作ることができる(できた気になる)ように なったからかな? VBから始めた、あまり技術に興味を示さない人に多いかな? 努力してスキルアップしている人が、そういう人の火消しに振り回されることが多いのよね。 で、話を戻して、メモリイメージの説明では、こういったアプローチの内容も、知識(コン ピュータの仕組みの常識)はとしては必要だとは思うのですが、、ただjavaで説明するには 無理があるような気がしました。 また、java(や最近の新しい言語)では、メモリイメージより、言語の本質的な部分の誤解 しやすい部分(抽象的でごめん)を正しく理解できるような内容が大切かなと思いました。 そういう意味で、技術評論社の「Java謎+落とし穴 徹底解明」や、「object pascal オブ ジェクト指向(というタイトルだったような)」なんかは結構参考になった。 「今からはじめる」人を対象にした内容では、ちょっと厳しいかなという気がしました。 逆に、言語の本質を理解せず、こういった細かい部分で誤解して理解されると、余計にやや こしい気が・・・??? | ||||
|
投稿日時: 2003-03-12 13:19
私も一言。
どのような説明がわかりやすいかは人それぞれなのでなんともいえないでしょうね。 ただ、このようなメモリイメージを用いた説明でクラスの継承などを説明・理解してしまうと、 クラス設計を行うととんでもないものになりそうなきがします。 中途半端な例は混乱のもとになるというのはわかりますが、メモリイメージだけで理解してしまうと データの抽象化を上手くできずにとんでもないクラスができるのではないでしょうか。 | ||||
|
投稿日時: 2003-03-12 13:43
>C/C++と混同していませんか?
>JLS 4.2で、byte/short/int/long/char/float/doubleの、 >ビット長は明確に決められています。 ああ,失礼. 各型の論理上のサイズではなく,物理的な,メモリ上のサイズの話です. intなら論理上のサイズは常に32bitであると定められています. 物理的なサイズは全く触れてません. #Javaプログラマーなら,まさか物理的なサイズの話をしてるとは #ちょっと想像しませんよね. だから物理的なサイズも事実上32bit以上にはなるというだけのことで, もし可能なら32bit以下で実装しても構わないはずです.(^^) >まぁ、メモリ上のレイアウトは無意味ですけど。って、元のスレッド >見ていないので「レイアウト」をバイトオーダ(エンディアン)とかの >意味と捉えて書いていますが。 まあこういうレベルのお話です. JavaVMにおいては物理的なレイアウトは実装依存で,各VMごとに 異なるのはもちろん,同じVMでも実行中に変化しうるものに 過ぎません.ああいうメモリイメージの一例を見せるのは,かえって 誤解を招くのでよくないと思います. | ||||
|
投稿日時: 2003-03-12 16:23
まぁ、なんともたくさんレスが付きましたねぇ。
予想はしてましたが、ちょっとびっくり。 エンジニアの方たちってこういった議論が好きな方が多いですね。 反論する人の方が多いかなと思ってたら案外同意していただけるレスが多かったのにもびっくりです。 皆さん同じように感じる方も結構多いのですね。
私も仕事の立場上、言語やプログラミング等を教えたり、勉強会を主催したりすることも多いのでこういう連載は結構為になります。 自分の考えをまとめたり、磨いたりするのにはいろんなアプローチの仕方を見るのもいいかもしれません。 | ||||
|
投稿日時: 2003-03-20 00:05
いろいろ感想はありますが、とりあえず、1つばかり疑問を提示します…。
第2回「Javaの変数の本質を知る」中に「プログラム言語の変数は、数学の変数とまったく 同じ役割を果たしていますので、義務教育を終えた方ならだれでも理解できることです。」 とありますが、そもそも「変数」に対する筆者のこの理解は正しいのでしょうか? 識者の方にお聞きしたいのですが、プログラミング言語の「変数」と数学の「変数」は 本当に「まったく全く同じ役割を果たして」いるでしょうか? 数学の「変数」と同じであるプログラミング言語もあるでしょうが、少なくともCやC++や Fortran,Pascal,Javaの「変数」と数学の「変数」は似て非なるもののように思います。 (前者はmutableであるのに対して後者はimmutableという違いがあるように思うのですが) | ||||
|
投稿日時: 2003-03-20 07:40
そういう人にお勧めの本が 『プログラムはなぜ動くのか ― 知っておきたいプログラミングの基礎知識』 ですね。 私自身もそうですが、最近はJavaやVBなどのかなりハイレベルな言語からコンピュータの世界に入っていくケースが多いと思います。Javaだとメモリやポインタなどローレベルな部分が隠蔽されてますから、プログラムがなぜ動くのかを知らなくてもできちゃうんですよね。 そういう点からみるとC/C++(アセンブリとか)をやったことの無い人には連載記事は良いアプローチかなと思いました。今後、どんどんトピックを抽象化していって、最後にはオブジェクト指向についても詳しく触れるといいのではないでしょうか? 余談ですが・・・、実は今大学で初めてC++を習っています。Javaはなんと洗練されてるのかと感心してしまいました。(うーん、今やっている課題、Javaなら一日でできるのに・・・) | ||||
|
投稿日時: 2003-03-20 10:14
違うと思います。 少なくとも、プログラム言語では X = X + 1 が意味をもちますが、数学では余り意味がありません。 私の例で恐縮ですが、プログラム言語を習い始めた当初、これに相当な 違和感を覚えました。 「プログラム言語の変数は数学の変数とは全く別な概念である」という 悟りを開いてからです。違和感を感じなくなったのは。 他にも 「配列はベクトルや行列とは違う」 「実数型変数/定数に格納できるのは数学の実数ではない」、 (応用として、「IF X=0.0 ...」と書くと正しく判断できないことがある」) 「変数にはスコープというものがある」 など乗り越えなくてはいけない関門が幾つかありました。 そういう意味では、数学と同一視するのは危険です。 特に数値演算やシミュレーションに用いる時には大きなミスを しでかす可能性がありますので、最初からきちんと教えたほうが 良いでしょう。FORTRANは数値計算用とされていたせいか、 教育においても、この辺のケアがしっかりしていたと思いますが、 JAVAやVBではどうなんでしょうかね。 | ||||
|
投稿日時: 2003-03-25 17:55
私のほうはC++は10数年やってますが、JAVAは2年ほど。 で、逆にC++ならめちゃ簡単やのにって思うことが多々あります(汁 C++だったら、あれもこれも、あんなことやこんなことも・・・ なんでJAVAはできんのや!! ってしらんだけかもしれません・・・(汁 | ||||
