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

576b622d641fec5c1b2cd2362ac60cbb.gif

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

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

出品 | CSDN(ID:CSDNnews)

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

28f35e3653284e47791b371a9d401d28.jpeg

首先作为一个程序员,只要是写代码,肯定是会产生 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 语言炉火纯青吗?这个没用的,就跟一个美国人说自己英语说的好一个道理,没意义。

 

e2b60b0826efedec5207364cfd1254e2.gif

 

f156335fc2f2563469c33f55bf84bd51.jpeg

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19172.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一次查找分子级Bug的经历,过程太酸爽了

“Debugging is like trying to find a needle in a haystack, except the needle is also made of hay.” Debug调试就像是在大片的干草堆中找针一样,只不过针也是由干草制成的。 在软件开发的世界里,偶尔会出现一些非常隐蔽的 Bug,这时候工…

ChatGPT 修得了别人的 Bug,修不了自己的!OpenAI 直指开源数据库 Redis 漏了底

作者 | 屠敏 出品 | CSDN(ID:CSDNnews) ChatGPT 的火爆,超出了很多人的想象。今年初,根据 UBS(瑞士银行巨头瑞银集团)的一份报告显示,ChatGPT 推出仅两个月后,它在 2023 …

chatgpt赋能python:Python题库搜题:提高编程效率的利器

Python题库搜题:提高编程效率的利器 作为一名有10年Python编程经验的工程师,经常遇到需要快速查找解决问题的情况,而Python题库搜题是我常用的工具之一。本文将着重介绍Python题库搜题的功能和使用方法,以及如何通过优化搜索关键…

chatgpt赋能python:使用Python在SEO中找到完美数

使用Python在SEO中找到完美数 SEO是一项关键技能,它可以使网站或者博客在搜索引擎中获得更好的排名,吸引更多的访问者。Python是一门最流行的编程语言之一,它也是一个很好的SEO工具。本文将介绍如何使用Python来找到完美数,以帮助…

chatgpt赋能Python-python_jam

Python Jam:一个优秀的社区驱动Python学习平台 如果你正在寻找一个能够让你更进一步学习Python的平台,那么你可以考虑加入Python Jam社区。这是一个社区驱动的学习平台,旨在帮助Python学习者找到合适的资源和学习机会。 什么是Python Jam …

chatgpt赋能python:Python题目搜索软件:提升你的编程水平

Python题目搜索软件:提升你的编程水平 对于那些喜欢编程的人来说,学习Python是一个非常不错的选择。但是,学习Python的难度并不小,需要大量的时间和精力。一个好的学习方式是通过完成Python编程题目来加深对该编程语言的理解。但…

chatgpt赋能python:Python的题目该如何搜到答案?

Python 的题目该如何搜到答案? 如果你在学习 Python 的过程中遇到了问题,或者在工作中需要使用 Python 解决一些难题,那么你可能需要在网上搜索一些相关的题目和答案。但是,在众多的搜索结果中,究竟该如何找到最适合你…

当我跟ChatGPT说要写一本关于Python的教程书时。。。。

闲来无事,想让ChatGPT帮我列一份Python教程书的大纲。后续将尝试让ChatGPT根据这份大纲进行撰写。

chatgpt赋能python:Python描点画图详解:从基础到实战

Python描点画图详解:从基础到实战 Python是一种功能强大且易于学习的编程语言,它被广泛应用于机器学习、数据分析和可视化等领域。在数据可视化方面,Python有许多优秀的库和工具,其中最受欢迎的就是Matplotlib。我们将重点介绍如…

总结:一文搞懂chatGPT原理

目前关于chatGPT的资料过于零散,没有详尽所有知识点、系统概述的文章,因此,笔者作了这篇总结性文章。 训练过程总览 理清演化路径 预训练(pretrain) GPT-3概述 GPT 3模型的理念 GPT-3如何学习 数据集 指令微调 (Instruction Fine-Tunin…

【一文系列】一篇文章记录gpt API的使用过程(python版)

【一文系列】一篇文章记录gpt API的使用过程(python版) “一文系列”目标是仅通过一篇文章来解决一个类别问题,简洁高效,快速获取知识,提升技能。 文章目录 【一文系列】一篇文章记录gpt API的使用过程(pyt…

一个时代彻底结束了。

最近和几个大佬们吃饭,都感慨时间真的好快!85年的,如今都快40岁了。90后,也都快35了。有几个大佬经历了PC互联网时代,移动互联网时代。吃足了红利。如果是2010年开启的是移动互联网时代,那么从18年之后&…

原美团联合创始人欲打造中国版 OpenAI ;ChatGPT 爆红惊动谷歌退隐创始人布林;Gradle 8.0 发布|极客头条...

「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews) 一分钟速览新闻点&#…

一个时代彻底结束了!

点击上方“码农突围”,马上关注 这里是码农充电第一站,回复“666”,获取一份专属大礼包 真爱,请设置“星标”或点个“在看 这是【码农突围】的第 439 篇原创分享 作者 l 突围的鱼 来源 l 码农突围(ID:smart…

输出链表(c语言)

输出链表 描述格式样例题解及详细注释 描述 根据给定的数据建立一个由n(n≤1000)个元素组成的链表,然后按逻辑顺序输出其中所有的数据。 每个元素节点由两个域组成:第一个域存储数据,第二个域存储后继元素所在的位置…

【编程实践】Linux / UNIX Shell编程极简教程

不同于一般的介绍Linux Shell 的文章,本文并未花大篇幅去介绍 Shell 语法,而是以面向“对象” 的方式引入大量的实例介绍 Shell 日常操作,“对象” 涵盖数值、逻辑值、字符串、文件、进程、文件系统等。这样有助于学以致用,并在用…

【编程语言】AWK 极简教程

1 概述 AWK 是一种解释执行的编程语言。它非常的强大,被设计用来专门处理文本数据。AWK 的名称是由它们设计者的名字缩写而来 —— Afred Aho, Peter Weinberger 与 Brian Kernighan。 由 GNU/Linux 发布的 AWK 版本通常被称之为 GNU AWK,由自由软件基金( Free Software Fou…

ANTI-PHISHING--如何用OCR检测网站?

一些碎碎念 钓鱼网站有典型的几种特征: 有表单有跳转链接有一些很抓马的关键词巨长巨长的链 通过三种判定条件划分它们的不同类别: 有没有表单有没有跳转链接有没有关键词出现 本菜鸡的思路是,先访问网站获取源码,过滤它有没…

Prompt合集

作者 来自:f Prompt主要内容 我想让你充当「英语翻译员」、「拼写纠正员」和「改进员」。 我会用任何语言与你交谈,你会检测语言,翻译它并用我的文本的更正和改进版本用英语回答。 我希望你用更优美优雅的「高级英语单词」和句子替换我简化…

BFT最前线丨浙江大学和蚂蚁集团合作,成立智能视觉实验室;ChatGPT 对亚洲节点大规模封号;谷歌CEO称将推出Bard升级版

文 | BFT机器人 01 浙江大学和蚂蚁集团合作,成立智能视觉实验室 据消息,浙江大学和蚂蚁集团达成合作成立「智能视觉联合实验室」,旨在推进智能视觉的技术创新和产业应用,重点攻坚包括机器视觉、三维重建、视觉内容生成等人工智能及…