Reinvent the Wheel

Matthias Endler

重新發明輪子

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

這句話通常出於善意,但往往來自兩種人:

  • 自己嘗試發明過輪子、深知其中艱難的人
  • 從未嘗試發明輪子、只是盲從這句話的人

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

即使只看表面,這個建議也很糟:我們今天擁有的輪子,遠比西元前 4500 至 3300 年間發明的第一個輪子要好得多。而輪子能在各個文明與文化中被不斷重新發明,也至關重要

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

發明輪子就是學習

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

要從根本上真正理解某件事,你必須先能實作出一個玩具版。不用管它好不好,之後丟掉也無妨。

以資訊科學為例,有許多概念常被認為超出凡人的能力範圍:協定、密碼學和網頁伺服器就是幾個例子。

應該有更多人了解這些東西是如何運作的。因此我認為,大家不該害怕重新打造它們。

每件事都是一個兔子洞

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

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

  • 日常事物中蘊含著無限的複雜度。
  • 打造出一個即使只有一個人覺得有用的東西,也會是令人謙卑的體驗。
  • 這些抽象概念是由和你一樣的人所創造的。它們並不完美,你可以在自己的設計中做出不同的取捨。

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

在這個過程中,你必須針對正確性、簡潔性、功能性、可擴充性、效能、資源使用量、可攜性等做出抉擇。

你的解決方案或許在其中幾項表現出色,但不可能面面俱到,也無法滿足所有使用者。這也意味著,現有的解決方案同樣有缺陷,而且可能並非為了解決你的特定問題而設計;無論該方案多麼成熟穩固皆然。

鑽進兔子洞本身就很有趣,但還有另一個好處:這是身為工程師少數能夠升級的方式之一……但前提是,你不能在做出可運作的版本之前就放棄。如果你太常在不同專案之間跳來跳去,將一無所獲。

重新發明輪子的理由

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

  • 打造更好的輪子(以某種「更好」的定義而言)
  • 了解輪子是如何製造的
  • 教導他人關於輪子的知識
  • 認識發明輪子的人們
  • 能在輪子需要修改或故障時加以處理
  • 在過程中學會製造輪子所需的工具
  • 稍微體會打造更大系統(如車輛)是什麼感覺
  • 幫助需要特殊輪子的人。也許是為了輪椅?

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

重用與重造

當然,別輕視他人的成果——好好研究他們的作品,並在合適的地方加以重用。不要出於對他人成果的不信任或無知而重新發明輪子。另一方面,如果你從未嘗試檢驗自己的知識,又如何能對自己的領域了解得足以推動其進步呢?

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

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

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

原文由 Matthias Endler 發布

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