重新发明轮子
最有害的建议之一就是不要重新发明轮子。
这句话通常出于好意,但往往出自两类人之口:
- 那些自己尝试过发明轮子、深知其艰难的人
- 那些从未尝试过发明轮子、只是盲目遵从这一建议的人
无论哪种情况,这两种态度都会导致一种压制好奇心与探索精神的氛围。我很庆幸有些人没有听从这个建议;现代生活的许多便利都要归功于他们。
即使从表面来看,这个建议也是糟糕的:与公元前4500至3300年第一个轮子被发明时相比,我们今天拥有好得多的轮子。轮子在不同文明和文化中得以被不断重新发明,这一点也至关重要。
注意:在本文中,每当我提到“轮子”时,请将其替换为你个人感兴趣的任何工具、协议、服务、技术或其他发明。
发明轮子就是学习
“我无法创造的东西,我就无法理解”
– Richard Feynman(理查德·费曼),物理学家、诺贝尔奖得主
要真正从根本上理解某样东西,你必须先能实现一个玩具版本。它好不好并不重要;之后你可以把它扔掉。
例如,在计算机科学中,有许多概念常被认为超出了普通人的能力范围:协议、密码学和 Web 服务器就是典型。
更多人应该了解这些东西是如何运作的。因此我认为人们不应该害怕去重新创造它们。
一切都是兔子洞
基础性的东西常常被视为理所当然。例如,在编程中,字符串或路径都是极其复杂的概念。如果你对它们的运作方式感兴趣,自己实现一个字符串或路径库会是一项很好的练习。
即使最终没有人使用你的成果,我敢说你也会学到很多。例如:
- 日常事物中蕴含着无限的复杂性。
- 做出哪怕只有一个他人觉得有用的东西,都是一次令人谦卑的经历。
- 这些抽象是由和你一样的人创造的。它们并不完美,你可以在自己的设计中做出不同的权衡。
关于最后一点,一切都是权衡,每一个玩具问题都存在几十个甚至上百个坑。
在此过程中,你将不得不就正确性、简洁性、功能性、可扩展性、性能、资源使用、可移植性等方面做出决策。
你的解决方案或许在其中某些方面表现出色,但不可能在所有方面都出色,也不可能适用于所有用户。这也意味着现有解决方案存在缺陷,可能并非为解决你的特定问题而设计;无论该方案看起来多么成熟。
钻兔子洞本身就很有趣,但还有另一个好处:这是作为工程师提升水平的少数途径之一……但前提是在做出你所探索事物的可用版本之前不要放弃。如果你过于频繁地在项目之间跳来跳去,你将一无所获。
重新发明轮子的理由
重新发明轮子有很多很好的理由:
- 打造一个更好的轮子(以某种“更好”的定义而言)
- 学习轮子是如何制造的
- 教他人了解轮子
- 了解轮子的发明者
- 能够在轮子出问题时更换或修理它们
- 在此过程中学习制造轮子所需的工具
- 了解构建更大系统(比如车辆)意味着什么的一小部分
- 帮助某个需要非常特殊的轮子的人。也许是为轮椅?
谁知道呢?你想出的轮子也许并不最适合汽车,但也许适合……滑板或自行车?或者你没能造出更好的轮子,却在过程中想出了更好的轮子测试方法。嘿,你的轮子甚至可能根本不是用于交通的!它可能是一个陶轮,“一种用于将黏土塑形(称为拉坯)成圆形陶瓷器的机器”据维基百科介绍。你最终可能会造出一种完全不同类型的轮子,比如方向盘或飞轮。我们需要更多跳出固有思维的人。
复用 vs 重新发明
当然,不要忽视他人的成果——学习他们的成果,并在合适的地方加以复用。不要出于对他人成果的不信任或无知而重新发明轮子。另一方面,如果你从未尝试检验自己的知识,又如何能对自己的领域了解得足够深入以推动其发展呢?
我观察到,通过进行一些小实验,你可以进展得非常快。尤其是在软件工程中,构建小型原型既便宜又快捷。解决你自己的问题,从小处着手,保持简单,不断迭代。
所以,综合以上所有,我的建议是:
为洞见而重造,为影响而复用。
随机一篇博客