程序员为什么热衷造轮子?

搜索一下“造轮子”或者“程序员为什么喜欢造轮子”,会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年。不过还是有再谈的必要。

“造轮子”的含义:

明知道你做的不可能比前辈做得更好,却仍然坚持要做。

就软件开发而言,“造轮子”是指,“业界已经有公认的软件或者库了,却还坚持要自己做”。

在软件开发过程中,有时你想造轮子老板却极力反对,有时你不想造轮子老板却坚持要造一个出来,为什么会有这种两极状况?

这篇文章就来讨论“造轮子”这件事,包括下列主题:

  • 程序员为什么会重复造轮子
  • 为什么有人不让“造轮子”
  • 什么时候可以造轮子

为什么会重复造轮子?

  • 每个造轮子的程序员都有自己“不得不造”的理由。比如:
  • 以为自己的需求独一无二,现有的库就是在某个点上满足不了
  • 老轮子没有规格说明书,或者接口太复杂,不知道怎么用,搞明白太难
  • 需要在老轮子上添加新功能,然而老轮子代码难读无人可问,不知道何时能弄明白,看不到结果,容易放弃
  • 眼界有限,不知道已有这样的轮子
  • 版权原因无法使用第三方库,比如Google Android实现JVM(Google曾因为一行代码而和Oracle打官司),比如阿里YunOS自己实现JVM
  • 就想锻炼自己,因为造轮子对自己的设计、编码能力有很大好处,对理解业务也有很大好处
  • 自己造轮子,有“控制感”,看得见摸的着,可以一步一步来,一个一个小目标迭代出大目标,不断成功的小激励,会带给自己前行的动力
  • 创新成分多(对自己而言),有成就感
  • 不相信老轮子,譬如老轮子可能有后门、漏洞(想想OpenSSL的心脏出血漏洞)、后期万一要修改没把握等,反正是觉得自己造轮子心里更踏实
  • 不想让自己产品的关键技术掌握在别人手里,也不想让自己的核心用户数据流经别人的系统
  • 别人的轮子不开放,我就是要赶紧造(山寨)一个出来以便获得话语权或商业利益

为什么有人不让“造轮子”

有坚持要造轮子的,也有高呼“不要重复造轮子”的。那为什么有人不让造轮子呢?

  • 项目(产品)时间紧张,用第三方库搭积木快,能节约时间
  • 领导上(或队友)认为想造轮子的程序员水平就那样,不可能造出比现有库(软件)更好的轮子,显然会漏洞百出推高维护成本
  • 造轮子是个看上去很美做起来很操蛋的事儿。复杂一点的轮子,造出来很费劲,道阻且长,很可能骑虎难下或半途而废,导致精力和时间的浪费
  • 待造的轮子不是产品的关键(比如一个字符串类、一个XML解析类),不属于核心竞争力,不值得花费人力,要把精力放在最重要的事情上

结合为什么要造轮子以及为什么不让造轮子,就可以理解本文一开始提到的那种反差极大的状况。

什么样的轮子可以重新造?

看现在的软件发展趋势,越来越多的基础服务能够“开箱即用”、“拿来用就好”,越来越多的新软件可以通过组合已有类库、服务以搭积木的方式完成。这是趋势,将来不懂开发语言的人都可以通过利用现有软件组件快速构建出能解决实际问题的软件产品。

在这种趋势下,软件(服务)就慢慢演化为两极:

  • 满足终端用户的应用类产品
  • 解决软件产品通用问题的基础服务(组件)

比如你在自己的App中需要即时通信功能,完全可以使用融云、环信、网易云信等服务快速集成。

比如你想在自己的App中添加支付功能,完全可以使用Ping++或Pay++来解决诸多支付渠道的集成问题。

比如你想添加分享功能,ShareSDK、友盟SDK可以节省你很多时间。

