• 我的订阅
  • 科技

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

类别:科技 发布时间:2023-02-28 09:00:00 来源:CSDN

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

作者 | 宋宝华 责编 | 梦依丹

出品 | CSDN(ID:CSDNnews)

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

40岁程序员谈修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|极客头条 返回搜狐,查看更多

责任编辑:

以上内容为资讯信息快照,由td.fyun.cc爬虫进行采集并收录,本站未对信息做任何修改,信息内容不代表本站立场。

快照生成时间:2023-02-28 09:45:11

本站信息快照查询为非营利公共服务,如有侵权请联系我们进行删除。

信息原文地址:

伪代码与流程图的关系
...。精心策划的软件设计,通常会具备以下特性:1.能帮助程序员编写更干净、更可靠的代码;2.以可视化格式规划代码有助于在编写代码后改进代码库,并在项目的整个生命周期内减少bug和
2022-12-27 13:41:00
首个AI程序员上岗,码农们暂且不必过度焦虑
“AI程序员上岗”或许是噱头,但淘汰焦虑仍然近在咫尺,需要积极面对。全文2418字,阅读约需7分钟撰稿 / 马尔文(媒体人)编辑 / 何睿 校对 / 张彦君▲随着相关技术的突飞猛
2024-04-07 13:55:00
产品经理终于迎来了属于自己的红利时代
...经理们做牛马的 5 年。“产品的是我们设计的,但代码是程序员写出来的、用户是运营做起来的、收入是销售卖出去的。锅我们背,但好事儿请靠边站。”虽说“产品经理是 CEO 的黄埔军
2024-04-28 11:00:00
ChatGPT能取代多少程序员?
...是革命性的。”樊高曾在国内大厂做过后端工程师,离开程序员岗位许久,他因为ChatGPT又再一次将目光投向代码世界。樊高觉得,作为生成式AI,ChatGPT的交互能力极强,“它
2023-03-04 09:53:00
告别搜索引擎!讯飞星火认知大模型评测:改变人机交互方式 还能帮你写代码!
...将Python代码转换为Java代码,跨语种编程的实用性,只有程序员才能领略得到。我们也对大模型的代码解释与编写能力做了测试
2023-06-15 22:00:00
传openai全球招外包大军手把手训练chatgpt取代码农
...家硅谷大厂都在做。DeepMind的AlphaCode,据说「吊打72%人类程序员」,但尚未开放;传闻中谷歌的「神秘项目」Pitchfork
2023-01-30 17:19:00
Github Copilot 初体验
...够快。虽然它已经快到秒出答案,但这对快速输出状态的程序员来说仍然是不够的。要么它的提示还没出现你就继续输入了,要么你会因为等它而暂时停下思路。Github Copilot 总
2023-01-24 09:00:00
奥哲被曝将发布AI低代码平台,AIGC会改变低代码行业格局吗
...响。一系列AI开发工具由此诞生。同时,AI在带来“取代程序员”的焦虑之外,也给我们带来了更多值得思考的议题。AI开发,老问题的新解法事实上,在计算机科学的发展史上,AI辅助开
2023-06-14 21:00:00
ChatGPT 火爆,程序员会不会被取代?答案都在这里!
...人工智能的新十年究竟会有什么变化,通过由 CSDN、《新程序员》、上海市人工智能行业协会主办,百度飞桨、达观数据、智源人工智能研究院协办的 全球人工智能开发者先锋大会(GAI
2023-02-28 09:00:00
更多关于科技的资讯: