仅使用已存在的事物——就是在重新发明轮子…
你是否时常听到这种或类似的声音?确定你有!每个开发者或学生都会经常听到类似的评论。为什么呢?为什么重新发明轮子就这么愁眉不展?因为,很多时候,现有的代码是有效的。它已经通过了某种质量控制和严格的测试,并被成功地应用。此外,相较于使用现有的产品或代码库,把时间和精力投入到重新发明是不大可能有回报的。你还应该重新发明轮子么?为什么?什么时候?
或许你看过一些有关软件开发模式的刊物或软件设计书籍。先让这些书去睡觉吧,不管它们包含了多么精彩的内容。观看航海电影和真的去航海是非常不同的,正如使用现有代码对应了从头设计一个属于自己的软件,(需要)测试它、破坏它、修复它,然后逐步完善它。
重新发明轮子并不仅仅是代码从哪构建的练习:它是为了充分了解现有不同组件的内部工作原理。你知道内存管理机制?虚拟页呢?你能自己实现这些吗?什么是双向链表?动态数组类?ODBC客户端?你能写出一个你喜欢的流行图形界面吗?你会创建属于自己的web浏览器插件吗?你知道何时写一个多线程系统与多线程本身?如何决定使用文件数据库还是内存数据库呢?
大部分开发者根本没有自己创造过这些核心软件实现的类型,对其如何工作的也未必了然于胸。其结果就是这类软件看起来不过是个会运行的神秘黑盒。浅尝辄止是看不到潜藏在下方的危险的。不更生层次的了解软件开发将限制你创造出色作品的能力。
重新发明轮子并碰壁要比一用到底更有价值。通过试错学到的教训会有感性的成分,是阅读技术书籍无法给予的。
学习书本和实践至关重要,但要成为一个伟大的程序员则更多的要从实践中总结经验。重新发明轮子对开发者的教育和技能,就如同健身队举重运动员一样重要。