“Stop Trying to Reinvent the Wheel(不要重复造轮子 )”, 可能是每个程序员入行被告知的第一条准则。在公司里面,我也会对团队里面每个新进的成员反复灌输这个理念。但要真正做到这一点也非易事。

寻找轮子

所谓“轮子”可以理解为行业里面的技术解决方案。特别是当今开源社区的盛行,开源软件以及开源技术方案层出不穷,这为寻找轮子提供了丰富的途径。

避免重复造轮子

一个轮子能够个被复用,体现了软件的复用性。

使用轮子,本身就是“站在巨人的肩膀上”,最大化享受当今技术所带来的便利,避免了从零开始开发的繁琐以及复杂,有效降低成本。

以ORM框架为例,在Java邻域,真正做到强大的唯有Hibernate几家,一方面,开发如何自己来实现ORM在技术有一定的难度,另一方面,开发自己的ORM需要很多的人力以及技术投入,一般的小公司根本没有能力来做这方面的研发。

以 GNU/Linux 操作系统为例,如果不是 Linux 作为操作系统内核,提供给了 GNU 计划,那么 GNU 也许不知道要延迟多少年才能推出自己的操作系统;另一方面,GNU 计划,提供了很多 GNU/Linux 操作系统的生态软件,让 GNU/Linux 操作系统更为普通用户所接受。

轮子难找

因为选择很多,所以很难选。目前,软件行业空前发展,以分布式消息服务框架,光开源的产品就有很多,包括Apache ActiveMQ、RabbitMQ、Apache Kafka、Apache RocketMQ等。这就对个人的信息检索能力有非常高的要求。同时,也正因为有很多选择性,这也对用户各种技术要有一定的了解,各种技术的优缺点要了如指掌,才能做出合理的选择。这对于用户的技术要有很高的要求。老卫的《分布式系统常用技术及案例分析》一书,为开发者提供了非常好的选择依据。

其次,这个轮子好不好用,需要时间来论证。不能一眼就判断出一个项目的质量以及易用性,这其实需要大量项目经验的积累。即便做出了选择,也需要一定的时间来验证合理性。毕竟项目很多问题,只能在运行中才能体现出来。

最后一点是,好轮子需要打磨。要想将一个开源项目成功整合到自己的项目中,需要对这个项目有比较深入的了解。大部分的开源项目的文档质量参差不齐,当使用轮子时,只看文档往往是不够的,还需要阅读源代码甚至深度修改定制。即便集成到了自己的项目中,也可能需要不断的进行修正调优以符合自己项目的实际。

掌握IT技能的“复制-粘贴-改”

合理复用现有的好轮子,以最大化降低开发项目的成本。如果说,轮子代表了框架级别的可复用的项目,那么“复制-粘贴-改”则是更加精细颗粒度的代码层次的复用。

很多开发者都很鄙视“复制-粘贴-改”,认为所有的代码必须要从0开始敲出来才能真正牛人。这其实有失偏驳。比如,开发人员C君在A项目里面写了一段方法,经历住了上线的压力,目前也在线上能够稳定运行。那么如果项目B也需要同样功能的方法,C君有必要再从头去敲一遍代码呢?为什么不直接“复制-粘贴”,除非有特殊的需求或者有对该方法的更好的改进,那么大胆的“复制-粘贴-改”即可。或者将该方法重构出来,放到项目A和B共享的公用项目里面不是很好?从头敲一遍已有的代码,除了增加自己的敲错的机率意外,实在不知道还有什么好处。当然,可能锻炼了打字速度。

也掌握“复制-粘贴-改”的技能,最难是要做到“改”这一点,因为这一点做不好就是抄袭了。以前,老是说腾讯的软件大多数模仿云云,但恰恰是人家“改”的功能出神入化,时间证明了,那些曾经被腾讯模拟的公司、项目,要不死了要不半死不活,而腾讯却稳坐大佬的位置,可见“改”功的重要性。

很多配置文件,其实能少打就不打。比如 Maven 的 pom 文件坐标,你想要什么类库直接上中央仓库去查找并“复制-粘贴-改”下即可,实现是没有必要手打,打错了XML也不会给你提示哦。

真实案例

理解了复用了轮子的理论重要性,我们来看下真实的案例。

据统计,Google 有软件工程师平均一天写 100 ~ 150 行代码,而且已经算是业界高效的了。这从侧面反馈了,写代码并不是一天中工作的重心,高效的工程师更加注重于花时间在代码的思考上面。

当然,这种开发方式也不是见得为所有的开发者所接受。正如开篇所讲的,热衷于重复造论的人还是不少。

参考引用:

  • 《分布式系统常用技术及案例分析》:GitHub - waylau/distributed-systems-technologies-and-cases-analysis: 《分布式系统常用技术及案例分析》示例源码
  • 《基于Spring Boot的博客系统实战》:基于SpringBoot技术栈的博客系统企业级实战-慕课网实战
  • 原文同步至掌握“复制-粘贴-改”的IT技能 | 老卫(柳伟卫)的博客 - 关注编程、系统架构、性能优化 | waylau.com

