## 1. 區(qū)分需求的輕重緩急
新手程序員最大的問(wèn)題就是,在面對(duì)一堆需求的時(shí)候,不知道哪一個(gè)才是重要的,學(xué)會(huì)分辨重要的需求是需要一定的經(jīng)驗(yàn)的丸逸,這需要在實(shí)踐的過(guò)程中積累。于此同時(shí)剃袍,需求也有是否緊急的區(qū)分黄刚,合理安排順序有利于提高工作效率,減少自身壓力民效。
通常來(lái)說(shuō)憔维,關(guān)于需求輕重緩急的問(wèn)題也可以和需求方溝通侍芝,但是主要注意的是,需求方不一定真正理解自己所提出的需求埋同,也不一定能夠給出正確的安排。
## 2. 學(xué)會(huì)發(fā)現(xiàn)偽需求
并不是所有的需求都是有現(xiàn)實(shí)意義上的必要性的棵红,這種無(wú)意義的需求被稱為偽需求凶赁,但又總會(huì)有一些這樣的需求提上來(lái)。
例如逆甜,需求方要求你給一個(gè)列表做搜索功能虱肄,然而你發(fā)現(xiàn)這個(gè)列表的元素個(gè)數(shù)絕對(duì)不可能達(dá)到兩位數(shù),那么這用十個(gè)手指頭就能數(shù)過(guò)來(lái)的列表交煞,真的有必要做搜索功能咏窿?
對(duì)于偽需求,我們要做的就給出理由素征,并拒絕掉集嵌。
## 3. 深入理解需求意圖
很多需求方在提需求的時(shí)候,是不會(huì)明確的表達(dá)真實(shí)需求的御毅,而是把自己當(dāng)成了設(shè)計(jì)師根欧,自作主張的告訴開(kāi)發(fā)者要做什么,甚至怎么做端蛆。
? 這種需求都不是真實(shí)的需求凤粗,只是需求方從真實(shí)需求的基礎(chǔ)上,提出的自己對(duì)于這個(gè)問(wèn)題的理解今豆,以及解決方案嫌拣。因此在接受需求的時(shí)候,開(kāi)發(fā)者必須主動(dòng)弄清原始的需求是怎樣的呆躲。
? 這樣做至少我認(rèn)為有兩個(gè)好處异逐,一個(gè)是不會(huì)被需求方帶到坑里去,另外我們自身可以從原始需求上得到更多的信息歼秽,在設(shè)計(jì)層面留下足夠的擴(kuò)展性应役。
## 4. 提高項(xiàng)目決策效率
對(duì)于一些項(xiàng)目會(huì)議,容易出現(xiàn)冗長(zhǎng)的膠著的討論燥筷,大家對(duì)一些問(wèn)題看法不一箩祥,然后會(huì)議就沒(méi)有一個(gè)終結(jié)的時(shí)間。因此肆氓,對(duì)于一個(gè)團(tuán)隊(duì)袍祖,必須有一個(gè)決策人,在必要的時(shí)候終止討論谢揪,并給出結(jié)論蕉陋。
民主還是專制捐凭?在項(xiàng)目開(kāi)發(fā)上來(lái)看,讓一個(gè)優(yōu)秀的首領(lǐng)決斷凳鬓,比爭(zhēng)論不休更有意義茁肠。
## 5.? 不要重復(fù)造輪子
這是一個(gè)聊得挺多的話題,這里就一筆帶過(guò)缩举。
? 其實(shí)個(gè)人也不是說(shuō)不喜歡造輪子垦梆,平時(shí)練習(xí)造輪子挺好,項(xiàng)目開(kāi)發(fā)上來(lái)造輪子仅孩,百害而無(wú)一利(除非你能超越其他輪子)托猩。
## 6. 使用配置代替編碼
用配置代替編碼,有另外一個(gè)意思——用代碼來(lái)寫代碼辽慕。
其實(shí)這種思想非常常見(jiàn)京腥,例如很早之前的百度空間(現(xiàn)在已經(jīng)涼了),就給出了自定義模板的功能溅蛉,我們只需要拖動(dòng)一些界面元素公浪,就能配置出自己風(fēng)格的空間來(lái)。這里面就是用到了用配置代替編碼的思想船侧,開(kāi)發(fā)者并不需要為每一個(gè)博客樣式寫一遍代碼因悲,只需要提供配置的信息,即可生成對(duì)應(yīng)的博客樣式勺爱。
具體在實(shí)際項(xiàng)目開(kāi)發(fā)中晃琳,這種方式能大大減少代碼量,并且降低出bug的概率琐鲁。
## 7. 不要浪費(fèi)時(shí)間在修bug上
這句話的意思不是說(shuō)有bug不修卫旱,而是說(shuō)盡量不要讓代碼出bug,如果出現(xiàn)bug也能快速定位問(wèn)題围段。
? 《UNIX編程藝術(shù)》里面有強(qiáng)調(diào)一個(gè)KISS原則——Keep It Simple, Stupid顾翼,意思就是事情能夠簡(jiǎn)單辦好,就不要把它弄復(fù)雜奈泪。
? 對(duì)于一份代碼适贸,它可以是簡(jiǎn)單到明顯看不出問(wèn)題,也可以是復(fù)雜到看不出明顯的問(wèn)題涝桅。
? 日志系統(tǒng)有必須要對(duì)系統(tǒng)的運(yùn)行狀況進(jìn)行記錄拜姿,如果能直接從日志中就能定位問(wèn)題的話,減少了很多調(diào)試上的麻煩冯遂。
? 在代碼bug這個(gè)話題上蕊肥,有一個(gè)比較特別的類別,就是系統(tǒng)限制問(wèn)題引起的bug蛤肌。也就是說(shuō)壁却,你的代碼本身邏輯沒(méi)有問(wèn)題批狱,只是數(shù)據(jù)一直增長(zhǎng),導(dǎo)致達(dá)到了系統(tǒng)的限制展东,而導(dǎo)致代碼不能正常工作赔硫。
? 例如,騰訊QQ之前的用戶QQ號(hào)碼是用32位int類型存儲(chǔ)的盐肃,因此它會(huì)有一個(gè)上限卦停,在之后的一段時(shí)間內(nèi),騰訊不得不對(duì)數(shù)據(jù)庫(kù)進(jìn)行升級(jí)恼蓬,使用64位int來(lái)存儲(chǔ)。
? 為了減少系統(tǒng)限制類的bug僵芹,開(kāi)發(fā)者有必要做出一些努力处硬,例如良好的內(nèi)存管理,以及對(duì)系統(tǒng)規(guī)模的恰當(dāng)估算等
? 不過(guò)現(xiàn)在計(jì)算機(jī)基本上都是64位了拇派,在大部分情況下荷辕,各位完全不用糾結(jié)是用int32還是int64的問(wèn)題,用int64就好了件豌。
## 8. 擴(kuò)展性問(wèn)題
由于需求總是容易變化的疮方,因此面對(duì)變化的需求,程序員也需要做一些預(yù)案茧彤。
? 例如骡显,參數(shù)能做成可配置的,就不要寫死曾掂。如果一個(gè)變量可能存在多個(gè)惫谤,但是需求暫時(shí)只描述了單個(gè),那么還是用數(shù)組珠洗,說(shuō)不定哪天就需要支持多個(gè)了溜歪,現(xiàn)在就支持多個(gè)并不會(huì)增加太多成本。
? 擴(kuò)展性問(wèn)題需要緊緊跟隨真實(shí)需求许蓖,程序員也需要有一些產(chǎn)品思維蝴猪,在設(shè)計(jì)上預(yù)留出可能的方向,不要在變化來(lái)臨時(shí)手忙腳亂膊爪。
## 9. 性能問(wèn)題
性能問(wèn)題是程序員都喜歡討論的一個(gè)問(wèn)題自阱,也是一個(gè)學(xué)術(shù)意義上非常重要的問(wèn)題,但是米酬,在項(xiàng)目開(kāi)發(fā)中动壤,卻通常是一個(gè)不用太在意的問(wèn)題。
項(xiàng)目的開(kāi)發(fā)淮逻,是成本導(dǎo)向的琼懊,我們需要用低成本來(lái)滿足項(xiàng)目需求阁簸。
項(xiàng)目上線之后,首先要看效果哼丈,效果不行的話启妹,自然沒(méi)什么用戶,因此也沒(méi)性能優(yōu)化什么事醉旦。
性能優(yōu)化的時(shí)機(jī)饶米,不是在項(xiàng)目開(kāi)發(fā),而是在項(xiàng)目維護(hù)车胡。等哪天用戶量上來(lái)了檬输,系統(tǒng)負(fù)載越來(lái)越高,先加機(jī)器匈棘,再花點(diǎn)時(shí)間研究下性能問(wèn)題丧慈,豈不美哉——至少又做成了一個(gè)項(xiàng)目。
性能優(yōu)化有時(shí)候會(huì)帶來(lái)一些負(fù)面效果主卫,最常見(jiàn)的就是破壞代碼結(jié)構(gòu)逃默,所以如果不是必須,就別去做性能優(yōu)化簇搅。
另外有一種情況完域,就是代碼寫得太渣拖慢了速度,修改這類代碼不叫性能優(yōu)化瘩将,而是叫修bug吟税。