阅读本文大概需要3分钟。

好几个读者问:如何成为厉害的程序员?编码能力如何成长。回答完后,有些心得也给大家分享下。

其实程序员最关键的技能远不止编码能力,架构思维、底层知识的深度等等,同样很重要。

在这些能力中,最容易被人忽视却很重要的能力是:debug能力。甚至我认为:debug能力远比编码能力更重要。很简答,大家可以观察下自己的团队,最优秀的程序员一定会承担很多疑难症的排查和解决。

曾经在360带几十人技术团队,同时研发几条业务线。参与过的产品,日活过千万的有一款,过百万的有三款。

这个过程中各种稀奇古怪的bug见过不少,也一一解决了(不然估计就要滚蛋)。

分享下我的debug经验,希望对大家有用:

1.日志Log尽可能详尽

编程领域流传着一句话:必现的bug,都不是bug。

因为好复现,就容易解决,代码一直跟下去,或者看看堆栈信息,很快能定位问题。

真正困难的是偶现bug,甚至那种概率千分之几,但后果严重的bug。解决他们就需要详细的日志Log,尤其是关键点上的信息,非常重要。

2.google要用好

程序员+google=好的程序员,这句话真的没错,很多技术bug,当你毫无头绪之际不妨google下,可能不少人遇见过。

当然,最关键的是搜索的关键字,这取决于你对bug现象的描述,越言简意赅搜索到的信息反而越多。

3.排除法

这个方法说实话不提倡,但很多时候实在束手无策之际不妨用用,用法也很简单,当你不确定哪一块新增代码引入问题,就尝试注释一部分代码看看程序是否OK。

不行再换另一部分代码注释掉,很快你就可以缩小bug的查找范围,进而定位问题。

4.模拟用户环境

可以采用一些工具来模拟前端或者后端,制造假数据、假操作。有了这些工具之后,把你怀疑可能出问题的情况模拟一遍,观察是否会出问题。

其次,遇见一些极端情况,比如怀疑是多线程/多进程死锁,那不妨在某个进程/线程写个死循环看看bug是不是就出现了,当然做这种操作千万千万别给忘记了,提交了,那就完犊子了。

5.记录曾经解决过的bug,并简历索引

其实很多bug会变着花样反复出现,俗话说好记性不如烂笔头,把解决过的问题记录下来,并且做好索引,下次遇见可能相同的问题,先检索一遍,搞不好就找到答案了。

6.多看官方文档

特别是引用了第三方代码或者是开源代码导致的问题,官方文档对应的部分反复看看,可能问题就解决了。

7.引入工具,放大问题

比如很多线程注入的工具,你开启后,但凡是一点点依赖线程顺序的bug都会从偶现变为必现。

这个相当于主动把代码运行环境变成地狱模式,比如你的一个线程的结果依赖于另一个线程的输出,但你忘记加同步代码了,不过大部分情况另一个线程运行都飞快,但有些机器就不好使了。

这个时候加入这种工具,它直接让某些情况下另一个线程运行速度变慢(我猜大概率是加了个sleep(1000)),结果你的程序就崩溃了,崩溃堆栈直接打开,迅速定位,问题解决!

8. 制作工具,针对某些bug编写一些调试辅助工具。

比如,某些系统没有完善的崩溃报告,虽然也有dump,但是分析出来的callstack经常不准。完全可以为解决崩溃问题编写了个工具,自动扫描代码,在每个函数入口和出口插入log,以此来定位崩溃点。

以上8点,都是在实战血淋淋的过程中总结出来的,希望对大家有帮助。

·················END·················

扫码加好友,加入海归Python编程和人工智能群

这才是厉害程序员的标配!相关推荐

  1. 怎样才算是好程序员?关于好程序员与好代码的杂谈

    ​ 怎样才算是好程序员?​ · 具有优秀的技术技能,能写出干净整洁的代码. · 具有扎实的开发技术知识和解决问题的专业技术. · 了解编程的最佳实践以及何时使用它们. · 对编程有着持久的热情,并积极 ...

  2. 一天写多少行代码才算是好程序员?

    点击查看全文 当今时代很多吃瓜群众对程序员的印象都是 而程序员的真实情况却是这样:每天大部分时间都在改代码,写代码,看代码才是我们真实的工作日常,到底每天要写多少行才是好程序员呢? 为了探讨这个问题首 ...

  3. 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?...

    写了这么久的读书笔记,涉及到问题大多是一些如何把软件工程做好,如何把自己的职业生涯做好.但总感觉逻辑链上缺了一环,亦即:我们为什么要把软件工程做好,我们成为一名优秀的职业生涯的意义到底在于什么?我觉得 ...

  4. linux是优秀程序员吗,如何理解Linus Torvalds“什么才是优秀程序员”

    Linux的创始人Torvalds在一次演讲中有一段涉及"什么才是优秀程序员"的话: "烂程序员关心的是代码.好程序员关心的是数据结构和它们之间的关系." 这句 ...

  5. 这才是牛逼程序员的标配!

    阅读本文大概需要10分钟. 最近好几个读者问:如何成为牛逼的程序员?编码能力如何成长.回答完后,有些心得也给大家分享下. 其实程序员最关键的技能远不止编码能力,架构思维.底层知识的深度等等,同样很重要 ...

  6. “35岁才是一个程序员成熟的开始!”

    作者 | 王晓波,同程旅行机票事业群CTO [写在前面] 不知道从什么时候开始,身边的"小朋友"们都开始为一件事感到焦虑,那就是:"到了35岁我还能找到一份编程的工作吗? ...

  7. “35 岁才是一个程序员成熟的开始!”

    作者 | 王晓波,同程旅行机票事业群CTO [写在前面] 不知道从什么时候开始,身边的"小朋友"们都开始为一件事感到焦虑,那就是:"到了35岁我还能找到一份编程的工作吗? ...

  8. 当上 CTO 才发现:程序员时常犯的 4 个错误有多可怕!

    ‍‍ [CSDN 编者按]随着网络科技的创新,IT行业迎来了长足的发展,程序员群体也在不断扩大当中.尽管程序员能够解决开发或测试或运维等各自方向的大部分问题,但程序员毕竟不是万能的,也会出现常见的错误 ...

  9. 愚蠢的领导才会用程序员祭天!!

    " 人非圣贤,孰能无过 网络上频频流出程序员误删线上数据库,造成XX公司XX万损失的新闻,进而牵扯出"杀一个程序员祭天"的妙语,虽然杀一个程序员比杀一个进程要难很多,但也 ...

最新文章

  1. 央视首位AI手语主播亮相,动作精确、实时转译,网友:能接住广权的段子么?...
  2. 把 SOAP 服务转化为 REST 服务(REST Service 的最佳实践,第 3 部分)
  3. java运行机制以及 运行流程
  4. unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...
  5. 使用rx-java的异步抽象
  6. 数字信号处理基础知识00
  7. 2019年容器安全最新现状研究报告解读
  8. 练习-前程无忧数据爬取
  9. 精通Android自定义View(八)绘制篇Canvas分析之绘制文本
  10. oracle rac war配置,Oracle RAC安装配置流程
  11. 论文及文献资料的搜集好去处---子午学术论坛
  12. react-navigation(6.0.6版本)使用详解(基于RN0.65*版本)
  13. android小灯泡实验代码,typecho常用代码片段收集
  14. paip 常用汉字形声字大全3500字
  15. 【转自52v6】教你如何走IPv6下载百…
  16. 大数据可视化学期总结
  17. 自定义circleindicator
  18. 杭电acm 4540威威猫系列故事——打地鼠
  19. 解决Chrome 70版本以后谷歌不再信任赛门铁克证书问题
  20. MYSQL 中UNIQUE 用法 意思

热门文章

  1. mysql 设置数据库只读_如何设置mysql数据库为只读
  2. 【LeetCode】【HOT】739. 每日温度(栈)
  3. 【重难点】【JUC 03】怎么实现一个线程安全的队列、手写模拟实现一个阻塞队列
  4. 【Java数据结构与算法】第六章 算法的时间复杂度、算法的空间复杂度和排序算法的介绍
  5. 腾讯的全球地址数据文件及Xml->Json的处理
  6. 力扣529.扫雷游戏
  7. redis压力测试工具-----redis-benchmark
  8. Go基础系列:指定goroutine的执行顺序
  9. 初学网站建设,要学习些什么?
  10. MySQL 输入输出 XML