軟件開發工作充滿了挑戰性。人無完人,對於程序員來説,寫出有 bug 的代碼是在所難免的。有些人很淡定,也有一些人會感到生氣、沮喪、不安或氣餒。在修復 bug 的過程中我們都經歷了什麼?這個值得我們一探究竟。
本文列出了程序員在修復 bug 時可能會説的一些話或者想法。我敢説很多程序員都曾經歷過編程的艱辛,但在事後都會一笑而過。
1. “我不知道該把它刪掉還是該重寫”
看着舊代碼,你總有一種想要重寫它們的衝動。醜陋的邏輯語句和囉嗦的語法極大降低了代碼可讀性!但是,如果代碼跑得好好的,為什麼要去修改它們呢?我經常會陷入這樣的兩難境地,而且我相信這也困擾着很多其他程序員。
2. “我先到 GitHub 上找個框架”
我想大多數人都知道 GitHub,這個網站每天都會有很多開源項目發佈出來。開發者們加入這個網站,給已有的項目拉取分支,在 wiki 上討論,或者創建自己的代碼庫。網站提供了很多很好的插件和模板,可以被用在各種各樣的項目中。
3. “為什麼這個腳本要用這麼多庫?”
如果你要使用熱門的編程語言,比如 Java 和 Objective-C,那麼項目依賴庫的數量會變得非常大。在採用一個需要大量依賴項的框架時這一點就變得非常明顯。一些 JavaScript 插件也需要大量的額外文件。有時候這些雜亂的東西會讓人厭煩,但至少它們是可以用的!
4. “網上一定能找到解決方案”
在碰到難題時,我的第一反應是上網。很多程序員會在論壇上問問題,這些問題最終會得到解答。谷歌非常善於挑選與你的問題相關的關鍵字,併為你提供這些有用論壇帖子。但可惜的是,有時候對於某個特定的問題並沒有太多的信息。
5. “這個功能有沒有對應的插件?”
為什麼要重複發明輪子呢?要擴展用户界面、程序或網站,插件是一種很好的方式。另外,插件還能提供定製化功能。如果找不到相應的插件,為什麼不自己開發一個?
6. “網站沒問題,就怕遇到 IE”
在 IE 中渲染網頁給我們帶來了很多考驗和磨難,這個就不用多説了。從 IE 5.5 到 IE 9/IE 10,人們一直在為獲得更好的瀏覽器支持而做着艱苦卓絕的鬥爭。Web 開發人員可能很擔心網頁調試,因為在 IE6 中打開一個網頁可能就是一場噩夢。值得慶幸的是,那些日子正慢慢成為過去。
7. “這條邏輯語句的邏輯性不是很強”
if/else 循環、for 循環、while 循環、do 循環,這些都是邏輯語句,除了這些之外還有很多。在閲讀示例代碼時,我會反覆回想我代碼裏的邏輯應該怎樣寫更好。大量的非運算符和比較符號會讓你暈頭轉向。所以,我會經常回頭去修改之前寫好的邏輯。
8. “半小時寫的函數,花兩個小時調試”
你一股腦兒寫了一個函數,然後函數輸出了一個致命的錯誤。為了找到問題所在,你不得不把其他代碼刪掉,只留下出問題的那幾行代碼。當你最終找到問題並把它修復,你會感到筋疲力盡,但同時也鬆了一口氣。
9. “在看了幾篇文章之後,我才意識到之前的做法是錯的”
我通常喜歡用自己的方式做事,但如果事情沒有按照原計劃進行,可能就會有麻煩。有好多次,我開始一個項目遇到了麻煩,然後開始在網上搜博客尋找解決方案。最後我發現我的方法是錯誤的,重新開始也許會更容易些!所以,在一開始先做一些調研,從長遠來看肯定會節省時間。
10. “StackOverflow 上好人多,他們會幫我的”
我已經記不清有多少次是通過 StackOverflow 解決難題的。這個社區有很多有才又友好的人,如果你願意尋求幫助,他們就會幫助你。在所有的在線社區中,StackOverflow 無疑是能夠提供最廣泛支持的地方。
11. “少了右括號,麻煩一大堆”
調試代碼就是跳來跳去,向前兩步,後退一步,再向前兩步,如此往復。花上幾個小時盯着代碼看,查找函數名或變量作用域中的錯誤,最後卻發現少了右括號,那種感覺很怪異。所有的時間都浪費在了一個很小的語法錯誤上,感覺自己真是個天才,也是個傻瓜。
12. “休息一下”
有時候你需要站起來,離開顯示器一會兒。在敲了幾個小時的鍵盤之後,休息一會兒肯定有助於你思考。大多數的健康指南建議每 30 到 60 分鐘休息一次,但這完全取決於你的需要。如果總是在半途中斷,你可能也會感到惱怒。
13. “手頭的項目先停下,稍後再繼續”
除了離開電腦,這是另一種休息方式。或許你還有其它工作可以做,那就去做吧。這是一種更好的分配時間和資源的方式,特別是如果你已經花了 5 個小時還解決不了一個問題的時候。
14. “有沒有能夠激發我編程能力的古典音樂?”
有一種觀點認為,在植物生長的初期,播放古典音樂有助於植物的生長。我個人很喜歡古典音樂複雜的音符和音樂理論。爵士樂、鋼琴、大樂隊,古典音樂在人類文化中都佔有一席之地。那麼,在編程時聽音樂真的能讓你在調試代碼時變得更聰明嗎?可能不會,但希望它也不會讓你變得更笨。
15. “或許現在是檢驗鮑爾默巔峯理論的好時機”
我想很多讀者都知道鮑爾默巔峯理論:
https://xkcd.com/323/
該理論認為,程序員在攝入一定數量的酒精後,其編碼能力將達到巔峯。這是由史蒂夫·鮑爾默的古怪行為引起的,它可能只是一個酒鬼的胡言亂語。不過這有點諷刺,因為鮑爾默在微軟並不是一名程序員。我想我們得等別人來試驗一下這個理論。
16. “誰動了我的代碼?”
這聽起來就像是一種妄想症,但有時你不得不懷疑,正當你忙着補覺時,是誰在寫了這些代碼。過去幾周或幾個月忙的項目讓你感到沮喪。有時候你會不記得自己往代碼庫裏添加過東西——甚至是上週剛剛查看過的項目!
17. “我不知道這是什麼意思”
最糟糕的情況是,你一邊閲讀源代碼,一邊不知道該做點什麼。可能是你自己的項目,也可能是其他人的項目,但問題是一樣的。現在,你必須決定是花更多的時間查找替代方案,還是花時間分析腳本,把它看懂。
18. “我要在谷歌上搜一下這個錯誤消息”
在做了多年 PHP 開發之後,我不得不説谷歌是我的好朋友。如果你使用的是其它編程語言,比如 Objective-C、C 、Java、Python 等,應該也會有同樣的體會。錯誤消息試圖為我們提供幫助,但除非你已經記住了各種錯誤代碼的含義,否則它們看起來更像是經過翻譯的計算機語言。值得慶幸的是,網上有很多內容可以幫助我們確定這些錯誤消息到底是什麼意思。
19. “今天應該到此為止,但我真的很想解決這個問題!”
我們都知道,當你想要放棄一件事情,會有一種挫敗感,同時又覺得放棄並不是正確的選擇。你希望繼續前進,並嘗試新的解決方案。但如果你發現你又因此浪費了一個小時呢?我經常遇到這種情況,這讓人感到非常沮喪。
20. “天哪,我為什麼沒寫註釋?”
在寫前端 HTML/CSS/JS 代碼時,並不總是需要寫註釋。但對於複雜一些的腳本和程序,就需要某種類型的註釋,以便你在幾個月後甚至幾年後回過頭來查看。有時候你會忘記給函數及其參數、輸出格式和其他基本數據添加註釋。當出現錯誤時,你需要調試整個腳本才能找到解決方案時,這無疑會給你添亂。這個時候你就會想,如果當初加一些有用的註釋就好了。
21. “剛才它還能運行……”
開發程序最令人感到沮喪的,可能是什麼都沒做——既沒有更新,也沒有修改代碼——程序卻突然不能正常運行了。我發誓,這種事請經常發生。也許是因為其他程序正在運行舊的版本?有時候,更新一小段代碼就會導致整個程序崩潰,然後只能恢復到最近的可運行版本,並從那裏接着往下開發。
22. “就因為忘記加個分號,整個程序都崩潰了”
我用過的每一種編程語言幾乎都需要行終止符,當然並不是所有的都需要,但 C/C 族編程語言通常是這樣的。如果你忘記添加結束分號,只是一個無心的錯誤,但解析器不理解這一點,它會無情地拋出一個致命錯誤。然後,你必須再花 20 分鐘來查看代碼,最後你發現缺少了一個分號。也許這就是調試的“樂趣”。
23. “我想知道如果請人來修復我犯下的錯誤要花多少錢?”
聘請其他開發者來修復問題,這種想法很誘人,但顯然財務上不允許。另外,如果你不親自動手,怎麼能從這些錯誤中吸取到教訓呢?在經歷了多次失敗之後,當你最終對一個編程概念有了透徹的理解,你才會感覺良好,但這並不能阻止我的腦子裏出現想要聘請更多人的想法。
24. “快速瀏覽一下 Hacker News 肯定能提高工作效率”
很多程序員喜歡在 Hacker News 上了解與軟件及初創公司相關的社會新聞。這個網站上有很多關於自由職業、時間管理、軟件開發、新公司啓動和融資的信息。雖然瀏覽這個網站會給你帶來高效的感覺,但它也在消耗你的時間。每隔幾個小時休息一下,趁這個時候去看看新聞或許會更好。
25. “這個 API 怎麼能沒有文檔!”
如果你使用的插件或框架沒有文檔,那麼最令人感到沮喪的是你必須自己深入查看它們的源代碼。我喜歡那些開發人員會花時間專門設計文檔的項目。文檔解釋了所有可用的參數和選項,甚至可能還會提供一些示例代碼片段。但遺憾的是,並不是所有的項目都會這樣。最簡單的方法就是遠離那些沒有詳細文檔的項目,這樣你就不會那麼痛苦了。
26. “我多麼希望給數據庫做過備份……”
在開發和調試代碼時,我並不總是會想到給數據庫做備份。但是,數據備份提供了一個保障,在做出某些變更之前可以及時回退。記住,請在本地保留網站項目文件和數據庫的副本,以備不時之需!這可能是一項煩人的任務,但絕對沒有重建被損壞的 SQL 數據庫那麼煩人。
27. “要解決這個問題,最快的方案是什麼?”
在經過了幾個小時毫無頭緒的工作之後,很明顯,你可能需要嘗試一種新的方法。在設計接口之前,程序員希望先讓功能正常運行起來。確定最快速、最準確的解決方案,並保證 100% 的時間都可以正常運行,然後繼續做那些錦上添花的東西。
28. “我打賭,更新新版本就可以解決這個問題”
負責管理編程語言依賴項和插件的團隊不需要經常發佈新版本。有時候,更新 PHP/Ruby/Python/SQL 版本就可以解決將文件從本地傳輸到服務器時的調試問題。本地更新很少有助於修復源代碼中的 bug,除非你的版本已經過時。值得一試!
29. “我應該學習 Git……但我想從下週開始”
版本控制系統 Git 在程序員中非常流行,它的學習曲線比其他競爭對手要容易些,被用於管理很多在線代碼倉庫,比如 Github 和 Bitbucket。開發人員之所以想要延後學習,是因為對於初學者來説,它的入門曲線非常陡峭。但是,一旦理解了它的基本命令,Git 就變得非常簡單了。
30. “扔掉這個,我要從頭開始”
有時候,在花了幾個小時嘗試某個解決方案之後,你會將工作文件移動到存檔目錄(或刪除它們),然後從頭開始。之前幾個小時的辛苦工作幾乎沒得到有什麼回報,所以做出這個決定是很艱難的。但當我陷入困境時,重新開始往往正是完成一個項目所需要做的事情。
https://www.hongkiat.com/blog/things-programmers-say/