服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

40岁程序员谈修bug的心态问题

日期: 来源:CSDN收集编辑:宋宝华

【CSDN 编者按】于程序员而言,如果说写代码是一种能力的体现,那么解决问题的能力也同等重要,排查问题的能力或许能决定你的职业生涯走的有多远。因此,常有人戏言,程序员不是写代码,而是在写 bug。本文作者是一名 40 来岁的 Linux 内核工程师,他基于自己多年的编码经验,谈谈程序员面对 Bug 时,该如何思考。


作者 | 宋宝华     责编 | 梦依丹
出品 | CSDN(ID:CSDNnews)

笔者是一个老码农,早已年逾 40,目前仍然奋战在一线写代码、修 bug,并没有出现传说中的 35 岁危机。工作这么多年,方方面面的 bug 也接触了不少,想作为一个老码农分享关于修 bug 的心态问题。

首先作为一个程序员,只要是写代码,肯定是会产生 bug,除非这个人不写代码。所以,这一个基本的常识我们得心平气和的接受。要是有个人吹牛说自己写的代码没 bug,那一定是个骗子或者自大狂。但是这并不等于 bug 越多,就越牛逼,我们在编程的时候,肯定是要采取各种手段避免 bug 的发生。比如尤其要注意:

1、多线程、多进程并发访问风险;

2、边界条件处理;

3、遗漏的分支处理等防御性编程的基本思想。

在修复 bug 过程中,最重要的一个心态就是要切莫急躁,急躁是修复不了 bug 的。有的同学,领导进度催促的紧,他就东改一行,西改一行,企图碰运气把这个 bug 修掉。笔者工作这么多年,基本从来没碰到过这样的运气。

代码是这个世界最符合逻辑的东西,反逻辑的运气是不会出现的。越是难修的 bug,越是进度紧张的 bug,越是要心态平静。反复复盘代码逻辑,复盘自身的模块与其他模块的关系,复盘全局的多线程数据访问、时序逻辑。简单来说,对自身关注的代码以及你的代码与其他代码的逻辑关系梳理地越清楚,修复这个 bug 越成为可能。所以实在没思路了,怎么办?复盘逻辑!继续没思路了,怎么办?复盘逻辑。

我印象比较深刻的,之前在修复 wayland 的 client UI 和 server weston 之间通信的逻辑时,crash 的是 Qt App,但是实际的问题是出在 weston 和 app 之间通信的 wayland message 时序上,这个时候唯一的办法,就是理清 wayland 的协议,什么时候 client 和 server 应该发什么样的消息,什么样的消息导致窗口的 destroy 等,只能静下来来,反复分析。一条条看捕获的 client 和 server 之间的 wayland socket 消息,对照协议分析 client 和 server 进程之间的时序是否紊乱了。没有其他的办法。

退一万步讲,哪怕一个人真地瞎试把 bug 侥幸“修复”了,对个人的成长又有什么帮助呢?我们提炼了什么规律呢?理清了什么逻辑呢?自己能说的清楚为啥修复了吗?这样的蛮干是不会成长的。

在修复 bug 的过程中,不妨尝试 refresh 一下自己的大脑。有时候脑袋麻了,思路就会短路了。不如出去呼吸五分钟新鲜空气,看似浪费了五分钟,实则很可能在这五分钟里面,获得了一个思路。我个人经常碰到的情况是,在电脑面前坐麻了,心情也比较焦急,因为急着修 bug 啊。但是,娃放学到点了,我不得不出去接个娃,十来分钟路上,我发现这个 bug 我回来就可以修复了。所以,有时候,慢就是快。看似浪费了十分钟接娃,实则这十分钟的新鲜空气清醒了大脑,所以修复这个 bug 的贡献可能得算到娃的头上。

写代码的时候,不妨多加一些断言/BUG_ON 之类,在不确定的位置,留下一下打印。代码的世界充满了神奇,你觉得走到某个位置的时候,a 必然是等于 1 了,但是代码跑起来偏偏就等于 2。为啥呢?因为是代码就有 bug 啊,是 bug让它不等于 1 的。那么我们可以尝试加一个 BUG_ON(a!=1)。任何的 bug,都是出现地位置越早,越好修的。BUG 遵循“早死早超生”的规律,如果你在 a 处犯错了,死在了 b 处、c 处、d 处,显然你比较难追溯到 a 处,但是如果你在 a 处就提前侦测到了潜在的问题,则主动降低了修复这个 bug 的难度。尤其是产品上线后,甚至会出现实验室反复测试都无法复现的 bug,这些异常点增加的 BUG_ON、打印之类,都可以帮忙提示修复的方向。

