鼎叔的編程慢習(xí)慣

這次談?wù)劶兗夹g(shù),談一些編程習(xí)慣的事情盹愚。

標(biāo)題是「編程慢習(xí)慣」栅迄,為什么是「慢習(xí)慣」呢?

因?yàn)槲医裉旆窒淼倪@些習(xí)慣在短期之內(nèi)會增加時間開銷皆怕,不能立即獲得什么收獲毅舆。但時間久了西篓,至少對我自己是非常有幫助的,為我節(jié)省了不少的時間同時在編程能力上也獲得了成長憋活。

另外在啰嗦一下污淋,本文并非針對高手的,如果您是高手余掖,可以跳過后面的內(nèi)容了寸爆,接著看下去會耽誤到您寶貴的時間。

一盐欺、做自己的需求文檔

我們在編程時赁豆,是否充分的了解了需求,關(guān)系到我們后續(xù)所開銷在項(xiàng)目上的時間冗美。做一個新功能通常不會讓我厭倦魔种,但是一次次的修改卻會讓我身心疲憊。特別是一些本身就時間緊任務(wù)重的項(xiàng)目粉洼,就意味著需要一整晚又一整晚的加班趕工了节预。

具體比如說,以下3點(diǎn)會大量增加我們的時間精力投入:

1.需求本身就存在問題属韧,邏輯無法走通安拟,但是這個時候已經(jīng)寫了不少或者和之前的代碼沖突到了。

2.部分需求沒有表達(dá)清楚宵喂,溝通后發(fā)現(xiàn)對時間的需求誤判了糠赦,規(guī)定時間內(nèi)完成變得困難

3.寫到一半,發(fā)現(xiàn)自己思路不對不得不重頭開始整理

解決這些的方法每個人都有每個人的選擇锅棕,我的選擇是做一份自己的需求文檔拙泽。這份文檔內(nèi)容并非是產(chǎn)品經(jīng)理或者技術(shù)主管、需求方所表述的裸燎,而是基于我的理解進(jìn)行的二次整理顾瞻。

需求文檔當(dāng)中大概有這么幾部分的內(nèi)容:

1.項(xiàng)目的基本概述

項(xiàng)目的簡述,這個項(xiàng)目到底在做什么

完成的目標(biāo)德绿,最終使用人對于使用這個系統(tǒng)的實(shí)際需求

預(yù)計(jì)交期荷荤,DEMO演示的日期,交付測試的日期脆炎,上線的日期

2.項(xiàng)目的資料

服務(wù)器賬號和環(huán)境

需求文檔

開發(fā)梅猿、生產(chǎn)環(huán)境需求

參考的項(xiàng)目或代碼

溝通會議記錄

3.業(yè)務(wù)相關(guān)

業(yè)務(wù)核心邏輯,通常還會轉(zhuǎn)換為初步的實(shí)現(xiàn)邏輯

執(zhí)行流程

4.實(shí)現(xiàn)

需要做的功能拆解

數(shù)據(jù)規(guī)模

實(shí)現(xiàn)方式

對現(xiàn)有系統(tǒng)影響的改動點(diǎn)秒裕,如果是全新系統(tǒng)可以忽略

5.其他

測試單元規(guī)劃

記錄完這些內(nèi)容會花掉不少時間袱蚓,中間可能還要跟需求方、產(chǎn)品經(jīng)理進(jìn)行多次溝通几蜻。至于細(xì)節(jié)到底多細(xì)喇潘,沒有一定的標(biāo)準(zhǔn)体斩,視項(xiàng)目和個人情況而定。

最重要的是做到心中有數(shù)颖低,對開發(fā)周期的心中有數(shù)絮吵、對模塊大致劃分的心中有數(shù),對內(nèi)部流程的心中有數(shù)忱屑。

花力氣為自己做的需求文檔蹬敲。在完成后,不僅核心要點(diǎn)印象深刻莺戒,后期檢索也會非常方便伴嗡,最大限度在已知條件下降低走彎路的概率。從過往經(jīng)驗(yàn)來說从铲,等到開始開發(fā)以后再去查聊天記錄瘪校,或者是找相關(guān)人員詢問,就慢的多了名段。

二阱扬、用最笨的方法先去實(shí)現(xiàn)

需求文檔做好了之后,我就會開始動手寫代碼伸辟,會把需求文檔中最核心需要實(shí)現(xiàn)的業(yè)務(wù)邏輯獨(dú)立分解出來麻惶,做一個Demo。按照輸入自娩、處理用踩、輸出,三個部分進(jìn)行編寫忙迁。

基本上不會去寫太多的注釋。也不會去想模組如何構(gòu)建以及語法是否美觀可讀碎乃、效率是否是最優(yōu)姊扔。能夠得到正確的輸出結(jié)果為第一位有優(yōu)先。這樣做可以隨意修改梅誓,而且代碼量少恰梢,如果實(shí)現(xiàn)過程出現(xiàn)問題,很容易就可以定位到原因梗掰。

