2013/11/09(土)【追記あり】かけ算の順序がどうでもいいわけがない

2013/11/09 19:54

以下のエントリは全面的に取り下げます。このエントリにいくつかリンクが張られていることを確認しており、また、私がかつてこのような考えを持っていたことは否定しないので、エントリそのものは残しておきますが(ただし、頭が沸騰している状態で追記した攻撃的な文章は削除しました。申し訳ありませんでした)、現在の私がこのような主張をしているわけではないことをご承知の上でお読みください。

このエントリに関しまして、2点お願いがあります。

まず、前述のとおり、私がかつてこのような考えを持っていたことは否定しません。しかし、そのことをもって、私と関わってくださる方々や、私の関わったことのあるプロジェクトを侮辱するのはお控えいただきたく思います。なにとぞよろしくお願いいたします。

もう1つ、過去にこのような発信をしたのは事実ではありますが、現在進行形で発信の内容ではなく人格を攻撃されるのは辛いものがあります。勝手なお願いではありますが、そろそろ私の人格を攻撃するのはお許しいただき、エントリの内容に対するご批判やご指導にとどめていただけないでしょうか。ご検討のほど、よろしくお願いいたします。

定期的に話題になりますよね、かけ算の順番の問題。

「学習指導要領に書いてある」の回答 - 石田のヲモツタコト

乗算では交換法則が成り立つので、順序が逆になろうと○にするべきだという主張は正しいですし、元ブログで引用されているとおり、学習指導要領でも「交換法則について児童が自ら調べるように指導する」ことが求められています。

お子さんの解答を見るに、問題によってまとまり一つあたりの個数と、まとまりの数の順序がまちまちになっており、あまりちゃんと理解してなさそう、という気はしますが、最初から完璧にできる人間なんていませんし、これは追々身につけていくことでしょう。

……と、ここまでが算数のお話。

急に私の個人的な話に飛びますが、今のプロジェクトでは既存プログラムのリファクタリングを行っており、設計書がメンテナンスされていないというよくあるパターンなのでプログラム自体を解析している最中です。

で、このプログラムなんですけど、非常に読みづらい。

読みづらい最大の要因は、関数途中でのreturnを使っていないため、ifのネストがどんどん深くなっていることなんですが、それを抜きにしてもわかりづらい。計算式がスッと頭に入ってこないんです。

なんでかなーと思ってよくよく見てみたら、乗算の順番が、私の考える普通の順番(被乗数と答えの単位が同じ)と逆になっていることが多いんです。

price = amount * unit_price

いや、さすがにこのくらいならすぐに理解できますが、実際にはこんな単純な式ではない上に、amount、unit_priceのようにわかりやすい変数名ではなく配列の要素だったりします。

プログラミング言語上でも、加算、乗算の交換法則は(浮動小数点演算の誤差を抜きにすれば)成立します。ですから、上記のような書き方をしたところで、演算結果が変わるわけではありません。

ただ、私にとっては非常にわかりづらい。そして、算数なら途中の計算式でしかない乗算が、プログラミングのソース上は最終成果物なのです。

私が小学生のころにはかけ算の順序はうるさく言われていなかったような記憶がありますし(もう30年近く前なのでだいぶあやふやですが)、そのくらい大らかな教え方でも問題がないとは思いますが、でも、最近では×にされてしまう式は、正解の式と比べるとわかりづらいと思います。

「かけ算の順序はどちらを先にしても答えは同じだ」という主張は正しいのですが、「かけ算の順序はどちらを先にしても同じだ」という主張には首をかしげざるを得ません。そして、首をかしげるだけでは気が済まない先生は×をつけるのでしょう。算数という観点ではやりすぎではありますが、気持ちはわからないでもありません。

もちろん、これを算数でやるべきか、というのは難しいところだと思います。どちらかというと「数式という言語でわかりやすい文章を書く方法」なので。かけ算の順序について議論するときは、正解不正解の採点云々だけではなく、もう少しこの観点での議論をしてもらいたいなと思っています。