程式設計師的有效學習策略

InfoQ發表於2015-12-05

九月初我在紐西蘭舉行的Kiwi PyCon會議上做了一個主題為“程式設計師的有效學習”的主題報告。主要講到了兩個方面:一個是對智力的認識,一個是我們能夠使用的特殊策略。下面的文章是根據報告內容進行編輯的,主要是關於觀念方面的內容。如果你還關心策略方法的內容,還有相應的視訊

Recurse Center

在我去年加入Dropbox之前,我在位於紐約的Recurse Center公司工作了兩年。Recurse Center對程式設計師來說就像寫作者的一個隱居地。參加者花3個月的時間來了解對他們來說什麼是最有趣的。因此,有人使用了十年的Java,來到RC之後卻學習了一門新的語言,例如Clojure,或有人只有一個CS學位,卻可能從事著Web開發的工作,或有人只是在業餘時間學習程式設計,最後卻學會了turbo-charge技術。在那裡程式設計幾乎是沒有任何結構的,沒有期限,沒有任務,沒有教學。對成年人來說,這是一項非結構化學習的實驗。

作為一個推進者,我的角色是幫助人們最大限度地利用他們在RC所擁有的大量容易令人迷失的自由。從傳統教育和傳統職業中走出來的人們常常不知道該怎麼做。所以我想幫助他們制定目標,也幫助他們最大限度地利用這段經歷。其中我想到的事情之一是如何讓程式設計師能夠獲得最有效的學習。今天,我在這裡跟大家展開討論。主要是我針對如何做一名高效的學習者所做的一些研究,以及如何將這些研究應用到程式設計師和工程師的日常工作中。

怎麼跳出這個職位

花一分鐘,好好想想你要如何跳出這個職位。你可能想學習新的東西,關於如何儘可能讓你的工作變得有效和高效。你可能想聽聽如何能夠成為一名更好的初級工程師的導師。或者你可能想聽聽你能如何在你的組織中做一些制度上的變革,來為所有的這些事情建立一個更好的環境。

所有這些都是有用的目標,下面我將會觸及所有這些相關的方面。不過,我想讓大家好好想想實現這些目標的策略。當我聽到一些策略的時候,很多時候似乎很明顯其他人也應該在關注它們,但事實上我們自己並不一定需要關注。只是由於別人的關注會讓我們緊張。

成長的觀念:Carol Dweck

讓我們來談談有效學習的第一個關鍵問題。關於人們如何思考智力,社會學家Carol Dweck已經做了很多有趣的研究。她發現,關於思考智力有兩種不同的框架。首先,是所謂固定的觀念,認為智力是一種固定的特質,它們中的大部分人們都無法改變。另外一種觀點認為智力是不斷成長的。在成長觀念的觀點中,人們認為智力是可延展的,並且可以經過努力提高。

Dweck發現,關於人的智力的理論,其是否擁有一個固定的或生長的觀念,可以顯著地影響他們選擇工作任務的方式,他們應對挑戰的方式,他們的認知能力,甚至是他們的誠實度。我將對她工作中幾個有趣的結果進行介紹。

不同觀念導致是否願意付出努力

第一個有趣的結果是,不同的觀念會影響人們對待努力的態度。如果你有一個固定的觀念,你會相信人是否聰明是天生的,它們是不能真正改變的,同時你也容易認為,如果你擅長一些東西,它對你來說應該是很容易的,相反你不擅長的東西對你來說就很難。這是固定觀念的視角。擁有成長觀念的人認為,你需要付出努力,並辛苦工作,並努力去更好地掌握一些事情。

一些研究發現,帶有固定觀念的人可不願意真正付出努力,因為他們認為如果一件事情他們應付起來很艱難,那表示這並不是他們所擅長的。Dweck指出,“如果每一項任務都需要非常努力,這將很難讓你對自己的能力保持信心,你會對自己的智力產生質疑。”

“讚美是事與願違”

第二個有趣的結果可能是最有名的。Dweck和她的合作者發現,微妙地給學生不同種類的好評會顯著地影響他們的表現。

在這項研究中,Dweck和她的合作者給學生們一系列問題。第一組問題後,所有的學生都完成得挺不錯。然後,一半的學生被告知,“哇,這些問題你做得非常好,你肯定很聰明。”而給另一半人的評價是,“哇,這些問題你做得非常好,你肯定工作得非常努力。”然後他們得到了第二組問題,更難,每個人都做得不好。最後,他們得到了第三組問題,跟第一組一樣簡單。

