似乎有了「效率」,我們就能今天寫出萬行代碼/博士畢業(yè),明天登上稱霸硅谷/諾貝爾獎領(lǐng)獎臺;沒有「效率」,我們的生活就如同被按了「暫?!拱粹o,直到找到名為「效率」的按鈕再按上一下,它才能在某種意義上繼續(xù)播放。學習效率真的很重要嗎?什么才是學習的正確姿勢?請看開智 Python 入門班一期優(yōu)秀學員胡墨的一篇干貨思考。
我們首先回想一下自己在學校(特別是中小學階段)的學習:學習目標(準備考試)和學習內(nèi)容明確且關(guān)系緊密;有經(jīng)驗豐富的老師專職講授課程;有大量練習和考試,通過與標準答案對比提供明確反饋。而當我們離開老師和學校的環(huán)境,自己進行學習時,面臨的情況又是什么?
學習目標和內(nèi)容常常十分籠統(tǒng),且很難把一個實踐目標和與之對應(yīng)的具體學習內(nèi)容聯(lián)系起來;沒有專業(yè)人士像中小學老師一樣長期專職輔導;學習效果的反饋周期往往很長,甚至沒有任何外顯反饋,學習之后很難找到「標準答案」來評價自己的學習效果。
也就是說,從學習目標,學習過程,以及學習中的反饋三個方面來看,我們在中小學的學習過程都經(jīng)過了多年優(yōu)化。超高信噪比的學校學習模式在極好地完成了應(yīng)試任務(wù)的同時,卻也讓我們離真實生活中的學習越來越遠。我們有必要思考,在高不確定性的真實環(huán)境中,學校的學習模式還能否起到良好效果,我們應(yīng)該如何學習?
在開始探索正確的學習姿勢之前,我們不妨先看看幾個廣泛存在的對于學習的幻想。
幻想一:我學過之后就什么都會了
我們在學校中學習的知識與考試的內(nèi)容,有著完美的對應(yīng)關(guān)系。(如果沒有對應(yīng)好,通常叫做超綱……老師和學生都會盡量避免這種情況出現(xiàn)) 因此我們常常會形成一種慣性: 學過知識之后,我們就可以正確使用它,解決我們的問題。然而事實常常并非如此。
學習過程只是接觸一個新知識的最初期階段。我們學的東西,并不一定對應(yīng)著我們想用它解決的問題?,F(xiàn)實世界的復(fù)雜多變讓我們時常并不能在剛學習時就發(fā)現(xiàn)我們真正需要學習的是什么。(學習者不應(yīng)幻想自己全都會----首先要接受事實,接受隨時可能發(fā)現(xiàn)新問題) 不夸張地說,在剛進入某個新領(lǐng)域時,甚至要有隨時重頭來過的覺悟。
真正常見的學習形態(tài)常常是有些混亂和糾結(jié)的,也許是下面這樣:
目標-學習-反饋-修正學習方向-學習-反饋-修正學習方向……直至解決初始問題。
真實的學習過程也許更像是畫一幅油畫,我們反復(fù)涂抹修改,直到畫出自己滿意的作品。
而對于學習路徑的考慮,就引出了下面一個更大的幻想,也許它就靜靜藏在我們內(nèi)心深處。
幻想二:學習效率最重要
也許是工業(yè)社會生產(chǎn)力空前發(fā)展的一個必然結(jié)果,現(xiàn)今,我們對于「效率」的追求,也達到了空前的程度?!感省股踔烈呀?jīng)成為了我們解釋一切問題的一個常用思路。兩個人看上去都在做同樣的事情,為什么結(jié)果不一樣? 哦! 一定是他們的效率不一樣!
學習,作為人類的一種活動,也不可避免地被套上了「效率」的外衣: 為什么她學習好? 因為她學習效率高。為什么我考試之前總是復(fù)習不完? 因為我復(fù)習效率低。煩死了,今天沒有效率,怎么學習/做實驗/寫代碼啊! 這些話,在我們身邊出現(xiàn)的頻率越來越高。
似乎有了「效率」,我們就能今天寫出萬行代碼/博士畢業(yè),明天登上稱霸硅谷/諾貝爾獎領(lǐng)獎臺;沒有「效率」,我們的生活就如同被按了「暫?!拱粹o,直到找到名為「效率」的按鈕再按上一下,它才能在某種意義上繼續(xù)播放。這也許是一種時代病。在這樣一種幻想之中,存在一條完美的路徑,只要按照這個「效率最高」的姿勢前進,我們就所向披靡。生活的「效率」甚至超過生活本身,成為了人們追逐的首要目標。
與第一個幻想不同的是,對學習效率的追求,實際上合情合理。效率高的學習者,在相同時間內(nèi),通常的確會有更多的學習成果。但過分追求效率,則是學習路上的一大心魔,將帶來很多「走火入魔」的風險。
追求效率很可能引發(fā)完美主義傾向: 「效率」的學習是一帆風順的,因此經(jīng)常遇到困難和錯誤的學習一定效率不高。具有這樣思維假定的學習者在遇到困難時,就更容易產(chǎn)生對學習效率的自我懷疑,從而把精力從學習本身分散到對效率的思考之中;為了避免學習過程中出現(xiàn)「不效率」的結(jié)果,他們時常只是淺嘗輒止,用看代碼,看視頻等不會遇到困難的手段,學習一些自己擅長的內(nèi)容,來獲得看似「高效」的學習。而當我們拋開這些學習者津津樂道的「效率」,回到他們最初的學習目的時,會發(fā)現(xiàn)這些看似「效率」更高的行為,可能只是隔靴搔癢。
上文已經(jīng)討論過,由于對學習對象的不了解與現(xiàn)實世界的復(fù)雜性,現(xiàn)實生活中的學習過程通常具有較低的信噪比和很大的不確定性。因此在學習開始前和進行時,我們都不可能勾勒出一條具有「最高效率」的路徑。而當我們事后回顧學習過程時,對「高效」的心理期待又常常引發(fā)「我當時要是如何如何學習就好了」的完美主義幻想,這無益于已經(jīng)完成的學習過程,還可能引起自尊降低,甚至產(chǎn)生對后續(xù)學習的畏難情緒。
客觀來說,效率也許確實是學習過程中的一個重要因素,但它本質(zhì)上是后驗的(也許一切成功學的問題也在于此)。因此雖然看上去很美(一個簡單模型中,效果 = 時間 * 效率),但「效率」可提升的空間不大,對于學習過程的幫助也極其有限。對學習效率的苛求,一方面并不現(xiàn)實,另一方面還常常引發(fā)學習者的負面情緒,總體上對學習有害無益。有效關(guān)注學習效率,也許應(yīng)更多表現(xiàn)為學習后定期根據(jù)事實進行反省,避免長期出現(xiàn)大方向的失誤;而非錙銖必較,試圖時刻處于最高效的學習狀態(tài)。
從上面的討論中我們可以發(fā)現(xiàn),學校的學習模式與現(xiàn)實生活的情況相距甚遠??瓷先ラL久以來的學習經(jīng)驗不但未必能幫到我們,還可能留下了一個并不理想的學習習慣。那么,我們究竟應(yīng)該怎樣在不確定情況下學習呢?
有效的學習姿勢,首先需要符合現(xiàn)實。不回避學習中不可避免的困難和錯誤,也不否定學習者的嘗試和創(chuàng)造力(即使很多嘗試是失敗的)。這種思路的要點,一言以蔽之,是在學習目標范圍中,盡量多進行對未知的探索——真正的學習活動,盡量減少花費在啟動和選擇上的時間。
有效的學習姿勢,最好還能富有樂趣。不確定性情況下的學習在難度提高的同時,也常常為我們帶來更多的樂趣。每一次最微小的嘗試,結(jié)果都是未知的,一旦取得成功,我們會感覺到樂趣;而當我們通過一段時間的學習,創(chuàng)造性地解決一個實際問題時,那種實現(xiàn)自己想法的幸福感,也是對學習者的最大獎賞。對不確定的探索,是人類能想象出的最大冒險。在不確定的學習過程中,如何產(chǎn)生更多積極反饋,也是值得我們思考的問題。
從最近一段時間的 python 學習和團隊項目開發(fā)中,我逐漸發(fā)現(xiàn),把軟件工程中敏捷開發(fā)的基本思路應(yīng)用于學習,似乎是一個不錯的選擇。也就有了極簡敏捷行動這個學習思路:
極簡: 目的是多學習多行動。足夠簡單,避免啟動困難,選擇困難。
敏捷: 加快學習循環(huán),促進正反饋循環(huán)
行動: 行動才是根本,思考服務(wù)于行動
然而原理只是原理,具體行動上怎么實現(xiàn)呢? 我們也許可以寫出一頁個人學習指南,幫助我們通過系統(tǒng)化的思維方式,減少面對不確定時的困惑。(本質(zhì)思路是,由于效率的后驗性,我們找不到最正確的學習姿勢。但可通過一些常識問題排除掉部分錯誤的學習姿勢----對錯的不對稱性。)
下面是一個大略的提綱:
定義問題
分解問題,尋求MVP
學習-測試-反饋循環(huán)
定期質(zhì)控
1.定義問題
目標導向: 思考目標和問題;通過具體定義目標,我們從完全的不確定中,把精力首先集中于某一方面。
一個可用的 checklist: 5W1H
值得指出的是,在剛剛進入一個不確定的問題時,我們定義出的問題很可能并不正確。在質(zhì)控過程中,我們需要時?;仡櫮繕撕蛦栴},并做出必要的調(diào)整。
2.分解問題,尋求MVP(minimal viable product)
定義出來的問題時常是很模糊的,我們很難直接把它轉(zhuǎn)化為一個具體行動。因此,為了切實解決一個相對較大的問題,我們需要把它分解為一些小的問題,再把具體的學習行動與之聯(lián)系起來。
一個很有效的分解問題方法是黑箱模型。
以「抓取豆瓣網(wǎng)頁圖書名稱」為例,我們通過黑箱模型進行分解: 即把我們的處理方法先假想為一個黑箱,通過輸入(input)-黑箱/處理(process)-輸出(output)把問題分解為幾個部分,來確定我們需要做什么。
對于抓取豆瓣網(wǎng)頁圖書名稱:
輸入: 豆瓣圖書網(wǎng)頁
黑箱/處理: 我們的程序
輸出: 網(wǎng)頁中的圖書名稱
因此,我們的處理方法(黑箱)需要實現(xiàn)的目的,即把輸入(豆瓣圖書網(wǎng)頁)轉(zhuǎn)化為輸出(網(wǎng)頁中的圖書名稱)。
實例: (ipy notebook 開發(fā)過程實例待增補) 最簡化所有步驟:
輸入: 抓取一個任意的最簡單網(wǎng)頁 抓取已知網(wǎng)頁 讀取用戶輸入內(nèi)容
黑箱/處理: 在一個已知字符串抓取一個字母/單詞(隨便什么) 抓取一個鏈接 抓取頁面全部符合要求的鏈接
輸出: 輸出 hello world 輸出一個已知鏈接 輸出一堆鏈接 (原則上夠用了) 值得指出的是,通過建立標準輸入輸出文件范例(把三部分的時空獨立外顯化),可獨立開發(fā)幾個部分
以上討論的本質(zhì): 我們可通過時間和空間,把一個復(fù)雜的問題分解為一連串獨立的簡單問題的組合。(時: 先得到網(wǎng)頁,才能抓取,最后輸出;空: 存儲網(wǎng)頁和書名信息的數(shù)據(jù)結(jié)構(gòu)彼此獨立)
3.「學習-測試-反饋」循環(huán)
通過時空分解,我們把一個相對大的問題分解為了一個馬上可以動手做的很具體的小問題(MVP)。下面,就到了通過學習,解決這個小問題的時間。具體的學習行為,可以用「學習-測試-反饋」的模型來概括。也就是說,我們先針對問題,進行一段時間的學習和嘗試,隨后進行測試,測試結(jié)果的反饋決定我們開始研究下一個問題(測試成功),或者是分析目前不成功的原因(測試失?。?。
在這個模型之中,我們特別強調(diào)測試和反饋。在信息爆炸的當下,學習資源已經(jīng)遠遠超過了我們處理信息的能力,通常并不是制約我們學習效果的主要原因。而測試和反饋的缺乏,才是我們需要特別考慮的。主動尋求測試和反饋,也許是高階學習者的一大特點。
比如在初學寫作時,有的學習者用自己的翻譯和名家翻譯對照,或用自己的翻譯-回譯與原文對照,從而通過同樣內(nèi)容的不同表述錘煉文字。創(chuàng)造正反饋,以正反饋的樂趣克服啟動障礙。在尋求反饋循環(huán)方面,編程學習有著獨特的優(yōu)勢。因為程序設(shè)計的學習目標(實現(xiàn)某個功能或算法)通常極為明確,且測試(運行代碼)反饋(分析運行結(jié)果)速度快,結(jié)果清晰。Python 課程學習中,ipython notebook 是一個良好正面例子。通過快速嘗試和代碼演進,可以不斷從最小的代碼片段開始,疊加代碼功能。另外,完整的學習過程也被記錄在了 notebook 之中,可用于后續(xù)分析總結(jié)。
4.多層次質(zhì)控
多層次質(zhì)控: 用理性日常行動(routine)減少大失誤(基于經(jīng)驗的反省智慧)
每日三句話
半周/一周/更長期質(zhì)控與調(diào)整
理性: 接受不完美/不確定的事實
自信: 相信可以解決問題--特別是某些技術(shù)領(lǐng)域
耐心: 在負面情緒(不可避免!)襲來時保持理性
總結(jié): 一份極簡敏捷行動的案頭手冊--針對 python 編程學習
以上思路整合為一張圖,就可以作為一個特定學習內(nèi)容的案頭手冊(cheat sheet)。學習時放在手邊,每一個小的學習片段(對我通常是半小時),或者遇到困難需要暫停時,就回看一次。
通過參考案頭手冊,進行極簡敏捷行動,我們可以減少在不確定情況下學習時的選擇和判斷,從而極大降低了這些行為占用的時間和心智(很多時候我們就是在糾結(jié)的選擇中失去了行動能力……)。對應(yīng)地,當我們把更多時間投入具體的學習過程,就能形成更多的學習循環(huán),在不斷上升的循環(huán)中,享受自我成長的學習之樂。
尾注:原標題是《不確定情況下的學習 Study under Uncertainty》,題目是對 Judgment under Uncertainty:heuristics and biases 致敬
胡墨
北京大學化學學院在讀博士生,開智 Python 入門班一期優(yōu)秀學員
個人博客:frank-the-obscure.me
團隊項目 iDoulist : http://t.cn/RbnPEBx
GitBook《致十六歲的自己》: http://t.cn/RbnP8Eg