如何學習程序設計

1.1 培養興趣

興趣是能夠讓你堅持下去的動力。如果只是把寫程序作爲謀生的手段的話,你會活的很累,也太對不起自己了。多關心一些行業趣事,多想想蓋茨。不是提倡天天做白日夢,但人要是沒有了夢想,你覺得有味道嗎?可能像許多深圳本地農民一樣,打打麻將,喝喝功夫茶,拜拜財神爺;每個月就有幾萬十幾萬甚至更多的進帳,憑空多出個"食利階層"。你認爲,這樣有味道嗎?有空多到一些程序員論壇轉轉,你會發現,他們其實很樂觀幽默,時不時會冒出智慧的火花。

1.2 慎選程序設計語言

男怕入錯行,女怕嫁錯郎。初學者選擇程序設計語言需要謹慎對待。軟件開發不僅僅是掌握一門編程語言了事,它還需要其他很多方面的背景知識。軟件開發也不僅僅侷限於某幾個領域,而是已經***到了各行各業幾乎每一個角落。

如果你對硬件比較感興趣,你可以學習C語言/彙編語言,進入硬件開發領域。如果你對電信的行業知識及網絡比較熟悉,你可以在C/C++等之上多花時間,以期進入電信軟件開發領域。如果你對操作系統比較熟悉,你可以學習C/Linux等等,爲Linux內核開發/驅動程序開發/嵌入式開發打基礎。如果你想介入到應用範圍最廣泛的應用軟件開發(包括電子商務電子政務系統)的話,你可以選擇J2EE或.NET,甚至LAMP組合。每個領域要求的背景知識不一樣。做應用軟件需要對數據庫等很熟悉。總之,你需要根據自己的特點來選擇合適你的編程語言。

1.3 要腳踏實地,快餐式的學習不可取

先分享一個故事。

有一個小朋友,他很喜歡研究生物學,很想知道那些蝴蝶如何從蛹殼裏出來,變成蝴蝶便會飛。有一次,他走到草原上面看見一個蛹,便取了回家,然後看着,過了幾天以後,這個蛹出了一條裂痕,看見裏面的蝴蝶開始掙扎,想抓破蛹殼飛出來。這個過程達數小時之久,蝴蝶在蛹裏面很辛苦地拼命掙扎,怎麼也沒法子走出來。這個小孩看着看着不忍心,就想不如讓我幫幫它吧,便隨手拿起剪刀在蛹上剪開,使蝴蝶破蛹而出。但蝴蝶出來以後,因爲翅膀不夠力,變得很臃腫,飛不起來。

這個故事給我們的啓示是:欲速則不達。

浮躁是現代人最普遍的心態,能怪誰?也許是貧窮落後了這麼多年的緣故,就像當年的大躍進一樣,都想大步跨入共產主義社會。現在的軟件公司、客戶、政府、學校、培訓機構等等到處瀰漫着浮躁之氣。就拿筆者比較熟悉的深圳IT培訓行業來說吧,居然有的打廣告宣稱"參加培訓,100%就業",居然報名的學生不少,簡直是藐視天下程序員。社會環境如是,我們不能改變,只能改變自己,鬧市中的安寧,彌足珍貴。許多初學者C++/JAVA沒開始學,立馬使用VC/JBuilder,會使用VC/JBuilder開發一個HelloWorld程序,就忙不迭的向世界宣告,"我會軟件開發了",簡歷上也大言不慚地寫上"精通VC/JAVA"。結果到軟件公司面試時要麼被三兩下打發走了,要麼被駁的體無完膚,無地自容。到處碰壁之後才知道捧起《C++編程思想》《JAVA編程思想》仔細鑽研,早知如此何必當初呀。

"你現在講究簡單方便,你以後的路就長了",好象也是佛經中的勸戒。

1.4 多實踐,快實踐

彭端淑的《爲學一首示子侄》中有窮和尚與富和尚的故事。

從前,四川邊境有兩個和尚,一個貧窮,一個有錢。一天,窮和尚對富和尚說:"我打算去南海朝聖,你看怎麼樣?"富和尚說:"這裏離南海有幾千裏遠,你靠什麼去呢?"窮和尚說:"我只要一個水鉢,一個飯碗就夠了。"富和尚爲難地說:"幾年前我就打算買條船去南海,可至今沒去成,你還是別去吧!"一年以後,富和尚還在爲租賃船隻籌錢,窮和尚卻已經從南海朝聖回來了。

這個故事可解讀爲:任何事情,一旦考慮好了,就要馬上上路,不要等到準備周全之後,再去幹事情。假如事情準備考慮周全了再上路的話,別人恐怕捷足先登了。軟件開發是一門工程學科,注重的就是實踐,"君子動口不動手"對軟件開發人員來講根本就是錯誤的,他們提倡"動手至上",但別害怕,他們大多溫文爾雅,沒有暴力傾向,雖然有時候蓬頭垢面的一副"比爾蓋茨"樣。有前輩高人認爲,學習編程的祕訣是:編程、編程、再編程,筆者深表贊同。不僅要多實踐,而且要快實踐。我們在看書的時候,不要等到你完全理解了才動手敲代碼,而是應該在看書的同時敲代碼,程序運行的各種情況可以讓你更快更牢固的掌握知識點。

1.5 多參考程序代碼

