終于還是要寫這種文章了。期末考試將至,寫大程序沒時間,寫小程序沒動力,只要演變成寫文章了。之前的兩篇字符串處理寫完了仍然不過癮,打算繼續(xù)寫關(guān)于遞歸下降法和LALR的事。后來想想還是暫時寫寫關(guān)于如何學(xué)習(xí)編程的好,畢竟這個問題對大家來說更加有益。
本篇將是一個系列,重點講述在外力很少的情況下如何自學(xué)編程,以及需要注意的一些地方。
一般來說,一些所謂的『高手』或者老師會告訴人們算法是非常非常重要以至于會不會算法就是你會不會編程的唯一標準。不過事實上并非如此。掌握算法固然是好,只是大部分程序并不需要高深的算法,而且招人的時候僅僅要求會算法的公司也是很少的(而且很難進)。我并不是學(xué)院派的人,所以雖然我本人也推崇學(xué)習(xí)算法,但并不推崇一開始就學(xué)習(xí)算法。
剛開始學(xué)編程的人總是不知道自己應(yīng)該從哪里入手。實際上這是一個相當重要的問題。在我看來,學(xué)好變成有若干條件:
·興趣
·數(shù)學(xué)/英語
·財力
首先談一談興趣。那些為了生計而尋找捷徑學(xué)習(xí)編程的人并不在本篇的考慮范圍之內(nèi),這些人我通常是不管的。興趣是非常重要的一個條件,但是興趣也是可以培養(yǎng)的。對編程的濃厚興趣可以讓自己自發(fā)地尋找各種各樣的書籍、發(fā)現(xiàn)自己知識結(jié)構(gòu)上的弱點、跟同行有效地進行交流等等。那些沒有興趣的人遇到了一個問題只會上論壇或者QQ群上要代碼(而且多數(shù)脾氣暴躁)。
數(shù)學(xué)和英語在一開始并沒有什么影響,但是在你學(xué)有所成之后,開始接觸復(fù)雜的內(nèi)容的時候,數(shù)學(xué)能力就開始起作用了。很多計算機論文都是使用數(shù)學(xué)語言寫的,對數(shù)學(xué)沒有熱情或者不夠敏感的人將會很難跨過這個門檻學(xué)習(xí)一些書本上沒有的東西。英語同樣也是重要的,因為并不是所有的文章或書籍都會翻譯成中文,或者及時翻譯成中文。
財力并不是重點,不過至少在養(yǎng)活自己的同時要有閑散資金來不停地支付網(wǎng)絡(luò)費用、書籍、電腦、外圍設(shè)備等必須物品。
至于知識結(jié)構(gòu)方面我個人的見解可能跟流行的觀點有所出入。目前人們總是把知識結(jié)構(gòu)比喻為一個金字塔,最下面是基礎(chǔ),上面一層一層更加深入而且更加專業(yè)的知識,最上是領(lǐng)域知識。老師們會說要學(xué)好基礎(chǔ),首先學(xué)好語言和算法,然后慢慢往上走。我自己并不這么認為。個人認為『從左到右』的學(xué)習(xí)方法是更加有效而且不會錯過什么東西的,只是不能速成。
從左到右是什么意思呢?想象一個金字塔,最左邊仍然是最底層的【基礎(chǔ)】,再往左就涉及到更多的【基礎(chǔ)】以及更多的上層內(nèi)容了。這樣一步一步下去就會有【基礎(chǔ)】--【上層】--【基礎(chǔ)】--【上層】這樣的不斷循環(huán)。這么做的好處是成果快,能夠培養(yǎng)起興趣和成就感,而且基礎(chǔ)隨著應(yīng)用的需要慢慢積累,等到學(xué)有所成的時候,基礎(chǔ)也覆蓋完了,上層的東西也看得差不多了,就可以超越金字塔自己翱翔了。
好了,那么如何培養(yǎng)興趣呢?
人總是對有趣的東西比較感興趣的,而且這種東西如果不難入門的話,那么接受起來更加容易,跟容易培養(yǎng)成就感,也就更有興趣了。根據(jù)實際情況,個人推薦剛開始接觸的時候應(yīng)該學(xué)習(xí)C#,理由如下:
·C#的書籍非常多,語言內(nèi)核簡單易懂,類庫豐富
·C#制作界面簡單
·C#屏蔽了有關(guān)操作系統(tǒng)和底層的大部分事情,可以讓學(xué)習(xí)的人專注于自己感興趣的內(nèi)容
如果不是特別著急的話,一開始就對著C/C++的數(shù)組啊指針啊什么亂七八糟的東西我覺得沒什么必要,反正將來自然就知道了。我在這里推薦C#的另一個重要原因是Microsoft Visual Studio .NET的C#編輯器有一個無敵美好的提示列表(按了一個“.”之后彈出來的),這對于初學(xué)者來說是相當好的一個工具。
一開始學(xué)習(xí)C#的時候應(yīng)該首先掌握基本的少量語法,也就是說掌握條件語句、分支語句、函數(shù)聲明以及數(shù)組,外加少量庫的運用以及計算上的知識。然后開始學(xué)習(xí)制作界面,最后學(xué)GDI+。
學(xué)習(xí)GDI+是有很多好處的。不過在學(xué)習(xí)之前應(yīng)該找本相關(guān)的書來看。GDI+有一些比較高級的功能如半透明效果和畫刷等等,容易組合出一些非常漂亮的圖形來。學(xué)會GDI+的基本操作之后,就可以慢慢接觸一些圖形濾鏡、分形、三維的內(nèi)容了。使用平面工具繪制簡單的三維圖形是一件非常有意思的事情,而且非常鍛煉數(shù)學(xué)能力,所得到的效果也是『令人震撼』的。
隨后應(yīng)該學(xué)習(xí)字符串處理。典型的字符串處理有分析INI文件、對一個四則運算式子進行操作等等的內(nèi)容。雖然C#處理器字符串出來比C++稍微蹩腳一點,不過在這個時候忽略這個問題是相當有用的,至少不用陷入無窮的指針漩渦里面去。
等圖形和字符串都少有涉獵之后,就可以開始開發(fā)有趣的程序了。譬如用C#些動畫、開發(fā)畫函數(shù)圖的工具、自己設(shè)計一種高度簡化的HTML然后進行渲染制作自己的幫助程序、或者開發(fā)簡單的圖像處理軟件之類。稍微聰明一點的人,如果每天都有機會寫很多代碼的話,大概半年到一年就可以走到這里了。
為什么我會選擇圖形和字符串兩種東西呢?為了培養(yǎng)興趣,首先要有成就感。圖形跟字符串都是跟操作系統(tǒng)本身沒關(guān)系的東西,而且操作起來也沒什么注意事項,因此入門比較簡單。如果漸漸深入的話會激發(fā)起學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、算法、甚至是數(shù)學(xué)英語的熱情。如果可以使用這條主線貫穿整個編程的初級階段的話,得到的將會是扎實的基礎(chǔ)以及靈活的頭腦。
好了,今天就先說到這里。下次再寫續(xù)篇。在此解答一下大家有可能提出來的疑問。
·數(shù)據(jù)庫和網(wǎng)絡(luò)都很熱門,要不要學(xué)呢?
--這兩門技術(shù)掌握了也是很好的一件事情,而且作為入門的話也未嘗不可。只是如果一開始就往數(shù)據(jù)庫和網(wǎng)絡(luò)的路走的話,將來可能會錯過一些學(xué)習(xí)操作系統(tǒng)底層以及復(fù)雜的算法的機會,因為這兩種東西不會讓你有學(xué)習(xí)大部分有深度的知識的動力。
·算法為什么不一開始學(xué)習(xí)呢?
--學(xué)會了算法,但是沒有有趣問題給你解決的話,那學(xué)來干什么?而且學(xué)習(xí)算法的最終目的是讓自己擁有設(shè)計算法的能力,很多人都忽略了這一點。
·學(xué)會了GDI+和字符串之后能不能找工作呢?
--不能。做人切勿急躁,學(xué)編程沒有個三五年還是不要把自己看得太厲害的好。
·接下來應(yīng)該學(xué)習(xí)什么樣的東西呢?
--請等待下一篇文章。
posted on 2008-06-06 18:29
陳梓瀚(vczh) 閱讀(14449)
評論(33) 編輯 收藏 引用 所屬分類:
啟示