編者按:本文來自微信公眾號“開智學堂”(ID:openmindclub),作者陽志平,內容為陽老師開智學堂 Python 入門班二期開學典禮發言,36氪經授權發佈。
如何學習編程?你的做法可能是:
1)先買一堆書,
2)上網搜別人如何學,
3)制定計劃,
4)自已一個人慢慢學。
然而,這樣做違背認知科學原理,且失敗概率極大。
那麼,如何科學學習編程?深諳認知科學的陽志平老師提出四條建議:1)注重內隱知識;2)將語言與邏輯分開,不斷在頭腦中進行邏輯預演;3)使用執行意圖而非目標意圖;4)成為一名認知學徒,教別人學習。具體執行,請看下文。
大家好,歡迎各位同學參加開智學堂 Python 入門班的開學典禮。我是陽志平老師,我是一名黑客,我也是一名認知科學家,因此我喜歡將自己定義為心智黑客。黑客精神,尊重個性,捍衞自由,推崇創作。
多年來,我一直在用自己的方式普及黑客文化,從 GitHub 到 Markdown,都留下了我的推廣痕跡。當然,成為黑客,總是離不開掌握編程。在黑客文化領袖 Eric Steven Raymond 撰寫的《如何成為一名黑客》手冊中推薦的就是 Python 語言。因此,開智學堂成立伊始,開的第一門課是 Python 入門。
如何學習編程?大家看過很多文章,有來自計算機科學的看法;也有來自教育學的看法。然而,認知科學作為研究人類心智工作機制的學科,對此有自己的獨特建議,這就是我今天分享的主題。
建議 1:為什麼你是新手不是專家?
第一個建議是關於新手與專家的建議。為什麼你是新手而不是專家?作為編程新手,你與專家最大的區別在於對方掌握了大量內隱知識。
什麼是內隱知識?我們小時候學騎自行車,一旦學會,你長大成人,就可以在騎自行車的時候一心兩用,這個時候就意味着騎自行車的技能已經變成你的一種內隱技能,不需要再調用你的大腦為它進行額外的付出。專家他的知識率與工作效率比一般人高很多,就是因為他掌握了在他的領域中大量的內隱知識,技能已經自動化。
跟內隱知識相對應的是外顯知識。由於你是第一次接觸編程,你會了解到 Python 語言包含哪些知識點,你該如何背誦、拆解、調用這些知識點。這些是外顯知識。
關於內隱知識和外顯知識,要特別提醒大家的是:專家他不僅僅是擁有了上述知識點,他同時擁有一整套行為規範。比如,專家級工程師明白怎麼更好的跟別人進行溝通,怎樣更好的表達他的需求,怎麼去輸出他的產品,這也是內隱知識中的一部分。
那怎樣從剛剛學習編程的新手,成為一名專家級的工程師?成為專家級工程師,有三個維度。哈佛認知科學家帕金斯一生研究智力,他發現,在任何領域,要想變得更聰明,你都得有神經智力,經驗智力,反省智力。
神經智力
神經智力很好理解,假如你的記憶能力、數學運算能力或邏輯推理能力不行,那麼你學編程可能比其他人要吃力一些。
經驗智力
經驗智力意味着是你在這領域,投入了很多的時間,通過十年以上的時間,很多技能已經慢慢被你變成內隱知識。
反省智力
以上兩種智力都容易理解,大家容易忽略的是反省智力。絕大多數人不明白,專家和新手最大的區別是專家的反省智力更高:他的內隱知識比別人的效率更高,他的模式更清晰。舉個學編程的例子,比如説接觸到新的軟件、新的編程語言和新的編程術語,絕大多數新手是先去搜索怎麼學習該軟件或編程語言,他會得到一堆網絡鏈接,然後這位新手把這些文章看完,從大海中淘出對自己有用的一些可以複用的步驟。這是新手的學習習慣。
但是專家級工程師的學習習慣和一般人不同。比如,他接觸到了新的軟件,他會率先查看官方的幫助文檔,明白有什麼樣的知識點,使得這軟件特殊,跟其他軟件不一樣,這樣他的學習效果會高很多。並且專家級工程師具備較強的生態鏈分析能力,他學的不是 Python 與 Web 開發,而是掌握了 Python 的 Web 開發生態鏈;他學的不是 Python 與數據科學,而是掌握了 Python 的數據科學生態鏈。
在接下來的三個月,你會接觸到大量的這種專家級工程師才會採取的模式。開智學堂的 Python 課程設計,一上來就把各位同學扔在 GitHub 裏面。
這有什麼樣的好處?你接觸到的是實際工作環境。你可以看到專家級工程師,他天天泡在 GitHub 裏面,如何進行實際編程工作。 這樣對你掌握編程的內隱知識,尤其是內隱知識中的行為規範知識部分,會幫助更大。
建議 2:為什麼學習編程,你會失敗?
第二個建議是如何提高學習編程的成功率。學習編程真的挺難的。很多人都嘗試過多次學習編程,自學、報班,他仍然失敗了。偶爾忽悠你二十一天學會編程的,一定沒有幫你養成很好的編程習慣。這是為什麼?
編程也是一種語言。和大家在 0-3 歲的時候學習講話,這兩個學習過程是一樣的。你得掌握各種各樣的關鍵詞,用關鍵詞去描述各種各樣的現象。
但是編程語言不是用於跟身邊的人進行交流,而是用於和計算機進行交流,所以,你要同時掌握邏輯。在人類大腦演化早期的狩獵-採集時代,只是往大腦中寫入了人-人交流的進化模塊,並不包括人-機交流模塊。
這麼一來,大腦不得不同時處理語言與邏輯兩件事情。而人的大腦不擅長同時處理兩件事情,因為受制於我們先天的前額大腦皮層發育特點,大腦有明顯的瓶頸,比如只能在短時間內記住不超過 9 個電話號碼。金庸小説裏邊的周伯通左手畫圓,右手畫方,這是非常困難的操作。
作為學習編程的新手,讓你同時在電腦上處理語言,學習怎麼用新的關鍵詞去描述世界;處理邏輯;怎樣處理各類需求的優先級別。你很難同時學會這些操作,這使得不少人學習編程走向失敗。
所以我建議新手一定要把語言和邏輯分別進行訓練。一次只訓練一件事情,比如你剛開始的時候可以只訓練語言。把編程當成語言,像學英語一樣,它有哪些常用的高頻詞彙;以及用什麼樣的語法才能把這高頻的詞彙串起來,在初步掌握語言規律後再去掌握邏輯規律,這樣會幫助你學習編程。
同時需要提醒的是,就像人類語言是用於人-人交互,編程是跟計算機發生交互的語言。大家想一下,在 0-3 歲的時候,你怎樣像陽老師一樣學會如此正確但大家又聽不懂的湖南普通話呢?其實不是通過看書學習,而是通過跟他的爸爸媽媽學的。
學習編程也一樣,因此,你一定不能把所有時間花在看書上,一定要一上來就天天去寫代碼,學習跟計算機溝通。很多人學習編程有不好的習慣,他有可能先去網上把 Python 相關的書都買了,或者下載一堆如何學習 Python 的文檔。這是錯誤的學習習慣。
想象一下,在你是 0-3 歲的小孩時,你媽扔給你一堆湖南普通話的書,怎麼像陽老師一樣,把湖南普通話學好?這是學不好的。你要把書扔一邊去,從學習編程的第一天開始,就是直接是練習如何像説話一樣去寫代碼。
學習語言,大家都有很多經驗,從小時候學習語言中獲取的經驗;考四六級 GRE 託福獲取到的經驗,那麼,我們如何提高編程所需要的邏輯能力呢?怎樣進行邏輯訓練,提高思維呢?大家都知道,這是開智學堂所有的課程極其鮮明的特色,比如説學編程、學寫作,開智學堂不僅教大家學具體的技能,同時還在教各位同學如何思維。如何提高自己個人的邏輯思維能力?這裏給大家的建議就是儘量先在自己的頭腦當中進行預演。認知科學家丹尼特把人類的大腦分成四種機制。
第一種是達爾文心智。
假設你是荷爾蒙爆表的男生,你在不同國家看到美女,只要她的腰臀比符合進化心理學規律,你看到這些美女都會興奮。又如你看到蛇都會害怕;看到紅色會興奮,這些大腦通過千千萬萬年演化習得的進化模塊,對應人類大腦的這一部分工作機制,丹尼特將其命名為達爾文心智。
第二種是斯金納心智。
假設你像斯金納一樣,發明了他著名的斯金納箱子,不斷地去訓練老鼠。按照達爾文心智而言,老鼠看到貓就會害怕。但是訓練中,如果當老鼠看到貓的時候就給它一些甜頭,老鼠就會不斷地去嘗試,這種甜頭就是刺激。從刺激到行為之間,既可以像巴甫洛夫一樣,給予貓與老鼠之間的條件反射;也可以像斯金納一樣,賦予代幣等操作。
第三種是波普爾心智。
第一種達爾文心智與第二種斯金納心智是動物共有的。第三種波普爾心智和第四種格列高利心智則是人類獨有的心智。波普爾是著名的科學哲學家,提出了很有名的理論,就是科學是通過可證偽才叫科學。波普爾心智意味着你在頭腦中對一些事情提前進行測試,測試一般是動物做不到的。這就是人類最重要的能力——你可以對真實世界予以抽象,然後在頭腦中進行測試與預演。優秀工程師無不具備較強的抽象、測試與預演能力。
第四種是格列高利心智。
這是人類更強的能力。第三種波普爾心智,你作為一名編程新手,在頭腦中測試的一些假設,有可能是你個人的體悟;但是人類是人類社會,而不是孤獨的獨狼。因此,人類擁有一種超越波普爾心智的能力,我們可以藉助社會文化與思想習俗測試一些假設。因此,丹尼特用英國認知科學家格列高利作為第四種心智的命名。
比如,在前面我提到,很多編程新手碰到新的問題,往往不會去查官方幫助文檔,而是去搜索,看博客,這是一種不好的學習習慣。但是人類擁有很強的格列高利心智。一些專家級工程師已經證明了哪些學習方法是正確的,哪些學習方法是低效的。藉助於人類文化社會已經證明正確的假設,能夠大幅度地改善你的學習效率。
在接下來的三個月時間內,各位開智學堂的同學將天天泡在 GitHub 裏邊,全世界最厲害的程序員都在這裏,我希望各位同學不斷摸索,看看他們是怎麼寫檔案的、他們有一些什麼樣好的習慣,這對大家學習效率會有很大提高。
建議 3:為什麼你實現不了目標?
第三個建議是關於樹立目標。報了開智學堂編程班,很多同學可能在自己的小本子上偷偷寫上一句話:「我要在三個月內學會編程」。雖然説不是 21 天學會編程吧,但很多同學都以為三個月能學會編程。然而,一旦寫了這個目標,絕大多數人最終的結果其實是學不會編程,完成不了這個目標,為什麼呢?
這是認知科學研究中很有意思的現象。因為人類大腦特別喜歡腦補,一旦把「我要在三個月內學會編程」這個目標寫下來,你的大腦會怎麼去處理?
它會認為這事情已經完成了。就像「新年我要成為更牛的人,要去周遊世界,我要XXX」,因為沒有提出一些具體的指令,你的大腦會把這些目標扔到「完成區域」。在未來的三個月內,你的大腦不會有任何行動。這是很不好的制訂目標的習慣。
認知科學家格爾維茨(Peter Gollwitzer) 把「我要三個月內學會編程」這樣制訂目標的習慣稱為「目標意圖」。與目標意圖相反的是「執行意圖」。它是這樣一種方式,採取的是如果…那麼…的句式。就是説它把你更具體的指令下達給你的大腦。「如果每天晚上八點之前回到宿舍,我立即打開筆記本開始登錄 GitHub 網站、提交自己的代碼」,這是一種新的制定目標的方式:執行意圖。這種方式有何不同?
- 第一它包括時間因素:「晚上八點」;
- 第二它包括地點因素:「回到宿舍」;
- 第三它包括具體可操作的事情:「提交代碼」。
這樣一來,你在上週給自己大腦佈置了這樣任務,然後很忙,把這個事拋在腦後,但是大家都很明白了,人類大腦喜歡腦補,到了下週晚上八點的時候,你的潛意識就會自動進行腦補,現在晚上八點了,我已經在宿舍了,這個時候我要幹什麼—— 寫代碼。
認知科學家研究發現通過改變一種目標制訂的方式,學習效率提高了三倍以上。格爾維茨的妻子,另一位心理學家 Gabriele Oettingen 則在執行意圖基礎上,結合心理對照,提出了 WOOP。這是任何一位開智學堂的學員入門第一課。
接下來在具體的教學中大家會碰到大量的任務,我希望大家用執行意圖的方式制訂目標。
建議 4:為什麼你需要做個「撓癢癢的猴子」?
第四個建議和人類社會結構相關。開智學堂非常有趣,幾乎任何課程任何收費活動,男女比例非常均衡,從來都是 5:5 。我想,這可能跟我作為創始人的文藝黑客氣質相關(笑)。這是開智學堂很特殊的現象。大家可以想一下,你為什麼需要男朋友,女朋友?因為人是喜歡撓癢癢的猴子,這是人類社會進化的一個規律。
最早人類怎樣從猴子變成猴羣?作為個體的猴子,相互撓癢癢,慢慢地從孤獨個體變成猴羣,這就是人類從遠古時代已經形成的一種思維習慣和一種演化模式。當從 150 人的猴羣演化成更大的猴族;當人類社會語言誕生,逐步演化出部落、村莊、城市與國家,這種猴子幫忙撓癢癢行為始終存在。只是語言誕生後,它逐步過渡為八卦。
正是八卦才使得人類社會形成社區,它又演化成更容易傳播的故事,幫助更多小部落鏈接在一起。比如説無論是西方社會還是東方社會,都會流傳信息結構差不多的故事:西方有亞當夏娃;中國有女媧補天。
人類社會這樣的演化進程同樣深深影響了我們的學習過程。因此,人類最早的學習是學徒制,知識就是八卦與故事。⼈類最早的學習是狩獵,部落中的年輕孩子跟隨⽗母學習打獵,維持人類生存並促進發展。這種以學徒制為代表的學習方式步⼊業時代之後逐步沒落。
然而,到了今天,技術⽣發的第⼆次教育革命中,我們需要重新回到學徒制,所謂認知學徒制。
你怎樣才能更好地學習?一定不是天天跟自己死磕。大家可以嘗試一下。當你抓住自己的頭髮,你是打不死自己的,你下不了手。但是讓你的小夥伴抓住你的頭髮,你會感覺到很痛苦。因為這個時候,你的傷害是來自於別人。同樣的,你要提高學習效率也是一樣的。
安替老師在開智大會上做的演講中的一句話,成了開智社羣的共識:「藉助社會結構讓自己被動進步」。
那麼怎樣更好地成為認知學徒?通過往期開智學堂的教學經驗,我發現學得最好的同學是在社羣中提問最積極的同學。往期還有個很有意思的現象,學得最好的同學,是參加線下活動最積極的。
你一定要不斷去提問,不斷去跟同學互動。在線上的時候,聽老師講編程課,有很多東西聽不懂,但是到了線下,老師給你打了個比喻或者同學給你展示了一下,你一下便懂了,這樣一來,學習效率便很高。
當然,開智學堂每門課程只有一位老師,加上四位助教,五位工作人員,面對數百位同學,很難做到面面俱到。這個時候,大家要明白另一個較新的認知科學研究。也就是,我們一般都知道,教別人怎樣進行學習,能夠提高自己的學習效率。但是大家不知道的是。認知科學家最新研究發現:「即使你只是在頭腦中想象如何教別人,這時候你的學習效率也是自己學習效率的兩三倍以上。」
所以説我希望各位同學,未來踴躍提問,主動嘗試解答自己或別人的提問,這樣的話能夠形成更好地學習氛圍,更能幫助自己更好地學習。
這就是最後我給大家小小的建議,希望各位同學,主動去做那一隻幫幫人撓癢癢的猴子。
小結
注重內隱知識;將語言與邏輯分開,不斷在頭腦中進行邏輯預演;使用執行意圖而非目標意圖;成為一名認知學徒,教別人學習,在頭腦中教六個月前的自己學習。這就是我給所有同學的四個建議!謝謝大家。
資料來源:36Kr
請按此登錄後留言。未成為會員? 立即註冊