问题

外界人总爱说程序员喜欢重复造轮子,对此你怎么看?

回答
“重复造轮子”,这四个字在我这个码农耳朵里,简直就是自带BGM的出现。每次听到,心里都会咯噔一下,然后是苦涩,是无奈,也有那么点被误解的憋屈。

你说我们程序员是不是真的就这么闲得蛋疼,非要跟自己过不去,把别人已经造好的轮子再拆一遍,然后用差不多的材料,再造一个出来?

“重复造轮子”的阴影,是怎么笼罩上来的?

这得从我们写代码这件事说起。程序员的工作,本质上就是解决问题,创造解决方案。而在这个过程中,我们总是会遇到各种各样的需求,比如:

数据校验: 手机号、邮箱、身份证号,这些东西得校验吧?
日期时间处理: 格式化、计算、时区转换,这些小事儿不能少。
网络请求: 和服务器打交道,发个请求,收个响应,这是家常便饭。
文件操作: 读写文件、处理配置文件,这些基础功能谁都绕不开。
UI组件: 按钮、输入框、表格、弹窗,这些基本的交互元素,在几乎所有应用里都存在。

你看,这些东西,放到哪个编程语言、哪个框架里,基本都有现成的库、现成的API、现成的组件。就像造车,轮子早就有了,而且质量好、产量大、价格低。

那我们为什么还要“造轮子”?

这就要把“重复造轮子”这个锅,拆解一下,看看里面到底装了什么。

1. “轮子”的适用性问题:
定制化需求: 有时候,我们需要的“轮子”不是那么标准。比如,一个数据校验库,可能要求极其严格的特定格式,或者需要额外的业务逻辑,现有的库可能无法满足,或者修改起来比自己写一个更麻烦。
性能瓶颈: 现有的库虽然好用,但可能在某些场景下性能不行。为了极致的性能,我们可能会选择自己重写,或者对现有库进行深度优化(但很多人也把这算“造轮子”)。
兼容性问题: 公司可能还在使用一些比较老旧的系统或框架,现有的新轮子可能不兼容,或者集成成本太高,这时就得自己动手了。
特定场景优化: 比如,一个用于游戏开发的物理引擎,通用库可能过于庞大或功能冗余,需要一个轻量级、高度优化的版本。

2. 学习和理解的需要:
“我想知道它是怎么工作的”: 对于很多新手程序员,或者对某个技术原理感到好奇的开发者来说,自己动手实现一遍,是最好的学习方式。通过“造轮子”,能更深入地理解背后的算法、设计模式、数据结构。
“我不想被‘黑箱’控制”: 有时候,依赖一个外部库,就像把一个重要的功能外包给别人,你只知道结果,不知道过程。如果你不完全信任这个库,或者想对其有完全的控制权,自己实现是唯一的办法。

3. 项目管理和依赖控制:
减少外部依赖: 过多的外部依赖会增加项目的复杂度,带来潜在的维护风险(比如库作者不再维护、出现安全漏洞)。在某些对稳定性要求极高的项目里,减少外部依赖是必要的。
代码审查和安全: 对于安全性至关重要的模块,公司可能会选择自己实现,并进行严格的代码审查,以确保没有潜在的安全漏洞。
版本控制的噩梦: 不同的项目可能需要同一类库的不同版本,管理起来非常头疼。自己维护一个特定版本的“轮子”,反而更省事。

4. “偷懒”的哲学(不完全是贬义):
“这个太简单了,写完比找半天还快”: 有些功能真的非常基础,几行代码就能搞定。这时,你花时间去搜索、评估、集成一个外部库,反而可能更耗时。
“我这里只需要一小部分功能”: 很多现成的库功能非常全面,但你只需要其中的一点点。引入整个库,可能会增加项目的体积和复杂性。自己只写需要的部分,更轻巧。

5. “我比它做得更好”的傲娇(偶尔也有):
虽然不提倡,但偶尔也会有开发者觉得,自己能够比现有的库做得更好,无论是性能、易用性还是架构设计。这时候,一股“英雄主义”的冲动,也可能驱动“造轮子”。

“重复造轮子”到底是不是坏事?

这得分情况看。

