對於剛開始進入IT的新人來說,“必備技能”往往意味著一個長長的、標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。
本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人一個比較明確的學習重點和路徑。
深入學習一門程式語言
沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。
許多程式設計師試圖在學習之初一次學習幾種程式語言,以便應對他們第一份軟體開發工作的需要。雖然我認為開發人員最終會學習多種程式語言, 但建議不要在開始時這樣做。
因為同時學習多種語言只會導致混亂,也會分散學習其它技能的精力。相反,我建議深入的學習一種程式語言,這樣也會對使用這種語言編寫程式碼感到非常有自信。
如何組織程式碼
新手程式設計師在完成程式語言的學習之後,或者最好在學習程式語言的同時,需要掌握的是如何正確的組織程式碼。
通過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%左右的時間,來弄清楚自己的程式碼為什麼不起作用了。不論你從事任何語言的程式碼開發,程式碼除錯都是開發過程中不可缺少的一部分。
所以開發人員應該下定決心,認真的學習如何做到高效的除錯程式碼。
方法論
一些軟體開發團隊在編寫程式碼並完成他們的專案時,都遵循著一些方法論。所以開發人員至少應該熟悉諸多最常見的軟體開發方法論中的基本幾種,這裡要說的就是瀑布開發和敏捷開發。
總結
儘管本文中列舉的軟體開發人員應該瞭解的知識很多,其中很多知識也許正是你所不瞭解,但是請不要沮喪。我們要做的就是認真的補充這些知識,不斷的提高自己。
更多閱讀
為什麼成為一名程式設計師這麼困難? — 從程式新手到準工程師的必經之路
相信自己,沒有做不到的,只有想不到的
微信公眾號:終端研發部