每隔一段時間,就會收到些類似的消息:
怎么學好軟件開發(fā)? 我已經(jīng)學完了A,我接下來該學B還是C?
其實這樣的問題,真的是一言難復。如何學習,是一個很復雜的話題,尤其是眼下業(yè)內(nèi)的技術(shù)名詞日新月異,亂花迷人眼,使得新人更加看不清。所以才激發(fā)了我關(guān)于“技術(shù)族譜”的設想,本意就是想通過一個機制來理順知識之間的關(guān)系,分享每個人的學習經(jīng)驗,新人借鑒老人的學習路徑,從而減少走彎路的現(xiàn)象。
記得2007年的時候,一次團隊內(nèi)部開總結(jié)會,我在白板上隨手畫過一個開發(fā)相關(guān)知識的結(jié)構(gòu)圖,當時還有團隊成員拿相機拍下來,現(xiàn)在想想,也許對某些人有一定的指導意義,于是今天整理了一下發(fā)出來,如下圖所示:
一些相關(guān)的解釋:
學校里的課程沒用嗎?
答:肯定有用。
計算機專業(yè)的經(jīng)典理論課,意義非凡:計算機組成原理、計算機體系結(jié)構(gòu)、操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)。操作系統(tǒng)中的內(nèi)存管理算法、進程調(diào)度算法、并發(fā)控制算法,都是非常經(jīng)典的,你會在很多其它地方發(fā)現(xiàn)這些算法的應用或者變體。編譯原理有助于我們理解編程語言是如何工作的,如何用范式來表達復雜的語法,編譯原理中的狀態(tài)機相關(guān)知識,也是開發(fā)者手中的強大武器。數(shù)據(jù)結(jié)構(gòu)就更不用說了,List,Map,Tree,是編程中廣泛使用的。
快餐式軟件開發(fā)培訓的問題何在?
一個典型的快餐式培訓班,先教java語言,然后教SSH,然后給個千篇一律的虛擬項目做一下,最后號稱培養(yǎng)出來一批“WEB開發(fā)”程序員。我覺得,如果之前沒有任何基礎,僅靠這樣的培訓,那么出來真的只能做非常程式化的工作。我一直提倡穩(wěn)扎穩(wěn)打,從下向上學起這樣的方式,缺點是不如容易出效果。所以從兩個方向入手,一邊學基礎,一邊學應用,互相印證,也是不錯的學習路徑。
軟件開發(fā)的門檻在提高嗎?
我覺得是的,當然,我說的不包括hello world這樣的示例程序的開發(fā)。雖然現(xiàn)在程序語言比十年前強大很多,工具要好用很多,但要想寫出一個有點意義的軟件,需要了解的知識多了很多,需要配置的環(huán)境復雜了很多。看看有多少初學者被java的ClassPath所困擾,您就明白我說的意思了。
開發(fā)不僅僅是學一門語言!
開發(fā)的本質(zhì)是用程序控制計算機做一件事。基本上,任何有價值的程序都有內(nèi)政和外交。內(nèi)政就是程序的處理流程、數(shù)據(jù)加工算法、并發(fā)控制。外交就是網(wǎng)絡通信、IO、數(shù)據(jù)庫訪問,以及通過各種協(xié)議和其它系統(tǒng)進行交互。很多知識,尤其是外交相關(guān)的知識,僅僅學習一門語言是不夠的。
誤區(qū):很多人花大量精力關(guān)注最上層,比如:新的框架、新的工具、各種處理問題的技巧等等。但偏偏這一部分的變化最快,您在這上面投入的精力保值能力最差。技術(shù)有很強的相似性,比如,如果您真正掌握了javascript,那么掌握Ext或者JQuery只是熟悉對方的編程習慣和API而已,沒必要為了這些新名詞而疲于奔命。
一家之言,歡迎拍磚或者交流。
----
答問:
sun_blackh 發(fā)表于2009年9月30日 8:18:27
不好。不知道各種通信協(xié)議在什么地方。為什么要把tcp/ip單獨拿出來?質(zhì)量意識顯得很突兀,和整體沒有關(guān)系。雖然它很重要。什么是框架?它應該在哪里?我想LZ沒有仔細推敲過。
答:
知識體系中,越是向上,則越是偏向應用層的東西。“各類協(xié)議”,只是一個泛指,協(xié)議太多了,在一個人的知識結(jié)構(gòu)中,只學習跟自己工作和興趣需要的即可,比如,如果你做網(wǎng)管,可以關(guān)心SNMP,JMX;如果你做WEB開發(fā),可以關(guān)心SOAP,AJAX;如果你做SP,可以關(guān)注各類短信網(wǎng)關(guān)的協(xié)議等等。TCP/IP之所以要單拿出來,那絕對是有道理的,TCP/IP是一個協(xié)議棧,我覺得只要你想做網(wǎng)絡方面的開發(fā),那是必須要學習的,TCP/IP已經(jīng)是一種不可替代的標準了。
“框架”和剛才對“各類協(xié)議”的解釋是一樣的,并不特指哪種框架,而是一個統(tǒng)稱,是根據(jù)需要去學習的,比如:SSH,比如:JQUERY,比如:EXT,比如:Reason等等。
質(zhì)量意識你覺得突兀嗎?我覺得它就應該貫穿軟件開發(fā)的方方面面,它并不是一項具體的技術(shù),但卻要時時刻刻掛在心中。
chgaowei 發(fā)表于2009年10月2日 星期五 11:08:53 IP:舉報
這個模型很不錯。我想在補充幾個: 1、領(lǐng)域知識。 2、軟件工程。 3、算法,數(shù)據(jù)庫,網(wǎng)絡基礎應該放在下面。 4、質(zhì)量意識換成軟件工程。
答:
您補充的挺好,領(lǐng)域知識,或者說業(yè)務知識,的確很重要。
關(guān)于“軟件工程”,如果代替“質(zhì)量意識”,這個我覺得值得商榷,因為我覺得軟件工程并不能代表高質(zhì)量軟件的全部,你覺得呢。
算法,我個人的意見認為,并不能作為一個底層的東西,對于多數(shù)人來說,應該算是可選項,對于某些特殊軟件開發(fā),比如視頻編解碼、搜索引擎等等,可能算法是必須的基礎,可能連數(shù)學都要算上。
而 網(wǎng)絡 和 數(shù)據(jù)庫,按我的原意,應該是程序語言、數(shù)據(jù)庫、網(wǎng)絡作為三個并列的知識領(lǐng)域,為了圖的緊湊型,所以把數(shù)據(jù)庫和網(wǎng)絡豎起來了,但我覺得數(shù)據(jù)庫和網(wǎng)絡并不是構(gòu)成軟件開發(fā)的必要基礎,可以選修。
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/jinxfei/archive/2009/09/27/4602449.aspx