世界を動かす技術を、日本語で。

ホイールを再発明する

概要

  • 「車輪の再発明」 を避けるべきというアドバイスの問題点
  • 学習や探究心 を持つことの重要性
  • 自作することで得られる知識や経験 の価値
  • 再発明がもたらす多様な利点 と新しい発見
  • 既存技術の再利用と独自開発のバランス の大切さ

「車輪の再発明」を巡る誤解

  • 車輪の再発明をするな」という助言の多くは、善意から生まれるもの
    • 自分で挑戦して苦労した人 と、 何も考えずアドバイスを信じる人 が主な発信者
  • この考え方が、 好奇心や探究心を阻害する風潮 を生む要因
  • 現代の利便性 は、過去の「再発明」によってもたらされたもの
  • 技術や道具の進化 は、異なる時代や文化での再発明の積み重ねによるもの

学びとしての「車輪の発明」

  • リチャード・ファインマン の言葉「自分で作れないものは理解できていない」
  • 本質的な理解には、 自作・模倣による実践 が不可欠
  • コンピュータサイエンス 分野では、プロトコルや暗号、Webサーバーなどが例
  • 誰でも再現できるべき という発想が、知識の普及と深化につながる

あらゆるものが「ラビットホール」

  • 日常的な技術や概念 にも深い複雑性
    • 例: 文字列処理やパス管理 の自作体験
  • 自己学習・実装による発見 が多い
    • 日常的なものに潜む無限の複雑さ
    • 他者に役立つものを作ることで得られる謙虚さ
    • 人間が作った抽象化の限界と自分なりの設計の可能性
  • 設計上のトレードオフ (正確性・簡潔さ・機能性・拡張性・性能・資源・移植性など)の実感
  • 既存のソリューションにも 必ず弱点や限界 が存在

「車輪の再発明」をする理由

  • より良い車輪 を作るため(「より良い」の定義は状況次第)
  • 車輪の仕組みを学ぶ ため
  • 他者に教える教材 として
  • 車輪の発明者について知る ため
  • 故障時の修理や改良 を自分で行うため
  • 製作過程で必要なツールの習得
  • 大規模システム構築の一端 を体験するため
  • 特殊なニーズへの対応 (例:車椅子、スケートボード、陶芸用ろくろ等)
  • 失敗や寄り道から新たな発見 や発明の可能性

再利用と再発明のバランス

  • 他人の成果を軽視せず、積極的に学ぶ姿勢
  • 知識不足や不信感から再発明するのは避けるべき
  • 自分の知識や技能を試すための独自開発 も重要
  • 小さな実験やプロトタイプ開発 による迅速な学習
  • 自分自身の課題解決や成長 を目的とした再発明の推奨

結論とアドバイス

  • 洞察のために再発明を、影響のために再利用を
  • 再発明は学びや成長のための貴重なプロセス
  • 既存技術の活用と独自開発の両立 がエンジニアとしての成長に不可欠

プログラミング学習のおすすめ

  • CodeCrafters プラットフォームの紹介
    • 無料体験と有料プランの40%割引
    • サブスクリプション経由で筆者へのサポートも可能

Hackerたちの意見

車輪を再発明するのは、学ぶための最高の方法だと思う。でも、個人的にはそれが必要な状況だけだね。自分の興味のあることを掘り下げるのは好きだけど、仕事だと締め切りや他の制約があるから、そういうのは難しいことが多い。もし自分の作った車輪を実際に使いたいなら、既存の製品よりも良いものを作らなきゃね。

仕事で「車輪を再発明」してる99%の人は、嫌いな車輪がどうやって作られているのか、そしてその妥協点が何なのかを全然知らないんだよね。

これが一番の学び方ってわけじゃないよ。お金も時間もかかるしね。学ぶべきことは、ちゃんと文書化されてて、いじれる状態にしておけばいいんだ。知識を伝えるのも難しいけど、ゼロから全部作る必要はないと思う。

車輪を再発明する重要な理由の一つは、著者が言及していないけど、不要な依存関係を増やさないためだよ。

その通り!さらに付け加えると、ライブラリが人気になるのは、いろんなシナリオで問題を解決するからなんだよね。つまり、人気のあるライブラリは、ほとんどのケースで自分の使い方には関係ない大量のコードが含まれているってこと。トレードオフは、自分のバージョンをどれだけ早くコーディングできるか(暗号ライブラリは自分で作らない方がいいけどね)だと思う。もしできるなら、より親しみが持てて、依存関係も少なくて済むから。

「車輪を再発明」するんじゃなくて、「車輪を見つけ出す」って感じかな。

もう一つ言えるのは、発明や研究が上手くなるのは、練習で磨けるスキルだってこと。以前に解決された問題で練習できるしね。

+1、余計な抽象化やモジュール性による複雑さを避けるためでもあるよね。

うん、指向性非循環グラフ(DAG)に基づいてタスクを実行するライブラリを作ったよ。各タスクはオプションでキューに属することができるんだ。だから、シンプルなキューを書かなきゃいけなかったんだけど、デモをブラウザで動かしたかったからIndexedDBのバックエンドにしたし、Electronアプリでも動かしたかったからSQLiteのバックエンドも用意した。将来的にはマルチユーザーサーバー用のPostgresバックエンドも必要になると思う。レート制限とかにも使いたいから、リミッターも必要だったしね。それに、グラフの処理やタスクの処理もあるし、実際、依存関係を持たないなら作るべき「車輪」はたくさんあるよ。TypeBoxを使ってタスクの入力と出力のJSONスキーマを作って検証するブランチもあるから、最終的にはコア部分が依存関係なしにはならないかもしれない。

車輪を再発明するのが本当に大事だよね。