比如你想做跨平台的游戏,使用Cocos2d-x远比自己在Android、iOS上从底层从OpenGL ES干起要高效得多。

比如你想让你的网站支持更多用户更多并发,能够快速部署、迁移、规模复制,那完全可以借助阿里云、AWS、Azure等而没必要自己搞。

比如你想推送消息给用户,就可以用腾讯信鸽、极光、个推、百度云推送、友盟等。

……

类似的场景很多很多。这种趋势使得一部分厂商集中精力开发基础服务(组件),一部分企业集中精力解决用户需求。对基础服务(组件)厂商来讲,他通过解决更复杂的基础问题为其他厂商带来便利而盈利。对终端软件产品企业来讲,他通过解决用户问题给用户创造价值而盈利,从理论上讲,只要其产品从用户端或第三方获取的价值大于支出给基础服务厂商的价值,生意就可以做下去。

有了这样的认识,什么样时候可以造轮子什么时候最好不重复造轮子就不再是问题了。

对于提供基础服务的软件厂商,很多轮子必须造。因为他要提供服务给其他软件厂商,你拿友商的组件换个包装提供给其他软件厂商,没有竞争力。所以你看到在某个软件服务市场上,会有多家企业各自在造轮子,为的就是自己掌握核心科技有自己的竞争力。比如提供云服务的,有阿里,七牛,百度……比如提供即时通信服务的,有融云、环信、阿里云信……比如提供语音服务的,有科大讯飞、百度、OKVoice、Google、微软……

对于开发满足终端用户的应用类产品的公司,很多轮子就没必要造。比如你提供一个健身类的App,可能需要引入即时通信功能,用第三就好了。

从公司的角度讲是这个样子,那对程序员来讲呢?

对程序员来讲,在一开始的学习成长阶段,造轮子则具有特殊的学习意义,学习别人怎么造,了解内部机理,自己造造看,这是非常好的锻炼。每次学习新技术都可以用这种方式来练习。

当我们掌握了一门技术,可以用于实际产品开发中时,关于造轮子,就有了另外的划分:

一些基础的工具类库,比如String,比如Xml,比如Json,比如Http,比如推送,比如流媒体协议,重新造的必要性不大。而与业务相关的,可以尝试重构、再造,对理解业务有好处,也能更好适应新需求。

时间: 2024-10-08 13:01:55

程序员为什么热衷造轮子?的相关文章

程序员为什么热衷造轮子

搜索一下"造轮子"或者"程序员为什么喜欢造轮子",会看到很多相关的讨论,这是个老生常谈的话题,很多人谈过了,谈了很多年.不过还是有再谈的必要. "造轮子"的含义: 明知道你做的不可能比前辈做得更好,却仍然坚持要做. 就软件开发而言,"造轮子"是指,"业界已经有公认的软件或者库了,却还坚持要自己做". 在软件开发过程中,有时你想造轮子老板却极力反对,有时你不想造轮子老板却坚持要造一个出来,为什么会有这种两极状

[zz]论程序员

g9老大多年前的趣文: 论程序员 根据钱钟书先生的<论文人>胡改的.聊搏一笑,文责不负.程序员是可嘉奖的,因为他虚心,知道上进,并不拿身分,并不安本分.真的,程序员对于自己,有时比旁人对于他还看得轻贱:他只恨自己是个程序员,并且不惜费话.费力.费时.费纸来证明他不愿意做程序员.不满意做程序员,在这个年头儿,这还算不得识时物的俊杰么? 所谓程序员也者,照理应该指一切写代码.维护代码.设计软件的人说.但是,在事实上,程序员一个名词的应用只限于为公司编写软件之类的作者,今人所谓“IT蓝领”.“写码猴

【小程序】实现复用及造轮子入门