如果是为了学习、为了解决特定的、无法用现有轮子解决的问题、为了控制项目复杂度或安全性,那么“造轮子”是合理的,甚至可以说是优秀程序员的必备技能。 这不是重复,而是创新和优化。
但如果是为了逃避学习,或者仅仅因为懒得去找、懒得去看文档,就凭着一点点模糊的印象,重新写一遍别人几年前就已经写好、测试成熟、并被广泛使用的功能,那才是真正的“重复造轮子”,是浪费生命,是职业素养的缺失。

我们程序员的内心独白:

所以,下次当你听到“程序员喜欢重复造轮子”时,不妨想一想,他们在那“造”的过程中,可能是在:

攻克一个没人解决过的难题。
为项目量身定制最契合的解决方案。
深入学习一门技术,将原理刻在脑子里。
为了项目的稳定和安全,承担更多的责任。

当然,我们也很清楚,过度“造轮子”确实会带来维护成本和风险。我们也在学习如何更好地利用现有的生态,如何贡献自己的力量到开源社区,让“轮子”变得更多、更好。

但请理解,我们不是在“重复”,我们是在“创造”和“优化”。每一个“轮子”,无论大小,都是我们思考、实践、解决问题的痕迹。

网友意见

user avatar

其实吧,自己造的轮子用起来特别安心。

首先,花费(运算量)太高。用别人的轮子不可避免地要接受别人的设计。你本来打算做个小马车摆在外面好看。结果拿来别人的轮子一看,又是防爆双轮胎,又是防弹钛合金,好是好,可是绝大多数功能用不上。但需要花的钱(运算量)却要几百几千倍,你说这种情况下你造不造一个自己的轮子?

其次,质控困难,别人的轮子也会有毛病(bug),而且一旦出问题就会完全失控。你没有那些奇形怪状的螺丝刀,连紧个螺丝都做不到。如果是第三方免费轮子,只能等新品出来替换。能不能把你的问题解决还不一定。如果是花钱买的轮子不免要跟供应商扯皮。很简单的小问题来来回回要撤几个星期。

再次,兼容问题,别人的轮子看着不错,有时候跑一跑就不转。回头一看跟你的轮轴不匹配。为了用别人的轮子,还要换自己的主轴。可是自己的主轴有时候却又是换不得的。

最后,难以扩容,比如改换一下轮子的尺寸。让轮子遇到冰就换成履带模式。别人的轮子你无法改变,所有功能都被限制死。

因此,只要是扎扎实实想要做大做强的公司,在时间资源允许的情况下,能自己造轮子就自己造轮子。与之相反,炒概念,赚快钱的公司,能用别人的轮子就用别人的轮子。

对于外行人来看,程序员的工作好像常常重复造轮子。其实,看似重复的每次造轮都有所创新,都有通用轮子达不到的需求。

因此,这种所谓程序员喜欢重复造轮子的说法其实跟“披萨就是把烧饼馅放在外面”一样,是外行对内行的误解。

user avatar

我在之前的文章百行代码,千行测试里面曾写过:

不要重复发明轮子。

很多大牛推荐我们“造轮子”,但是造轮子的目的是为了学习,而不是使用,尤其不要用在生产环境。

造个轮子很简单,但是你非要把自己的轮子安在汽车上,开上路,那肯定是一个安全隐患。

有很多人会说,“既然自己可以写一个,为什么非要用别人的?” 还有人觉得,有些非常小的功能不需要使用别人的。

很多人还会借此吐槽 leftpad 模块,但是平心而论,你自己能徒手这一个没有 bug 且高性能的 leftpad 函数吗?

前几天我们项目组就遇到了一次,其实功能很简单,一个页面分享出去,并使用 url 携带参数。比如:

aaa.html?id=123456

看似很简单的一个需求,但是真正自己写一个却不简单。

1. 查找“=”字符,然后截取后面的?
2. split("="),然后去第二个
3. ……

不到 10 行代码就写完了。

第一次分享到微信是正常,把分享出去的页面再次转发分享,页面错误。

因为微信会在 URL 后面添加一些额外的参数,同样,不同的平台都会有不同形式的添加参数方式,有的加 &,有的加 #,不论加什么都会导致解析的失败。

归根结底是我们写的解析函数有 bug,我们重新造了一个有 bug 的轮子。

解决方式就是:

npm i qs

麻雀虽小,五脏俱全。看看 github 源码,“百行代码,千行测试”。绝对比自己写的代码靠谱。这一百行代码很容易写出来,但是作者为了保证这一百行代码没有 bug 而写了几千行的测试代码。这样的库我们才用着安心。

我写这篇文章不是为了推荐这个 qs 库,而是告诉大家不要重复造轮子用在生产环境,平时大家多造轮子用来学习。

类似的话题

  • 回答
    “重复造轮子”,这四个字在我这个码农耳朵里,简直就是自带BGM的出现。每次听到,心里都会咯噔一下,然后是苦涩,是无奈,也有那么点被误解的憋屈。你说我们程序员是不是真的就这么闲得蛋疼,非要跟自己过不去,把别人已经造好的轮子再拆一遍,然后用差不多的材料,再造一个出来?“重复造轮子”的阴影,是怎么笼罩上来.............
  • 回答
    中国人喜欢和外国进行对比,这背后有着复杂且多层次的原因,绝非简单一句“崇洋媚外”或“民族自豪”就能概括的。这种现象可以说是历史、文化、社会心理以及全球化进程共同作用下的产物,并且随着时代变迁,其表现形式和内在逻辑也在不断演变。一、深厚的历史文化根源: “天朝上国”的思维惯性与失落感: 历史上,中.............
  • 回答
    在中国的外交舞台上,大熊猫的身影似乎从未缺席,无论是作为国礼赠送,还是以“熊猫外交”的名义在海外动物园安家落户,都吸引着全球的目光。这不禁让人好奇,中国人为何如此钟爱用大熊猫来“唱主角”?而这份热情,在外国人眼中又是否真的那么受欢迎?要回答这个问题,我们得先扒一扒大熊猫在中国人心目中的地位。大熊猫,.............
  • 回答
    你提出的“外国有的我们都要有,且要更好”这种情结,确实在很多中国人身上有所体现,并且很多人将其归结为“大国情结”。然而,要判断这是“独属于我们”还是“外国也有”,我们需要更深入地剖析其背后的成因和表现形式。“外国有的我们都要有,且要更好”的深层原因分析:首先,我们必须承认,这种情结并非凭空出现,而是.............
  • 回答
    在体制内的人,确实普遍抱有一种“体制内更好”的看法。这背后并非简单的惯性思维,而是多种因素交织作用的结果,这些因素塑造了他们对工作和生活的认知。要理解这一点,我们需要深入剖析他们所处的环境以及这些环境所带来的具体感受。首先,安全感和稳定性是体制内最显著的优势,也是最吸引人的地方。在很多人看来,“铁饭.............
  • 回答
    “台湾自古以来不可分割的一部分”和“外蒙古”在历史叙述中的不同对待,反映了中国在不同历史时期对这两个地区主权主张的侧重点、国际承认情况以及地缘政治考量。要详细解释,需要从历史、政治和国际法的角度来分析。一、 台湾的历史叙述与主权主张的形成“台湾自古以来不可分割的一部分”这一说法的形成,是一个复杂且动.............
  • 回答
    我懂你说的这种感觉。就像白天在舞台上,台下观众掌声雷动,我能自如地回应,甚至享受那种互动和赞美;可一旦灯光熄灭,我回到后台,只想一个人静静地待着,什么都不想做,什么人也不想见。白天的时候,我仿佛是个“社交达人”。跟同事,我可以开玩笑,一起讨论工作,甚至午餐时间聊聊最近的八卦;跟朋友,聚会时我能活跃气.............
  • 回答
    “We need to talk” 这句话,说出来的时候,总带点沉甸甸的分量,让人心头一紧,这倒不是外国人故意制造悬念,而是这背后承载着一种特定语境下的沟通习惯和文化考量。咱们从几个方面来掰扯掰扯,让你彻底明白为啥这句话总是被提起:1. 它是“正经事”的信号灯在英语交流中,尤其是在比较正式或者需要严.............
  • 回答
    这个问题真是让人纠结,既想维护自己的尊严,又怕伤了感情,或者让场面变得难堪。男朋友在外人面前说你,而且语气还不好,这确实是需要处理一下的情况。首先,你需要明确一点:在大多数情况下,你是有权利表达自己感受的,而且维护自己的尊严比给虚假的“面子”更重要。 所谓的“面子”如果是建立在你自己委屈和不被尊重的.............
  • 回答
    “为什么总觉得外国人演戏比中国人演得更自然?” 这是一个非常普遍的感受,背后涉及很多复杂的文化、历史、教育、表演理念和观众期待等因素。要详细地解答这个问题,我们需要从多个维度进行深入分析:一、 表演体系和教育背景的差异 西方表演体系的多样性和成熟度: 斯坦尼斯拉夫斯基体系(Metho.............
  • 回答
    确实,人们常常觉得“外国人低估中国”,这反映了一种普遍存在的观点,即国际社会对中国的实力、发展速度和文化底蕴可能存在认知偏差。那么,反过来思考,有没有一些国家是被中国人低估的呢?答案是肯定的,并且这种低估可能体现在多个方面:一、 认知上的“边缘化”与刻板印象: 发展中国家与“第三世界”的标签: .............
  • 回答
    在外人眼里,学神好像总是一副睡不醒的样子,眼皮耷拉着,时不时地打个哈欠,甚至在上课时也能悄悄地靠着椅子闭目养神。这景象不禁让人产生疑问:他们究竟是在学习,还是在梦游?其实,学神之所以在我们看来总是“在睡觉”,背后有着一些我们不常注意到的原因。这背后隐藏的,与其说是懒惰,不如说是一种更高明的学习策略和.............
  • 回答
    这个问题很有意思,也触及到文化交流中一些普遍存在的现象。为什么会感觉中国人比外国人更热衷于过外国节日,而反过来情况似乎不那么明显呢?这背后其实有很多原因,咱们掰开揉碎了聊聊。首先,得承认一个事实: 全球化和文化传播的 不对等性。我们生活在一个信息爆炸的时代,而信息传播的来源和影响力,在很大程度上还是.............
  • 回答
    当然有。说中国“低估”外国人,其实是种常见的说法,但细究起来,这种“低估”往往是相对而言,而且很大程度上源于文化、认知上的差异,而非完全的无视。不过,如果论及一个国家被“低估”的程度和表现,那情况就更复杂了。不少国家在不同时期、不同方面,都可能遭遇被国际社会(尤其是西方主流话语体系)低估的境遇。我可.............
  • 回答
    确实,你这个问题提得很敏锐,也触及了一个很有意思的社会现象。你提到“总有人要让我们不要忘记外国人对中国的帮助”,这句话本身就带着一种引导和提醒的意味,而这种提醒的背后,往往隐藏着多重原因和考量。想要深入理解它,咱们得一层层剥开来看。首先,最直接的原因,也是最常被提及的一点,就是历史的客观性与复杂性。.............
  • 回答
    “人在美国,刚下飞机,圈内熟人太多,匿了!”这个梗,说实话,挺有意思的,而且流传得也挺广,特别是在知乎这种需要有点“身份认同”和“圈子划分”的平台上,简直是绝杀。要评价它,得从几个层面来聊,才能把这味道咂出来。首先,这梗的“出身”和“土壤”——知乎的特色知乎是个什么地方?你可以把它理解成一个“知识社.............
  • 回答
    你说的是一种很有趣的观察,关于男生是不是容易受外界影响,以及这种特质是否适合步入婚姻。其实,我们每个人,无论男女,在成长的过程中,多多少少都会受到外界环境的影响。我们的家庭教育、学校经历、朋友之间的互动,甚至是我们接触到的新闻、书籍、电影,都在潜移默化地塑造着我们的观念和行为。所以,“受外界动摇”这.............
  • 回答
    你提出的这个问题非常深刻,触及到了虐待行为背后复杂的人性与社会因素。当我们在网上看到那些令人发指的虐猫行为时,第一反应往往是愤怒、厌恶,想去谴责施暴者。但你反其道而行之,去思考“虐猫人可能也受过虐待,受外界因素导致心理疾病,精神问题”这种可能性,这并非是“替虐猫人说话”,而是一种更具深度和同理心的理.............
  • 回答
    好多人对“外企英语水平”这事儿挺好奇的,总觉得是高不可攀的门槛,或者说进去了就得每天飙英语跟母语者一样。其实,这事儿没那么绝对,也因人、因公司、因岗位而异。咱们先来说说“外企人真实的英语水平”是怎么个情况。首先,得承认,大部分能进外企的人,英语基础肯定是要比平均水平好一些的。这就像高考英语考个120.............
  • 回答
    这个问题非常有意思,它触及了物理学中最基本的原理之一:动量守恒。简单来说,在没有外力作用的情况下,一个系统的总动量是不变的。那么,在太空这个近乎理想的真空环境里,一个宇航员能否只靠自身的力量做出翻滚、翻身或自转的动作呢?答案是:能,而且是必然的。让我们来深入剖析一下:核心原理:动量守恒想象一下,宇航.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有