這裡,他們正在為第一組學生建立一個固定的觀念(你的表現說明你很聰明),並在第二組學生中建立一種的成長的觀念(你的努力推動了你的成功)。

他們發現了一堆有趣的事情。在實驗的第一個方面,在第一組和第二組問題之間,他們問學生們接下來想做一個簡單的練習還是難的練習。Dweck等人想看看得到不同種類的好評的學生之間是否有差異。果然,有90%獲得努力讚美的學生接下來選擇了更難的題目,相比較而言,只有三分之一被讚美聰明的學生選擇了更難的題目。被讚美努力的孩子對迎接挑戰更感興趣。

接下來他們感興趣的是學生們是如何執行第三組問題的。他們發現,被讚美聰明的孩子做第三組題目的結果比做第一組題目時差很多,但被讚美努力的孩子反而做的有些進步。被讚美聰明的孩子在第二組問題中遇到困難時並不能很好地恢復過來,而被讚美努力的孩子卻能夠很快地恢復起來。

之後,他們繼續這個研究,他們讓學生給筆友寫信,告訴他們自己取得的分數。他們發現,幾乎一半被讚美聰明的學生對自己的分數撒了謊,而被讚美努力的學生中幾乎沒有是不誠實的。

因此,這裡有三層含義:相比於有固定觀念的學生,一個成長的觀念讓學生們更傾向於選擇一個挑戰,而不是選擇容易的事情,更可能在經歷挫折後重新振作起來,並且有更加誠實的表現。

這個地方吸引人的是,只是讚美上的細微差別就產生了非常不同的結果。通過只做一些你知道做的很好的、很容易的事情,並通過隱藏自己的表現不佳,被讚美聰明導致他們試圖讓所有事情保留著聰明的外表。而被讚美努力會導致人們試圖讓所有事情保留著努力工作的外表,知道最好的方法就是努力地工作。

應對混亂

另一項研究調查了當學生遇到暫時的困惑時,會發生什麼。Dweck和她的合作者給小學生設計了一個短期心理課程。課程是一本心理學的小冊子,以及之後的一個測試。部分小冊子中有一些混亂的片段。混亂的部分並不在測試中,如果學生完全忽略這些混亂的部分也可以掌握這些材料。研究人員想看看學生們是否能從這些小冊子的干擾中恢復出來。

他們發現,70%有成長觀念的學生掌握了材料,而不管冊子裡面是否有混亂的部分。而有固定觀念的學生,如果他們讀到的這本小冊子裡沒有混亂的部分,約70%的人掌握了材料。但是,如果他們讀到的這本小冊子裡有混亂的部分,那麼掌握率會下降到30%。有固定觀念的學生從混亂中恢復的能力很糟糕。

“對於我們大部分人期待成為的那類人,如何能夠描述他們的本性呢?因為我們認為他們是好的,所以我們希望成為他們那類人,但他們真的是好的嗎?”

我把關於混亂的這一章放了進來,因為這真的契合了我。如果問,在開始使用一個工具之前先閱讀說明文件的人請舉手(差不多100%的人會舉手)。你讓領域專家針對初學者編寫文件或者過期文件,是經常發生的。對程式設計師來說,pass掉這類混亂併成功地留住我們所讀文件的剩餘有效資訊是一項關鍵技能。

程式設計師需要一個成長的觀念

程式設計師需要一個成長的觀念!程式設計師的關鍵技術,比如對混亂的反應,從挫折中的恢復,承擔新挑戰的意願,所有這些在成長的觀念下都會變得容易,而在固定的觀念下卻更加困難。

有誰相信一個固定的觀念?

有時候當人們談到有這種固定觀念的人的時候,會覺得他像一個稻草人。高科技領域的人也這樣認為嗎?我絕對認為固定的觀念是普遍的。下面是幾個例子。

10倍工程師

先從10倍工程師的想法開始。它的意思是一些工程師的效率是其他人的數倍。這種想法召來了很多的批評,但是我們暫且將批評放在一邊。如果你相信10倍工程師的想法,你是否認為他們天生就是超級有效的工程師呢?
我常常認為這是一種常見的場景,10倍工程師是建立在一個高臺上,因為其他人根本成為不了。很多時候,這是從固定觀念出發的。

