@程序員,承認吧,都是你的錯!


老讀者都知道的,我沒干過什么大事,無非就是敲敲代碼、寫寫文章。還有就是及時吃飯、睡覺、打豆豆。

這不,就有個哥們看不慣我了,再見之后還要撂下這句狠話:“你這種人是干不了大事的。”

好吧,我承認,都是我的錯!我真沒想過要干什么大事。我覺得打打雜,掃掃地挺好的。我估計我來到這個世界上的時候,父母也沒對我抱太大的期望,否則清華北大沒錄取我這事會把他們氣瘋掉的。事實上,即便我只考了個大專,他們仍然沒有拋棄我、放棄我。

不知道大家有沒有看過《西西里島的美麗傳說》,漂亮的女主人公(女神)被生活無情的摧殘,但最后,她仍然對那些欺辱過她的女人報以純潔的微笑

我對這位貶低我的哥們也報以微笑(😊),快,看我的表情,純潔吧?那為什么我還要提這件事呢?難道不是因為我小肚雞腸、耿耿於懷?還真不是的,我只是想引(che)出本篇文章的主題:程序員,承認吧,都是你的錯

(看我耍了多么大的心機)

不知道大家有沒有過這樣的體驗:明明程序在本地測試通過,運行的好好的;但不知道為什么在正式環境下就偏偏有問題,不僅見了鬼,還奇了怪!

我們找啊找,費了老大的勁兒,可還是找不到原因。問題把我們折騰得夠嗆,於是我們只好攤攤手,搖搖頭,嘆口氣,很難為情地扔下一句狠話:“這特么肯定是環境有問題。”

是的,對於大多數的項目來說,代碼里常常混雜着很多東西:團隊其他成員的代碼、第三方類庫、數據庫鏈接、網絡通信等等,以及程序運行的平台環境。

對於大多數的程序員來說,不得不面對的一個沉重的事實就是,工作中用的電腦是 Windows 操作系統,而項目正式部署的環境是 Linux 操作系統。跨平台之間的差異,有的時候能把我們搞崩潰。

早年間我做過一個大宗期貨交易平台,某一家客戶為服務器端提供的環境是 Windows,某一家客戶提供的是 Linux。代碼打成 的 war 包幾乎沒有任何差別,唯一差別就是幾個配置參數不一樣。Linux 的運行的好好的,但 Windows 就很不幸了,Web 版的首頁打開幾乎要一分鍾之久,那種什么事也干不了的等待幾乎能把所有的用戶殺死在搖籃中。

當時我很傻很天真,腦子也沒怎么動,心思全放在如何減輕首頁加載的資源上面。把 CSS 壓縮、把 JavaScript 壓縮、減少請求的訪問數目、圖片懶加載、緩存、減輕數據庫的壓力等等,我能想到的辦法都試了試,但幾乎於事無補——首頁的訪問速度沒有什么明顯的改善。

經過一周時間的琢磨,我打算放棄了,差點憤怒地把鍵盤砸壞(握緊雙拳,用力地砸下去)——大家有過那種要發泄情緒的時候嗎?

很無助,就像少年派和一只吃人的老虎飄盪在同一條救生船上一樣的無助!

這特么肯定是環境有問題

但我決定忍住,於是我又花了一周的時間研究了很多其他性能優化的方案,雖然最后仍然沒起多大用處。沒辦法,我終於妥協了。我開始和客戶溝通,問他們能不能提供一個 Linux 環境的服務器。大家猜客戶怎么說?他們說不用再提供,只需要一鍵切換就可以把 Windows 切換成 Linux,雲服務器都有這種功能。what?

然后,我迫不及待地重新安裝了 Linux 版的 JDK、MySQL、Tomcat,把之前在 Windows 上運行的 war 包往上面一扔,然后啟動 Tomcat,大家猜結果怎么樣?

首頁訪問速度和另外一台 Linux 的幾乎差不多,幾秒鍾的事兒。當時我那個氣急敗壞的樣子,就好像地主家生了個傻兒子一樣。

從此,我就篤定一條:只要問題搞不定,就賴環境,就賴第三方

后來,我在做支付寶支付的時候遇到了另外一個奇怪的問題,用戶的錢已經從平台的支付寶賬戶上划走了,但我們平台的資金賬戶就是沒有更新。

我當時就懷疑是支付寶的第三方 jar 包出了問題。因為系統一直運行的挺穩定的,我也沒有對支付寶接口做任何的修改。

我就憤憤不平地提交了工單,質問支付寶的小哥:“你們支付寶接口是不是有問題,為什么支付寶上的賬戶資金已經划轉了,卻沒有給我返回通知,導致我們平台上的資金賬戶沒有更新?”

來來回回和小哥溝通了幾次,他態度一直挺淡定、挺友好的,我卻一次又一次的心虛:問題找出來了,是我不經意間修改了一行代碼導致收到的通知被漏掉了(竟然忘了比較代碼版本)。

當時自己那個灰頭土臉的樣子,真的是想找個地洞藏起來,羞愧難當啊!我至今還清楚地記得我最后回復的那句話:“對不起,是我錯怪支付寶了。小哥,請見諒。”十足的勇氣。

不知道那位小哥當時收到我這句真誠的道歉時會怎樣想,會不會心里惡狠狠地罵一句:“又遇到一個傻X,當我們支付寶是過家家的啊。”

在我這十年程序生涯中,遇到過的 bug 多到像秋天里的蚊子一樣,數也數不清,補丁打也打不完。我總結出來一條真理:承認吧,都是你的錯,問題就出在你自己寫的代碼里。只有抱着這種心態,才能在最快的時間內找出問題的解決辦法。

從統計學的角度來看,軟件中的故障一般都是人為引起的,例外的情況少之又少。這一點在《代碼大全》這本書中也曾被提到過,盡管統計的年代已經離我們很遙遠了,但仍然具有借鑒意義。

通過 1973 年和 1984 年的兩次研究表明,所有上報的錯誤中,大約 95% 是由程序員引起的,2% 是由系統軟件(編譯器和操作系統)造成的,2% 是由其他軟件(第三方類庫)造成的,1% 是由硬件造成的。

就目前的情況來看,系統軟件、第三方類庫和硬件都越來越趨完善,那么相對來說,程序員肩負的責任就更大了。這大概也是程序員動不動被拿來祭天的原因了(呵呵)。

淡定淡定,就讓我們做一個謙遜的程序員吧,遇到問題就毫不猶豫地從自己的代碼找起,哪怕最后確定問題真的不是自己引起的,那么也為我們打足了底氣,留下了確鑿的證據。從另外一方面來說,這是防止別人甩鍋的最好辦法。

“嘿,哥們,這是我的錯,就讓我來把問題弄個水落石出吧!”就像我對待文章開頭提到的那個抨擊我的哥們來說,大家並不會覺得我不夠硬氣,反而只會覺得那哥們很可愛,而我很風度翩翩。


好了各位讀者朋友們,以上就是本文的全部內容了。能看到這里的都是最優秀的程序員,二哥必須要伸出大拇指為你點個贊👍。如果覺得不過癮,還想看到更多,我再給大家推薦幾篇。

程序員的遮羞布:這個需求技術上無法實現
@程序員,別再迷戀多線程工作了
@程序員,請掌握這些核心生存技能

日常操作來了!如果覺得這篇文章有點用的話,求點贊,明人不說暗話,我喜歡這種被大家伙寵愛的感覺。

one more thing!如果大家想要第一時間看到二哥更新的文章,可以掃描下方的二維碼,關注我的公眾號。我們下篇文章見!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM