3: 2009-11-17 (火) 12:06:25 |
現: 2024-01-08 (月) 12:58:49 lina |
- | * 車輪の再発明は時間の無駄ではない | + | TITLE:x |
| + | * 車輪の再発明は時間の無駄ではない [#rce90eb6] |
| -[[OsaTech]]より | | -[[OsaTech]]より |
| -(by K, 2004.09.06) | | -(by K, 2004.09.06) |
| | | |
- | *** 0.重要なこと | + | *** 0.重要なこと [#q4d0d58d] |
| -以下に書いてあることは「よいこと」ではありません。速くて小さいプログラムを作るために役立つ思想が書いてあるだけであって、これはただの技術なのです。何が正しいのかとか、ここに書いてあることは正しいのかどうかではなくて、''開発をしているときだけこういう気分になりさえすれば''、小さくて速いプログラムが誰でも作れるようになりますよ、とそれだけのことなのです。小さくて速いことよりも、他のことが重要なことは十分にありえます(仕事の上ではまず納期が一番重要、なんてことはあるでしょう。・・・そんなときはどんな犠牲を払っても納期が優先です。納期に間に合うと分かってから納期に遅れない範囲で以下の努力をするのはとてもすばらしいです)。それをはき違えてはいけません。 | | -以下に書いてあることは「よいこと」ではありません。速くて小さいプログラムを作るために役立つ思想が書いてあるだけであって、これはただの技術なのです。何が正しいのかとか、ここに書いてあることは正しいのかどうかではなくて、''開発をしているときだけこういう気分になりさえすれば''、小さくて速いプログラムが誰でも作れるようになりますよ、とそれだけのことなのです。小さくて速いことよりも、他のことが重要なことは十分にありえます(仕事の上ではまず納期が一番重要、なんてことはあるでしょう。・・・そんなときはどんな犠牲を払っても納期が優先です。納期に間に合うと分かってから納期に遅れない範囲で以下の努力をするのはとてもすばらしいです)。それをはき違えてはいけません。 |
| -以下は平均するとまあまあ効果のある「技術」であり、例によって開発思想的な面が強いのでほぼどんなプログラミングにおいても活用可能なものです。効果の程度はまちまちですが、うまくいったときは劇的であり、たいていは空振りです。 | | -以下は平均するとまあまあ効果のある「技術」であり、例によって開発思想的な面が強いのでほぼどんなプログラミングにおいても活用可能なものです。効果の程度はまちまちですが、うまくいったときは劇的であり、たいていは空振りです。 |
| -開発時間に余裕がないときは空振りのリスクは大きすぎるので、素直に既存の技術を活用するほうがいいでしょう。 | | -開発時間に余裕がないときは空振りのリスクは大きすぎるので、素直に既存の技術を活用するほうがいいでしょう。 |
| | | |
- | *** 1.車輪の再発明 | + | *** 1.車輪の再発明 [#a1cc4b33] |
| -これは既に発明済みの技術を知らない人が、あとからまた同じ技術を発明してしまう現象(行動?)を指し、同じ物を苦労して発明しても意味がないから、先人の技術は積極的に学んで、発明の才はその上に新たな何かを積み上げることに発揮するべきだ、という格言です。この格言の正しさには説明の必要もないでしょう。とてもよい格言だと思います。 | | -これは既に発明済みの技術を知らない人が、あとからまた同じ技術を発明してしまう現象(行動?)を指し、同じ物を苦労して発明しても意味がないから、先人の技術は積極的に学んで、発明の才はその上に新たな何かを積み上げることに発揮するべきだ、という格言です。この格言の正しさには説明の必要もないでしょう。とてもよい格言だと思います。 |
| -しかし一方で、この格言は多くの進歩の機会を奪ってきたと思います。 | | -しかし一方で、この格言は多くの進歩の機会を奪ってきたと思います。 |
| -プログラミングにおいて追試や別解の探索のための有力な方法の一つとして、とりあえず自分でも作ってみるというのがあると僕は思うんです。もちろん、既存の方法を学んだ上でそれとは違う新しい方法を探せればそれに越したことはないのですが、どうも学んでしまうとそっちの素晴らしさに圧倒されてしまい、自分で考えるときはその発想からなかなか抜け出せません。だから、何も知らないまま車輪の再発明に終わってしまう危険があるのは分かっていても、とりあえず自分なりに作ってみるしかない気がします。それで結局既存のものと同じものしかできなければ、まあ既存のものをそのまま使うしかないでしょう。もし既存のものと違うものができれば、どっちがいいかを比べて、いいほうを使えばいいと思います。 | | -プログラミングにおいて追試や別解の探索のための有力な方法の一つとして、とりあえず自分でも作ってみるというのがあると僕は思うんです。もちろん、既存の方法を学んだ上でそれとは違う新しい方法を探せればそれに越したことはないのですが、どうも学んでしまうとそっちの素晴らしさに圧倒されてしまい、自分で考えるときはその発想からなかなか抜け出せません。だから、何も知らないまま車輪の再発明に終わってしまう危険があるのは分かっていても、とりあえず自分なりに作ってみるしかない気がします。それで結局既存のものと同じものしかできなければ、まあ既存のものをそのまま使うしかないでしょう。もし既存のものと違うものができれば、どっちがいいかを比べて、いいほうを使えばいいと思います。 |
| | | |
- | *** 2.再発明でしかなかったとき | + | *** 2.再発明でしかなかったとき [#z4267153] |
| -運良く既存のものよりもいいものができたら、それはそれでまったく申し分はないのですが、まあたいていは既存のものよりも劣ったものしかできないでしょう。よくて同じくらいのものでしょう。 | | -運良く既存のものよりもいいものができたら、それはそれでまったく申し分はないのですが、まあたいていは既存のものよりも劣ったものしかできないでしょう。よくて同じくらいのものでしょう。 |
| -数学で誰かが見つけた解法をあとから見つけてもなんの自慢にならないのと同じで、この場合は誰にも自慢できません(たまにそれを自慢している人がいますが、確かにそれは失笑ものです)。でも自分では改良解が見つけられなかったという証明にはなりますし、それだけ既存の解法がベストである可能性が高まったわけです。そのぶんだけ世間に貢献していると思います。少なくとも、時間の無駄だからと何も考えずに既存のものをそのまま使った人よりは貢献しています(もちろんこの人が、車輪の再発明の精神どおりに、その節約した時間で別の何かを発明してくれればそれで大貢献なわけですが)。 | | -数学で誰かが見つけた解法をあとから見つけてもなんの自慢にならないのと同じで、この場合は誰にも自慢できません(たまにそれを自慢している人がいますが、確かにそれは失笑ものです)。でも自分では改良解が見つけられなかったという証明にはなりますし、それだけ既存の解法がベストである可能性が高まったわけです。そのぶんだけ世間に貢献していると思います。少なくとも、時間の無駄だからと何も考えずに既存のものをそのまま使った人よりは貢献しています(もちろんこの人が、車輪の再発明の精神どおりに、その節約した時間で別の何かを発明してくれればそれで大貢献なわけですが)。 |
| | | |
- | *** 3.無知の利点 | + | *** 3.無知の利点 [#x2cf7dba] |
| -無知であることはもちろん一般的には恥ですが、しかし知らないからこそいろいろやってみられるのであって、正攻法を知ってしまえば新しい方法を思いつけなくなるものです。そういう意味で、無知はわずかながらアドバンテージであるともいえます。 | | -無知であることはもちろん一般的には恥ですが、しかし知らないからこそいろいろやってみられるのであって、正攻法を知ってしまえば新しい方法を思いつけなくなるものです。そういう意味で、無知はわずかながらアドバンテージであるともいえます。 |
| -(それともそんなのは僕だけであって、世の中の人は知っていてもそれに影響を受けることなく斬新な方法を考えられるのだろうか・・・。) | | -(それともそんなのは僕だけであって、世の中の人は知っていてもそれに影響を受けることなく斬新な方法を考えられるのだろうか・・・。) |
| -いや本人が望んで機会損失しているのならそれはそれでいいのですが、他の人がチャレンジしているときに、それに対して車輪の再発明だからやめなよというのは、有害なのではないかなと、僕は思います。 | | -いや本人が望んで機会損失しているのならそれはそれでいいのですが、他の人がチャレンジしているときに、それに対して車輪の再発明だからやめなよというのは、有害なのではないかなと、僕は思います。 |
| | | |
- | *** 4.競争 | + | *** 4.競争 [#n3aa3dd7] |
| -性能としては似ているけど違うものができる場合もあるでしょう。その場合は既存のものとの競争状態に入ることができます。これは非常に有益で、お互いに相手の技術を参考にできるなら、結果的に非常によいアルゴリズムに到達できるでしょう。 | | -性能としては似ているけど違うものができる場合もあるでしょう。その場合は既存のものとの競争状態に入ることができます。これは非常に有益で、お互いに相手の技術を参考にできるなら、結果的に非常によいアルゴリズムに到達できるでしょう。 |
| | | |
- | *** 5.まとめ | + | *** 5.まとめ [#l20f287b] |
| -新アルゴリズムの開発は、成功すれば劇的に速度やサイズを改良できるものです。また十分にセンスを持っていれば(=つまりプログラミングとは既存のアルゴリズムを組み合わせることだけではない、というふうに考えることができるなら)あまり既存の技術を知らないでいるほうが、既存の人たちが見過ごしていたシンプルでエレガントなアルゴリズムは発見しやすいでしょう(複雑でゴテゴテしたアルゴリズムなら、知識過多状態でも簡単に思いつける・・・しかしここではそういうアルゴリズムは期待されていない)。 | | -新アルゴリズムの開発は、成功すれば劇的に速度やサイズを改良できるものです。また十分にセンスを持っていれば(=つまりプログラミングとは既存のアルゴリズムを組み合わせることだけではない、というふうに考えることができるなら)あまり既存の技術を知らないでいるほうが、既存の人たちが見過ごしていたシンプルでエレガントなアルゴリズムは発見しやすいでしょう(複雑でゴテゴテしたアルゴリズムなら、知識過多状態でも簡単に思いつける・・・しかしここではそういうアルゴリズムは期待されていない)。 |
| -無知でがむしゃらにがんばる人を「それは車輪の再発明だろ」と馬鹿にする人がいますが、それは有害で、できることなら気が済むまでやらせてあげるべきなのです。もちろん、結果的に車輪の再発明になってしまう場合はあります。もし車輪の再発明になっていることに本人が気づいていなければ、それは是非指摘してあげてください。 | | -無知でがむしゃらにがんばる人を「それは車輪の再発明だろ」と馬鹿にする人がいますが、それは有害で、できることなら気が済むまでやらせてあげるべきなのです。もちろん、結果的に車輪の再発明になってしまう場合はあります。もし車輪の再発明になっていることに本人が気づいていなければ、それは是非指摘してあげてください。 |
| -自分の思いのたけをコードにぶつけ終わったら、今度は既存のアルゴリズムをじっくり理解しましょう。自分が思いつけなかった部分がきっといくつかあると思います。なぜそんな仕組みが必要なのかとかも、一度同じ問題で苦労した経験がありますから、納得しやすいでしょう。もし自分のほうがいい方法だったと思う部分があれば、それを既存のアルゴリズムに組み込んでみるといいでしょう。たいてい好ましい結果が得られます。 | | -自分の思いのたけをコードにぶつけ終わったら、今度は既存のアルゴリズムをじっくり理解しましょう。自分が思いつけなかった部分がきっといくつかあると思います。なぜそんな仕組みが必要なのかとかも、一度同じ問題で苦労した経験がありますから、納得しやすいでしょう。もし自分のほうがいい方法だったと思う部分があれば、それを既存のアルゴリズムに組み込んでみるといいでしょう。たいてい好ましい結果が得られます。 |
| | | |
- | * こめんと欄 | + | * こめんと欄 [#b37771f3] |
| #comment | | #comment |