我自學編程的入門語言不是 Python,但看書時同樣常常感到無論怎么努力都“看不進去”绑榴,明明每句話好像都懂了,但轉(zhuǎn)頭就忘盈魁,讓人極其崩潰翔怎,后來花了很大力氣才搞定。
Python 是我學的第二門語言,和學第一門時相比赤套,奇跡般的順利了好多飘痛,之后又學過很多新的語言和技術,雖然也會經(jīng)歷不少困難容握,但這種完全“看不進去”宣脉,一籌莫展的無助感覺,卻再也沒有出現(xiàn)過剔氏。
事后回想塑猖,我才明白,自學時“看不進去”谈跛,可能和具體語言無關羊苟,而是因為還沒真正入門:學第一門語言時,特別容易被這樣的問題困赘泻丁蜡励;學第二門乃至更多語言時,就很少遇到這種問題了阻桅。
為什么會這樣呢凉倚,簡單分析一下。
所謂“看不進去”或者“記不住”鳍刷,本質(zhì)上還是“看不懂”占遥。你可能覺得書上寫的都理解了俯抖,示例代碼照著敲下來输瓜,也能正常運行,怎么能說看不懂芬萍?
其實只要你發(fā)現(xiàn)一段話翻來覆去讀了好多遍都記不住尤揣,就說明肯定還沒懂,想想那些你已經(jīng)真正理解透徹的東西柬祠,是不是好像有種它天生就在你腦子里北戏,根本不是后來才裝進去的錯覺,而且還能隨意變換各種方式把它講給別人漫蛔。到這種程度嗜愈,才算真正懂了。
初學者不容易弄懂的莽龟,是什么呢蠕嫁?
舉個例子:比如任何一本關于 Python 的書,大概都會講到 Python 常用的幾種數(shù)據(jù)結(jié)構(gòu)毯盈,通常都能把各種數(shù)據(jù)結(jié)構(gòu)的定義解釋清楚剃毒,再給出一些示例代碼,告訴你這個數(shù)據(jù)結(jié)構(gòu)怎么使用。對于已經(jīng)有編程經(jīng)驗的人來說赘阀,讀完這些基本就夠了益缠,實際開發(fā)時如果需要更多細節(jié),可以再去 Python 的官方文檔里查閱基公。
但對于零基礎的初學者幅慌,就沒這么簡單。你能看懂“列表”和“字典”的概念和語法酌媒,也能照貓畫虎套用書上的示例代碼欠痴,但很可能并不太理解為什么要搞出這些奇奇怪怪的數(shù)據(jù)組織方式,更不知道如何用它們來解決實際問題秒咨。
再舉個例子:對你來說喇辽,理解函數(shù)和類這樣的概念可能不難,至于怎樣定義和使用它雨席,書上也寫的非常清楚菩咨,做練習時因為題目往往要求很明確,也能順利完成陡厘。但只要開始自己寫代碼抽米,馬上一團亂麻,根本沒法用你學過的這些技術讓代碼結(jié)構(gòu)變得更清晰糙置。
以上種種云茸,總結(jié)來說,就是初學者對“編程”這件事還沒有形成清晰的整體認識谤饭,因此學習時無法把接觸到的每個單獨知識點快速體系化标捺,只好先把它們胡亂塞進腦子里,和暫存在內(nèi)存里的數(shù)據(jù)一樣揉抵,一覺醒來可能就不記得什么了亡容。然后發(fā)現(xiàn)自己怎么學完就忘,長此以往冤今,挫敗感越來越強闺兢,于是未入門即放棄,這是很可惜的戏罢。
如果學過開車屋谭,這種情況應該并不陌生,第一次握著方向盤龟糕,所面對的一切都是陌生的桐磁,很容易手足無措,一邊手腳并用對付車上各種亂七八糟的裝置翩蘸,一邊神經(jīng)緊繃關注外面的路況所意,腦子里還要回想交規(guī)和教練規(guī)定的各種口訣,是不是感覺超難?而且不論你學車時用哪一款車扶踊,這種困難感都不會相差太多泄鹏。但等你成為老司機之后,不管什么車秧耗,哪怕從來沒碰過备籽,只要摸索一下各個裝置在哪里,馬上就能開著上路分井。
編程也是這樣车猬,學第一門語言是最難的,因為你要搞定的不止這門語言尺锚,還包括它背后整套龐雜的體系和大量相關的背景知識珠闰,但只要咬牙跨過這道門檻,以后再學其它語言和技術時瘫辩,難度就和開一輛新車差不多伏嗜。
上面是原因。下面說說該怎么辦伐厌,我有三個具體建議承绸。
第一個建議:不求甚解。
沒必要強求自己理解書上(或者各種形式的課程里挣轨,道理相同)每一個知識點军熏,但要保證照著敲下來的代碼能夠正常運行。
前面分析過卷扮,除了少數(shù)天才荡澎,一個智商正常的初學者,在積累到足夠經(jīng)驗之前画饥,有些東西注定難以真正理解衔瓮,只顧埋頭跟它糾纏浊猾,容易耗光本來就不多的斗志抖甘,非常不值得。
好在編程很務實葫慎,代碼是檢驗真理的唯一標準衔彻,即使有些概念暫時不懂,只要代碼寫對偷办,就能得到正確的結(jié)果艰额。
別小看這個要求,即使照著書抄椒涯,保證所有代碼正常運行也不是件特別容易的事柄沮。拼錯單詞、把英文標點符號打成中文的、弄錯換行縮進之類格式祖搓,這些新手易犯的錯誤你肯定也擺脫不了狱意,但錯過很多次之后,就會越來越細心拯欧,鍵盤敲的再快也很少出這類差錯了详囤。
當然,你還會遇到各種各樣的報錯镐作。軟件版本更新很快藏姐,你電腦的系統(tǒng)環(huán)境也可能和作者所用并不一致,所以書上的正確代碼该贾,在你的電腦上未必也能正確運行羔杨。這種情況太常見了,不論你用哪本書學都幾乎一定會發(fā)生杨蛋。
遇到書上根本沒提到的報錯信息時问畅,唯一能做的,就是靜下心來六荒,搜索報錯信息里的每個關鍵詞护姆,然后認真研究,想盡一切辦法讓報錯消失掏击。在這個過程中卵皂,你會不知不覺學到很多東西。解決掉的錯誤越多砚亭,你的能力就提升越快灯变。
第二個建議:死記硬背。
我不是建議你背書捅膘,而是建議可以盡量把書上那些你已經(jīng)運行成功的一段一段的代碼背下來添祸。這個方法聽起來好像有點笨,但對還沒有建立起知識體系的初學者來說寻仗,卻行之有效刃泌。即使暫時不理解這段代碼,只要能把它背下來署尤,徒手敲進編輯器耙替,并保證運行無誤,這個過程重復五到十遍之后曹体,就會漸漸發(fā)現(xiàn)俗扇,你好像已經(jīng)開始明白是怎么回事了。人類的大腦就是這么神奇箕别,不信可以親自試試铜幽。
還記得小時候?qū)懽魑膯嶂托唬瑳]幾個同學能一動筆就寫出幾百字的文章吧,都得經(jīng)歷大量組詞除抛、造句的練習才行爹凹。編程也是如此,不先記住足夠多的代碼片段镶殷,是很難直接寫出完整程序的禾酱。
具體要背哪些代碼呢?如果在學第一門語言的話绘趋,我建議背每一段示例代碼颤陶。可能你感覺有些代碼真的太長了陷遮,不可能背得下來滓走,但實際敲幾遍就會發(fā)現(xiàn),再長的代碼帽馋,也有規(guī)律可循搅方,或者是同樣的模式重復很多次;或者是可以拆分成多個獨立部分绽族,每個部分各司其職姨涡。動手敲的遍數(shù)越多,這種規(guī)律性在你眼里就越清晰吧慢,清晰到一定程度之后涛漂,這段代碼其實已經(jīng)被你牢牢記住了。
第三個建議:守株待兔检诗。
和一些學過編程的朋友交流匈仗,發(fā)現(xiàn)每個人入門時,或早或晚都需要經(jīng)歷一次“醍醐灌頂”的時刻逢慌,然后才感覺開始摸到一些門道悠轩,繼續(xù)學習也慢慢有了章法。
那個神奇的時刻到來之前攻泼,腦子里很多概念和想法始終模模糊糊的纏繞在一起火架,怎么努力都理不清頭緒,但某一天坠韩,可能是清醒狀態(tài)距潘,也可能還在睡夢里炼列,好像通電一樣只搁,一瞬間所有困惑突然解開,全部道理和互相之間的關聯(lián)變得明明白白俭尖。隨后就產(chǎn)生了新的疑惑:這么簡單的事情氢惋,我之前怎么就是死活都想不通呢洞翩?
這個時刻確實很爽,可你不能主動去找它焰望,只有不斷努力骚亿,重復練習,即使很長一段時間都感覺毫無進展熊赖,甚至似乎在退步来屠,也不要放棄。一段時間之后震鹉,一定會等到屬于你的那個“醍醐灌頂”時刻俱笛。