接觸一個行業,前期最好來一個系統的學習,有完整的框架一點一點的把基礎吃透,不能左一耙子,右一鋤頭,以我的從業經驗給大家分享如何系統的學習編程開發,剛入坑的程序員菜鳥注意了,迅速占領高地,迅速收藏了。
總體大致分為以下幾類:
A.教材上的知識
這部分內容來自計算機專業的課程教材。也有可能會涉及一部分來自其他相關專業或者相關課程的內容。
B.編程語言
每一個程序員只有在會使用一門語言的情況下才有可能從事開發工作,所以學習并掌握一門語言是最低要求了。
C.SDK
光有一門語言是不夠的,從事任何實際的軟件開發都需要一個類庫或者開發包才可以完成。比如C語言中的庫函數,C#中的.NetFramework類庫,Windows的API等等就屬于這個范疇。這方面的資源有個平臺DevStore可以關注下,收錄了很多的sdk服務 配置過程 評測,直接搜索就可以了。
D.開發工具
以如今的情況來說,沒有開發工具理論上也是可以開發軟件的,但效率就是一個問題,所以掌握并使用一個開發工具完成開發任務應該也是一個最低要求。
E.領域知識
軟件總有用戶,于是開發這些用戶使用的軟件,那么程序員就需要了解用戶所在行業的知識,至少需要知道一些基本的必須的知識。還有一部分的內容也劃分為領域知識,比如從事Photoshop這類軟件的開發那么圖形相關的知識就必須了解一些,從事工控軟件的開發,那么對控制方面的知識也要有所了解。
以上的分類是在開發過程中我對知識的理解,一個程序員知道這些知識后從事一個軟件的開發應該是沒有問題了。下面分別來討論一下這些知識的學習問題。
一.教材知識的學習
做為一個已經從業的程序員來說,我不認為計算機專業的所有專業課程(包括專業基礎課,我在讀大學的時候還有這個說法)都是有用的。實際上對于大部分程序員來說,只需要很少的一部分知識就足夠了。這些知識主要由三門課程組成:數據結構,編譯原理,操作系統。對于大部分的程序員來說,其他課程的內容不是沒用,而是在實際工作中用不上。
數據結構這門課程的重要性,可以理解為是程序員的圣經,怎么如何形容其重要性都是不過過分的。這門課程中需要掌握的內容,我個人觀點如下:
1. 掌握所有線性數據結構的知識,比如表,棧,隊列等(廣義表可以不作要求)
2. 二叉樹的基本操作和基本使用
3. 圖中需要知道遍歷和了解最短路徑算法,以及相關的一些概念
當然對于某些程序員來說,這是不夠的,因為從事的具體的軟件開發工作會有不同的要求。但是對于大部分從事MIS軟件開發的程序員來說,這些知識夠了。掌握這些知識可以有兩個層面的要求。第一個是完成足夠的習題,從而可以熟練的答題,第二個是能夠在實際工作中使用數據結構描述實際的事物。做到這兩點要求應該說不算太高,注意多加練習就可以了。目前來說這門課程的經典教材也不少,相信只要按部就班的學習完就是合格的了。
編譯原理這門課程主要是學習方法和思想而不是課程中的知識本身。因為畢業出來能從事編譯器開發的人實在是太少太少了。這門課程需要掌握了解的東西不多,我個人的觀點主要是以下幾個:
1. 確定有限自動機和非確定有限自動機的使用
2. 詞法分析程序的實現
3. 語法分析的方法
自動機在實際應用中的體現就相當于是狀態轉換圖,這個工具非常的重要,希望能夠務必掌握。我們在開發EntityModelStudio時,設計界面交互部分的內容就是先設計出狀態轉換圖然后再寫代碼的,否則直接開發的話就會面臨開發失去控制的風險,同時重構和維護也會相當麻煩。所以這個工具極其強大,非常實用。另外提一下,非確定有限自動機,這個工具的能力和確定的有限自動機是等價的。但是由于它的不確定性,更符合人的自然思維習慣,從而在某些設計場合相對會方便很多。這一點是很實用的,也是很吸引人的。
掌握詞法分析程序的實現,可以大幅度拓展開發能力和思考能力。這部分東西理論上描述可能比較麻煩,但是實際使用時還是很容易上手的,所以非常值得學習一下。語法分析程序不需要掌握了,畢竟開發編譯器的機會是微乎其微的。但是相關的方法和思想希望能夠了解,這可以幫助程序員用電腦的思維來思考問題。
操作系統需要掌握的東西只有兩個:
1. 五大管理的基本方法,尤其是涉及內存管理的策略
2. 線程或者進程的同步技術
操作系統是復雜的,但是教材中介紹的這些管理方法相對來說是簡單易懂很多了。這一難一簡之間體現了基本知識的重要性,基本知識在實際開發中的應用的廣泛性。好好的體會,就可以明白用簡單方法解決復雜問題的技巧。線程進程的同步,這個就不用多說了,大家都知道它的作用,如果實在不想掌握的話那我也非常愿意相信你的理由一定是充分的,否則你絕對不會那么做。
最后我想強調的是,無論你如何看待這些知識:可能覺的沒用,可能覺的太難,可能是不感興趣,但是如果你想做程序員的話,那么請你務必最大可能牢固,最大可能熟練的掌握它。
開發者必上的網站――DevStore