原文地址:https://endler.dev/2025/reinvent-the-wheel/
2025年5月24日
前段时间读到一篇文章《Reinvent the Wheel》,身为一位技术人颇有感触,以下是全文完整翻译:
最害人的建议之一就是“不要重新发明轮子”。
这个建议通常出于善意,但主要来自两类人:
- 那些试图自己发明轮子并知道它有多难的人
- 那些从未尝试过发明轮子并盲目听从他人建议的人
无论哪种立场,都会扼杀我们的好奇心和求知的氛围。庆幸的是有人未听从此建议,现代生活的诸多便利正是源自他们。
即使从字面意思上来说,这个建议也很糟糕:如今的轮子远比公元前 4500-3300 年发明的初代轮子先进得多。更重要的是,轮子在不同文明与文化中的反复被重新发明。
注:本文中“轮子”可替换为你个人感兴趣的任何工具、协议、服务、技术或其他被发明的东西。
发明轮子就是在学习
“What I cannot create, I do not understand”
——理查德·费曼,物理学家和诺贝尔奖得主
要真正理解事物的本质,你必须先能实现一个简化版本。无需追求完美,事后可以直接丢弃。
例如,在计算机科学中,有许多概念通常被认为超出了普通人的能力范围:协议、密码学、网络服务器等。
应该有更多人知道这些东西的运作原理。因此,我认为人们不该畏惧重新发明轮子。
一切皆是无底洞
很多时候,一些很基础的事情被认为是理所当然的。例如 strings
或 paths
在编程中实为极其复杂的概念。若想探究其原理,亲手实现字符串库或路径库是绝佳实践。
即使最终没有人使用你的作品,我敢打赌你会学到很多东西。例如:
- 日常事物存在无限的复杂性。
- 当作品被他人所用,你的谦逊感会油然而生。
- 这些抽象概念都是人搞出来的套路。它们本就不完美,你可在设计时作出不同权衡的取舍。
关于最后一点,一切都是权衡,每个简单的问题背后都藏着数十甚至数百处隐患。
在实践过程中,你终将围绕正确性、简洁性、功能性、可扩展性、性能、资源消耗、可移植性等维度作出决策。
你的方案或能在某些方面很棒,但不可能面面俱到,更无法满足所有用户。这也意味着现有方案存在缺陷,未必能解决你的特定问题,无论该方案多么成熟。
探索无底洞本身就很有趣,但更关键的是:这是工程师实现能力跃迁的少数路径之一…但前提是你必须坚持完成可运行的版本。若在项目间反复横跳,终将一无所获。
重新发明轮子的理由
重新发明轮子有充分的理由:
- 打造一个更好轮子(以某种“更优”作为标准)
- 了解车轮是如何制造的
- 授人以渔
- 了解轮子发明者的思想
- 掌握更换或修复轮子的能力
- 在此过程中学习制作轮子所需的工具
- 了解复杂系统(如车辆)的构建之道
- 帮助有特殊需求的对象(例如轮椅使用者)
谁知道呢?你创造的轮子或许不宜用于汽车,但可能适配…滑板或自行车?或许你没能造出一个更好的轮子,但却想出了一个更好的方法来测试轮子。哎呀,你的轮子甚至可能根本与运输无关!参考维基百科,它可能是陶轮,“一种将粘土塑造(称为抛掷)成圆形陶瓷器皿的机器”。你最终可能会构建一种完全不同类型的轮子,例如方向盘或飞轮。我们需要更多跳出思维枷锁思考的人。
复用 Vs 重新发明轮子
当然,不要忽视他人的工作成果——研究他们的作品,并在你认为合适的地方复用。切不可因不信任或无知而重新发明轮子。此外,如果你从未尝试过将你的知识付诸实践,你怎么能学到足够的知识来推进它呢?
据我观察,你可以通过运行最小原型来快速前进。尤其是在软件工程中,构建小型原型成本低廉且快速。解决自身问题,从小处着手,保持简洁,持续迭代。
所以,综上所述,我的建议是:
重构以求知,复用以成事。
原文完。
希望此文能对你有所启发。
延伸阅读
- Reinvent the Wheel:https://endler.dev/2025/reinvent-the-wheel/
- 本文永久地址:https://jianghushinian.cn/2025/06/14/reinvent-the-wheel/
联系我
- 公众号:Go编程世界
- 微信:jianghushinian
- 邮箱:jianghushinian007@outlook.com
- 博客:https://jianghushinian.cn
- GitHub:https://github.com/jianghushinian