![程序員的基本功_第1頁](http://file4.renrendoc.com/view/2edfbf0795da5ccc7dcff92b4d7b42a1/2edfbf0795da5ccc7dcff92b4d7b42a11.gif)
![程序員的基本功_第2頁](http://file4.renrendoc.com/view/2edfbf0795da5ccc7dcff92b4d7b42a1/2edfbf0795da5ccc7dcff92b4d7b42a12.gif)
![程序員的基本功_第3頁](http://file4.renrendoc.com/view/2edfbf0795da5ccc7dcff92b4d7b42a1/2edfbf0795da5ccc7dcff92b4d7b42a13.gif)
![程序員的基本功_第4頁](http://file4.renrendoc.com/view/2edfbf0795da5ccc7dcff92b4d7b42a1/2edfbf0795da5ccc7dcff92b4d7b42a14.gif)
![程序員的基本功_第5頁](http://file4.renrendoc.com/view/2edfbf0795da5ccc7dcff92b4d7b42a1/2edfbf0795da5ccc7dcff92b4d7b42a15.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、程序員的基本功綜述程序員是一種技術工作,在IT的發(fā)展中有相當重要的地位,從底層硬件通訊協(xié)議的建立,到數(shù)據傳 輸層的處理,到操作系統(tǒng)的建設,到數(shù)據庫平臺的建設,一直到應用層上各種數(shù)據營銷平臺的搭建,程序 員都扮演著舉足輕重的角色并為IT事業(yè)的發(fā)展做出了巨大的貢獻。中國有很多精于編碼的人,但是在中國軟件行業(yè),尤其是網絡應用開發(fā)方面誤區(qū)很大,很難形成有規(guī) 模的軟件開發(fā)力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不如。這些問題不是在于中國 程序員的智商和工作努力狀況,也不是在于國家和民間對開發(fā)的投入程度,而是很大程度上,是因為有一 些對技術,對程序開發(fā),對項目設計方面的思想誤區(qū)。這些誤區(qū),導
2、致了軟件行業(yè)的產品化能力不足,缺 乏規(guī)?;痛笮蛷陀孟到y(tǒng)研發(fā)能力。可以說,改變認識誤區(qū),是解決軟件行業(yè)小作坊模式和個體英雄模式 所帶來的局限性的重要工作。中國有很多小朋友,他們十八九歲或者二十一二,通過自學也寫了不少代碼,有的代碼寫的非常漂亮, 一些技術細節(jié)相當出眾,也很有鉆研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統(tǒng),對程序 的整體理解能力。有一位網上的朋友說得很好,這些人實際上只是一些代碼狂(Coding fans),根本沒有 資格稱為程序員。但是遺憾的是,不少小網絡公司的CTO就是這樣的coding fans,拿著嚇人的工資,做 著嚇人的項目,項目的結局通常也很嚇人。普通程序員
3、的基本功作一名真正合格的程序員,或者說真正合格完成一些代碼工作的程序員,應該具有下列基本素質:一、團隊精神和協(xié)作能力把此作為基本素質,并不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身 立命之本。把高水平程序員說成獨行俠的都是在吃語,任何個人的力量都是有限的。即便如linus這樣的天 才,也需要通過組織強大的團隊來創(chuàng)造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協(xié)作精神是不 可想象的。獨行俠可以作一些賺錢的小軟件發(fā)點小財,但是一旦進入大系統(tǒng)的研發(fā)團隊,進入商業(yè)化和產 品化的開發(fā)任務,缺乏這種素質的人就完全不合格了。二、文檔習慣說良好的文檔是正規(guī)研發(fā)流程中非常重要的環(huán)
4、節(jié),作為代碼程序員,30%的工作時間寫技術文檔是很 正常的,而高級程序員和系統(tǒng)分析員,這個比例則要更高一些。缺乏文檔,軟件系統(tǒng)就缺乏生命力,在未來的查錯,升級以及模塊的復用時都會遇到極大的麻煩。三、規(guī)范化、標準化的代碼編寫習慣作為一些外國知名軟件公司的規(guī)矩,代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和 函數(shù)間的空行數(shù)字都有明確規(guī)定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人 員之間的協(xié)作。代碼具有良好的可讀性,是程序員基本的素質需求。看看整個linux的搭建,沒有規(guī)范化和標準化的代 碼習慣,全球的研發(fā)協(xié)作是絕對不可想象的。四、需求理解能力程序員需要理解模塊的需求
5、,很多入門者寫程序往往只關注功能需求,他們把性能指標全部歸結到硬 件,操作系統(tǒng)和開發(fā)環(huán)境上,而忽視了本身代碼的性能考慮。其實、性能需求指標中,穩(wěn)定性,并訪支撐 能力以及安全性都很重要。作為程序員需要評估該模塊在系統(tǒng)運營中所處的環(huán)境,將要受到的負荷壓力以 及各種潛在的危險和惡意攻擊的可能性。這一點,成熟的程序員至少需要2到3年的項目研發(fā)和跟蹤經驗 才會有所體會。五、復用性、模塊化思維能力經常聽到一些程序員抱怨,寫了幾年程序,變成了熟練工,每天都是重復代碼。這其實是中國軟件人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其 實是完全可以避免的。復用性設計,模塊化思維就是要程序
6、員在完成任何一個功能模塊或函數(shù)的時候,要多想一些,不要局 限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統(tǒng)存在,是否可以通過簡單的修改參 數(shù)的方式在其他系統(tǒng)和應用環(huán)境下直接引用,這樣就能極大避免重復性的開發(fā)工作。如果軟件研發(fā)單位和 工作組能夠在每一次研發(fā)過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間, 就會有更多時間和精力投入到創(chuàng)新的代碼工作中去。一些好的程序模塊代碼,即便是70年代寫成的,用到現(xiàn)在的一些系統(tǒng)里面也非常適合,但現(xiàn)在經常看 到的是,很多小公司軟件一升級或改進就動輒重寫全部代碼,大部分的重復性工作極大地浪費了時間和精 力。六、測試習慣對于商業(yè)化、
7、正規(guī)化的開發(fā),專職的測試工程師必不可少。但是并不是說有了專職測試工程師,程序 員就可以不進行自測;軟件研發(fā)作為一項工程而言,一個很重要的特點就是問題發(fā)現(xiàn)的越早,解決的代價 就越低。程序員在每段代碼,每個子模塊完成后進行認真的測試,可以盡量早地發(fā)現(xiàn)和解決一些潛在的問 題,這樣,整體系統(tǒng)建設的效率和可靠性就有了最大的保證。測試工作實際上需要考慮兩方面:一是正常調用的測試。也就是看程序是否能在正常調用下完成基本 功能,這是最基本的測試職責,可惜很多公司將此當成了唯一的測試任務;第二方面就是異常調用的測試。 比如高壓負荷下的穩(wěn)定性測試,用戶潛在的異常輸入情況下測試,整體系統(tǒng)局部故障情況下該模塊受影響
8、狀況的測試,頻發(fā)的異常請求阻塞資源時的模塊穩(wěn)定測試等等。當然并不是每個程序員都要對自己的每段 代碼都進行這種完整測試,但是必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針 對性地進行相關測試并盡早發(fā)現(xiàn)和解決問題,當然這還需要上面所提到的需求理解能力。七、學習和總結的能力程序員是一種很容易被淘汰、落伍的職業(yè)。因為一種技術很可能只在三兩年內具有領先性,如果想安 身立命,程序員就必須不斷跟進新技術,學習新技能。善于學習,對于任何職業(yè)而言,這都是前進所必需的動力,而程序員,這種要求則更高了。但是學習也要找對目標,一些代碼迷們津津樂道于他們的學習能力,一會學會了 asp,一會php,一
9、會又是jsp,他們將此作為炫耀的資本,盲目地追逐一些膚淺的,表面的東西。做網絡程序員不懂通訊傳輸 協(xié)議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠都不會有質 的提高。善于總結,也是學習能力的一種體現(xiàn),每次完成一項研發(fā)任務,完成一段代碼,都應當有目的地跟蹤 該程序的應用狀況和用戶反饋,隨時總結,找到不足,以此逐步提高。只有這樣,程序員才可能成長起來。具備以上基本素質的人,應當說是合格的程序員了。但要注意這些素質并不是由IQ決定,也不是某些 課本里可以學習到的,它需要的僅僅是程序員對自己工作的認識,屬于一種意識上的問題。高級程序員的基本功而高級程序員,如系統(tǒng)分析員
10、,程序項目的設計者,除了上述基本功外,還需要具備以下能力:一、需求分析能力對于程序員而言,理解需求就可以完成合格的代碼,但是作為研發(fā)項目的組織和管理者,不但要理解 客戶需求,更多時候還要自行制定一些需求,為什么這么說呢?一般而言,進行研發(fā)任務,也許是客戶提出需求,也許是市場和營銷部門提出的需求。這時候的研發(fā) 部門,看到的不是一個完整的需求,通常只是些功能上的要求;正規(guī)些的也僅是一個完整的用戶視圖而已。 但這都不夠,因為客戶由于非技術因素多一些,很難提出完整、清晰、專業(yè)性的性能需求。但是項目組織 者和規(guī)劃者必須能夠清醒認識到這些需求的存在,并在完成需求分析報告時適當提出,同時還要完整清晰 的體現(xiàn)
11、于設計說明書,以便于程序員編碼時不會失去這些準則。程序設計者必須正確理解用戶需求所處的環(huán)境,并針對性做出需求的分析。舉例而言,同樣一個軟件 通過ASP租用方式發(fā)布和通過License方式發(fā)布,性能需求可能就有區(qū)別,前者強調的是更好的支撐能力 和穩(wěn)定性,而后者則可更注重各種平臺下的普適性和安裝使用的簡捷性。二、項目設計方法和流程處理能力程序設計者必須能夠掌握不少于兩到三種的項目設計方法(比如自頂至下的設計方法,快速原型法等 等),并能夠根據項目需求和資源搭配選擇合適的設計方法,進行項目的整體設計。設計方法上選擇不當,會耽誤研發(fā)周期,浪費研發(fā)資源,甚至影響研發(fā)效果。程序設計者還需要在流程圖的設計和
12、處理上花些功夫。他需要做數(shù)據流圖以確立數(shù)據詞典;需要加工 邏輯流圖以形成整體的系統(tǒng)處理流程。流程有問題的系統(tǒng),就算代碼再漂亮,每個模塊再精致,也不會成為一個好系統(tǒng)。當然,做好流程分 析、選擇好項目設計方法,都需要在需求分析能力上有足夠的把握。三、復用設計和模塊化分解能力作為從事模塊任務的程序員,需要考慮對所面對的特定功能模塊的復用性,而作為系統(tǒng)分析員,要面 對的問題則復雜得多,需要對整體系統(tǒng)按照一種模塊化的分析能力分解為很多可復用的功能模塊和函數(shù), 并針對每一模塊形成一個獨立的設計需求。例如汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是 量身定做的,但是后來不一樣了,機器化大生產后,汽車廠
13、開始通過流水線來生產汽車,獨立部件開始具 有一定的復用性,在后來標準化成為大趨勢,不同型號,品牌甚至不同廠商的汽車部件也可以進行方便的 換裝和升級,這時候,汽車生產的效率達到最大化。軟件工程也是同樣的道理。成熟的軟件行業(yè),在一些相關項目和系統(tǒng)中,不同的部件是可以隨意換裝 的,比如微軟的許多桌面軟件,在很多操作模塊(如打開文件,保存文件等等)都是復用的同一套功能模 塊,而這些接口又通過相關類庫提供給桌面應用程序開發(fā)者方便掛接,這就是典型的復用化模塊設計的佐 證。將一個大型的、錯綜復雜的應用系統(tǒng)分解成一些相對獨立的,具有高度復用性的。但只通過幾個參數(shù) 就可完成數(shù)據聯(lián)系的模塊組合,是高級程序員和系統(tǒng)
14、分析員一項最重要工作。而合適的項目設計方法,清 晰的流程圖,是實現(xiàn)這一目標的重要保證。四、整體項目評估能力系統(tǒng)設計人員必須從全局出發(fā),對項目有整體認識,比如公司的資源配置是否合理和到位,;工程進 度安排是否能最大體現(xiàn)效率又不影響工期。評估項目整體和各個模塊的工作量、評估項目所需的資源、評 估項目可能遇到的困難,都需要大量的經驗積累。換言之,這是一種不斷總結、累計才能達到的境界。西 方一些軟件系統(tǒng)設計帶頭人都是很年長的,比如四五十歲,有的則更老。在編碼方面他們已經遠遠不如年 輕人那樣活絡,但就項目評估而言,幾十年的經驗積累就是最重要和寶貴的財富。五、團隊組織管理能力完成一個項目工程,需要團隊齊心
15、協(xié)力,作為項目設計者或研發(fā)的主管人,就應當有能力最大化發(fā)揮 團隊的整體力量。技術管理不同于人事管理,因為它涉及了技術性的指標和因素。首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單的代碼行數(shù)可以計 算的,因此要求技術管理人員能真正評估一個模塊的復雜性和工作量。其次是對團隊協(xié)作模式的調整,一般而言,程序開發(fā)的協(xié)作通常分為小組進行,小組有主程序員方式, 也有民主方式的。根據程序員之間的能力水平差距,以及項目研發(fā)的需求,選擇合適的組隊方式,并能將 責權和成員的工作任務緊密結合,這樣才能最大發(fā)揮組隊的效率。所以代碼水平高的人,未必能成為合格的項目研發(fā)主管。但反之,高水平的項目設
16、計者通常都是優(yōu)秀的代碼師。兩者之間,關鍵在于程序員在積累經驗、逐步 提升的時候有沒有意識到應當思考什么、有沒有意識對項目的組織和復用設計進行揣摩,有沒有經常性的 文檔習慣和總結習慣。其它補充最后補講一下,軟件項目研發(fā)的設計流程有哪些步驟?以通常標準的設計方法為例(筆者喜歡快速原 型法)來說明:第一步是市場調研。技術和市場結合才能體現(xiàn)最大價值。第二步是需求分析。這個階段需要出三種文件:用戶視圖,數(shù)據詞典和用戶操作手冊。用戶視圖是該軟件 用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,包含了很多操作方面的流程和條件;數(shù)據詞典是 指明數(shù)據邏輯關系并加以整理而形成。完成了數(shù)據詞典,數(shù)據庫的設計就完成
17、了一半多。用戶操作手冊是 指明了操作流程的說明書。請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟件設計之前 完成。完成這些步驟,就為程序研發(fā)提供了約束和準繩,很遺憾很多公司都是因果顛倒,順序不分,所以導 致開發(fā)工作和實際需求產生隔閡脫節(jié)。除了以上工作,筆者認為作為項目設計者應當完整的做出項目的性能需求說明書,因為往往性能需求 只有懂技術的人才可能理解,這就需要技術專家和需求方(客戶或公司市場部門)能夠有真正的溝通和了 解。第三步是概要設計。將系統(tǒng)功能模塊初步劃分,并給出合理的研發(fā)流程和資源要求。作為快速原型設計法, 完成概要設計就可以進入編碼階段了,通常采用這種方法是因為涉及的研發(fā)
18、任務屬于新領域,技術主管很 難立刻給出明確的詳細設計說明書,但并不是說詳細設計說明書不重要,事實上快速原型法在完成原型代 碼后,根據評測結果和經驗教訓的總結,還要重新進行詳細設計的步驟。第四步是詳細設計。這是考驗技術專家設計思維的重要關卡,詳細設計說明書應當把具體的模塊以最“干 凈”的方式(黑箱結構)提供給編碼者,使得系統(tǒng)整體模塊化達到最大;一份好的詳細設計說明書,可以使 編碼的復雜性減低到最低。實際上,嚴格的講,詳細設計說明書應當把每個函數(shù)的每個參數(shù)的定義都精精 細細的提供出來,從需求分析到概要設計到完成詳細設計說明書,一個軟件項目就應當說完成了一半。換 言之,一個大型軟件系統(tǒng)在完成了一半的時候,其實還沒有開始一行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球丙二醛行業(yè)調研及趨勢分析報告
- 2025年全球及中國低空洞焊膏行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025辦公寫字樓出租合同范本2
- 活牛購銷合同
- 廣場商鋪租賃合同
- 2025北京市非居民供熱采暖合同(合同版本)
- 文化傳播項目合同
- 門窗安裝工承包合同范本
- 提升跨部門協(xié)作能力的技能培訓
- 合同協(xié)議框架性合作協(xié)議
- 幼兒平衡車訓練課程設計
- 創(chuàng)業(yè)計劃路演-美甲
- 梁山伯與祝英臺小提琴譜樂譜
- 我國全科醫(yī)生培訓模式
- 機構編制重要事項的報告范文(5篇)
- DBJ51-T 188-2022 預拌流態(tài)固化土工程應用技術標準
- 《長津湖》電影賞析PPT
- 多維閱讀第10級 who is who 看看都是誰
- 滑雪運動介紹
- 高二下學期英語閱讀限時訓練(一)
- 半導體制造工藝-13薄膜沉積(下)綜述課件
評論
0/150
提交評論