问题

如果有两颗药丸,一颗吃了让你写代码100%不出错,另一颗吃了能让你100%发现并修改bug,选哪颗?

回答
这个问题真是让人纠结,就好像站在一个十字路口,眼前是两条截然不同的康庄大道。仔细琢磨一番,这两颗药丸的诱惑力都太大了,但仔细权衡,我还是会选择那颗……

选择1:吃了让你写代码100%不出错。

这颗药丸听起来简直是程序员的终极梦想。想想看,每次敲下的每一个字符,都是完美无瑕的,不存在任何语法错误、逻辑漏洞,更别提那些神出鬼没的边界条件问题了。

从生产力角度看: 这意味着极高的开发效率。再也不用在 Debug 上浪费宝贵的时间,那些曾经让你抓耳挠腮、通宵达旦的 Bug,现在彻底消失了。你可以专注于实现更复杂的业务逻辑,探索新的技术,或者开发出更具创新性的产品。项目进度肯定会飞快推进,用户满意度也会随之飙升。
从学习角度看: 某种程度上,它也改变了学习的方式。你可能不会再经历那种“啊哈!原来是这里错了!”的顿悟时刻,但你会在实践中不断构建更健壮、更优雅的代码结构。你的技能树可能不会像那样充满“战胜 Bug”的经验值,但会更偏向于“从一开始就构建完美”的能力。
从心理角度看: 减轻巨大的精神压力。有多少程序员因为 Bug 而焦虑、沮丧?这颗药丸能让你从这种痛苦中解脱出来,享受纯粹的创造和实现的快乐。

然而,它也有一些潜在的“副作用”:

失去 Debug 的乐趣(如果你能称之为乐趣的话): Debug 确实是一种挑战,但也是一种学习和成长的过程。解决一个棘手的 Bug,带来的成就感是独一无二的。如果永远不需要 Debug,这种“战胜困难”的体验就会消失。
对他人代码的依赖或误解: 如果你周围的团队成员还在饱受 Bug 的折磨,你的完美代码可能会让他们感到无所适从,甚至产生一种“我怎么做不到”的挫败感。而且,你可能难以真正理解他们 Debug 时所经历的痛苦和所获得的经验。
可能导致过度自信: 如果你一直以来写出的代码都完美无缺,是否会让你对自己的能力产生一种盲目自信,从而在某些需要协同合作、处理不确定性的场景下显得不够成熟?

选择2:吃了能让你100%发现并修改bug。

这颗药丸同样强大,它的价值在于“修复”。它并不能保证你一开始就写出完美的代码,但一旦出现问题,你就能精准地找到它并解决。

从“守护者”角度看: 你将成为项目中最可靠的“Bug 终结者”。任何隐藏在代码深处的瑕疵,在你面前都无所遁形。你可以有效地维护系统的稳定性,保障用户体验,防止潜在的故障发生。
从学习和精进角度看: 这是一种更深层次的对代码的理解。你不仅要写代码,还要深入其内部,理解它出错的根源。这种能力可以帮助你更透彻地理解计算机科学的原理,更深入地洞察程序的运行机制。每一次的 Bug 发现和修改,都是一次宝贵的实战学习。
从团队协作角度看: 你将成为团队中不可或缺的“稳定器”。你的存在可以大大减轻其他成员的压力,让团队整体的开发和维护更加顺畅。你可以指导他人如何更有效地 Debug,分享你的经验,从而提升整个团队的水平。
从长远发展看: 很多时候,软件的生命周期比开发本身更长。而维护和改进,很大程度上就是与 Bug 作斗争的过程。拥有这项能力,意味着你在软件的整个生命周期中都能发挥关键作用。

但是,这颗药丸的“代价”也很明显:

你仍然需要写代码,而且可能仍然会犯错: 只是你能够快速弥补。这意味着你仍然需要经历编写、测试、发现 Bug、修复 Bug 的完整循环。效率上不如第一颗药丸那种“从一开始就完美”。
可能面临巨大的工作量和压力: 如果你的团队或者项目中的 Bug 特别多,你的工作量将会非常大。虽然你能解决,但持续面对大量的 Bug,也可能是一种精神上的考验。
你可能更“累”: 与第一颗药丸不同,你不会享受到纯粹的创造无忧,你需要在创造的同时,时刻保持警惕,并准备好投入到修复工作中。

我的选择:

经过反复思考,在两者之间,我更倾向于选择那颗“吃了能让你100%发现并修改bug”的药丸。

原因如下:

