程序員翻車時,腦子里都在想什么?
開發(fā)工作充滿了挑戰(zhàn)性。人無完人,對于程序員來說,寫出有 bug 的代碼是在所難免的。
有些人很淡定,也有一些人會感到生氣、沮喪、不安或氣餒。
在修復(fù) bug 的過程中我們都經(jīng)歷了什么?來和大雄一起找找共鳴,看看大家是不是都經(jīng)歷過這種掙扎:
看著舊代碼,總有一種想要重寫它們的沖動。
丑陋的邏輯語句和啰嗦的語法極大降低了代碼可讀性!
但是,如果代碼跑得好好的,為什么要去修改它們呢?
我們經(jīng)常會陷入這樣的兩難境地,而且我相信這也困擾著很多其他程序員。
我想大多數(shù)人都知道 GitHub,這個網(wǎng)站每天都會有很多開源項目發(fā)布出來。
開發(fā)者們加入這個網(wǎng)站,給已有的項目拉取分支,在 wiki 上討論,或者創(chuàng)建自己的代碼庫。
網(wǎng)站提供了很多很好的插件和模板,可以被用在各種各樣的項目中。
如果要使用熱門的編程語言,比如 Java 和 Objective-C,那么項目依賴庫的數(shù)量會變得非常大。
在采用一個需要大量依賴項的框架時這一點就變得非常明顯。
一些 JavaScript 插件也需要大量的額外文件。有時候這些雜亂的東西會讓人厭煩,但至少它們是可以用的!
在碰到難題時,我的第一反應(yīng)是上網(wǎng)。
很多程序員會在論壇上問問題,這些問題最終會得到解答。
谷歌非常善于挑選與你的問題相關(guān)的關(guān)鍵字,并為你提供這些有用論壇帖子。
但可惜的是,有時候?qū)τ谀硞€具體的特定的問題并沒有太多的信息。
為什么要重復(fù)發(fā)明輪子呢?
要擴(kuò)展用戶界面、程序或網(wǎng)站,插件是一種很好的方式。
另外,插件還能提供定制化功能。
如果找不到相應(yīng)的插件,為什么不自己開發(fā)一個?(因為菜?。?/span>
在 IE 中渲染網(wǎng)頁給我們帶來了很多考驗和磨難,這個就不用多說了。
從 IE 5.5 到 IE 9/IE 10,人們一直在為獲得更好的瀏覽器支持而做著艱苦卓絕的斗爭。
Web 開發(fā)人員可能很擔(dān)心網(wǎng)頁調(diào)試,因為在?IE6?中打開一個網(wǎng)頁可能就是一場噩夢。
值得慶幸的是,那些日子正慢慢成為過去。(只要別拿IE,我們都是朋友)
if/else 循環(huán)、for 循環(huán)、while 循環(huán)、do 循環(huán),這些都是邏輯語句,除了這些之外還有很多。
在閱讀示例代碼時,會反復(fù)回想代碼里的邏輯應(yīng)該怎樣寫更好。
大量的非運(yùn)算符和比較符號會讓人暈頭轉(zhuǎn)向。
所以,會經(jīng)?;仡^去修改之前寫好的邏輯。
一股腦兒寫了一個函數(shù),然后函數(shù)輸出了一個致命的錯誤。
為了找到問題所在,就不得不把其他代碼刪掉,只留下出問題的那幾行代碼。
(找bug猶如此圖)
當(dāng)最終找到問題并把它修復(fù),會感到筋疲力盡,但同時也松了一口氣。
大家通常喜歡用自己的方式做事,但如果事情沒有按照原計劃進(jìn)行,可能就會有麻煩。
有好多次,開始一個項目遇到了麻煩,然后開始在網(wǎng)上搜博客尋找解決方案。
最后發(fā)現(xiàn)原來方法是錯誤的,重新開始也許會更容易些!
所以,在一開始先做一些調(diào)研,從長遠(yuǎn)來看肯定會節(jié)省時間。
調(diào)試代碼就是跳來跳去,向前兩步,后退一步,再向前兩步,如此往復(fù)。
花上幾個小時盯著代碼看,查找函數(shù)名或變量作用域中的錯誤,最后卻發(fā)現(xiàn)少了右括號,那種感覺很怪異。
所有的時間都浪費在了一個很小的語法錯誤上,感覺自己蠢得冒氣。
有時候需要站起來,離開顯示器一會兒。
在敲了幾個小時的鍵盤之后,休息一會兒肯定有助于思考。
大多數(shù)的健康指南建議每 30 到 60 分鐘休息一次,但這完全取決于自己的需要。
如果總是在半途中斷,也可能感覺很煩。(番茄鐘我就完全用不了......)
除了離開電腦,這是另一種休息方式。
或許還有其它工作可以做,那就去做吧。
這是一種更好的分配時間和資源的方式,特別是如果已經(jīng)花了 5 個小時還解決不了一個問題的時候。
有一種觀點認(rèn)為,在植物生長的初期,播放古典音樂有助于植物的生長。
個人很喜歡古典音樂復(fù)雜的音符和音樂理論。
爵士樂、鋼琴、大樂隊,古典音樂在人類文化中都占有一席之地。
那么,在編程時聽音樂真的能讓你在調(diào)試代碼時變得更聰明嗎?
可能不會,但希望它也不會讓你變得更笨。
我想很多人都知道鮑爾默巔峰理論:該理論認(rèn)為,程序員在攝入一定數(shù)量的酒精后,其編碼能力將達(dá)到巔峰。
這是由史蒂夫·鮑爾默的古怪行為引起的,感覺可能只是一個酒鬼的胡言亂語。
不過這有點諷刺,因為鮑爾默在微軟并不是一名程序員。注意上班時間不要試哈~
這聽起來就像是一種妄想癥,但有時不得不懷疑,是不是睡覺的時候,誰寫了這些代碼。
過去幾周或幾個月忙的項目非??菰铩?/span>
有時候會不記得自己往代碼庫里添加過東西——甚至是上周剛剛查看過的項目!
最糟糕的情況是,你一邊閱讀源代碼,一邊不知道該做點什么。
可能是你自己的項目,也可能是其他人的項目,但問題是一樣的。
現(xiàn)在,必須決定是花更多的時間查找替代方案,還是花時間分析腳本。
不得不說谷歌真是好朋友。
不管你使用的是什么編程語言,比如 Objective-C、C++、Java、Python 等,都會有同樣的體會。
錯誤消息試圖為我們提供幫助,但除非已經(jīng)記住了各種錯誤代碼的含義,否則它們看起來更像是經(jīng)過翻譯的計算機(jī)語言。
但只要谷歌一下就有很多內(nèi)容可以幫助我們確定這些錯誤消息到底是什么意思。
我們都知道,當(dāng)想要放棄一件事情,會有一種挫敗感,同時又覺得放棄并不是正確的選擇。
你希望繼續(xù)前進(jìn),并嘗試新的解決方案。
但如果你發(fā)現(xiàn)你又因此浪費了一個小時呢?我經(jīng)常遇到這種情況,這讓人感到很難受。
在寫前端 HTML/CSS/JS 代碼時,并不總是需要寫注釋。
但對于復(fù)雜一些的腳本和程序,就需要某種類型的注釋,以便你在幾個月后甚至幾年后回過頭來查看。
有時候你會忘記給函數(shù)及其參數(shù)、輸出格式和其他基本數(shù)據(jù)添加注釋。
當(dāng)出現(xiàn)錯誤時,你需要調(diào)試整個腳本才能找到解決方案時,這無疑會給你添亂。
這個時候你就會想,如果當(dāng)初加一些有用的注釋就好了。
開發(fā)程序最令人感到沮喪的,可能是什么都沒做——既沒有更新,也沒有修改代碼——程序卻突然不能正常運(yùn)行了。
這種事真的經(jīng)常發(fā)生。
也許是因為其他程序正在運(yùn)行舊的版本?誰知道呢
有時候,更新一小段代碼就會導(dǎo)致整個程序崩潰,然后只能恢復(fù)到最近的可運(yùn)行版本,并從那里接著往下開發(fā)。
?
我用過的每一種編程語言幾乎都需要行終止符,當(dāng)然并不是所有的都需要,但 C/C++ 族編程語言通常是這樣的。
如果忘記添加結(jié)束分號,只是一個無心的錯誤,但解析器不理解這一點,它會無情地拋出一個致命錯誤。
然后,你必須再花 20 分鐘來查看代碼,最后你發(fā)現(xiàn)缺少了一個分號。也許這就是調(diào)試的“樂趣”。(感覺我在被代碼調(diào)試.....)
聘請其他開發(fā)者來修復(fù)問題,這種想法很誘人,但顯然財務(wù)上不允許。
另外,如果你不親自動手,怎么能從這些錯誤中吸取到教訓(xùn)呢?
在經(jīng)歷了多次失敗之后,當(dāng)你最終對一個編程概念有了透徹的理解,你才會感覺良好,能招人還是招
很多程序員喜歡在 Hacker News 上了解與軟件及初創(chuàng)公司相關(guān)的社會新聞。
這個網(wǎng)站上有很多關(guān)于自由職業(yè)、時間管理、軟件開發(fā)、新公司啟動和融資的信息。
雖然瀏覽這個網(wǎng)站會給你帶來高效的感覺,但它也在消耗你的時間。
每隔幾個小時休息一下,趁這個時候去看看新聞或許會更好。
如果你使用的插件或框架沒有文檔,那么最令人感到沮喪的是你必須自己深入查看它們的源代碼。
個人偏愛那些開發(fā)人員會花時間專門設(shè)計文檔的項目。(文檔非常重要?。。?/span>
文檔解釋了所有可用的參數(shù)和選項,甚至可能還會提供一些示例代碼片段。但遺憾的是,并不是所有的項目都會這樣。
最簡單的方法就是遠(yuǎn)離那些沒有詳細(xì)文檔的項目,這樣你就不會那么痛苦了。
在開發(fā)和調(diào)試代碼時,我并不總是會想到給數(shù)據(jù)庫做備份。
但是,數(shù)據(jù)備份提供了一個保障,在做出某些變更之前可以及時回退。
記住,請在本地保留網(wǎng)站項目文件和數(shù)據(jù)庫的副本,以備不時之需!
這可能是一項煩人的任務(wù),但絕對沒有重建被損壞的 SQL 數(shù)據(jù)庫那么煩人。
在經(jīng)過了幾個小時毫無頭緒的工作之后,很明顯,你可能需要嘗試一種新的方法。
在設(shè)計接口之前,程序員希望先讓功能正常運(yùn)行起來。
確定最快速、最準(zhǔn)確的解決方案,并保證 100% 的時間都可以正常運(yùn)行,然后繼續(xù)做那些錦上添花的東西。
負(fù)責(zé)管理編程語言依賴項和插件的團(tuán)隊不需要經(jīng)常發(fā)布新版本。
有時候,更新 PHP/Ruby/Python/SQL 版本就可以解決將文件從本地傳輸?shù)椒?wù)器時的調(diào)試問題。
本地更新很少有助于修復(fù)源代碼中的 bug,除非你的版本已經(jīng)過時。值得一試!
版本控制系統(tǒng) Git 在程序員中非常流行,它的學(xué)習(xí)曲線比其他競爭對手要容易些,被用于管理很多在線代碼倉庫,比如 Github 和 Bitbucket。
開發(fā)人員之所以想要延后學(xué)習(xí),是因為對于初學(xué)者來說,它的入門曲線非常陡峭。
但是,一旦理解了它的基本命令,Git 就變得非常簡單了。
?有時候,在花了幾個小時嘗試某個解決方案之后,你會將工作文件移動到存檔目錄(或刪除它們),然后從頭開始。
之前幾個小時的辛苦工作幾乎沒得到有什么回報,所以做出這個決定是很艱難的。
但當(dāng)我陷入困境時,重新開始往往正是完成一個項目所需要做的事情。
-END-
來源 | 老九學(xué)堂
|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|
|?如有侵權(quán),請聯(lián)系刪除?|
【1】國內(nèi)MCU能替代國外產(chǎn)品嗎?MCU的未來又將如何?
【2】35歲真的是程序員的坎兒嗎?
【3】不同編程語言能耗不同?看這27種語言對比!
【4】超長干貨為你解析:從串口驅(qū)動到Linux驅(qū)動模型,嵌入式必會!
【5】本文把TCP/IP講絕了!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!