不要重复造轮子 Stop Trying to Reinvent the Wheel相关推荐

  1. 程序员到底要不要重复造轮子?

    分享一波:程序员赚外快-必看的巅峰干货 关于这个话题,现在这里阐述立场:就公司工作而言,不建议重复造轮子.就个人技术而言,强烈建议造轮子! 程序员圈子里流行这么一句话:"不要重复造轮子&qu ...

  2. 重复造轮子,对此你的看法

    关于这个话题,现在这里阐述立场:就公司工作而言,不建议重复造轮子.就个人技术而言,强烈建议造轮子! 程序员圈子里流行这么一句话:"不要重复造轮子".它的原文是:"Stop ...

  3. 不是“重复”造轮子,百度飞桨框架2.0如何俘获人心

    2016 年,百度 PaddlePaddle 打响了国产深度学习框架开源的第一枪. 2019 年 4 月,在 Wave Summit 深度学习开发者峰会上,首次发布了PaddlePaddle 的中文名 ...

  4. Spring Boot并不重复“造轮子”

    2.1 Spring Boot简介 Spring Boot是由Pivotal团队提供的基于Spring的全新框架,其设计目的是简化Spring应用的搭建和开发过程.该框架遵循"约定大于配置& ...

  5. 不再重复造轮子,AI 给你推荐更好的代码,还没bug

    2020-09-18 14:47 导语:还在抠bug抠到怀疑人生? 作者 | 青 暮 编辑 | 丛 末 程序员的的代码大部分都不是如同写书法那般一挥而就,而需要反复地抠bug,抠到怀疑人生. 剑桥大学 ...

  6. 51年被发现9次,陶哲轩证明的公式成了重复造轮子?事情并没有这么简单

    晓查 栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI 在科学探索的过程中,"重复造轮子"从来就不新鲜. 最知名如牛顿和莱布尼茨,各自独立发明了微积分:而计算机领域,也 ...

  7. 还在重复造轮子?Java开发人员必知必会的20种常用类库和API

    介绍 一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车.<Effective Java>的作者Joshua Bloch曾经说过:"建议使用现有的API来开发,而不 ...

  8. 造轮子是什么意思_程序员发文质疑阿里天启为kpi项目,重复造轮子,阿里回应:诽谤...

    前言: 曹丕在<典论·论文>中说到,"文人相轻,自古而然".中国自古就有文人相轻的传统,文人相轻真没有什么要紧的,就像是小夫妻似的斗斗气拌拌嘴,然后还可以理直气壮地拿稿 ...

  9. 校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了

    以下文章来源于Python大数据分析 ,作者费弗里 1 简介 在使用Python.R等完成日常任务的过程中,可能会经常书写同样或模式相近的同一段代码,譬如每次使用matplotlib绘制图像的时候可以 ...

最新文章

  1. win10+Chrome浏览器截长图方法
  2. Base64实现图片的编码和解码
  3. UML作业第一次:UML用例图绘制
  4. 【Linux 内核】进程管理 task_struct 结构体 ② ( state 字段 | stack 字段 | pid 字段 | tgid 字段 | pid_links 字段 )
  5. iPhoneX适配随笔
  6. 虚拟机添加串口设备方法
  7. 报错:selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This versio
  8. Codeigniter 4.0-dev 版源码学习笔记之四——详细路由过程
  9. Map.Entry如何使用?
  10. Intellij Idea下tomcat设置自动编译
  11. 2个flask服务器通信_nginx+uwsgi+flask环境部署
  12. Linq-查询上一条下一条
  13. Python 算法设计(2) - 大数运算 - 基于字符串的数字运算和进位
  14. 机器学习算法工程师--实习面经
  15. firefox 各个版本都在这里
  16. 解决javax.persistence.EntityNotFoundException: Unable to find
  17. 人工智能与商业智能,区别、定位与联系
  18. 2022北京工业互联网安全大赛初赛-wakeup
  19. java实现正六面体染色
  20. 万花哥特体繁黑执事中文字体_50多种免费的高质量哥特式和恐怖字体

热门文章

  1. 计算机专业英语复习第七天
  2. 【Java学习整理】2021最新版 Eclipse下载+安装+页面介绍+常见问题解答+查看源码+常用快捷键+Debug调试(详细)
  3. 安装ubuntu 16.04 + ppa安装NVIDIA显卡驱动
  4. IDEA生成sql逆向工程
  5. TestNG框架学习
  6. Excel导入数据轻松生成智能图表,助力数据分析
  7. Python程序员搞副业兼职,一月赚7800元小意思,每天只花了两小时
  8. pythonrst怎么设置_使用rst2pdf实现将sphinx生成PDF
  9. 数据库测试需要重点关注的16个测试点
  10. Android程序员必备!海量算法高频面试题精编解析,真香