為什么自學(xué) Python 看不進(jìn)去?

我自學(xué)編程的入門語言不是 Python,但看書時同樣常常感到無論怎么努力都“看不進(jìn)去”,明明每句話好像都懂了,但轉(zhuǎn)頭就忘,讓人極其崩潰,后來花了很大力氣才搞定。

Python 是我學(xué)的第二門語言,和學(xué)第一門時相比,奇跡般的順利了好多,之后又學(xué)過很多新的語言和技術(shù),雖然也會經(jīng)歷不少困難,但這種完全“看不進(jìn)去”,一籌莫展的無助感覺,卻再也沒有出現(xiàn)過。

事后回想,我才明白,自學(xué)時“看不進(jìn)去”,可能和具體語言無關(guān),而是因為還沒真正入門:學(xué)第一門語言時,特別容易被這樣的問題困??;學(xué)第二門乃至更多語言時,就很少遇到這種問題了。

為什么會這樣呢,簡單分析一下。

所謂“看不進(jìn)去”或者“記不住”,本質(zhì)上還是“看不懂”。你可能覺得書上寫的都理解了,示例代碼照著敲下來,也能正常運(yùn)行,怎么能說看不懂?

其實只要你發(fā)現(xiàn)一段話翻來覆去讀了好多遍都記不住,就說明肯定還沒懂,想想那些你已經(jīng)真正理解透徹的東西,是不是好像有種它天生就在你腦子里,根本不是后來才裝進(jìn)去的錯覺,而且還能隨意變換各種方式把它講給別人。到這種程度,才算真正懂了。

初學(xué)者不容易弄懂的,是什么呢?

舉個例子:比如任何一本關(guān)于 Python 的書,大概都會講到 Python 常用的幾種數(shù)據(jù)結(jié)構(gòu),通常都能把各種數(shù)據(jù)結(jié)構(gòu)的定義解釋清楚,再給出一些示例代碼,告訴你這個數(shù)據(jù)結(jié)構(gòu)怎么使用。對于已經(jīng)有編程經(jīng)驗的人來說,讀完這些基本就夠了,實際開發(fā)時如果需要更多細(xì)節(jié),可以再去 Python 的官方文檔里查閱。

但對于零基礎(chǔ)的初學(xué)者,就沒這么簡單。你能看懂“列表”和“字典”的概念和語法,也能照貓畫虎套用書上的示例代碼,但很可能并不太理解為什么要搞出這些奇奇怪怪的數(shù)據(jù)組織方式,更不知道如何用它們來解決實際問題。

再舉個例子:對你來說,理解函數(shù)和類這樣的概念可能不難,至于怎樣定義和使用它,書上也寫的非常清楚,做練習(xí)時因為題目往往要求很明確,也能順利完成。但只要開始自己寫代碼,馬上一團(tuán)亂麻,根本沒法用你學(xué)過的這些技術(shù)讓代碼結(jié)構(gòu)變得更清晰。

以上種種,總結(jié)來說,就是初學(xué)者對“編程”這件事還沒有形成清晰的整體認(rèn)識,因此學(xué)習(xí)時無法把接觸到的每個單獨(dú)知識點快速體系化,只好先把它們胡亂塞進(jìn)腦子里,和暫存在內(nèi)存里的數(shù)據(jù)一樣,一覺醒來可能就不記得什么了。然后發(fā)現(xiàn)自己怎么學(xué)完就忘,長此以往,挫敗感越來越強(qiáng),于是未入門即放棄,這是很可惜的。

如果學(xué)過開車,這種情況應(yīng)該并不陌生,第一次握著方向盤,所面對的一切都是陌生的,很容易手足無措,一邊手腳并用對付車上各種亂七八糟的裝置,一邊神經(jīng)緊繃關(guān)注外面的路況,腦子里還要回想交規(guī)和教練規(guī)定的各種口訣,是不是感覺超難?而且不論你學(xué)車時用哪一款車,這種困難感都不會相差太多。但等你成為老司機(jī)之后,不管什么車,哪怕從來沒碰過,只要摸索一下各個裝置在哪里,馬上就能開著上路。

編程也是這樣,學(xué)第一門語言是最難的,因為你要搞定的不止這門語言,還包括它背后整套龐雜的體系和大量相關(guān)的背景知識,但只要咬牙跨過這道門檻,以后再學(xué)其它語言和技術(shù)時,難度就和開一輛新車差不多。

上面是原因。下面說說該怎么辦,我有三個具體建議。

第一個建議:不求甚解。

沒必要強(qiáng)求自己理解書上(或者各種形式的課程里,道理相同)每一個知識點,但要保證照著敲下來的代碼能夠正常運(yùn)行。

前面分析過,除了少數(shù)天才,一個智商正常的初學(xué)者,在積累到足夠經(jīng)驗之前,有些東西注定難以真正理解,只顧埋頭跟它糾纏,容易耗光本來就不多的斗志,非常不值得。

好在編程很務(wù)實,代碼是檢驗真理的唯一標(biāo)準(zhǔn),即使有些概念暫時不懂,只要代碼寫對,就能得到正確的結(jié)果。

別小看這個要求,即使照著書抄,保證所有代碼正常運(yùn)行也不是件特別容易的事。拼錯單詞、把英文標(biāo)點符號打成中文的、弄錯換行縮進(jìn)之類格式,這些新手易犯的錯誤你肯定也擺脫不了,但錯過很多次之后,就會越來越細(xì)心,鍵盤敲的再快也很少出這類差錯了。

當(dāng)然,你還會遇到各種各樣的報錯。軟件版本更新很快,你電腦的系統(tǒng)環(huán)境也可能和作者所用并不一致,所以書上的正確代碼,在你的電腦上未必也能正確運(yùn)行。這種情況太常見了,不論你用哪本書學(xué)都幾乎一定會發(fā)生。

遇到書上根本沒提到的報錯信息時,唯一能做的,就是靜下心來,搜索報錯信息里的每個關(guān)鍵詞,然后認(rèn)真研究,想盡一切辦法讓報錯消失。在這個過程中,你會不知不覺學(xué)到很多東西。解決掉的錯誤越多,你的能力就提升越快。

第二個建議:死記硬背。

我不是建議你背書,而是建議可以盡量把書上那些你已經(jīng)運(yùn)行成功的一段一段的代碼背下來。這個方法聽起來好像有點笨,但對還沒有建立起知識體系的初學(xué)者來說,卻行之有效。即使暫時不理解這段代碼,只要能把它背下來,徒手敲進(jìn)編輯器,并保證運(yùn)行無誤,這個過程重復(fù)五到十遍之后,就會漸漸發(fā)現(xiàn),你好像已經(jīng)開始明白是怎么回事了。人類的大腦就是這么神奇,不信可以親自試試。

還記得小時候?qū)懽魑膯?,沒幾個同學(xué)能一動筆就寫出幾百字的文章吧,都得經(jīng)歷大量組詞、造句的練習(xí)才行。編程也是如此,不先記住足夠多的代碼片段,是很難直接寫出完整程序的。

具體要背哪些代碼呢?如果在學(xué)第一門語言的話,我建議背每一段示例代碼??赡苣愀杏X有些代碼真的太長了,不可能背得下來,但實際敲幾遍就會發(fā)現(xiàn),再長的代碼,也有規(guī)律可循,或者是同樣的模式重復(fù)很多次;或者是可以拆分成多個獨(dú)立部分,每個部分各司其職。動手敲的遍數(shù)越多,這種規(guī)律性在你眼里就越清晰,清晰到一定程度之后,這段代碼其實已經(jīng)被你牢牢記住了。

第三個建議:守株待兔。

和一些學(xué)過編程的朋友交流,發(fā)現(xiàn)每個人入門時,或早或晚都需要經(jīng)歷一次“醍醐灌頂”的時刻,然后才感覺開始摸到一些門道,繼續(xù)學(xué)習(xí)也慢慢有了章法。

那個神奇的時刻到來之前,腦子里很多概念和想法始終模模糊糊的纏繞在一起,怎么努力都理不清頭緒,但某一天,可能是清醒狀態(tài),也可能還在睡夢里,好像通電一樣,一瞬間所有困惑突然解開,全部道理和互相之間的關(guān)聯(lián)變得明明白白。隨后就產(chǎn)生了新的疑惑:這么簡單的事情,我之前怎么就是死活都想不通呢?

這個時刻確實很爽,可你不能主動去找它,只有不斷努力,重復(fù)練習(xí),即使很長一段時間都感覺毫無進(jìn)展,甚至似乎在退步,也不要放棄。一段時間之后,一定會等到屬于你的那個“醍醐灌頂”時刻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容