不論你是想自己設(shè)計(jì)游戲,還是開發(fā)iPhone或安卓手機(jī)上的應(yīng)用,還是僅僅為了娛樂,學(xué)習(xí)編程語言都是一條必經(jīng)之路。編程語言種類繁多,用途各異,然而一旦掌握其中之一,其他的也就迎刃而解。作為初學(xué)者,你可能要先從Java或HTML開始學(xué),一旦掌握了一門編程語言,你就發(fā)揮無窮的想象,開發(fā)各種神奇的軟件啦。
初學(xué)者一定要從主流語言開始學(xué)習(xí),比如中級(jí)語言C和C++。這兩種語言是任何一名合格、專業(yè)的程序員都必須掌握的,因?yàn)樗鼈兎Q得上是軟件開發(fā)界的主流。但是最好不要從高級(jí)語言開始學(xué),如Java,因?yàn)檫@些語言對(duì)于初學(xué)者來說難度未免太高(高級(jí)語言可以以后再學(xué),但是C語言和C++應(yīng)該作為你的基礎(chǔ))。然而對(duì)于完完全全的門外漢的來說,可能C和C++都有點(diǎn)困難,那么你也可以從Python開始學(xué),這種語言被大家廣泛認(rèn)為是適合初學(xué)者的。
此外,每一種語言都要學(xué)習(xí)至少一年。要熟悉編程范式,尤其是面向過程及面向?qū)ο筮@兩種;要廣泛閱讀,多用編譯器及IDE(網(wǎng)上有許多免費(fèi)的)練習(xí)編程。
掌握一種語言后,先不要急著運(yùn)用,而要去多買些數(shù)據(jù)結(jié)構(gòu)方面的書來看,學(xué)習(xí)搜索、分類、二叉樹及鏈表創(chuàng)建等概念。因?yàn)闊o論你是要制作游戲還是開發(fā)軟件,數(shù)據(jù)結(jié)構(gòu)都是必須要考慮的。
隨后,你就可以開始學(xué)習(xí)更加高難度的語言,如Java。對(duì)于進(jìn)階學(xué)習(xí)者來說,可能還需要學(xué)習(xí)分而治之(Devide-and-conquer)、貪婪算法(Greedy Method)及回溯(Backtracking)等計(jì)算機(jī)算法,這又要花上至少一年的時(shí)間。
許多人都由于這樣那樣的原因而對(duì)數(shù)學(xué)頗不感冒,而作為一名優(yōu)秀的程序員,卻要整天與一籮筐的數(shù)學(xué)問題打交道。正如你所見,學(xué)編程真的是說起來容易做起來難,而它的難并不在于你對(duì)一種語言的了解程度,而在于這種語言牽扯到的數(shù)學(xué)問題。編程中的大多數(shù)問題都能在數(shù)學(xué)模型(如斐波那契數(shù)列、弗洛伊德算法、 傅立葉級(jí)數(shù)等等)中找到端倪,更不用說數(shù)學(xué)公式在解決編程問題中的廣泛應(yīng)用了。所以,現(xiàn)在開始,去學(xué)習(xí)各種公式及其特性吧,還要仔細(xì)鉆研算術(shù)及微積分,因 為不懂?dāng)?shù)學(xué),就好比巧婦難為無米之炊。
記住,羅馬建成非一日之功,所以不要在短時(shí)間里給自己填壓太多知識(shí)。學(xué)習(xí)編程語言并不容易,因?yàn)檫@是一門需要時(shí)常調(diào)用邏輯思維的知識(shí)。你要做的,就 是理解程序背后的邏輯,然后不斷練習(xí),直到熟能生巧為止。如果你只是死記硬背一些程序,那么你就錯(cuò)過了學(xué)習(xí)過程中的樂趣,而且一些概念你也未必真的理解。 所以,學(xué)習(xí)編程需要不斷地挑戰(zhàn)自己,但也不要操之過急。
有時(shí),即使是卓有成就的程序員也會(huì)被簡單的小問題難住,所以,遇到問題時(shí),一定要讓自己放松下來。找張草稿紙,想想有什么現(xiàn)成的公式可用,或者自己 想一個(gè)公式出來。你看,這就是你為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué)。在成為熟練的程序員以前,一個(gè)人往往需要花費(fèi)大把的時(shí)間來構(gòu)思用于解決特定問題的程序。這一 過程中,你可以去Project Euler或者Codecademy這樣的網(wǎng)站上看看,上面有簡單的編程作業(yè)及教程,可以用以練習(xí)并提高技能。
如果你在編程過程中經(jīng)常粗心犯錯(cuò),那么整個(gè)過程就會(huì)變成一場曠日持久的折磨,然而一旦問題解決,所有的沮喪都會(huì)煙消云散。在學(xué)習(xí)各種算法(傅立葉級(jí) 數(shù)、向量、邊界問題、線性代數(shù)、矩陣)的同時(shí),也要注意休息。在解決特別復(fù)雜的問題時(shí),要按時(shí)放松大腦,讓困擾在心頭的難題暫時(shí)轉(zhuǎn)移到潛意識(shí)中。另外要有 合理的工作計(jì)劃,當(dāng)你編程編到倦怠的時(shí)候,就可以小憩一會(huì)兒,或者出去散一會(huì)兒步,但是永遠(yuǎn)不要說放棄。
學(xué)到這個(gè)階段,你就可以試著去教教別人,并且向別人展示你制作的應(yīng)用。如果你認(rèn)識(shí)比你更厲害的人,就要與他分享你的想法和問題,這樣會(huì)使你積累更多的經(jīng)驗(yàn);你也可以模仿諸如文本編輯器、windows軟件等專業(yè)軟件來進(jìn)行自主開發(fā);積極參加相關(guān)競賽來挑戰(zhàn)自我。
懂得一種編程語言是很贊的,但更贊的就是懂得多門語言,這不僅僅意味著你的“工具箱”里有了更多的“工具”,更是意味著你掌握了更多解決問題的方 法。因?yàn)椴徽撃銘T用哪種語言,懂得其他語言總是能使你更好地了解常見的抽象概念及問題。所以,有條件的情況下,盡量多學(xué)幾種語言,最好是學(xué)習(xí)兩三種具有不 同設(shè)計(jì)原理的語言,如Lisp、Java及Perl。但是每一種都要用心學(xué)。
許多高水平的程序員閱讀量也十分驚人,他們也往往會(huì)在輸入第一行代碼前深思熟慮一番。所以,你一定要多閱讀、多思考。每周都要檢查一次自己的作品 (平時(shí)要養(yǎng)成保存代碼的習(xí)慣,這樣日后才能復(fù)查、反思);還要多買編程方面的好書。購買的書必須是最值得一看的,而并非是最暢銷的。永遠(yuǎn)不要盲目地追隨某 一種資源,因?yàn)槟菢又粫?huì)讓你的眼界變得狹隘。一旦你掌握一種知識(shí),就要仔細(xì)鉆研其用途及改進(jìn)的可能。
如果你覺得自學(xué)效果不理想,就來咱黑馬程序員學(xué)習(xí)吧,黑馬程序員成就IT黑馬!一個(gè)入學(xué)不用給錢,畢業(yè)月薪10000后再給學(xué)費(fèi)的程序員訓(xùn)練營?。ㄈ滩蛔V告了下,嘿嘿嘿~咱們黑馬就是這么給力?。?/span>
要養(yǎng)成用編程解決問題的習(xí)慣,如果你能自己發(fā)現(xiàn)生活中需要解決的問題的話最好,如果不能,就可以去看看以下這些網(wǎng)站:
TopCoder (http://topcoder.com/tc)- 這是美國著名的編程競賽網(wǎng)站,能夠極大地增長算法方面的知識(shí)。
Codeforces(http://codeforces.com/) - 另一種編程競賽網(wǎng)站,這里舉行競賽的頻率要略高于TopCoder。
Project Euler (http://projecteuler.net/)- 該網(wǎng)站上有許多涉及的編程問題。
CodeAbbey (http://codeabbey.com/)- 該網(wǎng)站上有許多初學(xué)者經(jīng)常會(huì)遇到的問題,其難度低于上述所有網(wǎng)站。
小提示
對(duì)于大多數(shù)人來說,編寫自己感興趣或者能夠真正投入使用的程序要比照著教科書上的案列來做有趣得多。那么,你不妨利用搜索引擎來搜尋自己感興趣的項(xiàng)目。
學(xué)會(huì)利用參考材料。即使無法記住所有的知識(shí)也不用覺得難為情,真正重要的是你知道去哪里找參考資料。
編程之前可以先打打草稿來構(gòu)思可能的解決方法,然后去問問別人的意見。
教學(xué)相長。因?yàn)樵诮虅e人編程的同時(shí),你不僅會(huì)對(duì)既有的知識(shí)更加熟悉,也會(huì)幫助你從其他的角度來看待問題。
光看教程是不足以把任何一門編程語言學(xué)到家的。所以,你要盡量去找些志同道合的人,然后互相學(xué)習(xí)。多多瀏覽并參與討論這個(gè)小團(tuán)體內(nèi)其他人發(fā)表的意見,這樣你才能學(xué)習(xí)更多的技能。
如果你對(duì)游戲編程感興趣,就要尤其用心學(xué)Python、C++以及Java。在這三者中,C++是最強(qiáng)大的一個(gè),Python最簡單,而Java制作的游戲則最適合在不用改動(dòng)的情況下在Windows、Mac OS及Linux系統(tǒng)上運(yùn)行。
學(xué)習(xí)新知識(shí)的時(shí)候,親手實(shí)踐、做出改動(dòng)、預(yù)測(cè)結(jié)果這一過程是非常重要的,因?yàn)檫@樣你才能把一個(gè)概念吃透。
多和其他程序員交流,多看其他人寫的程序。這比看任何書、上任何課程都有用。
致力于計(jì)算機(jī)語言標(biāo)準(zhǔn)化。你可以關(guān)注C++標(biāo)準(zhǔn)委員會(huì)(ANSI C++ committee),也可以在自己的小團(tuán)體中把2格縮進(jìn)還是4格縮進(jìn)統(tǒng)一一下。不管怎樣,通過這些實(shí)踐,你都能對(duì)其他人在編程方面的偏好及其原因有更深的理解。
多學(xué)最常用的及行業(yè)內(nèi)規(guī)范的算法。
多學(xué)著用Java解決問題。
向免費(fèi)軟件學(xué)習(xí)。多研究免費(fèi)軟件的源代碼,因?yàn)槿绻隳芾矛F(xiàn)成的代碼,又何必費(fèi)盡心思去重寫呢?只不過抄下來的時(shí)候要確保自己真正理解。
如果僅僅是用于在Windows上執(zhí)行簡單任務(wù)的程序,就可以用C#(類似Java)或Visual Basic來做;如果是其他平臺(tái),那么比較常用的就是Perl、Python、bash(或其他shell語言)。
你可以用編程來解決模擬真實(shí)情景中的問題。
圖文|節(jié)選網(wǎng)絡(luò)
THANK YOU
覺得有用就分享給朋友圈的好友吧!
長按,識(shí)別二維碼,可愛的黑妞在等你
喜歡玩微博的朋友 黑妞約你來
@黑馬程序員訓(xùn)練營
(本文系作者個(gè)人觀點(diǎn),不代表一點(diǎn)資訊的觀點(diǎn)和立場)
聯(lián)系客服