type
status
date
slug
summary
tags
category
icon
password
original_link

为何说“不要重复发明轮子”有害?

作者指出,这条建议通常出自尝试过或盲从的人。它打击了好奇心和探索精神。回顾历史,人类正因不断Reinvent the wheel才有了今天的便利。即使是表面上简单的“轮子”,今天的版本也远超4500-3300 BCE的原始形态。在本文中,“轮子”代指任何你感兴趣的工具、协议 (protocol)、服务、技术或其他发明。

发明即学习

引用物理学家Richard Feynman的话:“What I cannot create, I do not understand”(我无法创造的,我就不理解)。作者认为,要真正理解一个基本概念,需要尝试实现一个玩具版本。特别是在Computer Science领域,protocols, cryptography, web servers等概念并非遥不可及,更多人应该了解其工作原理,并通过Recreate它们来学习。

万物皆是“兔子洞”

许多基础概念常被视为理所当然,例如编程中的strings或paths,它们实际上非常复杂。尝试自己实现一个library是理解它们工作原理的绝佳练习。即使成果无人使用,也能学到:日常事物隐含着无限复杂性;构建对他人有用的东西是谦卑的体验;人类创造了这些抽象,它们并非完美,你可以做出不同的权衡。每个玩具问题都有潜在的“陷阱”(footguns)。你需要权衡correctness, simplicity, functionality, scalability, performance, resource usage, portability等。现有方案有其缺陷,可能不适合你的特定问题。深入探索 (Going down rabbit holes) 是工程师升级的方式之一,但前提是坚持到底,避免频繁跳跃项目。

重复发明的理由

重复发明“轮子”有许多充分理由:构建更好的版本;学习制造过程;教学;了解发明者;提升修改或修复能力;学习相关工具;理解大型系统 (如vehicle) 的一小部分构建过程;帮助需要特殊“轮子”的人 (如wheelchair)。你的“轮子”也许不适用于car,但可能适用于skateboard或bike,或者你在过程中发明了更好的测试方法。它甚至可能不是用于transportation,而是potter’s wheel或steering wheel, flywheel。我们需要更多跳出思维定式的人。

Reinvent vs Reuse

当然,不应无视他人的工作,要学习并适时reuse。但如果从未实践检验知识,又如何能在领域内取得进展?通过小实验 (little experiments) 可以快速推进。尤其在software engineering中,构建小型prototypes成本低且快速。建议:Reinvent for insight. Reuse for impact。解决自身问题,从小处着手,保持简单,持续迭代。
面向 Senior+ 工程师的 LLM Peer Programming如何在 Proxmox 上安装 Windows NT 4 Server
Loading...