Posted at

「車輪の再発明」は、自作、再実装、模倣、改善を否定する言葉ではないぞ!から始まるプログラミング学習法


「車輪の再発明」"Reinventing the wheel"

すでに広く知られたアイデアを、その存在を知らずに改めて考案すること



今回の主題


  • 「発明」と「生産、実装、作成」など混同されがちな言葉をはっきりしておく

  • 「車輪の再発明」が推奨される状況を書く


車輪の再発明

「『車輪の再発明』は良くない」という言い回しをプログラマはよく使います。

この言い回しは頻繁に誤って使われる(あるいは意味が本来とは変わっている)ものです。


"Reinvent"あるいは「再発明」の対象は「アイデア」「方法」であって「実装物」ではない

すでに存在するものを使わずに、自分で実装することを「車輪の再発明」と呼ぶ人がいます。

これは本来の意味からすると、誤っています。


"invent":「発明」の意味

発明は、新しい「アイデア」「問題解決法」を生み出すことです。

それゆえ「車輪の再発明」という言葉において「アイデアがどのように実装されるか」はスコープ外です。

冷静になって考えればわかることですが、今の世の中車輪を作っている人はたくさんいます。

(比喩でなく、自動車業界や鉄道業界を指しています)

その人たちが車輪を再発明しているかといえば、Noです。

彼らはすでに発明された「車輪」という概念を形にしています。

それは否定されることではありません。


ではどのような状況で「車輪の再発明」と言われるべきか

「パフォーマンスを発揮するべき状況」で「すでに存在する解決方法を調べず」に「解決方法を生み出そうとする」とき。

つまり「車輪の再発明」は、ネットスラングで言うならggrksの範疇に収まります。


すでに存在するソフトウェアを自作するか否かについて

すでに存在するソフトウェアを使うか否かは、そのソフトウェアの信頼とかパフォーマンスとか状況とかいろいろ考慮して、自作するかきめればよい、というただそれだけの話です。


「車輪の再発明」あるいは「車輪の自作」「車輪の再実装」が推奨される状況

先程車輪の再発明について「パフォーマンスを発揮するべき状況」という注釈をつけました。

今日見たTED talksに、How to get better at the things you care aboutというものがありまして、効率よく何かをできる人は初学者を抜けた後も「学ぶ時間」と「パフォーマンスを発揮するべき時間」を意識的に分けて考えている、というものです。

「学ぶ時間」という文脈では、「車輪の再発明、自作、再実装、模倣、改善など」は推奨されるべきです。


学びとしての模倣について

学ぶの語源は真似することとか、軽くググっただけで出てくる模倣することの意義を語る記事たち。

https://cybozushiki.cybozu.co.jp/articles/m000319.html

https://wirelesswire.jp/2018/06/65757/

言語(自然音声言語)学習には、Silent Periodなる概念があります。

最初のうちはひたすらインプットして、自分から発話することは難しい時期がある、というものです。

個人的な感覚になりますが、プログラミングにもSilent Periodに近いものがあって、インプットがある程度進まないとオリジナルのコードを書くのは難しいのではないかな、と思っています。

それで、Silent Periodのインプット方法に最適なのが模写と。

慣れてきたら、既存のアイデアの再現(再実装)あるいは改善。


学びとしての「車輪の再発明」について

新しい問題解決方法を発明するのは、訓練がいるので「学びの時間」の中なら自分で既存の概念を再発明するのはありだと思います。


まとめ

「車輪の再発明」という言葉は正しく使おう。

初心者のうちは模写しよう。