修复 bug,需要建立业务领域知识的广度和深度。作为一个 Linux 内核工程师,比如改了内存管理、page fault、swap 等的代码,看似仅改了一个模块的很少一部分代码,但是由于这个代码太底层,它可能和很多其他的内核组件比如调度、文件系统、VFS、page cache 等都有千丝万缕的联系,这个时候,没有对内核的广度和深度的理解,是很难修复 bug 的。所以,我们千万不要小看了修复 bug 这个事情本身,同样的 bug 有的人弄一个月都不知所措,有的人两天就解决了。你觉得差的这 28 天原因是啥?无他,懂还是不懂业务知识,而不是编程语言本身。

所以,对 C、C++、Java 等语言的掌握度是绝对拉不开程序员距离的,能拉开程序员距离的是对编程语言施加的业务的掌握度。语言是个最基本的东西,你比如每个美国人都会说英语,但是每个美国人的业务水平都不一样,有人 0 元购,有人乔布斯。作为一个程序员,你能拿出来炫耀说自己 C 语言炉火纯青吗?这个没用的,就跟一个美国人说自己英语说的好一个道理,没意义。

☞ChatGPT 带火的「提示工程师」岗,不用写代码,也能获得年薪数百万?
☞CSDN 亮相 2023 全球人工智能开发者先锋大会
☞复旦大学邱锡鹏:若优化顺利,MOSS三月底开源;库克或被踢出苹果董事会;华为云联合CSDN发布智能化编程助手Snap|极客头条

相关阅读

  • 【深度长文】如何研判未来房地产市场的走势?

  • 来源 | 沧海一土狗 编辑 | 陆家嘴大宗商品论坛,转载请注明出处文/沧海一土狗ps:4400字引子如果我们用十年国债收益率来代理经济的热度,那么,当下的经济处于一个十分微妙的状
  • ChatGPT在信息安全攻击与防御的实践

  • ‍‍‍01背景介绍‍‍‍‍ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体,GPT-3经过训练,可以在对话中生成类似人类的文本响应。ChatGPT 旨在用作聊天机
  • 【设计模式】面试中被问的最频繁的「策略模式」

  • 模拟面试、简历指导可私信找我,最低的价格收获最高的指导~前言大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心。什么是设计模式?为
  • 华云安漏洞安全周报【第121期】

  • 根据国家信息安全漏洞库(CNNVD)统计,本周(2023.02.06~2023.02.12)CNNVD接报漏洞313个,其中信息技术产品漏洞(通用型漏洞)227个,网络信息系统漏洞(事件型漏洞)86个,CNNVD接报漏洞预警113
  • 工作一年,我重新理解了《重构》

  • 阿里妹导读把《重构:改善既有代码的设计》这本书推荐给已经接触了工程代码、工作一年左右的新同学,相信有了一定的经验积累,再结合日常项目实践中遇到的问题,对这本书的内容会有
  • 推荐 | 首次上架!观看效果不错速收!

  • 由于众所周知的原因,观影工具通常会以套壳的形式存在,前几天有小伙伴反映之前的工具失效了,今天推荐一款全新上架的~一起来看看吧﹀﹀﹀美妆预算 4+ ★★★★★4.5,2 个评分 ▼

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 40岁程序员谈修bug的心态问题

  • 【CSDN 编者按】于程序员而言,如果说写代码是一种能力的体现,那么解决问题的能力也同等重要,排查问题的能力或许能决定你的职业生涯走的有多远。因此,常有人戏言,程序员不是写代
  • 雅安名山:提升服务监督质效 保障春茶加工用电

  • “保障供电质量,保障电网安全稳定运行,保障茶叶加工企业的用电需求,是我们义不容辞的责任和义务。”近日,国网雅安市名山供电公司纪委工作人员深入名山区茶叶加工用户开展供电服
  • 基于大规模边缘计算的千万级聊天室技术实践

  • 在技术的迭代更新下,面对大型、超大型的直播场景,大规模边缘聊天室成为新热潮。作者 | 张超 责编 | 王子彧出品 | CSDN(ID:CSDNnews)当前直播成为一种流行趋势,带货直播,网红