軟件開發是一個跨度很大的技術工做,在語言方面,有C,C++,Java,Ruby等等等等,在環境方面,又分嵌入式,桌面系統,企業級,WEB,基礎系統,或是科學研究。可是,不論是什麼的狀況,老是有一些通用的基本職業技能。程序員
這些最基本的職業技能一般決定了一個程序員的級別,可否用好這些技能,直接關係到了程序員的職業生涯。不少程序新手也是由於缺乏、達不到或是不熟悉在這些基本技能,因此,他們須要有老手帶,須要努力補齊這些技能。而高級程序員應該很是熟悉這些基本技能,並且有能力勝任並帶領其餘經驗不足的程序員。面試
下面這些基本職業技術能夠用來作爲對一個程序員的評估,很明顯,下面的這些技能均可以用來作面試。雖然,還有不少非技術的因素,但對於評估一個程序員的技術能力來講,其應該是足夠的了。編程
下面是程序員所應該具有的基本職業技能:架構
基本技能 | 技能描述 |
---|---|
閱讀代碼 | 這個技能須要程序員可以具有讀懂已經存在的代碼的能力,這樣的能力可讓程序員分析程序的行爲,瞭解程序,這樣才能和開發團隊一塊兒工做,繼承維護或是改進現有的程序。 |
編寫程序 | 編寫程序並不包括程序設計。不要覺得編程是一件很簡單的事情,不少程序員都認爲編程只須要懂得程序語言的語法,並把設計實現就能夠了。可是這離編寫程序還遠遠不夠,使用什麼樣的編碼風格成爲編寫程序員最須要具有的基本技能。可否使用很是良好的編程風格直接決寫了程序員的級別。 |
軟件設計 | 這一能力直接決定了須要吏用什麼樣的代碼技術達到怎麼樣的功能,而系統架構設計直接決定了軟件的質量、性能和可維護性。並非全部的程序在這一方面都很是優秀,但每一個程序員都須要或多或少的明白和掌握這一基本技能。 |
熟悉軟件工程 | 每一個程序員都應該明白軟件工程是什麼東西,都應該知道,需求分析,設計,編碼,測試,Release和維護這幾個階段。固然,幾乎全部的人都知道這些東西,但並非每一個人都很清楚這些東西。如今不少高級程序員都會混淆「需求規格說明書FS」和「概要設計HLD」。另外,程序員還須要知道一些軟件開發的方法論,好比:敏捷開發或瀑布模型。 |
使用程序庫或框架 | 一個程序員須要學會使用已有的代碼,不管是標論的程序庫,或是第三方的,仍是本身公司內部的,都須要學會作。好比:C++中,須要學會使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用這些東西,可讓你的工做事半功倍。 |
程序調試 | 程序調試是分析BUG和解決問題最直接的能力。沒有人可以保證程序寫出來不用調試就能夠運行正常,也沒有人能夠保證程序永遠不會出BUG。因此,熟練使用調試器是一個程序員須要具有的基本技能。 |
使用IDE | 學會使用IDE工具也會讓你的工做事半功倍。好比,VC++,Emacs,Eclipse等等,並要知道這些IDE的長處和短處。 |
使用版本控制 | 必定要學會使用版本控制工具,什麼叫mainline/trunk,什麼叫tag,什麼叫branch,怎麼作patch,怎麼merge代碼,怎麼reverse,怎麼利用版本控制工具維護不一樣版本的軟件。這是程序員須要明的的軟件配置管理中最重要的一塊。 |
單元測試 | 單元測試是每一個程序都須要作的。不少單元測試也是須要編碼的。必定要學會在xUnit框架下進行單元測試。好比JUnit, NUnit, CppUnit等等。 |
重構代碼 | 每一個程序員都須要有最基本的能力去重構目前已有的代碼,使代碼達到最優但卻不能影響任何的已有的功能。有一本書叫《軟件的重構》,每一個程序員都應該讀一下。 |
自動化編譯 | 程序員須要使用一個腳本,其能自動化編程全部的工程和代碼,這樣,整個開發團隊能夠不停地集成代碼,自動化測試,自動化部署,以及使用一些工具進行靜態代碼分析或是自動化測試。 |
固然,還有不少的基本技術也是很是重要的,好比,與人的溝通能力,語言的表達能力,寫做能力,團隊協做能力,適應變化的能力,時間管理能力,多任務處理能力,自我學習能力,故障處理能力,等等,等等,這裏只是列舉了和技術相關的能力,這些是程序最最最基本的能力,只要是程序員就必須要有的能力。框架