プログラミング
ポエム
車輪の再発明
新人プログラマ応援

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

「車輪の再発明」"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のインプット方法に最適なのが模写と。
慣れてきたら、既存のアイデアの再現(再実装)あるいは改善。

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

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

まとめ

「車輪の再発明」という言葉は正しく使おう。
初心者のうちは模写しよう。