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