「車輪の再発明」"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のインプット方法に最適なのが模写と。
慣れてきたら、既存のアイデアの再現(再実装)あるいは改善。
学びとしての「車輪の再発明」について
新しい問題解決方法を発明するのは、訓練がいるので「学びの時間」の中なら自分で既存の概念を再発明するのはありだと思います。
まとめ
「車輪の再発明」という言葉は正しく使おう。
初心者のうちは模写しよう。