英雄崇拜

我們看到固定觀念的另一個例子是英雄崇拜。Julie Pagano在PyCon 2014上做了一個關於冒名頂替的報告,她對於打擊冒名頂替的其中一條建議是“殺死你的英雄”。不要把其他程式設計師放在高臺上,不要說“那個人跟我如此不同”。如果你心中有程式設計的英雄,你會認為他們與你完全不同嗎?你能變得更像你欣賞那種人嗎?如果你不這麼認為,這就是固定觀念的一些證據。

所以,我要說yes,一個固定的觀念在科技行業內非常普遍。

你可以改變一個固定的觀念嗎?當然是yes

到現在希望你已經確信成長的觀念比固定的觀念要好。所以,接下來的問題是:這是可延展的嗎?你可以開始有一個固定的觀念,然後把它變成一個成長的觀念嗎?答案當然是yes,你絕對可以將一個固定的觀念改變為一種成長的觀念。

事實上,在Dweck的許多研究中,他們常常是以微妙的方式,實驗性地誘匯出一種固定的或生長的觀念。讚美的研究是一個例子:讚美的一句話改變了學生的行為。在其他研究中,他們讓學生讀一個關於名人成功的段落,並在最後說到:“因為他們很努力”或“因為他們有很好的DNA”。這絕對是一個延展性的事情。

那麼,你如何改變一個固定的觀念呢?主要面臨的挑戰是如何實際上識別這種固定觀念,一旦你聽到自己說這種話,“我從來沒有學習物理”,這已經很明顯地表明你可能有一個固定的觀念。但其他很多時候,很難深挖這種固定的觀念。事實上,存在一對標識,你可以用它來確定固定的觀念,從而將它們根除。

如何識別一種固定觀念?

“我是 ..”

“有些人只是……”

如果你擔心你的觀念已經固定了,你應該經常聽到這些句子。比如像“我是從來都不擅長CSS的”,或“我是一個不善交際的人”,或“有些程式設計師僅僅比別人快”。任何以“我是…” 開頭的話都代表存在固定心態的可能。話裡出現“僅僅”也經常代表一種暗示。

反過來講,說一句“我是”,顯然也不能完全代表一種固定觀念。事實上,這裡的關鍵是當發出這樣的語句時將是一個警告的訊號,這時就要注意到它們,然後檢查你的觀念。

如何改變一個固定的觀念?

重構讚美和成功

好了,一旦你確定了一個固定的觀念,你應該怎麼去改變它?這裡有四個策略。

首先是重構讚美和成功。通過重構讚美,我的意思是,當你得到錯誤型別的讚美時,把他們變為成長觀念的讚美。所以,如果有人說“哇,你在該專案中表現非常出色,你太聰明瞭” ,把它翻譯為“是的,太棒了,我在這個專案中真的很努力” 。你不一定要將它們大聲說出來!但這種重構會讓你自己通過尋求挑戰和付出努力而重新獲得成功。

您還可以使用同樣的技術來取得成績。當事情順利的時候,不要以為,“理所應當,因為我很棒所以事情很順利”。反而應該這樣想,“我在該專案中用了一個有效的策略!我應該經常這樣做”。

重構失敗

當然,上述情況的另一面也很有效。一個固定的或成長的觀念中,很大一部分是如何面對失敗。當你面對挫折或沒有得到自己想要的東西的時候,你會對自己說什麼?如果你說,“也許我不適合幹這項工作”,這將是一個危險的訊號。相反,問問你從你的失敗中學到了什麼,或你將用怎樣的策略來代替它。這聽起來俗氣,但它確實有效。

慶祝挑戰

你可以用來改變一個固定觀念的第三種方式是慶祝挑戰。當你不得不掙扎的時候,你會做出怎樣的回應?嘗試好好慶祝一下。這是我還在Recurse Center時就一直堅持的東西。有人在我旁邊坐下來,對我說,“哎,我遇到了一個奇怪的Python錯誤”,我會說:“真棒,我愛奇怪的Python錯誤”。首先,這絕對是真實的,如果你有一個奇怪的Python錯誤,讓我們來討論怎麼解決它,但更重要的是,它在對參與者強調,在他們努力獲得成就的地方發現了一些東西,對他們最終取得成功是一件好事。