程序代碼是軟件開發最重要的成果之一,其中***了程序員的思想與靈魂。許多人被《仙劍奇俠傳》中悽美的愛情故事感動,悲劇的結局更有一種缺憾美。爲什麼要以悲劇結尾?據說是因爲寫《仙劍奇俠傳》的程序員失戀而安排了這樣的結局,他把自己的感覺融入到遊戲中,卻讓衆多的仙劍迷扼腕嘆息。

多多參考代碼例子,對JAVA而言有參考文獻[4.3],有API類的源代碼(JDK安裝目錄下的src.zip文件),也可以研究一些開源的軟件或框架。

1.6 加強英文閱讀能力

對學習編程來說,不要求英語,但不能一點不會,。最起碼像JAVAAPI文檔(參考文獻[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開啓一個"金山詞霸"。看多了就會越來越熟練。在學JAVA的同時學習英文,一箭雙鵰多好。另外好多軟件需要到英文網站下載,你要能夠找到它們,這些是最基本的要求。英語好對你學習有很大的幫助。口語好的話更有機會進入管理層,進而可以成爲剝削程序員的"周扒皮"。

1.7 萬不得已才請教別人

筆者在ChinaITLab網校的在線輔導系統中解決學生問題時發現,大部分的問題學生稍做思考就可以解決。請教別人之前,你應該先回答如下幾個問題。

你是否在google中搜索了問題的解決辦法?

你是否查看了JAVAAPI文檔?

你是否查找過相關書籍?

你是否寫代碼測試過?

如果回答都是"是"的話,而且還沒有找到解決辦法,再問別人不遲。要知道獨立思考的能力對你很重要。要知道程序員的時間是很寶貴的。

1.8 多讀好書

書中自有顏如玉。比爾?蓋茨是一個飽讀羣書的人。雖然沒有讀完大學,但九歲的時候比爾?蓋茨就已經讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學科,可以說比爾?蓋茨不僅是當今世界上金錢的首富,而且也可以稱得上是知識的鉅富。

筆者在給學生上課的時候經常會給他們推薦書籍,到後來學生實在忍無可忍開始抱怨,"天吶,這麼多書到什麼時候才能看完了","學軟件開發,感覺上了賊船"。這時候,我的回答一般是,"彆着急,什麼時候帶你們去看看我的書房,到現在每月花在技術書籍上的錢400元,這在軟件開發人員之中還只能夠算是中等的",學生當場暈倒。(注:這一部分學生是剛學軟件開發的)

對於在JAVA開發領域的好書在筆者另外一篇文章中會專門點評。該文章可作爲本文的姊妹篇。

1.9 使用合適的工具

工慾善其事必先利其器。軟件開發包含各種各樣的活動,需求收集分析、建立用例模型、建立分析設計模型、編程實現、調試程序、自動化測試、持續集成等等,沒有工具幫忙可以說是寸步難行。工具可以提高開發效率,使軟件的質量更高BUG更少。組合稱手的武器。到飛花摘葉皆可傷人的境界就很高了,無招勝有招,手中無劍心中有劍這樣的境界幾乎不可企及。在筆者另外一篇文章中會專門闡述如何選擇合適的工具(該文章也可作爲本文的姊妹篇)。

2.軟件開發學習路線

兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守並非中庸之道,而是找尋學習軟件開發的正確路線與規律。

從軟件開發人員的生涯規劃來講,我們可以大致分爲三個階段,軟件工程師→軟件設計師→架構設計師或項目管理師。不想當元帥的士兵不是好士兵,不想當架構設計師或項目管理師的程序員也不是好的程序員。我們應該努力往上走。讓我們先整理一下開發應用軟件需要學習的主要技術。

A.基礎理論知識,如操作系統、編譯原理、數據結構與算法、計算機原理等,它們並非不重要。如不想成爲計算機科學家的話,可以採取"用到的時候再來學"的原則。

B.一門編程語言,現在基本上都是面向對象的語言,JAVA/C++/C#等等。如果做WEB開發的話還要學習HTML/Jav**ript等等。

C.一種方法學或者說思想,現在基本都是面向對象思想(OOA/OOD/設計模式)。由此而衍生的基於組件開發CBD/面向方面編程AOP等等。

D.一種關係型數據庫,ORACLE/SqlServer/DB2/MySQL等等

E.一種提高生產率的IDE集成開發環境JBuilder/Eclipse/VS.NET等。

F.一種UML建模工具,用ROSE/VISIO/鋼筆進行建模。

G.一種軟件過程,RUP/XP/CMM等等,通過軟件過程來組織軟件開發的衆多活動,使開發流程專業化規範化。當然還有其他的一些軟件工程知識。

H.項目管理、體系結構、框架知識。

正確的路線應該是:B→C→E→F→G→H。

還需要補充幾點:

1).對於A與C要補充的是,我們應該在實踐中逐步領悟編程理論與編程思想。新技術雖然不斷涌現,更新速度令人眼花燎亂霧裏看花;但萬變不離其宗,編程理論與編程思想的變化卻很慢。掌握了編程理論與編程思想你就會有撥雲見日之感。面向對象的思想在目前來講是相當關鍵的,是強勢技術之一,在上面需要多投入時間,給你的回報也會讓你驚喜。

2).對於數據庫來說是獨立學習的,這個時機就由你來決定吧。

3).編程語言作爲學習軟件開發的主線,而其餘的作爲輔線。

4).軟件工程師着重於B、C、E、D;軟件設計師着重於B、C、E、D、F;架構設計師着重於C、F、H。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章