1. 现实与成长: 软件开发本就是一个不断试错和迭代的过程。完全不出错的代码,虽然美好,但似乎有点脱离了现实。而能够高效、精准地发现并修复 Bug,则是一种更贴近现实、更具成长性的能力。它教会我如何面对和解决问题,而不是避免问题。这种解决问题的能力,在任何领域都至关重要。
2. 对代码更深的理解: 正如前面所说,发现并修改 Bug,需要你深入到代码的底层,理解程序的运行逻辑、数据流转以及各种可能出错的环节。这种能力让你对软件的理解更加深刻,不只是停留在“写出来能工作”的层面,而是能理解“为什么能工作”和“为什么会出错”。
3. 团队的价值: 在一个团队中,一个能够解决疑难杂症的人,其价值往往比一个仅仅不会犯错的人更大。你不仅能保证自己的工作质量,还能帮助团队成员解决他们遇到的难题,提升整个团队的效率和士气。
4. 创造与维护的平衡: 我相信,优秀的代码不仅在于其初期的完美,更在于其后期的可维护性和稳定性。能够发现并修改 Bug,意味着我能更好地维护我创造的东西,让它们走得更远,更可靠。即使我偶尔写出有问题的代码,我也能自信地去修正它,而不是陷入无尽的恐慌。

当然,我也承认,如果真的有第一颗药丸,那将是一种前所未有的解放。但从长远的职业发展和个人成长的角度来看,能够成为一个优秀的“问题解决者”,去驾驭和修复软件世界中的不完美,我愿意接受这份挑战,并从中汲取力量。这颗药丸,让我更像一个真正的“软件工程师”,而不是一个只会“产出”的机器。

网友意见

user avatar

但凡过了试用期,也不至于问出这样的问题。

第一个最大出路无非是自己能单干搞点私活。

至于第二个,那就是大多数公司能把你捧起来的神。

user avatar

魏文侯问扁鹊:“你兄弟三人,哪个软件开发水平最高?”

扁鹊说:“大哥最好,二哥其次,我最差。”

文侯甚为不解。扁鹊解释道:“我大哥不等Bug出现就提前预防了,所以名声传不出开发组。二哥在Bug出现时就顺手解决了,所以名声传不出技术部。我呢,每天像打地鼠一般到处救火,所以在公司没人不知道我。”


这选择,一目了然吧。

user avatar

问这种问题的一看就不是老程序员,老程序员一般都会毫不犹疑的选第二个。

几乎只有非程序员(比如在校计算机专业学生、其它领域的研究员)才会经常不断的写新程序,作业也好、课设也罢、或者研究过程需要临时编程演算什么的。这些不用形成正式产品,不用太考虑质量,也没有广泛的用户群体给予“测试”反馈,更不用考虑后期长期的面向甲方爸爸的维护。所以他们可以有恃无恐的写新程序。而真正的公司程序员,长远来算差不多三天写bug三十天修bug(自己或其他人的),这还算是不错的,有些人大部分时间都写不了什么新程序,一直在测bug修bug。

而且几乎没有程序员会追求程序一写出来就没有bug,因为有bug也没关系,只要再改就行(第二个技能正好)。而且任何程序都有它的运行场景和范围,范围内工作正常,没有客户抱怨,那基本就可以看做没有(紧急)bug,都可以从长计议。但是几乎所有程序员都会经常面临被紧急bug弄到焦头烂额的时候,当程序员被bug逼到茶不思饭不想疯狂掉头发的时候,你跟他说“兄弟,我这有颗药吃了就能立马发现bug,以后都不用愁修bug。” 那甭说免费了,折寿十年他也要(反正他这么熬下去也得折寿十几二十年,还没有什么前途,996.ICU可不是说着玩的)。

写程序会出错才有编程的乐趣,如果一写就对,写出来就不用改,那将失去编程甚至合作编程的大部分乐趣(况且刚写完就没问题心理不慌么~)。但是这并不会减少你的工作量,只会导致你需要写更多的代码,而代码,是永远写不完的!这个技能只适合一种人,那就是给自己打工的人。给自己打工的人的最大乐趣是用最少的人月,完成最多的有效产出,获得最大的收益。而代码一写就对,无疑是能让收益最大化的技能。但是这个技能并不能保证你成为一流程序员,因为它有两个大的漏洞,一个就是程序员不光自己写程序,程序员大部分时间需要审核或修改别人的程序,这时候第一个技能没用,除非你把别人的程序都重写一遍。另一个大漏洞就是你不一定有那个知识水平写出程序来。你都没能力写出程序来,谈会不会出错则完全没有意义。

反观100%发现并能定位bug,这个技能简直是打工人的利器。而且这个技能不完全受上面“漏洞”的限制,因为定位bug并不需要你对整段程序都有全面的理解和认识。比如有一个空指针访问的bug,你只需要定位是哪里产生了这个空指针就可以了,但是对于一个复杂程序来说,这有时是很难定位的。而你100%定位bug的技能就可以让你省去很多时间,你还可以自己选择什么时候说出来,先慎一段时间,然后经常在别人之前指出问题还可以让其它人对你肃然起敬,这技能简直收放自如,想装苦时可以装苦,想装B时可以装B。