正如我所提到的,在Recurse Center,沒有期限,沒有任務,所以這種環境非常自由。我會說,“你得花一天解決這個奇怪的錯誤,那是多麼令人興奮”。如今,在Dropbox,我們要生產產品,有期限,有使用者,我並不總能高興地花一天時間到奇怪的錯誤上。所以我很同情那些有期限的世界。然而,如果我有一個錯誤要修復,我必須解決它,抱怨錯誤的存在並不會幫助我更快地解決它。我認為,即使在世界上最後期限迫在眉睫的地方,你仍然可以採用這種慶祝挑戰的態度。

詢問過程

改變一個固定觀念的最後一個策略是詢問過程。像你們許多人一樣,我與很多優秀的工程師一起工作。有時候,我會盡力解決一個棘手的錯誤,卻解決不了,然後其中一人就能立刻幫我解決。在這種情況下,我會自覺地問他們是如何做到的。特別是當我在Dropbox還是新人的時候,問題的答案都是非常有啟發性的。有時,資訊都來自我所不知道的一個來源。現在,我在Dropbox工作的時間越長,越體會到詢問帶來的通常是一個技術或策略上差異,或者是關於為什麼我的策略還沒有成功的一個細節。

這是一個更加有用的策略,從長遠來看,不是說“哦,當然,這個人得到一個錯誤因為他們是怪胎” 。

信心與冒名頂替綜合症

圍繞冒名頂替的討論,Dweck的研究非常有趣。冒名頂替綜合症是一種感覺,即你是一名分分鐘就能被發現的不合格的騙子。如果你曾經在工作中覺察到冒名頂替綜合症,請舉起手來[房間裡80%的人會舉手],是啊,這是很多的你,我也一樣。然而它是如此的痛苦,這對你的職業生涯非常糟糕,因為如果你擔心你已經對已有的工作感覺到疲憊,你不太可能冒險或去尋找新的機會。

對冒名頂替綜合症提出的解決方案往往以信心為中心。就像,“哦,如果你覺得你不能勝任你已有的工作,你應該更加自信,然後你會沒事的”。這有時就是這麼簡單,“不要有這樣的感覺”,因為這作為建議並不會非常有幫助。但是,即使這非常細微,的確我們會不可避免地關注信心和過去的成就。

信心不會幫助你應對挑戰

Henderson & Dweck, 1990

但這是關鍵。Dweck的研究表明,信心並不能在你應對新的挑戰,或從挫折中恢復時幫助預測能否成功。

Henderson和Dweck做了一個美國學生的研究,從小學到初中,當他們年齡還很小時,他們讓學生評估他們自己的信心,他們還測量學生是固定的還是成長的觀念。然後,他們跟蹤學生初中時的學習成績。

他們發現,有固定觀念的、自信的學生在學業上遭受到了挫折。相比之下,不管自信心是高還是低,成長觀念的學生都易於在學業上取得成功。自信並不是成功的預言者。

現在,還有很多其他的研究顯示信心與成功是相關的。Dweck認為,自信是一個好的預測器,可以幫助預測你能將正在做的事情做得多好,但是並不能幫助預測你能將新的挑戰應付的多好,也不是你如何看待失敗的預測器。

Dweck發現的第二個相關的點是,成功的歷史也不會影響你如何應對挑戰和失敗。

所以,過去的成功並不能預測你是否能應對新的挫折和失敗,你的自信心也不能預測你是否能應對失敗。能夠很好地預測面對失敗時的應變能力代表了一個成長的觀念。

打破束縛

這非常令我感到興奮,並且我認為對各種冒名頂替綜合症的討論還不夠多。基本上,如果你持有一種固定觀念,當你不得不拼一把的時候,你會真的感受到壓力和恐懼。我們是程式設計師,所以大部分時候都在戰鬥,對吧?是一直在戰鬥。擁有成長的觀念,你可以享受這種戰鬥,享受你正在努力攻克的難題。這為我們打擊冒名頂替綜合症提供了一個新的、更有效的框架。

你猜怎麼著?當由於一個棘手的錯誤,你的身份正在受到威脅的時候,專注於錯誤就更容易。你不會擔心會感到疲勞,並且是一個騙局,這樣你就可以騰出這些認知資源,專注於手頭的任務。

