英文:Matt Lacey,

翻译:程序员的那些事(id:iProgrammer)

“你只是加了 2 行代码,为什么要用 2 天?”

这是一个看似合理的问题,但做了一些可怕的假设。

代码行数 = 努力
代码行数 = 价值;
所有代码都有同等价值;

上述 3 个假设都有误。

为什么 1 个看起来很简单的修改,要花 2  天时间才能完成?

我们来分析一下原因:

1、因为提交这个问题报告的人,并没有清晰描述如何重现问题。

我花了几个小时才重现了。有些开发者会立即回到报告问题的人那里,要求他提供更多的信息,然后再进行调查。我试着用提供的信息做尽可能多的事情。我知道有些开发者不喜欢必须修复 bug,所以会不惜一切代价来“逃避”。声称没有足够的信息是一种“好方法”,看起来你是想帮忙,但不需要做任何事情。报告错误不是一件容易事,我很感谢所有提错误报告的人。在向他们询问更多细节之前,我会尽量先从已提供的信息来开展工作。

2、因为报告的问题与 XX 功能有关,是我不熟悉的。

问题所涉及的功能,我很少用,也不是我曾仔细用过的。这就意味着我得花了更多的时间去理解这个功能,以及它是如何与整个软件相互作用的。

3、因为我花了时间去调查问题的真正原因,而不仅是看表面症状。(治本,不止治标)

如果一些代码抛出了错误,你可以直接用 try...catch 语句把它包起来,然后抑制错误。没有错误,就没有问题。对吧?抱歉,对我来说,让问题隐形不等于解决问题。隐藏错误容易导致其他意想不到的隐患。我不希望在将来还得返工处理。

4、因为我调查了是否有其他方式可以引发同样的问题,而不仅仅是重现报告的步骤。

重现步骤是很容易让复现错误,而实际上可能是更深层次的错误原因。找到问题的确切原因,并查看所有引发问题的方法,更能提供有价值的见解。比如代码实际是如何使用的,哪些地方可能有需要解决的问题,或者反映出代码不一致,这意味着错误是在一个代码路径 A 中导致的(或处理的),而不是在路径 B 中。

5、因为我花了时间来验证代码中是否有其他部分可能受到类似的影响。

如果一个错误导致了 Bug,那么代码库的其他地方发生也可能有同样的错误。现在是检查的好时机。

6、因为我发现问题原因后,我就开始寻找最简单的方法来解决问题,同时将带来副作用的风险降到最低。

我不想要最快速的修复方法。我想要一个未来不会造成混乱或其他问题的修复方法。

7、因为我做了更彻底的测试,并验证了它解决了所有受影响的不同代码路径的问题。

我不想依靠别人来检验我所做的是正确的。我不希望在将来发现错误,不得不回到这段代码。场景切换既代价昂贵又令人沮丧。我希望尽可能避免让专职的测试人员再次查看“相同的”更改。

我不喜欢必须修复 bug。部分原因是 Bug 会让人觉得是我之前的失败造成的。另一个原因是我更愿意去研究新的东西。

还有什么比修 bug 更惨的呢?

就是反复修同一个 bug。

我花时间确保任何一次遇到的 bug 都能完全修复,这样就不需要不止一次的面对、调查、修复和测试。


由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:(1)点击页面最上方“小詹学Python”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。

