gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

どっちが楽なんだろうなぁ?

「難易度の高いプログラムは好まれない」という類の話をまぁ休日にたまさかしていまして。
色々と「難易度の高いプログラム」について考えていまして。
たとえるならそれは「1 からnまでの自然数の和をどうやって求めるか、あるいはどうやって求めたいか、なんだろうなぁ」とか思うにいたりました、っていう、今日はそんな戯言を。


少しばっかり数学をちゃんとやっている人はおそらく
( n ( n + 1 ) ) / 2
という数式で総和を求めると思うのですが。


一方で、あんまり数学が得手ではない人は、例えば1から10までであるなら
1+2+3+4+5+6+7+8+9+10
って求めちゃうと思うんですね。だってこの方がわかりやすいし。


んで。
じゃぁ「nが11なら」やっぱり力技のほうが早い可能性も高くて、で、それを続けていくと、たぶん1,000が10,000になっても「力技にしちゃう」ことがあるんじゃないかなぁ、と。
下手をすると「( n ( n + 1 ) ) / 2 なんて数式をいきなり出されてもわかりにくいから、誰でもわかるように力技で書いたほうがよい」となるかもしれないわけですよ。
いやまぁプログラム的には

int count = 0;
for(int i = 1; i <= n; i ++) {
  count += i;
}

で求められちゃいますしねぇ。CPU食いますが、食うったって昨今の計算量から考えたら(たぶん)たいした量じゃないですし。
場合によっては「えぬ括弧なんちゃらなんてわかりにくいものではメンテナンス性が悪いから、力技で足すべきである」って意見になるのかもしれないっていうかなる現場をいくつも見ています。


特段否定するような話でもないとは思うのですが。
ただ、先人が「なんで "( n ( n + 1 ) ) / 2" なんていう数式を考えたのか」とか、そのあたりを少し真摯に考えてみてもいいんじゃないかなぁ、とか、思ってみたりみなかったりするのですが。
あるいはもうちょっと素直に「実装した人に聞いてみようよ」とか(いやまぁきけない環境も多いんですがね B-p)。
さらにまっすぐえぐりこむと「己の怠惰を声高に叫ぶ前に、学ぼうよ」、とか。


そのあたり、どんなもんなんでしょうかね?