?小程序实现可以通过 template 和 component 两种方式实现代码的复用,以减少不必要的工作量.template 被官方称为模块,在 xml 和 css 中定义代码片段,然后可以在其他页面使用,事实上,template 像是复制粘贴的另一种形式,只是把复制粘贴的操作使用<template> 标签来代替,减少了页面的简洁程度,方便维护(有点像 android 中的 <include> ).比起template, component 实现的自定义组件,可以进行自己的逻辑处

你假装自己有女朋友,但是程序员用Python自己造了一个女朋

520这一天,也是网络情人节.就在那天,如果没有女朋友的自己,如何假装自己是有朋友的!如何在朋友圈"秀恩爱" 虽然520过去了,但是小编在这里收集了很多"秀恩爱"的姿势,等到七夕如果你还是一个人的话,那么就有用了,不过小编还是祝你早日找到他(她) 女生版: 很有感觉有木有~~ 男生版: 其实这些都是小意思啦~~ 这些都是假装自己有女朋友/男朋友 那么程序员是如何"秀恩爱"呢? 那么今天就用Python制作一个"女朋友". 运行

(转)新手程序员最常用的十大网站

刚开始入行的程序员很多很迷惘,不知道去哪里找到合适有用的资源,哪里有和自己一样的新手,哪里有高手,哪有有代码可以学习. 我将分享一些收藏多年且非常有价值的网站跟大家分享. 1. Google https://www.google.com/ 不是你不知道,而是你不善用google,使用google有非常多的技巧,可以网上搜索google搜索技巧. 2.Stackoverflow http://stackoverflow.com/ 程序员问答网站,有任何问题都可以提出来或者搜索答案,要一定英文基础.

程序员Web面试之前端框架等知识

基于前面2篇博客: 程序员Web面试之jQuery 程序员Web面试之JSON 您已经可以顺利进入Web开发的大门. 但是要动手干,还需要了解一些已有的前端框架.UI套件,即要站在巨人肩膀上而不是从轮子开始造汽车. 下面就Web开发用到的前端框架.UI套件.UI插件一一列举(排名不分先后): jQuery UI jQuery UI以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件.包含了许多维持状态的小部件(Widget)

杂谈:关于程序员职业发展的两三事

首先一首音乐送给大家,祝大家能够突破自我. 好吧并不让插入flash ,那么直接贴网址吧 https://www.bilibili.com/video/av1286380/index_134.html 每个人都会有错误,但是要从细节中找寻自己的错误. 对于程序员来说,错误要么就是很容易就找到,要么就非常隐蔽. 首先就是发生在我自己身上的事,公司周五下午有一个职场礼仪培训,然后老师让我总结内容,我立刻尴尬,说话结巴和忘词了,当着全公司面出丑.... 好吧,虽然现在想起来还是很尴尬,但是作为程序员一

我们为什么喜欢重新造轮子

不要重新造轮子,是英文don't re invite wheel的直译.什么是轮子呢,我们一般认为一个通用中间件或框架,和实际业务没有直接关系的代码,就是轮子.这些代码虽然不是实质的业务逻辑,但是在一个项目中往往是担当骨架的作用. 程序员新手的眼中,这些代码就是经验的象征.在很多项目组中,只有经验丰富的老程序员才有机会去设计和选择这些轮子.可以设计可重用的干货代码,也就成为很多对技术有追求的程序员的努力方向.有几年工作经验,在技术上寻求发展的程序员大多都会自己设计和实现一些经典的轮子,这也成为了

有哪些老鸟程序员知道而新手不知道的小技巧?来源:知乎

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:大狐狸链接:https://www.zhihu.com/question/36426051/answer/76031743来源:知乎 本来只是分享几条看法,没想到会有这么多人喜欢.我再补充一些,希望能对进阶中的程序朋友有帮助.手机敲得,比较凌乱.作为个人意见仅供参考. 1.重构是程序员的主力技能. 2.工作日志能提升脑容量. 3.先用profiler调查,才有脸谈优化. 4.注释贵精不贵多.杜绝大姨妈般的“例注”.漫山遍野