你不就是加了 2 行代码,为什么要用 2 天?相关推荐

  1. 使用ajax的时候必须要加的几行代码

    //不要让让浏览器开辟缓存   response.setHeader("Cache-Control", "no-cache");   response.setH ...

  2. python加注释的快捷键_详析python多行代码注释快捷键的用法

    我们在敲击代码时,遇到不需要使用的语句,大家是否一行一行的删除?这样工作量可谓庞大,今天给大家带来关于注释的快捷键使用,一起来看看吧~ 关于python编程注释快捷键 1.注释单行 (1)方法1:直接 ...

  3. 第一行代码 开发酷欧天气DataSupport,ProgressDialog,加载失败,PreferenceManager.getDefaultSharedPreferences()方法

    第一行代码学到开发酷欧天气时,在继承DataSupport类时发现DataSupport过时,于是发现LitePalSupport可以替代DataSupport.后面会用到一个DataSupport. ...

  4. (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二

    10 行代码判定色*情*图片--Python 也可以系列之二 作者:赖勇浩(http://blog.csdn.net/lanphaday) 致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术 ...

  5. (已加马赛克)10 行代码判定色 情 图片——Python 也可以系列之二

    10 行代码判定色*情*图片--Python 也可以系列之二 作者:赖勇浩(http://blog.csdn.net/lanphaday) 致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术 ...

  6. suse oracle 12c安装,用半行代码实现在LINUX(SUSE/RH)下安装ORACLE 12C

    最近新到单位的朋友总是抱怨在LINUX下安装ORACLE,实在是太麻烦了,而且这些步骤既不知是什么意思,也记不住:索性,我就分析了一下,经过实践,实现了只用半行代码(确切的说,只消4个字母)就可实现在 ...

  7. 把三千行代码重构为15行

    2019独角兽企业重金招聘Python工程师标准>>> 如果你认为这是一个标题党,那么我真诚的恳请你耐心的把文章的第一部分读完,然后再下结论.如果你认为能够戳中您的G点,那么请随手点 ...

  8. 几行代码完成动态图表绘制 | Python实战

    作者 | 小F 来源 | 法纳斯特 头图 | CSDN下载自视觉中国 关于动态条形图,小F以前推荐过「Bar Chart Race」这个库.三行代码就能实现动态条形图的绘制. 有些同学在使用的时候,会 ...

  9. 400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划

    作者 | 无名之辈FTER 责编 | 夕颜 出品 | 程序人生(ID:coder_life) 本文翻译自Rasa官方文档,并融合了自己的理解和项目实战,同时对文档中涉及到的技术点进行了一定程度的扩展, ...

最新文章

  1. java代码示例(6-3)
  2. java字节数组转换成16进制_Java 将字节数组转化为16进制的多种方案
  3. 【渝粤教育】广东开放大学 文化经济实务 形成性考核 (49)
  4. JS_13原型与原型链
  5. [Markdown] Markdown使用 - 持续更新
  6. shell 练习(07)——MySQL 数据库备份
  7. python常用函数及用法
  8. Java开发实战经典【Java基础】
  9. 学习记录:xmind2testcase测试用例模板
  10. xise php一句话木马,渗透利器 | 常见的WebShell管理工具
  11. linux基本命令整理——鸟哥linux私房菜第九章
  12. 获得《软件方法》代金券的同学列表-漏了麻烦告知
  13. PhotoShop中合并形状颜色会变化的问题
  14. python二级题库(百分之九十原题) 刷题软件推荐 第六套
  15. 头歌MySQL数据库
  16. rust被禁播还能玩吗_被强制下架的5部剧,后2部因“尺度太大”被禁播,如今已恢复上架...
  17. python听歌识曲爬虫_【python爬虫】 爬云音乐我和xxx共同听过的歌曲
  18. LeetCode题解(1647):字符频次唯一的最小删除次数(Python)
  19. js使用页面打印window.print() 记录,并进行缩放打印
  20. Python 83道经典练习题,含答案!

热门文章

  1. 命令行执行php脚本中的$argv和$argc配置方法
  2. python算法与数据结构-快速排序算法
  3. 面试:史上最全多线程面试题 - (锁内存模型线程)
  4. ELK报错expected block end, but found BlockMappingStart
  5. springboot嵌入thymeleaf后css404_SpringBoot2整合Thymeleaf
  6. php项目从本地apache移到linux的nginx上,遇到的一些访问权限和报错的问题。
  7. android旋转动画开源库,android 围绕中心旋转动画
  8. php中get_featured_posts()是什么意思,php – 在WP_Query中获取WooCommerce特色产品
  9. MySQL 中ANALYZE [LOCAL NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
  10. 实例化vue对象 绑定子组件_Vue-双向数据绑定