これが、私が「車輪を再発明する」傾向がある主な理由だね。依存関係には余計な「荷物」が多いことが多いし、私が欲しい機能はほんの少しだけだったりする。角の店に行くだけなのに、なんで18輪トラックを使わなきゃいけないの?それに、これは本当に私の問題なんだけど(少数派の意見になることが多いけど、私の考え)、不透明なコードを信じるのが苦手なんだ。もし依存関係を使うなら、時間をかければ自分でも書けるものだし、統合する前に監査できるものにしたい。お金を払わない限り、不透明な実行ファイルは使わないよ。お金がかからないなら、ソースが見えることを期待する。

このインスピレーショナルなエッセイに感謝!「洞察のための再発明」が学ぶための最高の方法だってことに全く同感だよ。数ヶ月前に、PythonとNumPyだけを使って、PyTorchスタイルの機械学習ライブラリをゼロから作った経験があるんだ。最初は小さな自動微分エンジンから始めて、徐々にレイヤーモジュールやオプティマイザー、データローダーなどを作っていった。基本から機械学習を学びたかったんだ。途中で、作ったライブラリを使って古典的な畳み込みネットワークやおもちゃのGPT-2を再現しようとしたよ。PyTorchやTensorFlowの派手な抽象化なしで、機械学習がどう動いているのかを理解するのに大いに役立った。まるで、自分が再発明した車輪を使って車を再発明するような感じだね :)

特定のニッチで自分の車輪を再発明したよ。最初はそうするつもりじゃなかったけど、既存の最先端技術が根本的に間違っていると思ったんだ。それから、自分の問題を分割して解決しようとしたけど、これは通常不可能だと考えられていることなんだ。すべての逆境を乗り越えて、成功した(ほとんど無知と頑固さのおかげだけど)だけでなく、自分の車輪は驚くほど良い性能を発揮している。もしかしたら、世界レベルかも。さらに実験を重ねるうちに、純粋な異端とも言えるようなことを簡単に実現できるようになった。時が経つにつれて、そのニッチの人たちが私の車輪を使い始めるんだ。最初はみんな使い方が分からなくて変な持ち方をするけど、コツをつかむと二度と戻らない。世界中から変わった使い方やワークフローのバグ報告や機能リクエストが来る。普段出会わないような素晴らしい人たちと深い技術的な議論を交わすことができた。自分の車輪を使って他の人が達成した成果には驚かされるし、夜も眠れないことがある。未経験の同僚に自分の車輪が何をするのかを説明するのが楽しくて仕方ない。車輪を再発明することを恐れないで。どんなクレイジーでワイルドな道に導かれるか分からないから。

それに乗るよ!その車輪って何?

ありがとう!

スタートアップで働いてるなら、このアドバイスは完全に無視してほしい。再発明している車輪が、あなたのスタートアップの製品やサービスの核心でない限りね。そうでないなら、ただ自分の滑走路を燃やして、離陸前に墜落することになるよ。

スタートアップを作りたいなら、車輪を作る方法を知っている人たちと一緒にやるべきだよ。つまり、オープンソースや個人プロジェクトでそれをプロとしてやってきた人たちとね。

これは、仕事用じゃなくて、個人的な車輪に対するアドバイスみたいだね。

その記事をシェアしてくれてありがとう。親友が教えてくれた、作者不明の名言があるんだ。「車輪を再発明するのは、もっと車輪が必要だからじゃなくて、もっと発明家が必要だからだ。」この言葉は、ある概念を学びたいと思ったときに、自分の「おもちゃバージョン」のソフトウェアライブラリやフレームワークを作ろうと決意したときに、心を落ち着けてくれた。後にファインマンの「自分が作れないものは理解できない」という言葉を知って、学ぶために何かを作るのはいいことだと感じた。こうして、いわゆる「車輪を再発明」する新しい旅の中で、初めの概念に対する直感が強くなったり、他のいくつかの概念も学べたんだ。

それは大体良い意図から来るんだけど、通常は二つのグループの人たちから言われることが多い。 > 自分で車輪を発明しようとしたけど、その難しさを知っている人たち > 車輪を発明したことがないのに、盲目的にアドバイスに従う人たち でも、もっと一般的なグループがあると思う。それは、再発明のプロセスを全部理解していて、やり方も知っているけど、それをやる価値がないって分かっている人たち。教育的な価値も含めて、自分でやる意味がないってこと。

このグループの方が、私にはずっと具体的に感じる。現状を信じるのではなくて、このグループはそれを恐れている。

この記事は、主な理由を見落としている気がする(「より良い車輪を作る」に該当するなら別だけど)。それは、自分の目的に合わせて調整された車輪を作ることだよね。人々が比喩的に自転車に車のタイヤを使おうとして、「車輪を再発明しないために」と言い訳するのをよく見る。システムの部品が一緒にうまく機能するように特注されていることには、大きな利点があるんだ。

私は「Gov」を再創造してるんだ - 実際にはそうじゃないけど、私のアイデアをグローバルにね。例えば:ua.gov-ai.co / ua.ai-gov.co / ng.gov-ai.co / ng.ai-gov.co - これまでの進展はCBERとDDPのことで、* HHS -> FDA -> CBER これは私の意見だけど(専門家じゃないよ)、基本原則をよりよく理解するのに役立つから重要だと思う。基本が変わると、これらのことを再評価するのに役立つんだ。何も得られないって分かっててもね。今のところ422の機関をカバーしていて、ジュンティーンスまでに終わらせる予定。ここには投稿できないけど……でも、そうだね。車輪を再発明しよう!

HTMLとCSSの車輪を使って、自分の地域の車輪再発明工場を巡る自転車を作ったんだけど、ウサギの穴が本当にあるって確認できたよ。