10來年程序員總結(jié)的20多條經(jīng)驗及教訓(xùn)

開發(fā)

1.從小事做起壮虫,然后再擴展 無論是創(chuàng)建一個新的系統(tǒng)践盼,還是添加功能到現(xiàn)有的系統(tǒng)中玫芦,我總是從一個簡單到幾乎沒有任何所需功能的版本啟動浆熔,然后再一步一步地解決問題,直到滿意為止桥帆。我從來沒有妄想過能夠一步登天医增。相反,我一邊開發(fā)一邊學(xué)習(xí)老虫,同時新掌握的信息還可以用于解決方案中叶骨。 我很喜歡John Gall的這句話:“復(fù)雜系統(tǒng)總是源于簡單系統(tǒng)的演化∑沓祝”

2.一次只改變一件事 當(dāng)我們在開發(fā)時忽刽,碰到測試失敗和功能無效的情況,如果你一次只研究一個問題夺欲,那將會更容易找到問題的關(guān)鍵跪帝。換言之,就是使用短迭代些阅。必須確保這個問 題解決之后伞剑,再轉(zhuǎn)移到另一個問題上。這適用于向下提交市埋。如果在你添加新功能之前需要先重構(gòu)代碼黎泣,那么先提交重構(gòu),然后再添加新的功能缤谎。

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

4.每一行新代碼必須至少執(zhí)行一次 在你真正完成一個功能之前项郊,你必須對它進(jìn)行測試。不然姻政,你怎么知道它是不是按照你的想法在執(zhí)行呢?通常情況下岂嗓,最好的方法是通過自動測試汁展,但并非總是如此。不過,不管怎么說食绿,每一行新代碼必須至少執(zhí)行一次侈咕。

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

6.所有事情所花費的時間總是比你預(yù)期的要長 特別是在編程中,即使一切進(jìn)展順利掌腰,我們也很難對功能所需的時間做出正確的預(yù)算狰住。并且,開發(fā)軟件時碰到各種意想不到的問題是非常常見的齿梁。 侯世達(dá)定律其實道出了真諦:做事所花費的時間總是比你預(yù)期的要長催植,即使你在預(yù)期中已經(jīng)考慮了侯世達(dá)定律。

7.先了解現(xiàn)有的代碼 大多數(shù)的編碼都需要以某種方式改變現(xiàn)有的代碼勺择。即使是新功能创南,也需要適應(yīng)現(xiàn)有的程序。所以省核,在你加進(jìn)去新的內(nèi)容前稿辙,首先需要了解當(dāng)前的解決方案。否 則芳撒,你一不小心就很有可能會打破現(xiàn)有的功能邓深。這意味著,閱讀代碼和編寫代碼都是必要的技能笔刹。這也是為什么看似微小的變化仍可能需要很長時間才能解決的原因 之一——你首先必須了解上下文芥备。

8.閱讀和運行 幸運的是,對于理解代碼舌菜,我們有兩種互補的方法萌壳。你可以閱讀代碼,也可以運行代碼日月。運行代碼的確是個非常棒的好方法袱瓮。所以,請確保充分利用這兩種方法爱咬。 故障排除

9.bug總是難免的 我不喜歡那些宣稱軟件開發(fā)可以“一蹴而就”的高談闊論尺借。不論你再怎么費盡心機,bug總是難免的精拟。最好能夠做成可以快速故障排除燎斩、修復(fù)bug和部署修復(fù)的系統(tǒng)虱歪。

10.解決故障報告 每個開發(fā)人員都應(yīng)該花時間去處理來自客戶的故障報告,并修復(fù)bug栅表。這能讓你更好地理解客戶的意圖笋鄙,明白如何使用系統(tǒng),知道排除故障的難易程度怪瓶,了解系統(tǒng)的設(shè)計情況萧落。這也是為自己的開發(fā)成果負(fù)責(zé)的好方法。

11.重現(xiàn)問題 修復(fù)bug的第一步就是重現(xiàn)問題洗贰。然后你得確保修復(fù)之后找岖,問題能夠徹徹底底地消失。這樣一個簡單的規(guī)則可以確保你不會誤將非問題當(dāng)作是問題哆姻,并確保解決方案真的能夠奏效宣增。

12.修復(fù)已知錯誤,然后再看看有沒有遺漏的地方 有時候矛缨,可能同時存在著幾個不同的問題爹脾。它們之間的互相作用,可能會讓你毫無頭緒箕昭,束手無策灵妨。不要糾結(jié)于搞清楚發(fā)生了什么,先去解決所有已知的問題落竹,然后再看看還有什么不對的地方泌霍。

13.沒有巧合 在測試和故障排除時,不要相信會出現(xiàn)什么巧合述召。就像你改變了定時器的值朱转,那么就會改變系統(tǒng)重啟的頻率。所以一切都并非是巧合积暖。添加新功能藤为,另一個不相干的功能變慢了?這絕對不是巧合夺刑。相反缅疟,是你應(yīng)該仔細(xì)調(diào)查的內(nèi)容。

14.關(guān)聯(lián)時間戳 在故障排除時遍愿,事件的時間戳可以作為你的好幫手存淫。尋找偶數(shù)增量。例如沼填,如果系統(tǒng)重啟了桅咆,并且剛剛發(fā)出過一個3000毫秒左右的請求,那么可能是觸發(fā)了某個定時器坞笙,才導(dǎo)致出現(xiàn)重啟的動作岩饼。 團(tuán)隊合作

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

16.橡皮鴨法 遇到你絞盡腦汁也解決不了的問題時,不妨找一個同事却邓,然后將問題解釋給他們聽硕糊。很多時候,當(dāng)你在敘述時腊徙,即使你的同事一言不發(fā)简十,你可能也會突然靈光乍現(xiàn)找到問題的關(guān)鍵。

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

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

19.嘗試 如果你不知道某種編程語言功能的工作原理牵署,那么不妨寫一個小程序來理解它是如何工作的。這同樣適用于測試你正在開發(fā)的系統(tǒng)喧半。如果我將參數(shù)設(shè)置為-1奴迅,會發(fā)生什么?當(dāng)我在重啟系統(tǒng)時挺据,如果服務(wù)當(dāng)?shù)羧【撸瑫l(fā)生什么?以此來研究它的工作原理扁耐。

20.帶著問題睡覺 如果你正在解決一個很難的問題暇检,那么不妨帶著問題睡覺。有科學(xué)研究表明做葵,這樣做雖然你表明上并沒有在主動思考占哟,但你的潛意思卻這么做了。其結(jié)果就是酿矢,第二天再去研究問題榨乎,解決方案已經(jīng)呼之欲出了。

21.跳槽 不要害怕跳槽瘫筐。和不同的人共事蜜暑,開發(fā)不同的產(chǎn)品,感受不同的公司文化是非常有意思的策肝。

22.不斷學(xué)習(xí) 我們需要不斷地學(xué)習(xí)和了解軟件開發(fā)肛捍。你可以嘗試不同的編程語言和工具隐绵,閱讀軟件開發(fā)的書籍,接受MOOC課程拙毫。相信我依许,量變才能達(dá)到質(zhì)的飛躍,這些小小的學(xué)習(xí)積累缀蹄,終有一天會大大地提高你的知識和能力峭跳。

阿里Java高級大牛直播講解知識點,分享知識缺前,五大專題都是各位老師多年工作經(jīng)驗的梳理和總結(jié)蛀醉,帶著大家全面、科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知扣群Java大神高級架構(gòu)群:658362658備注好信息衅码!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拯刁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逝段,更是在濱河造成了極大的恐慌垛玻,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奶躯,死亡現(xiàn)場離奇詭異夭谤,居然都是意外死亡,警方通過查閱死者的電腦和手機巫糙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門朗儒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人参淹,你說我怎么就攤上這事醉锄。” “怎么了浙值?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵恳不,是天一觀的道長。 經(jīng)常有香客問我开呐,道長烟勋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任筐付,我火速辦了婚禮卵惦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓦戚。我一直安慰自己沮尿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布较解。 她就那樣靜靜地躺著畜疾,像睡著了一般赴邻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啡捶,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天姥敛,我揣著相機與錄音,去河邊找鬼瞎暑。 笑死徒溪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的金顿。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼鲤桥,長吁一口氣:“原來是場噩夢啊……” “哼揍拆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茶凳,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤嫂拴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贮喧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筒狠,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年箱沦,在試婚紗的時候發(fā)現(xiàn)自己被綠了辩恼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡谓形,死狀恐怖灶伊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寒跳,我是刑警寧澤聘萨,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站童太,受9級特大地震影響米辐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜书释,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一翘贮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爆惧,春花似錦择膝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腹侣。三九已至,卻和暖如春齿穗,著一層夾襖步出監(jiān)牢的瞬間傲隶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工窃页, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跺株,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓脖卖,卻偏偏與公主長得像乒省,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畦木,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容