Reinvent the Wheel

Matthias Endler

重新發明輪子

原文由 Matthias Endler 發布,訂閱此部落格

最有害的建議之一,就是「不要重新發明輪子」。

這句話通常是出於好意,但往往出自兩種人之口:

  • 那些自己嘗試發明過輪子、深知其中有多困難的人
  • 那些從未嘗試發明過輪子、只是盲目遵從這句話的人

無論是哪一種,都會形成一種壓抑好奇心與探索精神的氛圍。我很慶幸有些人沒有聽從這個建議;現代生活中許多便利,都要歸功於他們。

就算只看表面,這個建議也很糟糕:比起西元前 4500 至 3300 年第一個輪子被發明時,我們今天的輪子已經好得太多了。而且輪子能在各個文明與文化中不斷被重新發明,是至關重要的一件事。

註: 在這篇文章中,每當我提到「輪子」,請自行替換成你個人感興趣的任何工具、協定、服務、技術或其他發明。

發明輪子就是學習

「我無法創造的東西,我就無法理解」
理查·費曼,物理學家、諾貝爾獎得主

真正從根本上理解某件事物,你得先有能力做出一個玩具版本。好不好用並不重要;之後大可丟掉它。

舉例來說,在電腦科學中,就有許多概念常被認為是凡人無法企及的:像是協定、密碼學和網頁伺服器。

應該要有更多人了解這些東西的運作原理。也因此,我認為大家不該害怕去重現它們。

每一件事都是個兔子洞

太常有人把基礎的東西視為理所當然。舉例來說,字串或路徑在程式設計中就是超級複雜的概念。如果你對它們的運作原理感興趣,自己動手實作一個字串或路徑函式庫會是很好的練習。

就算最後沒有人使用你的成果,我敢說你一定會學到很多。例如:

  • 日常事物中蘊藏著無限的複雜性。
  • 打造出一個哪怕只有一個人覺得有用的東西,本身就是一次令人謙卑的體驗。
  • 這些抽象概念也是和你一樣的人創造出來的。它們並不完美,你完全可以在自己的設計中做出不同的取捨。

關於最後一點,每件事都是取捨,每個小練習題背後都有數十個、甚至上百個容易讓人搬石頭砸自己腳的陷阱。

過程中,你必須在正確性、簡潔性、功能性、可擴展性、效能、資源使用量、可攜性等等之間做出抉擇。

你的解決方案或許在其中幾項表現出色,但不可能在所有面向都完美,也不可能適合所有使用者。這也意味著現有的解決方案同樣有缺陷,而且可能本來就不是為了解決你的特定問題而設計的;無論它有多麼成熟、廣為人用。

鑽進兔子洞本身就很有趣,但還有另一個好處:這是身為工程師少數能夠升級的途徑之一……但前提是你不能在做出可運行的版本之前就半途而廢。如果你太常在不同專案之間跳來跳去,最終什麼也學不到。

重新發明輪子的理由

重新發明輪子有很多好理由:

  • 打造一個更好的輪子(以某種「更好」的定義而言)
  • 了解輪子是如何製成的
  • 教別人認識輪子
  • 認識發明輪子的人們
  • 能夠在輪子需要更換或損壞時動手修理
  • 在過程中學會製造輪子所需的工具
  • 窺見打造更大系統(如一輛車)究竟是怎麼一回事
  • 幫助需要非常特殊輪子的人。也許是為了輪椅?

誰知道呢?你做出來的輪子也許不適合用在汽車上,但或許適合滑板或腳踏車?或者你沒能做出更好的輪子,卻在過程中想出了更好的輪子測試方法。話說回來,你的輪子甚至可能根本不是為了交通而生的!它可能是陶輪,也就是根據維基百科所說的「一種用於將黏土塑形(稱為拉坯)成圓形陶器的機器」。你也可能最後做出完全不同種類的輪子,像是方向盤或飛輪。我們需要更多能夠跳脫框架思考的人。

重用 vs 重造

當然,別輕視他人的成果——好好研究,並在適合的地方加以重用。不要因為不信任或無視他人的成果而去重新發明輪子。另一方面,如果你從未試著檢驗自己的知識,又怎麼能對自己的領域了解得足夠深入,進而推動它前進呢?

我觀察到,透過進行一些小實驗,你可以進展得非常快。尤其是在軟體工程中,打造小型的原型既便宜又快速。解決你自己的問題,從小處著手,保持簡單,不斷迭代。

所以,綜合以上,我的建議是:

為洞見而重造,為影響力而重用。

本文章由 muse-spark-1.2-contributor 進行翻譯

留言