`
sd6733531
  • 浏览: 66467 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

论要不要重复造轮子

阅读更多

    在程序界有一句话很流行,不要重复造轮子。然而,这句话被滥用了。已经渐渐沦为程序员懒惰的借口。甚至因此而盲目指责那些勤奋的人。
    大多数情况下初学者很难分清楚自己是不是在重复造轮子。当我头一次听到这句忠告的时候,我变得异常敏感,在做什么之前都要判断一下是否在造轮子。我跟大多数普通人一样,容易受到他人只言片语的不良影响。事实上很多时候,避免造轮子并不是我的首要目标。我的目标是完成一项任务,任务完成的速度要尽量快,质量要尽量好。而不是去判断自己在不在造轮子。
    使用他人的现成轮子是实现快速任务的一项捷径。然而,并不总是这样子的。重复造轮子的正面是另外一句行话:吃自己的狗食。在涉及到关键技术点的地方,依赖他人的轮子容易造成高风险。高风险的原因在于:第一、它不是你写的。凭借注释和教程获得支持很有限,当需要功能拓展或者定制时,用起这个初期看起来很好的轮子反而变得碍手碍脚了。第二、当依赖轮子程度比较高的时候,那么它容易限制自己的思维。有些功能用轮子很难拓展,我们会推脱说轮子产生限制。反而不去思考这些功能的提出是否合理。第三、轮子可能是个一次性产品,轮子的开发者不愿再花时间维护。轮子不能与时俱进,那么就会被淘汰。因此你的产品也会遭到淘汰。“吃自己的狗食”的优势便是上述情况的反义。善于吃狗食的人,并不满足应用轮子做事,他们也会乐于阅读不同轮子的源码。去粗取精,博采众长。最终写出属于自己的锋利轮子,达到期望的目标。
    除了在关键技术点尽量不要使用他人的轮子。还有重要一点,那就是不要被“重复造轮子”这句话吓怕了。windows有现成的记事本和扫雷,但是每年还是有成千上万的大学生乐此不疲的编写记事本和扫雷程序。更有喜欢折腾的人尝试自己实现红白机上的经典游戏。实践是最好的老师,学生们并不是在重复造轮子,而是以提高为自己的目的。许多开源项目的初始目的并不只是为了做出一件产品,而是为了学习。高手们都明白实践出真知的道理,只是他们实践的技术含量更高而已。所以,千万不要被轮子吓怕,更不要以“轮子”为借口拒绝学习成长。
    上面我说了滥用重复造轮子的几个情况以及他们的危害。现在我想将自己的一点小小心得介绍出来——到底什么时候不要重复造轮子?
    若我有天想去九寨沟旅游,我想要选择租车自驾游,我肯定不需要关心汽车是怎么工作的。汽车对我来说只是个工具,因为我的目标是旅游。情景发生转变时,一切就变得不一样了。假如我是个汽车设计师,我想测试汽车在九寨沟的山路上能否平稳驾驶。那么我不该关心九寨沟的旅游景点有哪些,而应该关心汽车的内部构成怎样,有没有问题,能否改进。
当使用轮子是为了达成一个日常任务,或是以一个工具形态出现的时候。那么请不要重复造轮子,除非为了学习目的。我常常督促自己多多学习一些shell命令,这样可以避免自己写出一堆轮子脚本。同样的,当我有个新奇想法的时候。我常常会上网搜索有没有朋友已经实现,若有的话直接使用现成的轮子即可。如果没有,那么我只有亲力而为,自己去实现。
    有时候我会突然兴冲冲的充满野心。用数据库用的很不爽,不是说“吃自己的狗食”吗?那么把它写出来吧!当然最后一筹莫展,因为这对我来说太难了。也许我花上三五年时间都没法彻底搞懂。同样的还有写个操作系统、写个语言。这些东西也许最佳应亲力而为,但如果它对于自己来说过于复杂,那么就用它吧。因为这别无选择。优秀的程序员不会乐于被这些困难的东西牵着鼻子走,他们会尝试消化并改善它们。
    除了遇见这些困难的东西,有时候还会碰到一些并不困难但是很占时间的东西。没有必要盲目开工写这些占时间的东西。在仔细分析已有的几种轮子后可以直接选择其中最优秀的,在它不能合适工作的时候就大刀阔斧的修改它。这其中的关键之处在于你明白轮子工作的原理,如果愿意,只要花上几个月的时间,你能重新写出一个来。
    市面上有很多同类产品。明明有肯德基,为什么还出来麦当劳、李先生之类的。有时我会为开发产品的“山寨”而耿耿于怀,这无疑是重复造轮子的行为。别人已经有了,为什么我还要做?几乎同样的逻辑,为什么要重复实现一遍?这的确是重复造轮子,但是这是必要的。原因有:1.虽然产品形态和使用技术类似,但是后台的资源是不同的。用户需要不同的轮子,这样可以使市场有活力。肯德基和麦当劳虽然都是快餐店,经营方式和食品类型也差不多。但总有些微差异,而正是这份差异带来了活力。2.平台化、纵向发展。TX老是被网民骂抄袭,但是似乎越骂用户量反而越高了。因为TX造轮子有深厚的商业目的,它希望做出一个整合一切的平台。统一的平台给资源聚合带来了巨大的好处,用户也会变得更加喜欢用这个简单好用的整合平台。这种造轮子行为从这个角度上说是非常有利的。

1
3
分享到:
评论
2 楼 Qiluoao 2015-05-03  
天马~~~
1 楼 Technoboy 2011-11-11  
coding要有自己的见解。不看轮子看coding

相关推荐

    计算机毕业设计的模板及参考论文。。

    同时,参考他人的工作可以激发创新思维,避免重复造轮子,提高你的学习效率。记住,毕业设计不仅是技术的检验,更是团队协作、时间管理和项目管理能力的锻炼,因此,每一步都要认真对待,尽可能地提升自己的全面素质...

    2023年美国大学生数学建模竞赛资料A题思路资料 参考文章+代码+论文+思路分析

    通过查看他人提供的代码,参赛者可以学习到如何高效地运用编程语言,如Python或Matlab,来解决复杂问题,同时也可以避免重复造轮子,节省宝贵的时间。 论文部分则提供了前人对类似问题的研究成果,它们可能是解决...

    毕业设计的概要介绍与分析

    3. **开源软件与代码库**:GitHub、GitLab等平台上丰富的开源项目和代码库,如TensorFlow、PyTorch、scikit-learn等,可直接应用于项目开发,减少重复造轮子,提升开发效率。 4. **专业社区与论坛**:Stack ...

    VB高校缴费系统设计(论文+源代码+外文翻译+文献综述).zip

    通过对比分析,开发者可以明确自己项目的创新点,避免重复造轮子,同时也能借鉴前人的经验,提高系统的实用性和可靠性。 总的来说,这个VB高校缴费系统设计项目不仅提供了实际的软件产品,还为学习者提供了一整套的...

    ASP网上视频点播系统(源代码+论文+开题报告).zip

    ASP网上视频点播系统是一种基于ASP(Active Server Pages)技术构建的在线流媒体服务,它允许用户通过互联网浏览、选择...同时,这也为其他开发者提供了一个可参考的案例,帮助他们在构建类似的系统时避免重复造轮子。

    美国大学生数学建模竞赛经验心得

    此外,学会借鉴前人的研究成果,避免重复造轮子,也是提高效率的有效途径。 在具体的比赛过程中,我们注重论文的质量,包括清晰的逻辑结构、准确的数据分析以及美观的图表展示。我们利用Echarts等工具绘制图表,...

    计算机软件毕业设计_WEB在线直销商城(论文+源代码+文献综述+外文翻译)_计算机毕业设计源代码.rar

    文献综述和外文翻译部分则体现了对现有研究和技术的了解和应用,这有助于开发者避免重复造轮子,借鉴和学习成熟的设计理念和解决方案。 此外,论文撰写是毕业设计的重要组成部分,它要求学生详细阐述系统的功能、...

    ASP+ACCESS企业人力资源管理系统的设计(源代码+论文).rar

    同时,这也为其他开发者提供了一个学习和参考的实例,帮助他们在类似项目中避免重复造轮子,提高开发效率。 总的来说,这个《ASP+ACCESS企业人力资源管理系统的设计》不仅是一个实用的工具,也是学习Web开发和...

    毕业论文设计-IT计算机-VB高校缴费系统设计(论文+源代码+翻译+文献综述).zip

    这有助于作者理解最新的技术趋势,避免重复造轮子,并确保系统的先进性。 文献综述则汇集了关于高校缴费系统、在线支付技术、VB编程等相关领域的研究文献,通过对比分析,展示本项目在现有研究基础上的创新点和改进...

    C++物流管理系统(功能结构图+源代码+论文参考文献)

    它们可能涵盖物流管理的理论模型、C++编程的最佳实践、系统架构设计原则等多个方面,帮助开发者站在巨人的肩膀上,避免重复造轮子。 五、系统测试与优化 开发完成后,需对系统进行全面的功能测试和性能测试,确保其...

    数学建模优秀论文集

    同时,对于那些准备参加数学建模竞赛的人来说,这些论文是极好的参考资料,可以借鉴他人的思路,避免重复造轮子,提高自己的竞争力。 总而言之,《数学建模优秀论文集》不仅是对过去十年间国赛优秀成果的回顾,也是...

    VB语言vb图书销售信息系统(源代码+论文)

    此外,参考成熟的项目源代码还可以加快新项目的开发进度,避免重复造轮子。 #### 知识点六:毕业设计的意义 毕业设计是大学生完成学业的重要环节之一,它不仅是对学生专业知识和实践能力的一次综合检验,也是学生...

    Java毕业设计参考文献

    每个文档可能对应一个或多个毕业设计的主题,通过阅读和学习,学生可以借鉴别人的思路,避免重复造轮子,同时也能提高自己的分析和解决问题的能力。 总的来说,"Java毕业设计参考文献"压缩包是一个集理论与实践于...

    大学毕业论文-—开源技术struts、spring、hibernate在mis开发中的应用研究.doc

    1. **提高开发效率**: 通过使用这些成熟框架,开发者可以避免重复造轮子,减少代码量,提高开发速度。 2. **模块化设计**: MVC模式和依赖注入使得系统设计更加模块化,易于扩展和维护。 3. **数据库独立性**: ...

    基于php技术对学院网站的开发—-毕业论文设计.doc

    - PHP手册:提倡开发者充分利用PHP官方手册,避免重复造轮子,优化开发过程。 5. 教育策略 - 用户细分:通过对用户需求的分析和细分,定制针对性的服务,提高用户“利润率”。 - 市场定位:强调通过差异化服务来...

    PyPI 官网下载 | 12factor_vault-0.1.13-py3-none-any.whl

    它体现了Python生态系统的强大之处,即丰富的第三方库和便捷的工具,使得开发者能够专注于创新,而不是重复造轮子。 在实际项目中,开发者应当仔细阅读12factor_vault的官方文档,了解其详细功能、使用方法以及最佳...

    java进销存管理系统(jsp+mssql)_modified.zip

    "节省时间,提高效率"和"学习借鉴的好东西"则强调了这套资源对于开发者在进行类似项目时的价值,可以快速理解和复用,从而避免重复造轮子。 【标签】中,"毕业设计"和"毕业论文"暗示这可能是一个学生项目,适合用作...

Global site tag (gtag.js) - Google Analytics