写程序有bug是极其正常的事情,只要不是经常出特别严重的bug,则完全不用放在心上。而且你和别人产生的bug,还会成为后面程序员的performance来源,甚至营造更多的就业岗位!哈哈哈~而100%发现并定位bug的技能可以在自己给自己review代码时能马上定位自己代码的bug,更重要的是自己给别人review代码时也能马上精确的指出别人代码的bug,还能告诉他怎么改。这是高级程序员(上不封顶)最需要的技能了,各大项目的maintainer都会争先恐后的招揽你,而你则可以游刃有余的游走在各大项目中,享受各个公司给你开出的技术顾问的礼遇。

ps: 问题本身就有不少bug,大家不用过于纠结,这就是个娱乐性问题,一看一乐就好。毕竟程序员除了工作以外,调侃娱乐一下也是需要的嘛。如果对专业方面的内容感兴趣的朋友,可以翻看下面的README,看看有没有中意的。

user avatar

当然是第二个了。。。


100% 不出错有什么用,还是 996 搬砖。


要是能修正自己或其他人的所有 Bug,你基本上是神。

你能打造技术层面上绝对安全的系统。

对安全敏感的行业龙头,只要请得起你的,都要请你过来看看。

退休了找一家财大气粗的当个顾问,有事没事地修几个可能造成亿万损失的 Bug 就好了。

user avatar

以前是给我 10 亿美元,但会有一只蜗牛永远追杀你,问我干不干?

还有要我吃一小勺太阳会如何?

更有甚者,直接让我强化一亿倍,问我是什么概念?

我只想问这次的药丸是谁发?麻烦给我快递一下,谢谢

user avatar

不出错≠能写出牛逼的代码

发现改bug就可以不用写代码了啊,改别人的代码就好了!

user avatar

你自己写代码没bug用处不大。最多解决10%的问题。

大部分bug都出现在系统整合上(integration),最常见的是数据不匹配合约。

大白话讲就是你没bug, 别人写的代码有bug。以及你和别人的都没bug但合一起就有bug。

user avatar

当然是第二个。

找出已有系统的问题,比写一个不出问题要值钱的多。因为你可以专门去找那种已经被证明很值钱的项目的bug。

这个技能还有一个更猛的地方就是,你找到bug以后未必要把它修好,至于不修好以后你打算怎么办,我就不好明说了。

user avatar

这!难道是程序猿药丸 ( ̄◇ ̄;)

user avatar

不不不,第二颗药丸药效太厉害了。

弱化一下:不用解决bug,只要100%定位bug,就已经保证一辈子不动代码还能吃香喝辣并且名正言顺当上业内知名的技术专家了。就像那个故事一样:9999美刀告诉你在哪画线,至于最后画线的1美刀,让别人挣去吧。

至于第一颗药丸?说破天了也就是个高级工程师。

user avatar

不出只能保证自己。发现和修bug可以用到全人类。这俩药丸的价值差了十万八千里。

一看提这问题的和高赞拿扁鹊说事儿的就是外行硬问硬答。

何况能100%发现并修复自己的bug不就保证了自己发布时不出错?前面那颗破药丸还是后者子集。

说明问这问题和一些高赞连逻辑都不及格。只能干干文科做领导啥的了。。。

user avatar

