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