読者です 読者をやめる 読者になる 読者になる

自分の書いたソースには過去の自分の見識しかなく、先人の書いたソースには先人の見識がある

misc

このように数多くのプログラマが「車輪の再発明」の罠に悩まされているのですが,車輪の再発明(より正確に言うと,車輪の再実装)にはそれなりに意義もあります.

車輪の再実装 - Life like a clown

id:tt_clownさんの反応に対してですが、
まず、自分も「車輪の再発明」ではなく「車輪の再実装」はすべきと考えます。
既にある機能を実装する事を「車輪の再発明」といって嫌う話もありますが、
実際にそれは「既にあるものを発明(新たに考える)する必要はない」という意味で


「既にあるものを実装する必要がないわけではない」と考えています。


自分は「車輪の再発明」と「車輪の再実装」は完全に異なると考えていて、
車輪の再発明」で無駄に頭を悩ませる必要はないですが、
寧ろ「車輪の再実装」は非常に重要だと考えています。
ただ、「車輪の再実装」は習作でしかないことも多く、
習作は習作だということです。


書道でお手本を見ながら字を書くのに似ています。
お手本があるとき「新しい字」を考える必要はないですが、「既存の字」を見てそれがなぜそうなのか考える感じです。


実際、多くのプログラムは読み書きして研磨されることでより優れていきます。
全く書き直されないプログラムというのは進化しません。
なので、既にあるので、といって誰も何も書かなかったらプログラムが進化することはありえないですが、
そんなことはないですよね。世界を見てもどんどん新しいプログラムが書かれていきます。


そういった大きな領域ではなく、単に狭いコンテナという部分に目を向けても
効率的なコンテナの「車輪の再実装」の経験があればニッチな要求をするコンテナを書かねばならないときにその経験を生かすことができるでしょうし、
例えばSTLもどきを自分で実装しようと考えたときに、
STLのインターフェイスや内部実装を見るだけでもずいぶん意味があります。


自分が言う問題は「既存のものがよくわからないので、自分の知識だけで再実装する」と言っているケースです。
これは、多くの場合非常に狭い知識で作られるのでかなりうまくないものができます。


既にある(優れた)ものを自分で実装してみて解ることは、
・いかに自分の実装が至らないかを感じる
・既に使われている実装はどうなっているかを知りたくなる
・内部での挙動に対する理解が深まる(自分の書いたものは既にあるものと比べてどうか? という比較においても)


といったところです。
ここで「なぜ」が生まれると感じます。
「なぜ既存のものはこうなっているんだろう? なぜ自分のものと比べて挙動が異なるのだろう?」
すると「ソースを読む」ということに発展します。
id:tt_clownさんも言われるように

私も Boost のソースコードを読もうとすると物によっては挫折するのですが,既存のソースコードを読んで理解すると言う作業は,自分で(取りあえず)実装してみるよりもはるかに多様な知識を要求されます(その言語自身への理解,アルゴリズム,エラー,etc).

この要因の一つに,既存のコードには「核となるアルゴリズム」と「様々なケースに対応するためのエラーチェック」が同時に含まれているから,と言うものがあります.

車輪の再実装 - Life like a clown

先人のソースを読むためには自分の範囲にない知識が必要とされるので力がつきます。
そう、自分のソースには自分の知識と経験の範囲しか書かれませんが、
先人のソースには先人の知識と経験と熟考がある筈だからです。
そして、何が問題になるかを推し量ることで問題発見の力もつきます。


「コンテナ」一つとっても自分で実装をしていない場合には、
「可変長配列」「双方向リスト」なんて言葉一つで片付いてしまい、
的確にこれらがどのような挙動をするのかを人に話すことさえ難しいです。
実際に実装をしてみるとこれらはどんな仕組みで行われているのか知ることができます。


そうなんです。
「車輪の再実装」はドンドンした方が良いんです。
ただ、それが多くの場合既にあるものより優れていることは極々稀なことだ、というだけです。
(ニッチなニーズに合致することはあります)
なので、それを他人に押しつけたり、閉じられた世界で標準であるようにするのは気をつけるべきだ、
ということだけのことです。


そういう意味では、id:monjudohさんの「再実装した車輪を使わない方がよい理由」というのが非常にしっくりきます。

車輪を再実装しない方がよいというか、

再実装した車輪を使わない方がよい理由だけど、

テストや検証の量が全然違うからというのが一番大きいと思う。
...
車輪の再実装をする本当のコストっていうのは、

車輪を実装する分のコストだけじゃなくて、

テストや検証を既存の車輪と同じくらい充実させるコストも含んでるという訳。

車輪の再実装をしない方がよい理由 - 文殊堂

こうしたコストの問題もありますし、
既にあるソース、他人のソースには先人や他人の知識が詰まっているので自分のソースに閉じこもらない方が良いですよ、というだけのことなのです。