ページへ戻る

− Links

 印刷 

OT​/0002 のバックアップソース(No.1) :: OSASK計画

osaskwiki:OT/0002 のバックアップソース(No.1)

  Next »[4]
* 車輪の再発明は時間の無駄ではない
-[[OsaTech]]より
-(by K, 2004.09.06)

*** 0.重要なこと
-以下に書いてあることは「よいこと」ではありません。速くて小さいプログラムを作るために役立つ思想が書いてあるだけであって、それが常によいとは限りません。小さくて速いことよりも、他のことが重要なことは十分にありえます(仕事の上ではまず納期が一番重要、なんてことはあるでしょう。・・・そんなときはどんな犠牲を払っても納期が優先です。納期に間に合うと分かってから納期に遅れない範囲で以下の努力をするのはとてもすばらしいです)。それをはき違えてはいけません。
-以下は平均するとまあまあ効果のある「技術」であり、例によって開発思想的な面が強いのでほぼどんなプログラミングにおいても活用可能なものです。効果の程度はまちまちですが、うまくいったときは劇的であり、たいていは空振りです。
-開発時間に余裕がないときは空振りのリスクは大きすぎるので、素直に既存の技術を活用するほうがいいでしょう。

*** 1.車輪の再発明
-これは既に発明済みの技術を知らない人が、あとからまた同じ技術を発明してしまう現象(行動?)を指し、同じ物を苦労して発明しても意味がないから、先人の技術は積極的に学んで、発明の才はその上に新たな何かを積み上げることに発揮するべきだ、という格言です。この格言の正しさには説明の必要もないでしょう。とてもよい格言だと思います。
-しかし一方で、この格言は多くの進歩の機会を奪ってきたと思います。
-科学の世界では追試という考えがあり、つまりある人が行った実験を再びやり直すことがあります。これは本当にその実験結果が正しいかを確かめるためのものです。数学の世界でも、既に証明済みのものに対して別解を探すことはあります。追試によって新しいことが分かったり、別解を求める過程で新しい考え方が生まれることはよくあることです。
-プログラミングにおいて追試や別解の探索のための有力な方法の一つとして、とりあえず自分でも作ってみるというのがあると僕は思うんです。もちろん、既存の方法を学んだ上でそれとは違う新しい方法を探せればそれに越したことはないのですが、どうも学んでしまうとそっちの素晴らしさに圧倒されてしまい、自分で考えるときはその発想からなかなか抜け出せません。だから、何も知らないまま車輪の再発明に終わってしまう危険があるのは分かっていても、とりあえず自分なりに作ってみるしかない気がします。それで結局既存のものと同じものしかできなければ、まあ既存のものをそのまま使うしかないでしょう。もし既存のものと違うものができれば、どっちがいいかを比べて、いいほうを使えばいいと思います。

*** 2.再発明でしかなかったとき
-運良く既存のものよりもいいものができたら、それはそれでまったく申し分はないのですが、まあたいていは既存のものよりも劣ったものしかできないでしょう。よくて同じくらいのものでしょう。
-数学で誰かが見つけた解法をあとから見つけてもなんの自慢にならないのと同じで、この場合は誰にも自慢できません(たまにそれを自慢している人がいますが、確かにそれは失笑ものです)。でも自分では改良解が見つけられなかったという証明にはなりますし、それだけ既存の解法がベストである可能性が高まったわけです。そのぶんだけ世間に貢献していると思います。少なくとも、時間の無駄だから既存のものをそのまま使った人よりは貢献しています(もちろんこの人が、車輪の再発明の精神どおりに、その節約した時間で別の何かを発明してくれればそれで大貢献なわけですが)。

*** 3.無知の利点
-無知であることはもちろん一般的には恥ですが、しかし知らないからこそいろいろやってみられるのであって、正攻法を知ってしまえば新しい方法を思いつけなくなるものです。そういう意味で、無知はわずかながらアドバンテージであるともいえます。
-(それともそんなのは僕だけであって、世の中の人は知っていてもそれに影響を受けることなく斬新な方法を考えられるのだろうか・・・。)
-逆によくないのは、まるでパターンで試験問題を解くような、ほとんど何も考えないパターンプログラミングではないでしょうか。もちろんそういうことは知識や経験が豊富だからできるわけですが、こんなことをしていたら、そりゃまあ有益なプログラムをたくさん作ることはできるかもしれませんが、新しいアルゴリズムはなにひとつ生み出せません。それはそれでプログラミング世界の機会損失じゃないかと僕は思います。
-いや本人が望んで機会損失しているのならそれはそれでいいのですが、他の人がチャレンジしているときに、それに対して車輪の再発明だからやめなよというのは、有害なのではないかなと、僕は思います。

*** 4.競争
-性能としては似ているけど違うものができる場合もあるでしょう。その場合は既存のものとの競争状態に入ることができます。これは非常に有益で、お互いに相手の技術を参考にできるなら、結果的に非常によいアルゴリズムに到達できるでしょう。

-(まだ書き途中)

* こめんと欄
#comment

  Next »[4]