車輪の再発明
原文は Matthias Endler により に公開されました。 このブログを購読する
最も有害なアドバイスの一つが、「車輪の再発明をするな」というものだ。
たいていは善意から来ているのだが、だいたい次の二種類の人たちによって語られる。
- 自分で車輪を作ろうとして、その大変さを知っている人
- 車輪を作ろうとしたこともなく、ただ盲目的にそのアドバイスに従っている人
いずれにせよ、どちらの立場も好奇心や探求心が萎縮する空気を作り出す。幸いなことに、そのアドバイスに従わなかった人たちがいた。現代の生活の多くの便利さは、彼らのおかげだ。
表面的に見ても、このアドバイスは間違っている。最初の車輪が発明された紀元前4500〜3300年当時と比べて、今日の車輪はずっと優れている。そして、車輪がさまざまな文明や文化の中で再発明されてきたことは極めて重要だったのだ。
補足:この記事で「車輪」と言うときは、あなたが個人的に興味を持っている道具、プロトコル、サービス、技術、その他あらゆる発明に置き換えて読んでほしい。
車輪を作ることは学ぶことだ
「自分で創れないものは、私は理解していない」
– Richard Feynman、物理学者・ノーベル賞受賞者
何かを本当に根本的なレベルで理解するには、まずおもちゃのような試作品を実装できなければならない。出来が良くなくても構わない。後で捨ててしまえばいいのだ。
例えばコンピュータサイエンスでは、凡人には手に負えないと思われがちな概念がたくさんある。プロトコル、暗号、そしてウェブサーバーなどが思い浮かぶ。
もっと多くの人がこれらがどう動いているのかを知るべきだ。だからこそ、人はそれらを再現することを恐れるべきではないと思う。
すべては底なし沼だ
あまりにもしばしば、根本的なことが当たり前だと思われている。例えばプログラミングにおける文字列やパスは、とても複雑な概念だ。その仕組みに興味があるなら、自分で文字列ライブラリやパスライブラリを実装してみるのは素晴らしい演習になる。
たとえ誰もあなたの作ったものを使ってくれなくても、きっと多くのことを学べるはずだ。例えば——
- 日常的なものの中に無限の複雑さがあること。
- たった一人でも他の誰かに役立つものを作ることが、どれほど身が引き締まる経験であるか。
- こうした抽象化は、あなたと同じ人間が作ったものだということ。完璧ではなく、自分の設計では違ったトレードオフを選べるということ。
最後の点について言えば、すべてはトレードオフであり、どんなおもちゃの問題にも数十、時には数百もの落とし穴がある。
その過程で、正確性、シンプルさ、機能性、拡張性、パフォーマンス、リソース使用量、移植性などについて判断を迫られることになる。
あなたの解決策は、これらのうちいくつかでは優れているかもしれないが、すべてにおいて、しかもすべてのユーザーにとって優れているわけではない。それはつまり、既存の解決策にも欠陥があり、どんなに確立されたものであっても、あなたの特定の問題を解決するようには設計されていないかもしれないということだ。
底なし沼を掘り進むのはそれ自体が楽しいが、もう一つ利点がある。エンジニアとしてレベルアップするための数少ない方法の一つなのだ……ただし、試そうとしたものが動く状態になるまで諦めなかった場合に限る。プロジェクトを次々と飛び移っていては、何も学べない。
車輪を再発明する理由
車輪を再発明するには、素晴らしい理由がある。
- より良い車輪を作るため(「より良い」の定義は人それぞれだが)
- 車輪がどう作られているかを学ぶため
- 他人に車輪について教えるため
- 車輪の発明者について学ぶため
- 車輪を交換したり、壊れたときに直せるようになるため
- 途中で車輪を作るのに必要な道具を学ぶため
- より大きなシステム(例えば車両)を作るとはどういうことか、その一端を学ぶため
- とても特別な車輪を必要としている誰かを助けるため。もしかしたら車椅子のためかもしれない。
どうなるかはわからない。あなたが思いついた車輪は、車には最適でなくても、スケートボードや自転車には最適かもしれない。あるいは、より良い車輪を作ることには失敗しても、その過程で車輪をテストするより良い方法を思いつくかもしれない。そもそも、あなたの車輪は移動のためですらないかもしれない!Wikipediaによれば、ろくろ、すなわち「粘土を丸い陶器に成形する(ロクロ成形として知られる)際に使われる機械」かもしれないのだ。結局、ハンドルやフライホイールのような、全く違う種類の車輪を作ることになるかもしれない。私たちには、もっと型にはまらない発想をする人が必要なのだ。
再利用 vs 再発明
もちろん、他人の成果を軽視してはいけない——彼らの仕事を学び、適切だと思うところでは再利用しよう。他人の仕事への不信や無知から車輪を再発明してはいけない。一方で、自分の知識を試したことが一度もなければ、どうやって自分の分野を前進させるほど十分に学べるだろうか。
小さな実験を繰り返すことで、とても速く進めることに気づいた。特にソフトウェアエンジニアリングでは、小さなプロトタイプを作るのは安くて速い。自分の問題を解き、小さく始め、シンプルに保ち、繰り返すのだ。
以上を踏まえて、私からのアドバイスはこうだ。
洞察のために再発明せよ。成果のために再利用せよ。
記事をランダムに読む
コメント
ログインしてコメントする