編集部イチオシ

プログラミングの変数を教えるときの「箱の説明」の是非について。

定番ですが、Kazuhiro Abe氏のアンケートから、端を発したツイート群をまとめました。以外と否定派が多い? 誰でも編集可能にしてるので、気軽に追加してください。
29
アベ先生 (CV: 阿部和広) @abee2

「お名前は?」「○○です」「何歳ですか?」「5さい」という受け答えができる子に、変数をわざわざ箱に例えて、入れたり出したりする必要があるのだろうか。

2016-06-09 14:20:13
Hiroaki Kadomatsu @note103

blogged. / “変数は「箱」か? - the code to rock” htn.to/tGnQAo

2016-06-10 11:17:27
アベ先生 (CV: 阿部和広) @abee2

プログラミングの初心者に変数を教えるには「箱」で説明するのがよい。 (メンションなどで理由もいただけるとうれしいです)

2016-06-10 13:48:57
はなだ☆のぶかず@lisp &ボドゲ勢ボドゲプレイヤー) @nobkz

@abee2 いいえとしました。箱のイメージをプログラムの動きに正確に当てはめないと、理解できなくなるからです。たとえば、「代入」を表現するとき、「箱に入れる」になりますが、そのとき「複数は入らない」ようにしないと誤解すると思います。そしてそれは「箱」のようなものでないと思います

2016-06-10 14:14:03
あを蜜柑 @AknEp

@abee2 いいえで、自分が箱の例で理解出来なかったからです。 「x=1;とすると、xが1の代わりになる。 x=2とすれば今度は2の代わりになる」くらいで良いんじゃないでしょうか。あとはユーザー入力させるプログラムでも触らせれば有用性も意味も段々と分かってくるような。

2016-06-10 14:17:36
はなだ☆のぶかず@lisp &ボドゲ勢ボドゲプレイヤー) @nobkz

@abee2 また、箱のイメージを最初するとき、おそらくは、箱の大きさを固定してしまい、たとえばx = yなど「箱の中に箱を入れる」という表現はなんとも違和感があるんじゃないかと。僕の主観ですが。

2016-06-10 14:21:31
アベ先生 (CV: 阿部和広) @abee2

@nobkz ありがとうございます。比喩は強力なツールですが、例えるものと例えられたものは同一ではないところが辛いと思います。

2016-06-10 14:29:40
アベ先生 (CV: 阿部和広) @abee2

@AknEp ありがとうございます。「代わりになる」というのは、代入(代わりに入れる)の意味からしても適当ですね。

2016-06-10 14:31:39
あを蜜柑 @AknEp

@abee2 おおっ、確かに仰るとおりですね! そこまでは考えられてなかったので、勉強になります。

2016-06-10 14:34:08
はなだ☆のぶかず@lisp &ボドゲ勢ボドゲプレイヤー) @nobkz

@abee2 そうだと思います。結局指導方法の問題になるかな気がします。値を入れる/取り出す、などは箱の説明が上手く行くので、「普通の箱とは違って、プログラムの箱は~」みたいな説明だと上手くいくのかなと考えたりします。

2016-06-10 14:36:02
アベ先生 (CV: 阿部和広) @abee2

@nobkz 取り出す(参照する)しても中身は無くならないぞとか、生まれたての箱の内部状態はどうなんだとか、気になって仕方ありません。

2016-06-10 14:40:51
Tomoaki Masuda @moonmile

@abee2 YES です。 ポインタの概念と関数の受け渡しに話を繋げるときに、「値そのもの」ではなく「値を入れた箱」を受け渡すように説明しています。変数の概念が分かりやすくなるように「X ← 10」を図示した後に、コードではC言語では「X=10;」と書く、という感じです。

2016-06-10 14:44:14
アベ先生 (CV: 阿部和広) @abee2

@moonmile ありがとうございます。その場合、ポインタのアドレスは箱の番号ということになるでしょうか。また、ポインタも変数であるということは、それもまた箱になるのでしょうか。

2016-06-10 15:13:49
Tomoaki Masuda @moonmile

@abee2 YESです。メモリ上の何番アドレスに変数の「箱」があって、これを値とみるかポインタとみるかの違いを説明して、ポインタの場合は別の箱/アドレスを示している、という感じで繋げてます。こうするとJavaなどのオブジェクトに話に繋がりやすいので。リスト構造とか配列も。

2016-06-10 15:31:19
極端流形式仕様 初代𝕍𝕚𝕖𝕟𝕟𝕒𝕋𝕒𝕝𝕜𝕖𝕣 @tomooda

箱の場合は排他的ですね。ボールを箱に入れた時、そのボールは他の箱の中には入っていない筈。でも変数の場合は排他的ではありません。 @abee2

2016-06-10 15:33:14
アベ先生 (CV: 阿部和広) @abee2

@moonmile そうすると、それは物理的な箱ではなく、概念としての箱になると思いますが、その移行はどのように行われるのでしょうか。物理的な箱のイメージが強すぎて、その移行を妨げたり、誤解を招くことはないでしょうか。

2016-06-10 15:36:41
raven @raven_38_

@abee2 NOです。Pythonの変数はオブジェクトに対する参照とされているので箱は違うかなと(他の言語でどう扱われているかはちょっとわからないです)。ラベルというふうに教えています。

2016-06-10 15:55:55
アベ先生 (CV: 阿部和広) @abee2

@raven_38_ ありがとうございます。ラベル(札)という方も一定数いらっしゃいますね。

2016-06-10 16:05:29
市川愛子@プロセニアムでイベントしませんか? @ichikawa_aiko

@abee2 いいかどうかといわれると「うーん」となりますが、XとかYとか数学用語に拒否反応を示す高校生を相手にするときには、導入のときに「小箱」に入れる感じと表現することがあります。リストは箱が並ぶ棚です。使っていって、変数の性質を理解する感じです。

2016-06-10 16:09:04
アベ先生 (CV: 阿部和広) @abee2

@ichikawa_aiko それは、XとかYとか言わなければ良いのではないでしょうか。

2016-06-10 16:17:06
バンビちゃん@実際今日も無事死にたい @pink_bangbi

個人的には『箱』って説明結構わかりやすいと思うんだけどなー C++ でいうと 箱:lvalue(変数) 中身:rvalue(値) x = 10:中身を箱に入れる y = x:x の中身をコピーして新しい箱に入れる z = std::move(y):yの中身をzに移動させる

2016-06-10 16:18:38
はなだ☆のぶかず@lisp &ボドゲ勢ボドゲプレイヤー) @nobkz

「変数は箱」という説明で、否定の人達の意見が出たことが多いのですが、理由としはいくつかあって、変数については定番の説明で大多数の方がそれで学習したので、そのおかげで混乱してしまったみたいな体験をされた方が多いのではないでしょうかね?

2016-06-10 16:28:09
はなだ☆のぶかず@lisp &ボドゲ勢ボドゲプレイヤー) @nobkz

もうひとつ考えられるのは、「変数」というのは、プログラミングするには当然の機能ですが、そもそもプログラミングの中で高度で複雑な機能なので、そもそも説明が難しいということがあるかもですね。数学でも「変数」は中学から習うもので、もしかしたら学習として後の方にするべきかもしれません。

2016-06-10 16:30:26
Ryusei @mandel59

assignmentとsubstitutionが日本語だと両方とも代入なのが問題の一端かもしれない

2016-06-10 16:30:43
Ryusei @mandel59

割当て assignment, 束縛 binding, 代入 substitution, ユニフィケーション unification

2016-06-10 16:33:09