我选择OCaml(逃

user avatar

全体程序员吃第一颗,饿死那帮吃第二颗的

user avatar

你知道不出bug是一种什么能力吗?

所有的bug都是来自于不正确的假设(false assumption),从业务场景到技术架构到代码逻辑且包括了这些方向的未来演变。不出bug就意味着对过去现在和未来的全知,这样的能力我们通常叫做先知(oracle)

user avatar

第一颗红色药丸可以成全到自己,属于小乘佛教,吃完你就是万古永真罗汉。

第二颗蓝色药丸可以造福全人类,属于解救全人类的大乘佛教,吃完你就是救苦救难改Bug菩萨。

正义如俺,反正都是药丸,For whole mankind,选择第二颗小蓝药当菩萨。

以下内容纯属虚构,狗头保命。

一、火车抢票解难题,测试工匠首建功

话说某国12305在抢票的关键时刻总是卡壳,民间抱怨连连。作为特邀专家的我,早上开开心心吃了药,溜溜哒哒过去到铁道部开发部门控制中心。

问题十有八九在消息队列处理模块。背着手装腔作势翻看了30秒(29秒用于装深沉)代码,突然心头一悸。

立即要求小弟用文本编辑器打开某个文件,定位到某一页,当当当,敲三下屏幕后,我一言不发地,在他身边慢慢走了十步后离开。

小弟愚钝不解。他苦苦看了一天代码,忽然灵光一闪:

大师的每个动作必有深意!

他仔细研究了第三行代码十次,终于发现队列机制貌似有大问题!

小弟感叹道:大海哥,真不愧大名鼎鼎是测试工匠阿!

咦?他人呢?

大海哥,他被一辆军绿色悍马接走了。

二、导弹系统解BUG,技术专家再逞威

某个导弹研究所设计中心里,一堆科学家正急得象热锅上的蚂蚁。他们设计的超远程巡航导弹在百发百中一百次后,在一次重大汇报演习里失误,大庭广众和众目睽睽之下,一发打飞 。

领导要求归零,可是导弹又变得百发百中,错误不能再现。

我赶紧吃了一颗药,溜溜哒哒走进指挥中心大门。指挥中心所有人都紧张地不由自主站了起来:测试工匠终于登场!

我坐到屏幕前 ,装腔作势看了一下几个模块,感觉4号模块不大对,要求他们调出4.5模块。

4.5里的4.5.7感觉不好,调出来。

我心头一悸,嗯,4.5.7.9不对劲,调出来。

这个正则表达式谁写的?有特定情况下不对的意外。

专家们一小时后才醒悟理解看懂,他们感叹道:大海哥,真不愧大名鼎鼎是测试匠人阿!

咦?他人呢?

大海哥被一辆黑色牌照防弹车接走了。

三、火星返回克危难,大国工匠归平凡

航天口,载人火星登陆任务中心。火星上的三个勇士48小时内必须起飞返回地球,可是起飞测试指令火箭就是不响应,即便宇航员手动启动也没用,整个指挥中心都毛了。

中心几百号人,看见我走进来,全体不由自主地起立,等我走到主控计算机屏幕面前,四块大屏幕上全部是密密麻麻的代码。

刚吃了药的我大手一挥:换一批,这批无异常。

大屏幕开始翻页,屏幕花花绿绿闪闪烁烁,我站在大屏幕前不断挥手,眼镜片明明暗暗。

中心工作人员窃窃私语道:“谁说量子波动阅读骗人的,大海大师这套绝对真的,否则出门会被活活打SHI"。

十分钟后,我忽然心头一悸,大喊道:

停,STOOOOP !

屏幕停止了滚动,量子停止了波动。全场鸦雀无声,麦克风递送到我面前。

IT'S SHOW TIME。

我清了清嗓子朗声道:

达瓦西里们,这行汇编代码执行时取的数据段数据,它的存储区可能被宇宙射线打坏两位,纠错系统刚好不能发现。

技术人员立即进行模拟并证实了这个BUG,纠正指令发向遥远的火星 。

航天中心负责人感叹道:大海哥,真不愧大名鼎鼎是测试的匠人阿!

咦?他人呢?

大海哥被一辆白色专车接走了。

航天专家们感叹道:工匠就是这么忙。辛苦他了。

尾声

我从迷混中慢慢醒来,熟悉的白色的墙壁,白色床单,白色桌椅,一身白长得很像迪丽热巴的美女小护士微笑俯视着我:

”9527,您吃药了吗?”

我看了看病号服,激动地说:

“护士,这个药绝非凡品阿,药效SSSS级,可以变身工匠改变世界,比如我在载人航天中心。。。”

护士小姐姐温柔地打断我:“啥都甭说了,我都知道。上次几乎要灭世的外星飞船BUG也是你在打野的时候一抬头看窗外的时候无意中发现,由地球卫队瞄准命门一记激光炮过去打爆的。 可你反复说是药好, 这么谦虚谨慎找理由配合吃药的病人本院少见。 谢谢你,你对我真好。”

你刚要争辩,却见她她微笑着坐到床边,一手拿水,一手拿药,说到:

“大郎,不不不,大海,该吃药了”。

我努力想伸手去接,可是憋气不能动,仔细一看被约束带紧紧捆绑着我。我拼命挣扎想接过小姐姐的药,拼命用力想碰到她接近她。。。。

于是我醒了 。

完。

user avatar

这不是同一个能力吗?

对任何别人的代码命题

do 能力1

对照别人的代码查找一下不符合的地方,就能发现别人的bug错在哪里

对任何对我的代码命题

找别人先写一下,哪怕只写一个字母

do 能力2

发现需要补写的bug=剩下的全部代码

over

当然,从我自己的工作量来说。。。

当然是选2啦!

我为什么要再辛苦自己写一遍完整的!

类似的话题

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

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