車輪を再発明する
最も有害な助言の一つは、「車輪を再発明するな」というものです。
たいていは善意から出た言葉ですが、こうした助言をするのは、通常、次の二つのグループです。
- 自分で車輪を発明しようとして、その難しさを知っている人たち
- 車輪を発明しようとしたことが一度もなく、盲目的にその助言に従っている人たち
どちらにしても、好奇心や探究心が抑え込まれる風潮につながります。そんな助言に従わなかった人たちがいたことを、私はうれしく思います。現代の生活にある多くの便利なものは、彼らのおかげです。
表面的に考えてみても、この助言は間違っています。最初の車輪が発明された紀元前4500~3300年ごろと比べれば、私たちは今、はるかに優れた車輪を使っています。また、さまざまな文明や文化の中で車輪が何度も再発明されたことは、決定的に重要でした。
注:この投稿全体で私が「車輪」と言うときは、あなたが個人的に関心を持っているツール、プロトコル、サービス、テクノロジー、その他の発明に置き換えて読んでください。
車輪を発明することは、学ぶこと
「私が作れないものは、理解していない」
– Richard Feynman(物理学者、ノーベル賞受賞者)
何かを根本から本当に理解するには、まずおもちゃのような簡易版を実装できなければなりません。それが良い出来かどうかは関係ありません。あとで捨てればいいのです。
たとえばコンピューターサイエンスには、ただの人間には手に負えないと思われがちな概念がたくさんあります。プロトコル、暗号技術、ウェブサーバーなどが思い浮かびます。
こうしたものの仕組みを、もっと多くの人が知るべきです。だからこそ、再現することを恐れるべきではないと思います。
何もかもが深掘りになる
根本的なものほど、あまりにも当然のこととして扱われがちです。たとえば、プログラミングにおいて文字列やパスは、非常に複雑な概念です。仕組みに興味があるなら、文字列やパスのライブラリを自分で実装してみるのは、すばらしい練習になります。
結局、誰にも使われなかったとしても、きっと多くを学べます。たとえば、次のようなことです。
- 身近なものにも、無限の複雑さがある。
- たった一人でも役に立つものを作ることは、謙虚にさせられる経験である。
- あなたと同じ人間が、こうした抽象化を作った。完璧ではないし、自分の設計では別のトレードオフを選ぶこともできる。
最後の点について言えば、あらゆるものはトレードオフです。そして、どんな小さな課題にも、何十、場合によっては何百もの危険な落とし穴があります。
その過程で、正しさ、単純さ、機能性、スケーラビリティ、性能、リソース使用量、移植性などについて、判断を下さなければなりません。
自分の解決策が、これらの一部では優れていることはあっても、すべてにおいて優れているわけではありません。すべてのユーザーにとって最適とも限りません。つまり、既存の解決策にも欠点があり、どれほど確立されたものであっても、あなたの個別の問題を解決するようには設計されていない可能性があります。
深掘りそのものにも楽しさがありますが、もう一つ利点があります。それは、エンジニアとして成長するための数少ない方法の一つだということです……ただし、探究しようとしたものが動くところまでたどり着く前に、あきらめなければの話です。プロジェクトを頻繁に飛び移っていたら、何も学べません。
車輪を再発明する理由
車輪を再発明する理由は、いくらでもあります。
- より良い車輪を作る(何をもって「より良い」とするかはともかく)
- 車輪がどう作られるかを学ぶ
- 車輪について他の人に教える
- 車輪の発明者について学ぶ
- 車輪を変更したり、壊れたときに修理したりできるようになる
- その過程で、車輪を作るために必要な道具を学ぶ
- より大きなシステム(たとえば乗り物)を作るとはどういうことか、そのほんの一端を学ぶ
- 特別な車輪を必要としている人を助ける。車椅子用かもしれません。
誰にもわかりません。あなたが考え出した車輪は、車に使うには最適ではないかもしれません。でも、スケートボードや自転車には使えるかもしれない。より良い車輪を作ることには失敗しても、その途中で車輪を検証するもっと良い方法を思いつくかもしれません。そもそも、あなたの車輪は移動のためのものですらないかもしれません。それは、Wikipediaによれば「粘土を成形し(この作業はろくろ成形と呼ばれます)、丸い陶器を作るために使う機械」である、ろくろかもしれません。ハンドルやフライホイールのように、まったく別の種類の車輪を作ることになるかもしれません。既成概念にとらわれずに考える人が、もっと必要です。
再利用か、再発明か
もちろん、他の人の成果を無視してはいけません。成果を研究し、適切なところでは再利用しましょう。他の人の仕事を信用していないから、あるいは知らないからという理由で、車輪を再発明してはいけません。一方で、自分の知識を実際に試したことがなければ、どうやって自分の分野を前進させられるほど深く学べるでしょうか。
小さな実験を繰り返すことで、非常に速く前進できることに気づきました。特にソフトウェアエンジニアリングでは、小さなプロトタイプを作るのは安く、速くできます。自分の問題を解決し、小さく始め、シンプルに保ち、反復しましょう。
以上を踏まえて、私からの助言はこうです。
洞察のために再発明し、成果のために再利用する。
記事をランダムに読む