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