-動力節點--程序員必備技能_第1頁
-動力節點--程序員必備技能_第2頁
-動力節點--程序員必備技能_第3頁
-動力節點--程序員必備技能_第4頁
免費預覽已結束,剩余10頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1:團隊精神和協作能力把它作為基本素質 ,并不是不重要 ,恰恰相反 ,這是程序員應該具備的最基本的 ,也是最重要的安身立命之 本。把高水平程序員說成獨行俠的都是在囈語 ,任何個人的力量都是有限的 ,即便如 linus 這樣的天才 ,也需 要通過組成強大的團隊來創造奇跡 , 那些遍布全球的為 linux 寫核心的高手們 ,沒有協作精神是不可想象的。 獨行俠可以作一些賺錢的小軟件發點小財 ,但是一旦進入一些大系統的研發團隊 ,進入商業化和產品化的開 發任務 ,缺乏這種素質的人就完全不合格了。2:文檔習慣說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子 ,良好的文檔是正規研發流程中非常重要的環節

2、, 作為代碼程序員 , 30%的工作時間寫技術文檔是很正常的 ,而作為高級程序員和系統分析員 ,這個比例還要 高很多。缺乏文檔 ,一個軟件系統就缺乏生命力 ,在未來的查錯 ,升級以及模塊的復用時就都會遇到極大的 麻煩。3:規范化 ,標準化的代碼編寫習慣作為一些外國知名軟件公司的規矩 ,代碼的變量命名 ,代碼內注釋格式 ,甚至嵌套中行縮進的長度和函數間 的空行數字都有明確規定 ,良好的編寫習慣 ,不但有助于代碼的移植和糾錯 ,也有助于不同技術人員之間的 協作。有些 coding fans叫囂高水平程序員寫的代碼旁人從來看不懂 ,這種叫囂只能證明他們自己壓根不配自稱程序 員。代碼具有良好的可讀性

3、,是程序員基本的素質需求。再看看整個 linux 的搭建 ,沒有規范化和標準化的代碼習慣,全球的研發協作是絕對不可想象的。4:需求理解能力程序員需要理解一個模塊的需求 ,很多小朋友寫程序往往只關注一個功能需求 , 他們把性能指標全部歸結到 硬件 ,操作系統和開發環境上 ,而忽視了本身代碼的性能考慮 ,有人曾經放言說寫一個廣告交換程序很簡單 , 這種人從來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的 ,對于這樣的程序員 ,你給 他深藍那套系統 ,他也做不出太極鏈的并訪能力。性能需求指標中 ,穩定性 ,并訪支撐能力以及安全性都很 重要 ,作為程序員需要評估該模塊在系統運營中所處的環

4、境 ,將要受到的負荷壓力以及各種潛在的危險和惡 意攻擊的可能性。就這一點 ,一個成熟的程序員至少需要 2 到 3 年的項目研發和跟蹤經驗才有可能有心得。5:復用性 ,模塊化思維能力動力節點經常可以聽到一些程序員有這樣的抱怨 ,寫了幾年程序 ,變成了熟練工 ,每天都是重復寫一些沒有任何新意 的代碼 ,這其實是中國軟件人才最大浪費的地方 ,一些重復性工作變成了熟練程序員的主要工作 ,而這些 , 其實是完全可以避免的。復用性設計 ,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候 , 要多想一些 ,不要局限在完 成當前任務的簡單思路上 ,想想看該模塊是否可以脫離這個系統存在 ,是否可以通過簡

5、單的修改參數的方式 在其他系統和應用環境下直接引用 ,這樣就能極大避免重復性的開發工作 ,如果一個軟件研發單位和工作組 能夠在每一次研發過程中都考慮到這些問題 ,那么程序員就不會在重復性的工作中耽誤太多時間 ,就會有更 多時間和精力投入到創新的代碼工作中去。一些好的程序模塊代碼 ,即便是 70 年代寫成的 ,拿到現在放到一些系統里面作為功能模塊都能適合的很好 , 而現在我看到的是 ,很多小公司軟件一升級或改進就動輒全部代碼重寫 ,大部分重復性工作無謂的浪費了時 間和精力。6:測試習慣作為一些商業化正規化的開發而言 ,專職的測試工程師是不可少的 ,但是并不是說有了專職的測試工程師程 序員就可以不

6、進行自測 ;軟件研發作為一項工程而言 ,一個很重要的特點就是問題發現的越早 ,解決的代價 就越低 ,程序員在每段代碼 ,每個子模塊完成后進行認真的測試 ,就可以盡量將一些潛在的問題最早的發現 和解決 ,這樣對整體系統建設的效率和可靠性就有了最大的保證。測試工作實際上需要考慮兩方面 ,一方面是正常調用的測試 ,也就是看程序是否能在正常調用下完成基本功 能 ,這是最基本的測試職責 ,可惜在很多公司這成了唯一的測試任務 ,實際上還差的遠那 ;第二方面就是異 常調用的測試 ,比如高壓力負荷下的穩定性測試 ,用戶潛在的異常輸入情況下的測試 ,整體系統局部故障情 況下該模塊受影響狀況的測試 ,頻發的異常請

7、求阻塞資源時的模塊穩定測試等等。當然并不是程序員要對自 己的每段代碼都需要進行這種完整測試 ,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各 種性能需求 ,有針對性的進行相關測試并盡早發現和解決問題 ,當然這需要上面提到的需求理解能力。7:學習和總結的能力程序員是人才很容易被淘汰 ,很容易落伍的職業 ,因為一種技術可能僅僅在三兩年內具有領先性 ,程序員如 果想安身立命 ,就必須不斷跟進新的技術 ,學習新的技能。善于學習 ,對于任何職業而言 ,都是前進所必需的動力 ,對于程序員 ,這種要求就更加高了。但是學習也要 找對目標 ,一些小 coding fans 們,他們也津津樂道于他們的

8、學習能力 ,一會學會了 asp ,一會兒學會了 php , 一會兒學會了 jsp ,他們把這個作為炫耀的資本 ,盲目的追逐一些膚淺的 ,表面的東西和名詞 ,做網絡程序不動力節點懂通訊傳輸協議 ,做應用程序不懂中斷向量處理 ,這樣的技術人員 ,不管掌握了多少所謂的新語言 ,永遠不 會有質的提高。善于總結 ,也是學習能力的一種體現 ,每次完成一個研發任務 ,完成一段代碼 ,都應當有目的的跟蹤該程序 的應用狀況和用戶反饋 ,隨時總結 ,找到自己的不足 ,這樣逐步提高 ,一個程序員才可能成長起來。一個不具備成長性的程序員 ,即便眼前看是個高手 ,建議也不要選用 ,因為他落伍的時候馬上就到了。具備以上全

9、部素質的人 ,應當說是夠格的程序員了 ,請注意以上的各種素質都不是由 IQ 決定的 ,也不是大學 某些課本里可以學習到的 ,需要的僅僅是程序員對自己工作的認識 ,是一種意識上的問題。 那么作為高級程 序員 ,以至于系統分析員 ,也就是對于一個程序項目的設計者而言 ,除了應該具備上述全部素質之外 ,還需 要具備以下素質 :第一 ,需求分析能力對于程序員而言 ,理解需求就可以完成合格的代碼,但是對于研發項目的組織和管理者 ,他們不但要理解客戶需求 ,更多時候還要自行制定一些需求,為什么這么說呢 ?一般而言 ,進行研發任務 ,也許是客戶提出需求 ,也許是市場和營銷部門提出的需求 ,這時候對于研發部門

10、 , 他們看到的不是一個完整的需求 ,通常而言 ,該需求僅僅是一些功能上的要求 ,或者更正規些 ,可能獲得一 個完整的用戶視圖 ;但是這都不夠 ,因為客戶由于非技術因素多一些 ,他們可能很難提出完整和清晰 ,或者 說專業性的性能需求 ,但是對于項目組織者和規劃者 ,他必須能夠清醒認識到這些需求的存在并在完成需求 分析報告的時候適當的提出 ,同時要完整和清晰的體現在設計說明書里面 ,以便于程序員編碼時不會失去這 些準則。程序設計者必須正確理解用戶需求所處的環境 ,并針對性做出需求的分析 ,舉例而言 ,同樣一個軟件通過 ASP 租用方式發布和通過 License 方式發布 ,性能需求可能就是有區別

11、的 ,前者強調的是更好的支撐能力和 穩定性 ,而后者則可能更強調在各種平臺下的普適性和安裝使用的簡捷性。 第二 ,項目設計方法和流程處理 能力程序設計者必須能夠掌握不少于兩到三種的項目設計方法 (比如自頂至下的設計方法 ,比如快速原型法等 等 ,并能夠根據項目需求和資源搭配來選擇合適的設計方法進行項目的整體設計。設計方法上選擇不當 , 就會耽誤研發周期 ,浪費研發資源 ,甚至影響研發效果。一個程序設計者還需要把很多功夫用在流程圖的設計和處理上 ,他需要做數據流圖以確立數據詞典 ;他需要 加工邏輯流圖以形成整體的系統處理流程。一個流程有問題的系統 ,就算代碼多漂亮 ,每個模塊多精致 ,也 不會成

12、為一個好的系統。當然 , 做好流程分析并選擇好項目設計方法 ,都需要在需求分析能力上具有足夠的 把握。第三 ,復用設計和模塊化分解能力動力節點這個似乎又是老調重談 ,前面基本素質上不是已經說明了這個問題嗎?作為一個從事模塊任務的程序員,他需要對他所面對的特定功能模塊的復用性進行考慮 ,而作為一個系統分析人員 ,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的分析能力分解為很多可復用的功能模塊和函數 ,并針對每一模塊形成一個獨立的設計需求。舉個例子,好比是汽車生產 ,最早每輛汽車都是獨立安裝的 ,每個部件都是量身定做的 ,但是后來不一樣了 ,機器化大生產了 ,一個汽車廠開始通過流水線來生

13、產汽車 ,獨立部件開始具有一定的復用性,在后來標準化成為大趨勢,不同型號 ,品牌甚至不同廠商的汽車部件也可以進行方便的換裝和升級,這時候 ,汽車生產的效率達到最大化。軟件工程也是同樣的道理 ,一個 成熟的軟件行業 ,在一些相關項目和系統中 ,不同的部件是可以隨意換裝的 ,比如微軟的許多桌面軟件 ,在 很多操作模塊(如打開文件 ,保存文件等等都是復用的同一套功能模塊 ,而這些接口又通過一些類庫提供 給了桌面應用程序開發者方便掛接 ,這就是復用化的模塊設計明顯的一個佐證。將一個大型的 ,錯綜復雜的應用系統分解成一些相對獨立的 ,具有高度復用性的 , 并能僅僅依靠幾個參數完 成數據聯系的模塊組合 ,

14、是作為高級程序員和系統分析員一項最重要的工作 ,合適的項目設計方法 ,清晰的 流程圖 ,是實現這一目標的重要保證。 第四 ,整體項目評估能力作為系統設計人員 ,必須能夠從全局出發 ,對項目又整體的清醒認識,比如公司的資源配置是否合理和到位, 比如工程進度安排是否能最大化體現效率又不至于無法按期完成。評估項目整體和各個模塊的工作量,評估 項目所需的資源 ,評估項目可能遇到的困難 ,都需要大量的經驗積累 ,換言之 ,這是一種不斷總結的累計才能達到的境界。在西方一些軟件系統設計的帶頭人都是很年長的,比如 4, 50 歲,甚至更老 ,他們在編碼方 面已經遠遠不如年輕人那樣活絡,但是就項目評估而言 ,他

15、們幾十年的經驗積累就是最重要和寶貴的財富。中國缺這么一代程序員 ,主要還不是缺那種年紀的程序員 ,而是那種年紀的程序員基本上都是研究單位作出來的 ,都不是從專業的產品化軟件研發作出來的 ,他們沒有能積累那種產品化研發的經驗,這也是沒有辦法的事情。第五 ,團隊組織管理能力完成一個項目工程 ,需要團隊的齊心協力 ,作為項目設計者或研發的主管人 ,就應當有能力最大化發揮團隊 的整體力量 ,技術管理由于其專業性質 ,不大同于一般的人事管理 ,因為這里面設計了一些技術性的指標和 因素。首先是工作的量化 ,沒有量化就很難做到合適的績效考核 ,而程序量化又不是簡單的代碼行數可以計算的 , 因此要求技術管理人

16、員需要能真正評估一個模塊的復雜性和工作量。動力節點其次是對團隊協作模式的調整 ,一般而言 ,程序開發的協作通常分為小組進行 ,小組有主程序員方式的 ,也 有民主方式的 ,根據程序員之間的能力水平差距 ,以及根據項目研發的需求 ,選擇合適的組隊方式 ,并能將 責權和成員的工作任務緊密結合 ,這樣才能最大發揮組隊的效率。一個代碼水平高的人 ,未必能成為一個合格的項目研發主管 ,這方面的能力欠缺往往是容易被忽視的。 綜上 可以看到 ,作為一個主管研發的負責人 ,一個項目設計者 , 所需要具備的素質和能力并不是程序代碼編寫的 能力 ,當然一般情況下 ,一個程序員通過不斷的總結提高達到了這種素質的時候

17、,他所具有的代碼編寫能力 也已經相當不簡單了 ,但是請注意這里面的因果關系 ,一個高水平的項目設計者通常已經是代碼編寫相當優 秀的人了 ,但是并不是一個代碼相當優秀的程序員就可以勝任項目設計的工作 ,這里面存在的也不是智商和課本的問題 ,還是在于一個程序員在積累經驗,逐步提升的時候沒有意識到應當思考哪方面的東西,沒有有 意識的就項目的組織和復用設計進行揣摩 ,沒有經常性的文檔習慣和總結習慣,不改變這些 ,我們的合格的 項目設計者還是非常欠缺。另外 ,為防止有無聊的人和我較真,補充一點 ,本文針對目標是作商業化的軟件項目和工程 ,那些科研機構的編程高手,比如算法高手 ,比如圖象處理高手 ,他們的

18、工作是研究課題而非直接完成商業軟件 (當然最終間接成為商業產品,比如微軟研究院在作的研究課題,因此他們強調的素質可能是另外的東西 ,這些人(專家 ,并不能說是程序員 ,不能用程序員的標準去衡量。最后補充一點東西 , 一個軟件項目研發的設計流程是怎樣的呢?以通常標準的設計方法為例,(不過筆者喜歡快速原型法。 第 一個步驟是市場調研 ,技術和市場要結合才能體現最大價值。第二個步驟是需求分析 ,這個階段需要出三樣東西 ,用戶視圖 ,數據詞典和用戶操作手冊。用戶視圖是該軟件用戶 (包括終端用戶和管理用戶所能看到的頁面樣式 ,這里面包含了很多操作方面的流程和條件。數據詞典是指明數據邏輯關系并加以整理的東

19、東 , 完成了數據詞典 ,數據庫的設計就完成了一半多。用戶操作手冊是指明了操作流程的說明書。請注意 ,用戶 操作流程和用戶視圖是由需求決定的 ,因此應該在軟件設計之前完成 ,完成這些 ,就為程序研發提供了約束 和準繩 ,很遺憾太多公司都不是這樣做的 , 因果顛倒 ,順序不分 ,開發工作和實際需求往往因此產生隔閡脫 節的現象。需求分析 ,除了以上工作 ,筆者以為作為項目設計者應當完整的做出項目的性能需求說明書 ,因為往往性能 需求只有懂技術的人才可能理解 ,這就需要技術專家和需求方 (客戶或公司市場部門能夠有真正的溝通和 了解。 第三個步驟是概要設計 ,將系統功能模塊初步劃分 ,并給出合理的研發

20、流程和資源要求。作為快速原 型設計方法 ,完成概要設計就可以進入編碼階段了 ,通常采用這種方法是因為涉及的研發任務屬于新領域 , 技術主管人員一上來無法給出明確的詳細設計說明書 ,但是并不是說詳細設計說明書不重要 ,事實上快速原 型法在完成原型代碼后 ,根據評測結果和經驗教訓的總結 ,還要重新進行詳細設計的步驟。第四個步驟是詳細設計 ,這是考驗技術專家設計思維的重要關卡 ,詳細設計說明書應當把具體的模塊以最 干凈 的方式 (黑箱結構提供給編碼者 ,使得系統整體模塊化達到最大 ;一份好的詳細設計說明書 ,可以 使編碼的復雜性減低到最低 ,實際上 ,嚴格的講詳細設計說明書應當把每個函數的每個參數的定義都精精細 細的提供出來 ,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論