Jason P. Sage
Just use something that exists — it’s silly to reinvent the wheel….
為什麼要重新發明輪子?#
每個開發者和學生都可能經常聽到「不要重新發明輪子」這種說法。畢竟,現有的程式碼已經通過品質控管和嚴格測試、正在被成功使用中。投入時間精力去重新發明,回報不太可能比得上使用現成產品。那為什麼還要這麼做?
**因為閱讀書籍和使用現成程式碼,與從頭開始設計、建造、測試、修復、改進你自己的軟體,是完全不同的體驗。**正如看一部關於航海的電影和實際出海航行是天差地別的。
重新發明的真正價值#
重新發明輪子不僅僅是練習擺放程式碼的技巧,而是深入了解各種元件內部運作機制的方式。你知道以下這些東西是怎麼運作的嗎?
- Memory manager(記憶體管理器)、Virtual paging(虛擬分頁)
- Double-linked list(雙向鏈結串列)、Dynamic array(動態陣列)
- ODBC client
- GUI(圖形使用者介面)、瀏覽器的 widgets
- Multiplexed system(多工系統)與 multithreaded system(多執行緒系統)的選擇
- File-based 與 memory-based database 的差異
大多數開發者從未親手實作過這些核心軟體元件,因此缺乏對其內部運作的深入了解。結果就是把這些東西視為神秘的黑盒子,只理解表面而看不到底層隱藏的風險。
犯錯比一次成功更有價值#
重新發明輪子然後做錯,比第一次就做對更有價值。從反覆試錯中學到的教訓,帶有書本無法傳遞的情感成分。
書本知識和聰明才智固然重要,但成為優秀程式設計師同樣需要累積經驗。重新發明輪子對開發者的教育和技能成長而言,就如同舉重之於健美選手一樣不可或缺。