高級程序員的基本素質
一.需求分析能力和靠譜的文檔書寫能力
對于程序員而言,理解需求就可以完成合格的代碼,但是對于研發項目的組織和管理者,
他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什么這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需求,這
時候對于研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是一些功能
上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因為客戶由于
非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需求,但是對于
項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在并在完成需求分析報告的時
候適當的提出,同時要完整和清晰的體現在設計說明書里面,以便于程序員編碼時不會失
去這些準則。
程序設計者必須正確理解用戶需求所處的環境,并針對性做出需求的分析,舉例而言,同
樣一個軟件通過ASP租用方式發布和通過License方式發布,性能需求可能就是有區別的,
前者強調的是更好的支撐能力和穩定性,而后者則可能更強調在各種平臺下的普適性和安
裝使用的簡捷性。
二.項目設計方法和流程處理能力
程序設計者必須能夠掌握不少于兩到三種的項目設計方法(比如自頂至下的設計方法,比
如快速原型法等等),并能夠根據項目需求和資源搭配來選擇合適的設計方法進行項目的
整體設計。設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影響研發效果
。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖以確立
數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。一個流程有問題的系統,就
算代碼多漂亮,每個模塊多精致,也不會成為一個好的系統。當然,做好流程分析并選擇
好項目設計方法,都需要在需求分析能力上具有足夠的把握。
三.復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?
作為一個從事模塊任務的程序員,他需要對他所面對的特定功能模塊的復用性進行考慮,
而作為一個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的
分析能力分解為很多可復用的功能模塊和函數,并針對每一模塊形成一個獨立的設計需求
。舉個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做的
,但是后來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立部
件開始具有一定的復用性,在后來標準化成為大趨勢,不同型號,品牌甚至不同廠商的汽
車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。軟件工程也
是同樣的道理,一個成熟的軟件行業,在一些相關項目和系統中,不同的部件是可以隨意
換裝的,比如微軟的許多桌面軟件,在很多操作模塊(如打開文件,保存文件等等)都是
復用的同一套功能模塊,而這些接口又通過一些類庫提供給了桌面應用程序開發者方便掛
接,這就是復用化的模塊設計明顯的一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,并能僅
僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項最重要的
工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。
四.整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的資源配
置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至于無法按期完成。評
估項目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的困難,都需
要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在西方一些軟件
系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方面已經遠遠不
如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最重要和寶貴的財
富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那種年紀的程序員基
本上都是研究單位作出來的,都不是從專業的產品化軟件研發作出來的,他們沒有能積累
那種產品化研發的經驗,這也是沒有辦法的事情。
五.團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應當有能
力最大化發揮團隊的整體力量,技術管理由于其專業性質,不大同于一般的人事管理,因
為這里面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單的代碼
行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小組有主
程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項目研發的
需求,選擇合適的組隊方式,并能將責權和成員的工作任務緊密結合,這樣才能最大發揮
組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往往是容
易被忽視的。
六.必須會一種語言的設計與技能開發,雖不說精通,但是也要擅長,能夠處理日常多數情況,少數情況,通過摸索與嘗試后可以解決。
綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質和能力
并不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高達到了這
種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這里面的因果
關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是并不是一個代
碼相當優秀的程序員就可以勝任項目設計的工作,這里面存在的也不是智商和課本的問題
,還是在于一個程序員在積累經驗,逐步提升的時候沒有意識到應當思考哪方面的東西,
沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔習慣和總結習慣,不
改變這些,我們的合格的項目設計者還是非常欠缺。
總結:軟件開發者重要技能
1.解決問題的能力;
2.快速的自學能力,無師自通能力;
3.練好的代碼命名習慣;
4.待人處事;--能妥善地處理與其他開發者、經理、甚至客戶的關系