狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

40歲程序員談修bug的心態(tài)問(wèn)題

admin
2023年3月8日 9:4 本文熱度 1321
文章簡(jiǎn)介:于程序員而言,如果說(shuō)寫(xiě)代碼是一種能力的體現(xiàn),那么解決問(wèn)題的能力也同等重要,排查問(wèn)題的能力或許能決定你的職業(yè)生涯走的有多遠(yuǎn)。因此,常有人戲言,程序員不是寫(xiě)代碼,而是在寫(xiě) bug。本文作者是一名 40 來(lái)歲的 Linux 內(nèi)核工程師,他基于自己多年的編碼經(jīng)驗(yàn),談?wù)劤绦騿T面對(duì) Bug 時(shí),該如何思考。

作者 | 宋寶華

筆者是一個(gè)老碼農(nóng),早已年逾 40,目前仍然奮戰(zhàn)在一線寫(xiě)代碼、修 bug,并沒(méi)有出現(xiàn)傳說(shuō)中的 35 歲危機(jī)。工作這么多年,方方面面的 bug 也接觸了不少,想作為一個(gè)老碼農(nóng)分享關(guān)于修 bug 的心態(tài)問(wèn)題。


首先作為一個(gè)程序員,只要是寫(xiě)代碼,肯定是會(huì)產(chǎn)生 bug,除非這個(gè)人不寫(xiě)代碼。所以,這一個(gè)基本的常識(shí)我們得心平氣和的接受。要是有個(gè)人吹牛說(shuō)自己寫(xiě)的代碼沒(méi) bug,那一定是個(gè)騙子或者自大狂。但是這并不等于 bug 越多,就越牛逼,我們?cè)诰幊痰臅r(shí)候,肯定是要采取各種手段避免 bug 的發(fā)生。比如尤其要注意:

1、多線程、多進(jìn)程并發(fā)訪問(wèn)風(fēng)險(xiǎn);

2、邊界條件處理;

3、遺漏的分支處理等防御性編程的基本思想。

在修復(fù) bug 過(guò)程中,最重要的一個(gè)心態(tài)就是要切莫急躁,急躁是修復(fù)不了 bug 的。有的同學(xué),領(lǐng)導(dǎo)進(jìn)度催促的緊,他就東改一行,西改一行,企圖碰運(yùn)氣把這個(gè) bug 修掉。筆者工作這么多年,基本從來(lái)沒(méi)碰到過(guò)這樣的運(yùn)氣。

代碼是這個(gè)世界最符合邏輯的東西,反邏輯的運(yùn)氣是不會(huì)出現(xiàn)的越是難修的 bug,越是進(jìn)度緊張的 bug,越是要心態(tài)平靜。反復(fù)復(fù)盤(pán)代碼邏輯,復(fù)盤(pán)自身的模塊與其他模塊的關(guān)系,復(fù)盤(pán)全局的多線程數(shù)據(jù)訪問(wèn)、時(shí)序邏輯。簡(jiǎn)單來(lái)說(shuō),對(duì)自身關(guān)注的代碼以及你的代碼與其他代碼的邏輯關(guān)系梳理地越清楚,修復(fù)這個(gè) bug 越成為可能。所以實(shí)在沒(méi)思路了,怎么辦?復(fù)盤(pán)邏輯!繼續(xù)沒(méi)思路了,怎么辦?復(fù)盤(pán)邏輯。

我印象比較深刻的,之前在修復(fù) wayland 的 client UI 和 server weston 之間通信的邏輯時(shí),crash 的是 Qt App,但是實(shí)際的問(wèn)題是出在 weston 和 app 之間通信的 wayland message 時(shí)序上,這個(gè)時(shí)候唯一的辦法,就是理清 wayland 的協(xié)議,什么時(shí)候 client 和 server 應(yīng)該發(fā)什么樣的消息,什么樣的消息導(dǎo)致窗口的 destroy 等,只能靜下來(lái)來(lái),反復(fù)分析。一條條看捕獲的 client 和 server 之間的 wayland socket 消息,對(duì)照協(xié)議分析 client 和 server 進(jìn)程之間的時(shí)序是否紊亂了。沒(méi)有其他的辦法。

退一萬(wàn)步講,哪怕一個(gè)人真地瞎試把 bug 僥幸“修復(fù)”了,對(duì)個(gè)人的成長(zhǎng)又有什么幫助呢?我們提煉了什么規(guī)律呢?理清了什么邏輯呢?自己能說(shuō)的清楚為啥修復(fù)了嗎?這樣的蠻干是不會(huì)成長(zhǎng)的。

在修復(fù) bug 的過(guò)程中,不妨嘗試 refresh 一下自己的大腦。有時(shí)候腦袋麻了,思路就會(huì)短路了。不如出去呼吸五分鐘新鮮空氣,看似浪費(fèi)了五分鐘,實(shí)則很可能在這五分鐘里面,獲得了一個(gè)思路。我個(gè)人經(jīng)常碰到的情況是,在電腦面前坐麻了,心情也比較焦急,因?yàn)榧敝?bug 啊。但是,娃放學(xué)到點(diǎn)了,我不得不出去接個(gè)娃,十來(lái)分鐘路上,我發(fā)現(xiàn)這個(gè) bug 我回來(lái)就可以修復(fù)了。所以,有時(shí)候,慢就是快。看似浪費(fèi)了十分鐘接娃,實(shí)則這十分鐘的新鮮空氣清醒了大腦,所以修復(fù)這個(gè) bug 的貢獻(xiàn)可能得算到娃的頭上。

寫(xiě)代碼的時(shí)候,不妨多加一些斷言/BUG_ON 之類(lèi),在不確定的位置,留下一下打印。代碼的世界充滿了神奇,你覺(jué)得走到某個(gè)位置的時(shí)候,a 必然是等于 1 了,但是代碼跑起來(lái)偏偏就等于 2。為啥呢?因?yàn)槭谴a就有 bug 啊,是 bug讓它不等于 1 的。那么我們可以嘗試加一個(gè) BUG_ON(a!=1)。任何的 bug,都是出現(xiàn)地位置越早,越好修的。BUG 遵循“早死早超生”的規(guī)律,如果你在 a 處犯錯(cuò)了,死在了 b 處、c 處、d 處,顯然你比較難追溯到 a 處,但是如果你在 a 處就提前偵測(cè)到了潛在的問(wèn)題,則主動(dòng)降低了修復(fù)這個(gè) bug 的難度。尤其是產(chǎn)品上線后,甚至?xí)霈F(xiàn)實(shí)驗(yàn)室反復(fù)測(cè)試都無(wú)法復(fù)現(xiàn)的 bug,這些異常點(diǎn)增加的 BUG_ON、打印之類(lèi),都可以幫忙提示修復(fù)的方向。

修復(fù) bug,需要建立業(yè)務(wù)領(lǐng)域知識(shí)的廣度和深度。作為一個(gè) Linux 內(nèi)核工程師,比如改了內(nèi)存管理、page fault、swap 等的代碼,看似僅改了一個(gè)模塊的很少一部分代碼,但是由于這個(gè)代碼太底層,它可能和很多其他的內(nèi)核組件比如調(diào)度、文件系統(tǒng)、VFS、page cache 等都有千絲萬(wàn)縷的聯(lián)系,這個(gè)時(shí)候,沒(méi)有對(duì)內(nèi)核的廣度和深度的理解,是很難修復(fù) bug 的。所以,我們千萬(wàn)不要小看了修復(fù) bug 這個(gè)事情本身,同樣的 bug 有的人弄一個(gè)月都不知所措,有的人兩天就解決了。你覺(jué)得差的這 28 天原因是啥?無(wú)他,懂還是不懂業(yè)務(wù)知識(shí),而不是編程語(yǔ)言本身。

所以,對(duì) C、C++、Java 等語(yǔ)言的掌握度是絕對(duì)拉不開(kāi)程序員距離的,能拉開(kāi)程序員距離的是對(duì)編程語(yǔ)言施加的業(yè)務(wù)的掌握度。語(yǔ)言是個(gè)最基本的東西,你比如每個(gè)美國(guó)人都會(huì)說(shuō)英語(yǔ),但是每個(gè)美國(guó)人的業(yè)務(wù)水平都不一樣,有人 0 元購(gòu),有人喬布斯。作為一個(gè)程序員,你能拿出來(lái)炫耀說(shuō)自己 C 語(yǔ)言爐火純青嗎?這個(gè)沒(méi)用的,就跟一個(gè)美國(guó)人說(shuō)自己英語(yǔ)說(shuō)的好一個(gè)道理,沒(méi)意義。


該文章在 2023/3/8 9:04:46 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved