第一,需求分析能力
對(duì)于程序員而言,理解需求就可以完成合格的代碼,但是對(duì)于研發(fā)項(xiàng)目的組織和管理者,他們不但要理解客戶需求,更多時(shí)候還要自行制定一些需求,為什么這么說(shuō)呢?
一般而言,進(jìn)行研發(fā)任務(wù),也許是客戶提出需求,也許是市場(chǎng)和營(yíng)銷(xiāo)部門(mén)提出的需求,這時(shí)候?qū)τ谘邪l(fā)部門(mén),他們看到的不是一個(gè)完整的需求,通常而言,該需求僅僅是一些功能上的要求,或者更正規(guī)些,可能獲得一個(gè)完整的用戶視圖;但是這都不夠,因?yàn)榭蛻粲捎诜羌夹g(shù)因素多一些,他們可能很難提出完整和清晰,或者說(shuō)專(zhuān)業(yè)性的性能需求,但是對(duì)于項(xiàng)目組織者和規(guī)劃者,他必須能夠清醒認(rèn)識(shí)到這些需求的存在并在完成需求分析報(bào)告的時(shí)候適當(dāng)?shù)奶岢,同時(shí)要完整和清晰的體現(xiàn)在設(shè)計(jì)說(shuō)明書(shū)里面,以便于程序員編碼時(shí)不會(huì)失去這些準(zhǔn)則。
程序設(shè)計(jì)者必須正確理解用戶需求所處的環(huán)境,并針對(duì)性做出需求的分析,舉例而言,同樣一個(gè)軟件通過(guò)ASP租用方式發(fā)布和通過(guò)License方式發(fā)布,性能需求可能就是有區(qū)別的,前者強(qiáng)調(diào)的是更好的支撐能力和穩(wěn)定性,而后者則可能更強(qiáng)調(diào)在各種平臺(tái)下的普適性和安裝使用的簡(jiǎn)捷性。
第二,項(xiàng)目設(shè)計(jì)方法和流程處理能力
程序設(shè)計(jì)者必須能夠掌握不少于兩到三種的項(xiàng)目設(shè)計(jì)方法(比如自頂至下的設(shè)計(jì)方法,比如快速原型法等等),并能夠根據(jù)項(xiàng)目需求和資源搭配來(lái)選擇合適的設(shè)計(jì)方法進(jìn)行項(xiàng)目的整體設(shè)計(jì)。
設(shè)計(jì)方法上選擇不當(dāng),就會(huì)耽誤研發(fā)周期,浪費(fèi)研發(fā)資源,甚至影響研發(fā)效果。
一個(gè)程序設(shè)計(jì)者還需要把很多功夫用在流程圖的設(shè)計(jì)和處理上,他需要做數(shù)據(jù)流圖以確立數(shù)據(jù)詞典;他需要加工邏輯流圖以形成整體的系統(tǒng)處理流程。
一個(gè)流程有問(wèn)題的系統(tǒng),就算代碼多漂亮,每個(gè)模塊多精致,也不會(huì)成為一個(gè)好的系統(tǒng)。當(dāng)然,做好流程分析并選擇好項(xiàng)目設(shè)計(jì)方法,都需要在需求分析能力上具有足夠的把握。
第三,復(fù)用設(shè)計(jì)和模塊化分解能力
這個(gè)似乎又是老調(diào)重談,前面基本素質(zhì)上不是已經(jīng)說(shuō)明了這個(gè)問(wèn)題嗎?
作為一個(gè)從事模塊任務(wù)的程序員,他需要對(duì)他所面對(duì)的特定功能模塊的復(fù)用性進(jìn)行考慮,而作為一個(gè)系統(tǒng)分析人員,他要面對(duì)的問(wèn)題復(fù)雜的多,需要對(duì)整體系統(tǒng)按照一種模塊化的分析能力分解為很多可復(fù)用的功能模塊和函數(shù),并針對(duì)每一模塊形成一個(gè)獨(dú)立的設(shè)計(jì)需求。舉個(gè)例子,好比是汽車(chē)生產(chǎn),最早每輛汽車(chē)都是獨(dú)立安裝的,每個(gè)部件都是量身定做的,但是后來(lái)不一樣了,機(jī)器化大生產(chǎn)了,一個(gè)汽車(chē)廠開(kāi)始通過(guò)流水線來(lái)生產(chǎn)汽車(chē),獨(dú)立部件開(kāi)始具有一定的復(fù)用性,在后來(lái)標(biāo)準(zhǔn)化成為大趨勢(shì),不同型號(hào),品牌甚至不同廠商的汽車(chē)部件也可以進(jìn)行方便的換裝和升級(jí),這時(shí)候,汽車(chē)生產(chǎn)的效率達(dá)到化。軟件工程也是同樣的道理,一個(gè)成熟的軟件行業(yè),在一些相關(guān)項(xiàng)目和系統(tǒng)中,不同的部件是可以隨意換裝的,比如微軟的許多桌面軟件,在很多操作模塊(如打開(kāi)文件,保存文件等等)都是復(fù)用的同一套功能模塊,而這些接口又通過(guò)一些類(lèi)庫(kù)提供給了桌面應(yīng)用程序開(kāi)發(fā)者方便掛接,這就是復(fù)用化的模塊設(shè)計(jì)明顯的一個(gè)佐證。