把功能實(shí)現(xiàn)以后嵌言,先做壓力業(yè)務(wù)邏輯測試,沒有問題及穗,再移植到項(xiàng)目中摧茴。移植的過程時,本身也是對代碼邏輯的Review埂陆,思考實(shí)現(xiàn)的合理性與是否需要進(jìn)行一些調(diào)整苛白。

這里還有一個重點(diǎn)娃豹,通常稍大的項(xiàng)目是無論時間有多緊張,也不能不經(jīng)思考直接的去把代碼直接復(fù)制進(jìn)去购裙。給自己挖坑的事情越少做越好懂版。

三、做壓力測試調(diào)整結(jié)構(gòu)設(shè)計(jì)

很多程序員習(xí)慣把代碼先寫完躏率,交付前最后在做性能測試躯畴,如果前面的設(shè)計(jì)就沒有考慮到性能問題,就很頭大了薇芝,代碼也沒有時間可以重寫蓬抄,就這么將就著先用了。最后一直被性能問題所困擾著恩掷。

業(yè)務(wù)的需求和壓力在哪里倡鲸,產(chǎn)生瓶頸的核心點(diǎn)在哪里。如果你做為程序員也能懂這些黄娘,不僅有效避免后續(xù)的修改次數(shù)峭状,自身價值也會更高。

所以我在DEMO實(shí)現(xiàn)后逼争,就會習(xí)慣性考慮性能問題优床。模擬預(yù)想中會出現(xiàn)的高并發(fā)高流量,自己寫一個壓力測試模塊誓焦。如果發(fā)現(xiàn)有問題胆敞,先修改DEMO中的核心代碼及實(shí)現(xiàn)方式,調(diào)整到自我認(rèn)為平衡為止杂伟。

四移层、盡可能的砍掉代碼冗余

同樣的實(shí)現(xiàn),通常有多個方案可以去實(shí)現(xiàn)赫粥,我在一開始做的時候观话,用的可能是當(dāng)時想到的快速實(shí)現(xiàn)方案。

當(dāng)想到更好替代方案時越平,不太會猶豫频蛔,保證安全和性能的前提之下會砍掉原有的代碼。用更簡單的邏輯的寫法替換到冗余的代碼秦叛。

五晦溪、多留日志

就算測試的再完美,上線之后也難免會出問題挣跋。這之中三圆,既有可能是本身服務(wù)器運(yùn)維方面的問題,也有可能是BUG。如果能再現(xiàn)的故障還算好查嫌术,最怕一些偶然發(fā)生哀澈,但又無法復(fù)現(xiàn)的問題。負(fù)責(zé)運(yùn)維和開發(fā)的工程師兩邊都會非常頭疼度气,難以快速解決割按,還會相互扯皮。

所以我會在代碼里盡可能的多留一些日志磷籍,并且把這些日志自動進(jìn)行一些采集适荣。這樣,如果有發(fā)生問題院领,第一時間就會有大量的數(shù)據(jù)可以去查詢弛矛,對定位問題非常有幫助,不必再一點(diǎn)點(diǎn)的去調(diào)試比然,一個個模塊去排除丈氓。

同時如果對業(yè)務(wù)數(shù)據(jù)的準(zhǔn)確性非常敏感的系統(tǒng),除了一些常規(guī)的日志外强法,我還專門針做一些對業(yè)務(wù)邏輯校驗(yàn)的日志万俗,定時通過一些自動化的程序去檢核這些數(shù)字。通過結(jié)果反推是否存在一些沒有預(yù)料到的問題饮怯。

六闰歪、忘記編代碼的過程,以其他人閱讀角度進(jìn)行修改

雖然程序是給計(jì)算機(jī)去執(zhí)行蓖墅,但是無論是業(yè)務(wù)的擴(kuò)展還是BUG的修復(fù)库倘、性能提升、算法優(yōu)化论矾,都需要通過人來進(jìn)行教翩。寫好一組代碼之后,并不100%保證自己或其他工程師以后完全不會去做維護(hù)贪壳。

基于這個考慮迂曲,在完成基本的程序編寫之后,我還會習(xí)慣先強(qiáng)迫自己忘記之前寫的代碼寥袭,以第三者的視角再來審視一遍程序:

1、程序邏輯是否清晰易懂

2关霸、代碼命名是否規(guī)范

3传黄、有沒有留下足夠的注釋線索

4、一個模塊中是否過于復(fù)雜

5队寇、是否留有進(jìn)一步改進(jìn)的余地

是選擇前人挖坑后人埋膘掰,或是選擇前人種樹后人乘涼,都看寫的人自己的一念之差。但本著負(fù)責(zé)任的態(tài)度识埋,任何情況下都少挖坑為妙凡伊。挖了坑,是出來混的窒舟,最后總是要還的系忙。

七、記錄錯誤

這一點(diǎn)和項(xiàng)目沒有關(guān)系惠豺,但是和個人成長會有直接關(guān)系银还。就像我們中學(xué)時做的錯題本一樣,從錯誤中學(xué)習(xí)是最快的方法洁墙。通過錯誤的記錄蛹疯,發(fā)現(xiàn)我們究竟是哪一部分有待提高,是語法不熟悉热监,是思考不夠全面捺弦,還是一開始就用錯了。有了記錄我們就會有可以去發(fā)現(xiàn)問題的線索孝扛。

依靠這些線索進(jìn)行思考列吼,主動意識到我們經(jīng)常出錯的部分之后×屏穑總可以有針對性的去解決冈欢。解決后接下來不定期的去反思,通過反思盈简,將學(xué)到的能力內(nèi)化形成戰(zhàn)斗力凑耻。

最后總結(jié)一下,我今天分享的七個慢習(xí)慣:

1柠贤、做自己的需求文檔香浩,讓自己對將要做的內(nèi)容心中有數(shù),盡量避免理解不到位所付出的成本臼勉。

2邻吭、用最笨的方法先去實(shí)現(xiàn)輸入、處理和輸出宴霸。核心邏輯優(yōu)先囱晴。不去過多考慮其他問題。

3瓢谢、整合項(xiàng)目前祖搓,做壓力測試達(dá)到一開始的性能需求翼虫。而不是全部做完之后再去做性能優(yōu)化。

4、如果覺得代碼不合理羔杨,盡量多砍掉不合理的代碼進(jìn)行重構(gòu)。

5、多留日志讓不可預(yù)期的問題容易定位、分析狂魔、解決。

6淫痰、讓代碼具有可讀性最楷,別給自己與別人挖坑。

7黑界、記錄經(jīng)常犯的錯誤管嬉,及時反思總結(jié)。

以上是我的心得朗鸠,歡迎各位同學(xué)與我交流蚯撩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烛占,隨后出現(xiàn)的幾起案子胎挎,更是在濱河造成了極大的恐慌,老刑警劉巖忆家,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犹菇,死亡現(xiàn)場離奇詭異,居然都是意外死亡芽卿,警方通過查閱死者的電腦和手機(jī)揭芍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卸例,“玉大人称杨,你說我怎么就攤上這事】曜” “怎么了姑原?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呜舒。 經(jīng)常有香客問我锭汛,道長,這世上最難降的妖魔是什么袭蝗? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任唤殴,我火速辦了婚禮,結(jié)果婚禮上到腥,老公的妹妹穿的比我還像新娘眨八。我一直安慰自己,他們只是感情好左电,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般篓足。 火紅的嫁衣襯著肌膚如雪段誊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天栈拖,我揣著相機(jī)與錄音连舍,去河邊找鬼。 笑死涩哟,一個胖子當(dāng)著我的面吹牛索赏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贴彼,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼潜腻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了器仗?” 一聲冷哼從身側(cè)響起融涣,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精钮,沒想到半個月后威鹿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轨香,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年忽你,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臂容。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡科雳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出策橘,到底是詐尸還是另有隱情炸渡,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布丽已,位于F島的核電站蚌堵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沛婴。R本人自食惡果不足惜吼畏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘁灯。 院中可真熱鬧泻蚊,春花似錦、人聲如沸丑婿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秒旋,卻和暖如春约计,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背迁筛。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工煤蚌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人细卧。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓尉桩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贪庙。 傳聞我的和親對象是個殘疾皇子蜘犁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,520評論 25 707
  • 先說項(xiàng)目開發(fā)過程中團(tuán)隊(duì)人員的分工協(xié)作。 一 人員安排 畢業(yè)至今的大部分項(xiàng)目都是獨(dú)立完成插勤,雖然也有和其他同事協(xié)作的時...
    SnowflakeCloud閱讀 10,749評論 3 59
  • 素描紙和普通紙有什么區(qū)別: 素描紙要比一般的紙更厚沽瘦,用手摸上去會有細(xì)密粗糙的紋路,看也能看出來,畫素描時很容易出效...
    教畫畫的貓叔閱讀 5,371評論 0 5
  • 你的微信朋友圈农尖,微博析恋,或者各種其他社交軟件的動態(tài)會發(fā)些有關(guān)怎樣的內(nèi)容呢?你的生活有哪一面是希望展示給別人或者你希望...
    wowowowowowrouw閱讀 215評論 0 1
  • “阿爾文號”是世界上第一個深潛器盛卡。大家應(yīng)該知道深潛器是什么吧助隧?他和潛水艇很像,但又不是潛水艇滑沧。它們的區(qū)別來了...
    逍遙派Jack閱讀 1,238評論 0 2