對于剛開始學習軟件開發(fā)的新人來說,“必備技能”往往意味著一個長長的、標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。
本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人一個比較明確的學習重點和路徑。
1、深入學習一門編程語言
沒有掌握任何一門編程語言,就不可能成為一名編程人員。
許多程序員試圖在學習之初一次學習幾種編程語言,以便應對他們第一份軟件開發(fā)工作的需要。雖然我認為開發(fā)人員最終會學習多種編程語言, 但建議不要在開始時這樣做。 因為同時學習多種語言只會導致混亂,也會分散學習其它技能的精力。相反,我建議深入的學習一種編程語言,這樣也會對使用這種語言編寫代碼感到非常有自信。
2、如何組織代碼
新手程序員在完成編程語言的學習之后,或者最好在學習編程語言的同時,需要掌握的是如何正確的組織代碼。
通過Steven McConnell所著的《Code Complete》,可以幫助學習這個寶貴的技能。
組織代碼意味著編寫良好的、清晰可理解的、不需要大量注釋的代碼,因為代碼本身是可自注釋的。許多軟件開發(fā)人員究其整個職業(yè)生涯都不曾具備這樣的技巧,但是這個技能卻是判斷一個軟件開發(fā)人員的技術和能力的首要標準。良好的代碼結構代表的不僅僅是完成了編碼工作,而是對編碼事業(yè)的熱衷奉獻。
對于新手程序員來說,簡潔清晰且含義明確的代碼,能讓你輕松地通過面試。
提升代碼結構已經成為了軟件開發(fā)的重要部分,但是提升的過程卻是十分嚴格的。在這個過程中,雖然不需要編寫新的代碼,但是卻需要和團隊成員一起花費大量時間來維護現(xiàn)有的代碼。
3、面向對象設計
為了應對軟件開發(fā)中的面向對象設計思想,開發(fā)人員也需要學習一種面向對象的語言。
面向對象設計是一種設計復雜程序的方法,它將代碼分成了單獨的類和對象(類的實例),這些類和對象封裝了一些特定的功能。
我們一直試圖在軟件開發(fā)中管理復雜性,用對象的方式思考就能幫助我們做到這點。面向對象允許我們跳出一堆關系繁雜的組件,來清晰的定義和設計一個復雜的系統(tǒng)。
現(xiàn)在已經有大量的功能性編程語言,但是在軟件開發(fā)過程中,你會發(fā)現(xiàn)那些最受歡迎的語言和模型都深受面向對象設計的影響。所以就需要深入的理解類、繼承以及如何使用,還有多態(tài)和封裝。
4、數(shù)據(jù)結構和算法
軟件開發(fā)人員應該熟悉以下的數(shù)據(jù)結構:
? 數(shù)組或向量
? 鏈表
? 堆棧
? 隊列
? 樹結構
? 哈希
? 集合
掌握并熟練運用以上的數(shù)據(jù)結構,能幫助開發(fā)人員清晰的定義、存取、管理數(shù)據(jù)。通過合理的數(shù)據(jù)結構和算法,許多困難的編程問題就能迎刃而解。
常見的算法有以下幾種:
? 排序算法
? 查找算法
? 圖搜索算法
? 動態(tài)規(guī)劃算法
? 模式匹配算法
善于利用好的算法,能起到事半功倍的效果。如果你對算法不夠熟悉的話,就很難提出一個好的解決方案,這也就是需要我們掌握算法的原因。
事實上,數(shù)據(jù)結構和算法也是軟件開發(fā)中最有趣的領域之一。利用數(shù)據(jù)結構和算法來開發(fā)一個干凈、簡潔的解決方案,效果會非常好。
Gayle Laakmann McDowell的“Cracking the Coding Interview”書中介紹了有關算法和數(shù)據(jù)結構的所有知識。
學習這些知識是一個挑戰(zhàn),但卻是非常值得的。掌握其中的任何一個技能,都能讓你遠遠超過其他人。這些知識也正是其它軟件開發(fā)人員所不具備的。
5、開發(fā)平臺及相關技術
應該至少對一個開發(fā)平臺以及與之相關的技術或框架有一定的經驗。
平臺通常意味著操作系統(tǒng)(OS),但它也適用于與操作系統(tǒng)類似的其他抽象系統(tǒng)。例如,你可能是專注于Mac或Windows操作系統(tǒng)的Mac開發(fā)人員或Windows開發(fā)人員,同時你也可以是專注于特定Web平臺的Web開發(fā)人員。
具備某個特定平臺的專業(yè)知識,不僅僅意味著需要熟悉平臺本身,還需要掌握開發(fā)平臺常用的開發(fā)工具、模式和通用框架。
6、框架與技術棧
除了學習特定的編程語言和平臺外,學習并掌握一個框架和技術棧也是非常重要的。
框架是一組用于在特定平臺或多個平臺上開發(fā)代碼的庫,它通常會使該平臺上的常見編程任務更加容易。例如,大多數(shù)C#開發(fā)人員使用.NET Framework編寫C#應用程序。.NET Framework由許多庫和類組成,允許C#開發(fā)人員在更高層次的抽象中工作。
技術棧則與框架有點不同,技術棧是一組通常包括框架的技術,通常一起用于創(chuàng)建完整的應用程序。技術棧使得創(chuàng)建應用程序變得更加容易, 因為它們提供了許多開發(fā)人員用于開發(fā)應用程序的常見范例,因此可以輕松共享知識。學習技術棧是非常有價值的,因為這意味著你擁有開發(fā)完整應用程序所需的所有技能。許多使用特定技術棧開發(fā)應用程序的公司,也在尋找熟悉該技術棧的軟件開發(fā)人員。
7、數(shù)據(jù)庫基礎知識
目前, 主要有兩種數(shù)據(jù)庫技術:關系數(shù)據(jù)庫和文檔數(shù)據(jù)庫。
現(xiàn)在的開發(fā)人員應該很熟悉關系數(shù)據(jù)庫,但同時也應該對文檔數(shù)據(jù)庫有所了解。
在軟件開發(fā)中,數(shù)據(jù)庫通常用于存儲應用程序的數(shù)據(jù)。
對于數(shù)據(jù)庫,開發(fā)人員至少應該了解以下方面:
? 數(shù)據(jù)庫的工作原理
? 如何執(zhí)行基本查詢來獲取數(shù)據(jù)
? 如何插入、更新和刪除數(shù)據(jù)
? 如何添加數(shù)據(jù)集
8、源代碼管理
管理源代碼是任何軟件開發(fā)項目不可或缺的組成部分。在使用源代碼之前,應該有一個網(wǎng)絡來共享項目的所有文件。
源代碼管理工具最基本的功能,是保留軟件項目中對文件所做更改的歷史記錄。它還允許多個開發(fā)人員同時處理相同的代碼, 并將這些處理代碼融合在一起。
所有的開發(fā)人員都應該知道如何使用源代碼管理工具,以便能夠檢查代碼并從多個來源融合代碼。
9、構建和部署
目前,大多數(shù)軟件開發(fā)項目都有一些自動化的構建和部署系統(tǒng)。同時也有許多不同的軟件應用程序,來幫助團隊自動化構建和部署任務。
構建
當你編寫代碼并將其合入到源代碼管理系統(tǒng)中后,你想通過一些方法了解你合入的代碼是否運行的很好,這就需要進行構建。構建會編譯系統(tǒng)中的所有代碼,并確保沒有編譯錯誤。一個復雜的構建系統(tǒng)還可以運行單元測試和用戶測試,或者代碼質量檢查,并提供一些有關代碼庫當前狀態(tài)的報告。
部署
部署系統(tǒng)負責將代碼部署到產品機器上,或者將其部署到某種測試環(huán)境中。
雖然開發(fā)人員不一定要成為部署方面的專家,但是了解系統(tǒng)的基礎知識以及構建和部署代碼的過程也是非常的重要。
10、測試
現(xiàn)在,很多的軟件項目都采用了所謂的敏捷流程,軟件開發(fā)人員和測試人員合作的更加密切。代碼質量成為了整個開發(fā)團隊的責任,所以開發(fā)人員也需要對測試知識有一定了解。
對于開發(fā)人員來說,至少應該熟悉以下的基本術語:
? 白盒測試
? 黑盒測試
? 單元測試
? 邊界條件
? 測試自動化
? 驗收測試
11、調試
對于軟件開發(fā)人員來說,經常會花費90%左右的時間,來弄清楚自己的代碼為什么不起作用了。不論你從事任何語言的代碼開發(fā),代碼調試都是開發(fā)過程中不可缺少的一部分。
所以開發(fā)人員應該下定決心,認真的學習如何做到高效的調試代碼。
12、方法論
一些軟件開發(fā)團隊在編寫代碼并完成他們的項目時,都遵循著一些方法論。所以開發(fā)人員至少應該熟悉諸多最常見的軟件開發(fā)方法論中的基本幾種,這里要說的就是瀑布開發(fā)和敏捷開發(fā)。
總結
盡管本文中列舉的軟件開發(fā)人員應該了解的知識很多,其中很多知識也許正是你所不了解,但是請不要沮喪。我們要做的就是認真的補充這些知識,不斷的提高自己。
開發(fā)技能能夠保證我們開發(fā)任務的順利進行,開發(fā)工具則能很好的提高開發(fā)效率。葡萄城控件一直致力于為廣大.NET平臺開發(fā)人員提供高品質的開發(fā)工具產品。
評論
查看更多