10+年程序員總結的20+條經驗教訓

開發

1.從小事做起,然后再擴展
無論是創建一個新的系統,還是添加功能到現有的系統中,我總是從一個簡單到幾乎沒有任何所需功能的版本啟動,然后再一步一步地解決問題,直到滿意為止。我從來沒有妄想過能夠一步登天。相反,我一邊開發一邊學習,同時新掌握的信息還可以用于解決方案中。學會化繁為簡。
我很喜歡John Gall的這句話:“復雜系統總是源于簡單系統的演化。”

2.一次只改變一件事
當我們在開發時,碰到測試失敗和功能無效的情況,如果你一次只研究一個問題,那將會更容易找到問題的關鍵。換言之,就是使用短迭代。必須確保這個問題解決之后,再轉移到另一個問題上。這適用于向下提交。如果在你添加新功能之前需要先重構代碼,那么先提交重構,然后再添加新的功能。

3.盡早地添加日志記錄和錯誤處理
在開發新系統時,我做的第一件事就是添加日志和錯誤處理,因為這兩者從一開始就非常有用。如果系統不能照常工作,那么你就需要知道程序中發生了什么——這是日志的作用。錯誤處理也是如此——錯誤和異常越早處理越好。

4.每一行新代碼必須至少執行一次
在你真正完成一個功能之前,你必須對它進行測試。不然,你怎么知道它是不是按照你的想法在執行呢?通常情況下,最好的方法是通過自動測試,但并非總是如此。不過,不管怎么說,每一行新代碼必須至少執行一次。

5.在整體測試之前先進行模塊測試
先進行部分模塊測試可以節省時間。通常說來,我們在整合不同的模塊時也會出現問題,例如模塊之間的接口不匹配。但是如果我們能夠信任各個組件的話,那么跟蹤集成問題就會變得簡單得多。

6.所有事情所花費的時間總是比你預期的要長
特別是在編程中,即使一切進展順利,我們也很難對功能所需的時間做出正確的預算。并且,開發軟件時碰到各種意想不到的問題是非常常見的。
侯世達定律其實道出了真諦:做事所花費的時間總是比你預期的要長,即使你在預期中已經考慮了侯世達定律。

7.先了解現有的代碼
大多數的編碼都需要以某種方式改變現有的代碼。即使是新功能,也需要適應現有的程序。所以,在你加進去新的內容前,首先需要了解當前的解決方案。否則,你一不小心就很有可能會打破現有的功能。這意味著,閱讀代碼和編寫代碼都是必要的技能。這也是為什么看似微小的變化仍可能需要很長時間才能解決的原因之一——你首先必須了解上下文。

8.閱讀和運行
幸運的是,對于理解代碼,我們有兩種互補的方法。你可以閱讀代碼,也可以運行代碼。運行代碼的確是個非常棒的好方法。所以,請確保充分利用這兩種方法。


故障排除

9.bug總是難免的
我不喜歡那些宣稱軟件開發可以“一蹴而就”的高談闊論。不論你再怎么費盡心機,bug總是難免的。最好能夠做成可以快速故障排除、修復bug和部署修復的系統。

10.解決故障報告
每個開發人員都應該花時間去處理來自客戶的故障報告,并修復bug。這能讓你更好地理解客戶的意圖,明白如何使用系統,知道排除故障的難易程度,了解系統的設計情況。這也是為自己的開發成果負責的好方法。

11.重現問題
修復bug的第一步就是重現問題。然后你得確保修復之后,問題能夠徹徹底底地消失。這樣一個簡單的規則可以確保你不會誤將非問題當作是問題,并確保解決方案真的能夠奏效。

12.修復已知錯誤,然后再看看有沒有遺漏的地方
有時候,可能同時存在著幾個不同的問題。它們之間的互相作用,可能會讓你毫無頭緒,束手無策。不要糾結于搞清楚發生了什么,先去解決所有已知的問題,然后再看看還有什么不對的地方。

13.沒有巧合
在測試和故障排除時,不要相信會出現什么巧合。就像你改變了定時器的值,那么就會改變系統重啟的頻率。所以一切都并非是巧合。添加新功能,另一個不相干的功能變慢了?這絕對不是巧合。相反,是你應該仔細調查的內容。

14.關聯時間戳
在故障排除時,事件的時間戳可以作為你的好幫手。尋找偶數增量。例如,如果系統重啟了,并且剛剛發出過一個3000毫秒左右的請求,那么可能是觸發了某個定時器,才導致出現重啟的動作。


團隊合作

15.面對面的交流最有效
當我們需要討論如何解決問題時,那么面對面的交流比視頻、打電話和電子郵件都要好。

16.橡皮鴨法
遇到你絞盡腦汁也解決不了的問題時,不妨找一個同事,然后將問題解釋給他們聽。很多時候,當你在敘述時,即使你的同事一言不發,你可能也會突然靈光乍現找到問題的關鍵。

17.問問題
閱讀和運行代碼往往非常有助于指出代碼的目的和它的工作原理。但是如果你有機會咨詢那些更為了解的人(例如原來的程序員),那么千萬不要錯過。

18.共享榮譽
不要貪圖榮譽,該是誰的就是誰的。例如:“Marcus想出了這個主意……”(如果真是他想的話),而不要說“我們想出的……”。


其他

19.嘗試
如果你不知道某種編程語言功能的工作原理,那么不妨寫一個小程序來理解它是如何工作的。這同樣適用于測試你正在開發的系統。如果我將參數設置為-1,會發生什么?當我在重啟系統時,如果服務當掉,會發生什么?以此來研究它的工作原理。

20.帶著問題睡覺
如果你正在解決一個很難的問題,那么不妨帶著問題睡覺。有科學研究表明,這樣做雖然你表明上并沒有在主動思考,但你的潛意思卻這么做了。其結果就是,第二天再去研究問題,解決方案已經呼之欲出了。

21.跳槽
不要害怕跳槽。和不同的人共事,開發不同的產品,感受不同的公司文化是非常有意思的。

22.不斷學習
我們需要不斷地學習和了解軟件開發。你可以嘗試不同的編程語言和工具,閱讀軟件開發的書籍,接受MOOC課程。相信我,量變才能達到質的飛躍,這些小小的學習積累,終有一天會大大地提高你的知識和能力。

希望這些經驗能對大家有用。如有不當之處,敬請指正。

參考自騰訊開發者社區

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 開發 1.從小事做起,然后再擴展 無論是創建一個新的系統,還是添加功能到現有的系統中,我總是從一個簡單到幾乎沒有任...
    蔡林林閱讀 134評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,765評論 25 708
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,213評論 2 126
  • 在天黑之前,故事很美。 夜色襲來,來不及整理白天思緒的蘭州,又開始在黑夜里游走。佇立在街道兩旁的路燈努力的在劃清白...
    稻尾閱讀 427評論 1 0
  • 2016年夏天,瓜迪奧拉與曼城簽約,正式成為藍月亮的主帥,沸沸揚揚的傳言終成事實。瓜迪奧拉的到來讓人充滿遐想——t...
    益源教育閱讀 246評論 0 1