リンゴが五個入ったカゴが十個あったとき、その総数を導出するための数式は以下のようになる。
5 * 10 = 50
そして
10 * 5 = 50
これは正しいだろうか。
◆Wiki
Wikipediaにページがあるので読んでみても面白いかもしれない。
まだこの記事読んでないんだけど、言いたいことをいう。
◆どう思ったか
掛け算は前後の順序を入れ替えても結果はかわらん。
だが、自分としては例えば「10 * 5」について「式を採点しろ」と命令されたとき、「不正解」とするだろう。
ただ、問題の文章にもよる。この例だと明らかに不正解だろう。
俺が不正解と思った理由は等価と等値の違いにある。
◆なにいってだこいつ
ごめん。えぇと。
つまりお前らは「結果同じ値だからいいじゃん」と言いたいんでしょう。そして俺はそれを許さない。
俺プログラマーなんだけど「同じ値だからいいじゃん」の人には本当に苦しめられてきた。転職するほど苦しめられた。
つまりね?「完全に同じ動作をするプログラム」というものが、ふたつあると思えよ。かたや「foreach」で書かれていて、かたや「GOTO」を乱用しまくって書かれている。
分からないか。
◆いのち
例えば、人間って死ぬじゃん?だから、今死んでも変わらないじゃん。
という…違うか。うまい例えがみつからん。
◆等値
そう。
10 * 5 / 5 * 5 * 10 / 10 + 5 - 5 = 50
っていう式を許すの?って話じゃないだろうか。
俺はこの回答を不正解とし、回答者である幼女に「なにゆえこんな式を書いたの」と尋ねるだろう。
幼女が「や、結果は変わらんしね(嘲笑)。大人しく黙ってろ童貞!」と言ってきたとする。たしかに結果は変わらない。が、文脈がおかしいだろう。意味が変わっている。意味が変わっている限り正解にはできない。
◆割り算
例えば割り算ってあんじゃん?
10 / 5 = 2
この順序を入れ替えてはいけない理由は「値がかわっちゃうから」だろうか。本当にそうだろうか。
じゃあ、値が変わる理由は何だろうか。それは「意味が変わったから」でしょう。式が示す「意味」が変化したから結果が変わった。そして、掛け算の乗数と被乗数の関係性を逆転した時、「あらゆるパターンに於いて意味が変わらない」と言える?それは無理がない?
十個のリンゴを五人に分けた時
10 * (1 / 5) = 2
という式は許されるだろうか。許す人もいるのかと思うけど、俺は許さない。なぜなら「意味」が通じなくなるから。
◆プログラマーの価値観レベル
議論に飛び込むつもりはあんましなくて、誰に何が言いたいかっていうと、プログラマーやる人に対して「文脈から発生する意味を大切にしろ」と言いたいんです。本当は全人類に言いたいんだけど。
おまんら正しさに対する嗅覚が薄いぜよ。「結果さえ同一であれば同じものである」って考えの根底にある闇はシステム(コードとかデータ構造とかインフラとか)を激しく汚損する。
そしてコードが汚れていることに気づけない人がいる。それは当然「結果合ってるからいいじゃん」の人だ。それも、上司だとマジにがっかりする。評価がヒエッヒエに冷える。
文脈が無いと本来コードは書けない。「AをしてBをしてCする」という筋道に必然性があることを説明できるくらいじゃなければ、コードは書けて結果が合っててもシステムはギシギシ音を立てるだろうさ。
◆コードは
プログラミング言語が言語であるように、コードは文章だ。コードという文章を読ませる対象には二種類ある。すなわち、パソコンと人間だ。
人間が読むんだから読み下しやすい書き方をするべき。そして、
一つのカゴのリンゴの個数 × カゴの個数
という順序を違えることは許されない。長くなるから実例には触れないが、そういうコードは理解に無駄なコストがかかる。
◆結論
「できりゃいい」じゃねぇんです。道筋が正しくないと”妥当”とは言えないんです。不誠実なんです。
匿名
コピペプログラマがいい例ですね。
意味も理解せずコピペして一見動いてるように見えるけど、処理が重複してたり使わない変数の代入をおこなっているコードを見るともうね・・・。