如何才能高效的學(xué)習(xí)編程語(yǔ)言
編程語(yǔ)言種類繁多,用途各異,然而一旦掌握其中之一,其他的也就迎刃而解。那么如何才能高效的學(xué)習(xí)編程語(yǔ)言?以下是學(xué)習(xí)啦小編分享給大家的高效的學(xué)習(xí)編程語(yǔ)言的方法,希望可以幫到你!
高效的學(xué)習(xí)編程語(yǔ)言的方法
1、確定目標(biāo)
Learn a Programming Language Step 1 Version 2.jpg
學(xué)習(xí)編程語(yǔ)言既充滿樂趣,又充滿挑戰(zhàn)。有些花費(fèi)多年時(shí)間學(xué)習(xí)一門編程語(yǔ)言的大學(xué)生到最后也無法確定自己的方向到底是什么,所以,在你開始前,最好先想清楚,你是想成為一名程序員,還是游戲開發(fā)者,還是機(jī)器人專家?
2、選擇一種編程語(yǔ)言
Learn a Programming Language Step 2 Version 2.jpg
初學(xué)者一定要從主流語(yǔ)言開始學(xué)習(xí),比如中級(jí)語(yǔ)言C和C++。這兩種語(yǔ)言是任何一名合格、專業(yè)的程序員都必須掌握的,因?yàn)樗鼈兎Q得上是軟件開發(fā)界的主流。但是最好不要從高級(jí)語(yǔ)言開始學(xué),如Java,因?yàn)檫@些語(yǔ)言對(duì)于初學(xué)者來說難度未免太高(高級(jí)語(yǔ)言可以以后再學(xué),但是C語(yǔ)言和C++應(yīng)該作為你的基礎(chǔ))。然而對(duì)于完完全全的門外漢的來說,可能C和C++都有點(diǎn)困難,那么你也可以從Python開始學(xué),這種語(yǔ)言被大家廣泛認(rèn)為是適合初學(xué)者的。
此外,每一種語(yǔ)言都要學(xué)習(xí)至少一年。要熟悉編程范式,尤其是面向過程及面向?qū)ο筮@兩種;要廣泛閱讀,多用編譯器及IDE(網(wǎng)上有許多免費(fèi)的)練習(xí)編程。
掌握一種語(yǔ)言后,先不要急著運(yùn)用,而要去多買些數(shù)據(jù)結(jié)構(gòu)方面的書來看,學(xué)習(xí)搜索、分類、二叉樹及鏈表創(chuàng)建等概念。因?yàn)闊o論你是要制作游戲還是開發(fā)軟件,數(shù)據(jù)結(jié)構(gòu)都是必須要考慮的。
隨后,你就可以開始學(xué)習(xí)更加高難度的語(yǔ)言,如Java。對(duì)于進(jìn)階學(xué)習(xí)者來說,可能還需要學(xué)習(xí)分而治之(Devide-and-conquer)、貪婪算法(Greedy Method)及回溯(Backtracking)等計(jì)算機(jī)算法,這又要花上至少一年的時(shí)間。
3、熱愛數(shù)學(xué)
Learn a Programming Language Step 3 Version 2.jpg
許多人都由于這樣那樣的原因而對(duì)數(shù)學(xué)頗不感冒,而作為一名優(yōu)秀的程序員,卻要整天與一籮筐的數(shù)學(xué)問題打交道。正如你所見,學(xué)編程真的是說起來容易做起來難,而它的難并不在于你對(duì)一種語(yǔ)言的了解程度,而在于這種語(yǔ)言牽扯到的數(shù)學(xué)問題。編程中的大多數(shù)問題都能在數(shù)學(xué)模型(如斐波那契數(shù)列、弗洛伊德算法、傅立葉級(jí)數(shù)等等)中找到端倪,更不用說數(shù)學(xué)公式在解決編程問題中的廣泛應(yīng)用了。所以,現(xiàn)在開始,去學(xué)習(xí)各種公式及其特性吧,還要仔細(xì)鉆研算術(shù)及微積分,因?yàn)椴欢當(dāng)?shù)學(xué),就好比巧婦難為無米之炊。
4、要保持內(nèi)在的動(dòng)力
Learn a Programming Language Step 4 Version 3.jpg
記住,羅馬建成非一日之功,所以不要在短時(shí)間里給自己填壓太多知識(shí)。學(xué)習(xí)編程語(yǔ)言并不容易,因?yàn)檫@是一門需要時(shí)常調(diào)用邏輯思維的知識(shí)。你要做的,就是理解程序背后的邏輯,然后不斷練習(xí),直到熟能生巧為止。如果你只是死記硬背一些程序,那么你就錯(cuò)過了學(xué)習(xí)過程中的樂趣,而且一些概念你也未必真的理解。所以,學(xué)習(xí)編程需要不斷地挑戰(zhàn)自己,但也不要操之過急。
5、要有耐心
Learn a Programming Language Step 5 Version 3.jpg
有時(shí),即使是卓有成就的程序員也會(huì)被簡(jiǎn)單的小問題難住,所以,遇到問題時(shí),一定要讓自己放松下來。找張草稿紙,想想有什么現(xiàn)成的公式可用,或者自己想一個(gè)公式出來。你看,這就是你為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué)。在成為熟練的程序員以前,一個(gè)人往往需要花費(fèi)大把的時(shí)間來構(gòu)思用于解決特定問題的程序。這一過程中,你可以去Project Euler或者Codecademy這樣的網(wǎng)站上看看,上面有簡(jiǎn)單的編程作業(yè)及教程,可以用以練習(xí)并提高技能。
6、絕不輕言放棄
Learn a Programming Language Step 6 Version 2.jpg
如果你在編程過程中經(jīng)常粗心犯錯(cuò),那么整個(gè)過程就會(huì)變成一場(chǎng)曠日持久的折磨,然而一旦問題解決,所有的沮喪都會(huì)煙消云散。在學(xué)習(xí)各種算法(傅立葉級(jí)數(shù)、向量、邊界問題、線性代數(shù)、矩陣)的同時(shí),也要注意休息。在解決特別復(fù)雜的問題時(shí),要按時(shí)放松大腦,讓困擾在心頭的難題暫時(shí)轉(zhuǎn)移到潛意識(shí)中。另外要有合理的工作計(jì)劃,當(dāng)你編程編到倦怠的時(shí)候,就可以小憩一會(huì)兒,或者出去散一會(huì)兒步,但是永遠(yuǎn)不要說放棄。
高效的學(xué)習(xí)編程語(yǔ)言的建議
明確目的,外部模型,內(nèi)部型型
任何時(shí)候你學(xué)習(xí)使用新工具,明確學(xué)習(xí)的目的,外部模型和內(nèi)部模型都是十分有用的。
當(dāng)你了解了工具的目的時(shí),你的大腦會(huì)加載有用的上下文細(xì)節(jié),使你更容易吸收新知識(shí)。這就好比拼圖:當(dāng)你看到完整拼圖之后,更容易把各部件拼到一起。這個(gè)道理適用于語(yǔ)言本身及及語(yǔ)言庫(kù)。
工具的外部模型就是它呈現(xiàn)出來的接口以及它想讓你思考問題解決的方式。Clojure 的外部模型就是一個(gè)Lisp,它想讓你把編程當(dāng)做大部分以數(shù)據(jù)為中心,不可變的轉(zhuǎn)換過程。Ansible 希望你把服務(wù)器的整備工作想成定義最終狀態(tài),而不是定義抵達(dá)那種狀態(tài)所要采取的步驟。
工具的內(nèi)部模型就是如何將輸入到其接口轉(zhuǎn)換成一些底層的抽象。Clojure 把 Lisp 轉(zhuǎn)換成 JVM 的字節(jié)碼。Ansible 把任務(wù)定義轉(zhuǎn)換成了 shell 命令。在一個(gè)理想國(guó)中,你不需要理解工具的內(nèi)部模型,但事實(shí)上,理解內(nèi)部模型總是有用的,因?yàn)樵谀承┛瓷先ッ曰蠡蛘呙艿牟糠炙梢宰屇阌袀€(gè)一致的視圖。舉個(gè)例子,當(dāng) DNA 雙螺旋模型被發(fā)現(xiàn)的時(shí)候,它幫助科學(xué)家們了解更高級(jí)的現(xiàn)象。從我的角度來講,當(dāng)然,這篇博文也是歷來所有偉大科學(xué)成就之一。
很多教程經(jīng)常混淆工具的外部和內(nèi)部模型,使學(xué)習(xí)者感到困惑。意識(shí)到這點(diǎn)可以幫你輕松辨別何時(shí)你會(huì)感到沮喪。
間隔重復(fù)幫助記憶
間隔重復(fù)被證明是長(zhǎng)期記憶中新信息編碼的最佳方法之一。 這個(gè)想法是以不斷增加的時(shí)間間隔來測(cè)驗(yàn)自己,以使用最少重復(fù)次數(shù)最小化記憶衰減。 衛(wèi)報(bào)寫了一篇很好的介紹性文章。
睡眠和練習(xí)
保重身體!身體可不僅僅是你腦袋的載體。如果你想保持專注和高效的學(xué)習(xí),就要足夠的睡眠和練習(xí),而不是(beats the pants off)狂飲咖啡因和能量飲料。
學(xué)習(xí)編程語(yǔ)言的誤區(qū)
誤區(qū)1:啃完幾本書,就能系統(tǒng)的學(xué)會(huì)編程了
是什么讓你相信買一本書就能學(xué)會(huì)編程?是幻覺。
編程方面的書一般挺厚的,拿在手里,感覺知識(shí)沉甸甸的,翻開一看,感覺講的很系統(tǒng)很詳細(xì)。你會(huì)覺得自己已經(jīng)下定決心要學(xué)好編程了。但你絕對(duì)不會(huì)讀完超過五章的內(nèi)容。
不是因?yàn)槟闾珣卸?,而是因?yàn)閯傞_始學(xué)習(xí)就深入到細(xì)枝末節(jié)中并不是一個(gè)好的選擇,練習(xí)是學(xué)習(xí)一門技能最重要的環(huán)節(jié),而如果不上手練習(xí),你會(huì)把書里教的知識(shí)忘得一干二凈。
誤區(qū)2:先學(xué)別的語(yǔ)言做鋪墊,再學(xué)你想學(xué)的語(yǔ)言
總有人會(huì)告訴你,「打好基礎(chǔ)很重要,你得先學(xué) C 語(yǔ)言。」
或者是,「直接學(xué)編程語(yǔ)言太難了,你可以先學(xué) Scratch 培養(yǎng)感覺?!?/p>
這簡(jiǎn)直是人為加長(zhǎng)學(xué)習(xí)路徑。
誤區(qū)3:看著源碼學(xué)編程,對(duì)著敲一遍
這種觀點(diǎn)說,github 上不是有很多好的開源項(xiàng)目嘛,你照著敲一遍代碼,然后就能領(lǐng)悟了。
這應(yīng)該是受了應(yīng)試教育時(shí)背課文的迫害吧……對(duì)于初學(xué)者,這樣學(xué)習(xí)效率太低了,因?yàn)槊恳恍心愣伎床欢覜]有思考的模仿只是機(jī)械運(yùn)動(dòng)而已,除了提升打字速度應(yīng)該不會(huì)有其他任何效果。
好了,說了這么多誤區(qū),那么對(duì)的是什么呢?如果你學(xué)習(xí)編程是為了做出點(diǎn)東西出來,而不是為了做科研去研究各種編程語(yǔ)言語(yǔ)法之間的細(xì)微差異,那么上手做項(xiàng)目是最快的學(xué)習(xí)路徑。
但是,如果沒有選擇正確的學(xué)習(xí)方法,這其中的痛苦,足以讓一個(gè)初學(xué)者沒辦法堅(jiān)持下去。編程是即時(shí)反饋的,當(dāng)你學(xué)其他技能,不會(huì)有人對(duì)著你大喊「你錯(cuò)了!」,但是程序會(huì)向你持續(xù)報(bào)錯(cuò)。而當(dāng)你嘗試了幾小時(shí),用了各種方法,程序卻在說,「你還是錯(cuò)的!」,你會(huì)很沮喪甚至很憤怒。
那么,從寫出第一句 hello world,到能上手做一個(gè)真實(shí)的項(xiàng)目,到底需要怎么學(xué)?
結(jié)合了學(xué)習(xí)的認(rèn)知模型,我們總結(jié)了一套適用于初學(xué)者的編程學(xué)習(xí)方法,也是實(shí)戰(zhàn)課程體系的核心思路:
1、循序漸進(jìn):把一個(gè)真實(shí)項(xiàng)目拆解成若干階段,分階段學(xué)習(xí)、練習(xí),逐漸提升難度
2、杠桿知識(shí):學(xué)習(xí)和項(xiàng)目最相關(guān)的核心知識(shí),借用能提升開發(fā)效率的工具框架,讓最少的投入獲得最大的杠桿產(chǎn)出
3、建立連接:人腦是通過突觸相連接的,學(xué)習(xí)的過程就是在強(qiáng)化已有的連接,建立新的連接。而根據(jù)已經(jīng)掌握的知識(shí)點(diǎn)拓展、用生活中的例子去類比,能讓你更快的學(xué)會(huì)。
4、持續(xù)反饋:通過老師或者是搜索,掌握獨(dú)立解決排錯(cuò)的方法,最終掌握自學(xué)的方法。
當(dāng)然,這些只是很簡(jiǎn)要的概述,想要真正應(yīng)用這套方法去制定自己的學(xué)習(xí)計(jì)劃,需要一個(gè)系列連載來詳細(xì)介紹具體的執(zhí)行方法才行。掌握這套學(xué)習(xí)方法之后,你可以根據(jù)自己的情況去選擇適合自己目標(biāo)的學(xué)習(xí)材料,從而少走彎路。
猜你喜歡: