原文地址:https://endler.dev/2025/reinvent-the-wheel/

2025年5月24日

前段时间读到一篇文章《Reinvent the Wheel》,身为一位技术人颇有感触,以下是全文完整翻译:

最害人的建议之一就是“不要重新发明轮子”。

这个建议通常出于善意,但主要来自两类人:

  • 那些试图自己发明轮子并知道它有多难的人
  • 那些从未尝试过发明轮子并盲目听从他人建议的人

无论哪种立场,都会扼杀我们的好奇心和求知的氛围。庆幸的是有人未听从此建议,现代生活的诸多便利正是源自他们。

即使从字面意思上来说,这个建议也很糟糕:如今的轮子远比公元前 4500-3300 年发明的初代轮子先进得多。更重要的是,轮子在不同文明与文化中的反复被重新发明。

注:本文中“轮子”可替换为你个人感兴趣的任何工具、协议、服务、技术或其他被发明的东西。

发明轮子就是在学习

“What I cannot create, I do not understand”
——理查德·费曼,物理学家和诺贝尔奖得主

要真正理解事物的本质,你必须先能实现一个简化版本。无需追求完美,事后可以直接丢弃。

例如,在计算机科学中,有许多概念通常被认为超出了普通人的能力范围:协议、密码学、网络服务器等。

应该有更多人知道这些东西的运作原理。因此,我认为人们不该畏惧重新发明轮子。

一切皆是无底洞

很多时候,一些很基础的事情被认为是理所当然的。例如 stringspaths 在编程中实为极其复杂的概念。若想探究其原理,亲手实现字符串库或路径库是绝佳实践。

即使最终没有人使用你的作品,我敢打赌你会学到很多东西。例如:

  • 日常事物存在无限的复杂性。
  • 当作品被他人所用,你的谦逊感会油然而生。
  • 这些抽象概念都是人搞出来的套路。它们本就不完美,你可在设计时作出不同权衡的取舍。

关于最后一点,一切都是权衡,每个简单的问题背后都藏着数十甚至数百处隐患。

在实践过程中,你终将围绕正确性、简洁性、功能性、可扩展性、性能、资源消耗、可移植性等维度作出决策。

你的方案或能在某些方面很棒,但不可能面面俱到,更无法满足所有用户。这也意味着现有方案存在缺陷,未必能解决你的特定问题,无论该方案多么成熟。

探索无底洞本身就很有趣,但更关键的是:这是工程师实现能力跃迁的少数路径之一…但前提是你必须坚持完成可运行的版本。若在项目间反复横跳,终将一无所获。

重新发明轮子的理由

重新发明轮子有充分的理由:

  • 打造一个更好轮子(以某种“更优”作为标准)
  • 了解车轮是如何制造的
  • 授人以渔
  • 了解轮子发明者的思想
  • 掌握更换或修复轮子的能力
  • 在此过程中学习制作轮子所需的工具
  • 了解复杂系统(如车辆)的构建之道
  • 帮助有特殊需求的对象(例如轮椅使用者)

谁知道呢?你创造的轮子或许不宜用于汽车,但可能适配…滑板或自行车?或许你没能造出一个更好的轮子,但却想出了一个更好的方法来测试轮子。哎呀,你的轮子甚至可能根本与运输无关!参考维基百科,它可能是陶轮,“一种将粘土塑造(称为抛掷)成圆形陶瓷器皿的机器”。你最终可能会构建一种完全不同类型的轮子,例如方向盘或飞轮。我们需要更多跳出思维枷锁思考的人。

复用 Vs 重新发明轮子

当然,不要忽视他人的工作成果——研究他们的作品,并在你认为合适的地方复用。切不可因不信任或无知而重新发明轮子。此外,如果你从未尝试过将你的知识付诸实践,你怎么能学到足够的知识来推进它呢?

据我观察,你可以通过运行最小原型来快速前进。尤其是在软件工程中,构建小型原型成本低廉且快速。解决自身问题,从小处着手,保持简洁,持续迭代。

所以,综上所述,我的建议是:

重构以求知,复用以成事。


原文完。

希望此文能对你有所启发。

延伸阅读

联系我