独力で車輪の再発明をするのは良いことだと思う


TL;DR

  • 知人と話して自分の力で車輪の再発明をするのは良いことだという話をした
  • 出した結論が既知であっても、その過程は自身の胸裡に財産として積み重なっていく
  • そのような積み重ねが理解を深めたり新しいことを発想する土台になると思う
  • どんどん車輪の再発明をしていこう

大学時代からの知人に二年ぶりくらいに会った。 その知人はいま数学の研究者をしているが、大学時代から学問の話から教育の話まで実に様々な議論をしてきた過去があって、尊敬している人間の一人だ。

今回も色々な話をしたのだが、そこで表題にあるような議論をして興味深いなと思ったので記事に残しておくことにした。

車輪の再発明

Wikipedia のページ によると「広く受け入れられ確立されている技術や解決法を知らずに(または意図的に無視して)、同様のものを再び一から作ること」とある。

細かい言葉の定義はどうでもいいのだが、既にあるものを自分で一から作る、ということで多くの人が理解しているだろう。 どちらかというとネガティブな意味合いで使われている言葉だと思う。

確かに何か作りたいものがあったときに、必要なコンポーネントで誰かが既に作っている利用可能なものがあるならば、それを使って自分は自分が作りたいものに集中するのが良い、というのは真だし特に反論する気はない。

ただ、何かを理解するという点において、そして新しく何かを作り出すという点においても、車輪の再発明をするのは重要なプロセスだなと思ったので自分の考えを書いておく。

車輪の再発明を独力でするということ

知人と話していたのは大学生が大学においてどういう学びの体験ができるのが良いだろうか、ということだ。

受験において与えられた問題を解くという訓練を積んできた学生は、大学に入っても同じようなプロセスで学びを継続しようとする。 しかし、このような学び方は「自分で解くべき問題を設定し、そこに到達するために知識を着実に積み上げていく」という(恐らくはもっと重要な)学び方には発展し難い。 高校までの教育をもっと変える必要があるとかそういう話かもしれないが、それはここでは議論しない。

これを変えるには「自由研究」的な取り組みがあるんじゃないかという話をした。 興味を持った対象に関して、自分で考えた方法で色々深掘りしていく。 ほとんどの場合で、問題として設定したものは既知だし、自分が考えたアプローチも既知だし、出した結論も既知だと思う。

例えば積分の概念を再発明するとか、勾配法を再発明するとか、何かしらのソートアルゴリズムを再発明するとか、レベルは様々だろうけどほとんどのものはググれば誰かが取り組んだことがあるものだと判明すると思う。

しかし、興味を持った問題を何となくググって調べるのと自分の頭で考えてみるのとには、大きな乖離が発生する。 結論は同じ(もしくは自分の考えは間違えもあるだろう)でそこに達する時間も前者の方が圧倒的に早いのだが、後者でないと自分で知識を積み上げていくという過程が得られない。 そしてこの過程を体験しないまま進むと、どうしても表面的になって、少し考えれば分かる答えを探し続けたり他人の説明をなぞるという感じになりがちだ。 それでも表面的なアウトプットを出すことは難しくなかったりするので、表面的には人から評価されたりもして、色んなところで不幸が発生している気がする。

自分で考えるのは時間が掛かることも多いけど、血肉になるという観点では代え難いものだろう。 自分を振り返ってみても、ググって調べただけとか他人の説明を読んだだけ、とかいうものは内容が全然思い出せないし reproduce なんてとてもできない(自分の記憶力が悪いだけの可能性アリ)。

そして再発明であるがゆえに、自分の考えた過程が正しい結論に達したか間違った結論に達したかを答え合わせできるのも良い点だ。 答えがないものをいきなり考えるのは当然難しいけれど、こういう経験をしてきている人とそうでない人では自分が正しい方向性に進んでるか否かを判断するスキルが圧倒的に異なる。 一朝一夕で身につかないものだからこそ、積み重ねで大きな差が出る。

他人の体験がコピーできれば解決する話なのかもしれないが、現状は難しいので、車輪の再発明をしていって自分の体験を積み重ねていくしかないんじゃないか。

これは与えられたものを勉強するだけではなかなか難しい話なので、人生のどこかでこういう経験ができるといいよなと思う。 そしてそれは典型的には大学でやるのが良いのではないかと思う。 そのための方法論を議論するつもりはここではないが、大学の成績「のみ」が重要になったり、「表面的な」アウトプットが重要になったりするのは良くないよなと思う。 最近の企業の学生(さらには中途でも)に対する評価は表面的なアウトプットに振り回されがちな気がする。

まあ問題意識は色々あるがその辺は一旦置いといて、独力で車輪の再発明をするのは良いことだと思う、という話でした。

ちょっと抽象的な話になってるので、自分の最近の例を書いてみよう。 まあ例というほど大した話ではないのだが、直近の話ということで書きやすいので。

最近C言語の基礎とかを勉強していて、何かのコードを読んでいて、二つのビット列を swap するのに排他的論理和を使うというアルゴリズムを見た。 なんでそうなるのかすぐには分からなかったが、とりあえず具体的な例でやってみて確かにそうなることを確認し、その後もう少し一般的に考えてみた。

思考の過程としては以下のような感じだった(本当はもう少しごちゃごちゃ考えたが、整理したもの)。

  • 二つのビット列の排他的論理和を抽象的に ABA \cdot B のように書いてみる
  • swap のアルゴリズムに従い A~=AB\tilde{A} = A \cdot B を入れ、次に B~=BA~=B(AB)\tilde{B} = B \cdot \tilde{A}= B \cdot (A \cdot B) を入れる(区別しやすいように代入後の変数はチルダ付きで書く)
  • 排他的論理和は可換なので、二つ目の式は B~=BBA\tilde{B} = B \cdot B \cdot A
  • 排他的論理和は自分自身と演算すれば全部ゼロのビット列になるか!
  • ってことは 単位元がゼロビット列で逆元が自分自身の可換群 を成すわけか!
  • ということで B~=BBA=eA=A\tilde{B} = B \cdot B \cdot A = e \cdot A = A
  • 最後のステップも A~=ABB~=ABA=B\tilde{A} = A \cdot B \cdot \tilde{B} = A \cdot B \cdot A = B だし明快そのものだな
  • あーこれはスッキリした、完全に理解したな

調べてないが、ほぼ 100% の確率でこういう解説をしているものが世の中にはあるだろう。 別に大したアイデアでもないし。

この理解の仕方は車輪の再発明そのもので調べればすぐに出てくるのものだろうが、自分が考えた数十分の体験はなかなか良いもので、自信を持って説明できるしいつでも reproduce できる。

好みの問題かもしれないけど、こういう体験を繰り返していくのは楽しい。

まとめ

自分の力で車輪の再発明をするのは良いことだと思う、どんどんやっていこう。