因此,如果你相信,例如,“有些人只是不善於程式設計”,你可能花大量的時間和精力去尋找證據,進行驗證和確認。相反,可以顛覆這個框架。打破那種天賦是一成不變的想法,想象每個人通過努力都可以提高自己的技能。

Self-theories:他們在動機、個性和發展中的作用

有一個成長的觀念會讓你在面對失敗時更有彈性,會讓你付出努力更加容易,會讓你更能應對挑戰,這些對程式設計師都非常有用。

如果你想更深入瞭解這些研究的細節,可以同時看看我今天沒有時間提到的一些調查結果,我強烈推薦Dweck的一本書,名字叫Self-theories。Self-theories是一本短文集,概括了她的研究中的許多重要的觀點。普通讀者也可以從中獲得這些研究的很多細節。她還有一本叫Mindset書,主要是寫給普通的讀者,但如果你想多瞭解一些具體研究的細微差別和細節,Self-theories才正好合適。

問&答環節

問:有沒有任何在團隊級別進行成長和固定觀念的研究,團隊該如何開展這些問題的研究?

答:我不太清楚,但這是一個有趣的問題。如果有,我很樂意看到這些研究。

問:我讀過Mindset,我是一對雙胞胎女兒的父親。我發現這些策略確實幫助提高了他們的韌性以及他們解決問題的能力。

答:是的,這項研究是可怕的。就像,你告訴你的孩子,他們很聰明?你似乎感覺正在毀掉他們!報告中我沒有機會談論這個,但書中有一些關於性別差異的研究,發現成績優異的女孩更有可能有一個固定的觀念,當她們遇到一些很難的事情時,不太可能去冒風險。

問:這是二元的,還是灰度的?

答:我認為它可能是一個頻譜。此研究可以被劃分為一個二元模型。我不能準確地肯定在哪進行劃線。而一些對固定或成長觀念進行實驗誘導的案例中,如果有人是一種觀念,然後往另一種觀念誘導,他們可能會最終停留在一箇中間的位置。

問:是否有可能在一個領域是一種固定觀念,而在另一個領域是一種成長觀念?

答:絕對可能。對程式設計師,程式設計時是成長的觀念,而在社交技能方面卻是固定觀念,這種情況非常普遍。

問(從一名CS講師):對於我們的新同學,有沒有一種方法可以讓他們建立一種成長的觀念?很多在學校的人都有一個固定的觀念,這可以在那些早期的課程中被打破嗎。

答:如果您是一名講師或有機會站在觀眾席前面,你可以明確地說:“程式設計是一門技能,你可以通過努力提高它,”即使它聽起來不是很有說服力,但研究表明說與不說確實有差別。

另一件真正有趣的事是一項關於價值的練習的研究。基本想法是,如果你確定作為一名程式設計師,而你的程式設計師身份受到質疑,這是非常痛苦和艱難的。但如果你有體現自己價值的其他方面的東西,那麼這會減輕這個質疑。對於那些在技術上被邊緣化的人來說,結果真的是悲劇。有關詳細資訊,請參閱Leigh Honeywell的(worksheet)[http://captainawkward.com/]的部落格。Captain Awkward有關於社會挑戰一些解釋,如“我將去參加一個聚會,要跟三個人交談,那麼提供給我關於他們每個人的十點事情,並瞭解有關事實”。對於處理社交焦慮,在網際網路上有很多有趣的東西,你使用與否我覺得主要看你正在努力的事情。

有關評論

針對Allison Kaptur的報告,大量網友在Hacker News上展開了廣泛討論。有的使用者表示關於提高成長觀念的研究並不像人們期待的一樣深刻,何況過多的關注成長觀念的提高會容易導致人們精力分散,不能很好地專注於自己正在進行的工作。此外,很多網友表示了對成長觀念的支援,他們認為人的智力水平是可以提高的,對很多事情,即使自己不擅長,也可以通過付諸努力而得到提高,相反現在的教育容易陷入固定觀念的思維模式,一些學習成績不夠好的學生,容易被認為是自身就不擅長,所以容易導致放棄,他們認為應該多培養學生成長的觀念。如果你也有自己的認識,不妨在下面留言評論。

相關文章