如何成為專家 - 心態篇(用心讓學習變好玩)


| 869

前言

繼上次 Leetcode 刷題 pattern - 一週年特典,這一期又想來探討一下學習這件事情。一個很深層的原因是,我一直不覺得自己有在某個技術領域達到專家的等級,而追根究底,似乎是來自於我的學習心態,導致我沒有辦法成為專家。但是基於個人追求,我希望自己能夠更深入學習自己想鑽研的領域,所以我也開始不停觀察怎麼樣能夠學得更快樂、並在享受的過程中自然成為專家。

身為一個曾經很愛看漫畫的宅宅,這一篇會用很多漫畫的片段來幫助傳達我想表達的思想,希望可以把我想講的意思說得更清楚,也順便幫未來的自己留個記錄。

為什麼我的學習不好玩?

在探討怎麼讓學習變好玩之前,也許我們應該問自己的問題是,為啥我的學習不好玩?

不管在看這篇文章的你是什麼領域的學生或工作者,應該或多或少都有過 "喔喔!原來這東西是這樣運作,好新奇~" 或是 "欸~原來這東西還能這樣,從沒想過耶!好酷!" 的體驗。如果你回想一下當下的感受,那種眼界被打開、或是不懂的東西豁然開朗的感覺,應該就有點接近我想講的 "好玩" 的狀態。

這時候,問題就變成,我們是從什麼時候喪失掉對這些好玩 moment 的感受的呢?

以我個人的經驗來說,我覺得就是從有時間壓力,所以我要在時間內找到正確的方法把事情做好,這種心態開始的。當我仔細回顧成長歷程,我發現自己從高中開始,就逐漸養成考前一週才開始抱佛腳的習慣,但又想要考試結果是好的,所以我常常都讓自己處在很著急的狀態,逼迫自己趕快找到 "正確" 的方法(例如只吸收覺得會考的重點),才能考到理想的成績。這種習慣延伸到大學,開始擴展到找到 "正確" 的方法,完成 project,再接著出社會之後,延伸到工作之中也是這種心態。

也就是說,隨著每次趕死線的成功與失敗,我的潛意識不斷強化 "把事情做出來就是有一條正確的道路",然後我接下來就是要 "趕快在死線前,把這條路找出來",走下去,達到我要的目標。

這種假設看起來沒有什麼不對,但是,在現在的我看來,裡面至少隱藏了兩張陷阱卡:

  1. 找到對的道路是必須的:這讓我就算發現對的做法,也只會覺得這沒什麼,要繼續找到下一個,甚至隱約帶來壓力(會不會下一個就卡關?如果我沒找到正確答案怎麼辦)。
  2. 不想嘗試跟目標沒有太直接相關的東西:如果看起來是錯的方向、或不是跟目標極度相關的東西,我就不願意去試試看、玩玩看。(可是,我們的經驗跟智慧是有限的,有時候自以為無關的方向,其實可能很有用)

這兩張陷阱卡之所以被我稱為陷阱,是因為他們出現的前提是,完成目標是第一要務,所以好不好玩,不太重要。這種隱藏在其中的思想,讓我慢慢喪失對好玩的體驗能力,而因為體驗越來越少,也就不會想去追求好玩的狀態,形成負面循環。

但我們也不是笨蛋,會發展出上面這種心態,其實無非是為了把事情完成。我認為,在成為能游刃有餘完成任務的高手前,我們還是需要利用上面的心態,負好自己該負的責任。畢竟,我想找到進入玩家心態的鑰匙,目的也是為了更輕鬆愉快地完成自己的責任。所以,一個做法是可以先用原本擅長的做法先做到該負的責任,然後利用一些空閒時間來探索怎麼樣可以把學習或承擔責任的過程變得更好玩。

以上這些觀察跟感受,在看到下面食戟之靈的片段時,再次被激發出來,也讓我產生撰寫這篇文章,好好把頭緒理清楚的想法:

裡面的女主角很明顯就是一般人,覺得正常人怎麼會想要嘗試冷凍雞蛋這種鬼點子,乍想之下就覺得沒道理。可是,真的一定沒道理嗎?還是只是自己下的結論呢?我覺得男主角那句 "只知道一個正確答案的傢伙,是無法追尋到更厲害的東西的" 完全戳到我。因為我也是一個常常只想追求單一正確答案的傢伙。

另外我想強調,"要是一開始就知道終點在哪,那還有什麼樂趣呢?",這句話跟要追求達到目標並沒有衝突!舉例來說,同樣要完成一個程式,可以寫得很長,也可以像某些 Leetcode 大神,用超簡短的程式碼達到,這時候,其實 "終點" 已經不一樣了。雖然程式的 input 跟 output 不變,最後也都是寫出一個可以 work 的程式,但是中間過程的體驗不同、最後生產出的程式碼也就不同、寫出不同程式碼的你狀態也完全不同!而就是因為這裡存在著無限的自由度,所以才好玩!

這邊讓我直接放個程式實例,例如 Leetcode 第 12 題 - Integer To Roman,我曾經用暴力法寫過一個解:

string intToRoman(int num) {
    string res;

    for(int i=0; i<4; i++) {
        int digit = num%10;
        num /= 10;

        if(digit == 0) continue;

        if(i == 0) {
            if(digit <= 3) {
                for(int j=0; j<digit; j++)
                    res += "I";
            }
            else if(digit == 4) res += "IV";
            else if(digit == 5) res += "V";
            else if(5< digit && digit <= 8) {
                res += "V";
                for(int j=0; j<digit-5; j++)
                    res += "I";
            }    
            else if(digit == 9) res += "IX";
        }
        else if(i == 1) {
            if(digit <= 3) {
                for(int j=0; j<digit; j++)
                    res.insert(0, "X");
            }
            else if(digit == 4) res.insert(0, "XL");
            else if(digit == 5) res.insert(0, "L");
            else if(5< digit && digit <= 8) {
                res.insert(0, "L");
                for(int j=0; j<digit-5; j++)
                    res.insert(j+1, "X");
            }    
            else if(digit == 9) res.insert(0, "XC");
        }
        else if(i == 2) {
            if(digit <= 3) {
                for(int j=0; j<digit; j++)
                    res.insert(0, "C");
            }
            else if(digit == 4) res.insert(0, "CD");
            else if(digit == 5) res.insert(0, "D");
            else if(5< digit && digit <= 8) {
                res.insert(0, "D");
                for(int j=0; j<digit-5; j++)
                    res.insert(j+1, "C");
            }    
            else if(digit == 9) res.insert(0, "CM");
        }
        else if(i == 3) {
            for(int j=0; j<digit; j++)
                res.insert(0, "M");
        }
    }

    return res;
}

後來,我用查表法又寫了一次:

string intToRoman(int num) {
    vector<string> M = {"", "M", "MM", "MMM"};
    vector<string> C = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    vector<string> X = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    vector<string> I = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
}

這時再看查表法是不是覺得越看越美呢!可是如果沒有前面的噁心暴力法,直接想出這個查表法,那種覺得它很美的感動是不是就沒那麼強烈了?

另外,我放這個例子還想帶出一件事,就是,居然用那種一堆 if-else 的暴力解,也能做出對的結果,這不是也有點好玩嗎?就算寫出那種醜 code 又如何?或甚至寫出來的 code 不 work 又如何,不也是可以廢到笑的一件事嗎?這也呼應到食戟之靈第一話開頭的男主角心態:

這些看似無用的嘗試,都在增進你對各種事物的感受,說不定因為吃過魷魚腳跟花生醬,更了解了魷魚腳跟花生醬在不同情況下的風味,未來某一天就會突然有機會派上用場!

好玩學習的充分條件一 - 給自己時間,不逼自己找到正確答案

在上一段的討論中,有些人可能會發現自己也像我一樣,學習之所以變不好玩的的起頭就是因為時間限制,當我們有時間限制,就會想要趕快學到可以解決問題,而不是隨喜好自由探索。

所以,要想 make learning fun again,一個重要的起點,就是給自己時間探索。暫時放下用理性逼自己完成目標的念頭,轉而嘗試傾聽自己心裡的聲音、或嘗試去做各種跟學習相關的事情,看看自己對哪些事情會自然想要投入、一投入就是好幾小時的集中(以我來說,邊學習邊寫成文章就常讓我寫得很開心,寫到忘記時間),這可能就是適合你的學習方向。當然,這邊說的是學習的事項,玩遊戲、看漫畫、看劇、出去玩這些事不算,如果是這些事應該不用寫一篇文章來講XD

再舉個個人經驗,這幾年因為軟體業興起,很多人都在刷題,但單講刷題這件事,方法就有超多種,我就試過以下這些方法:

在不同的時空條件下,我喜歡的方法常常會變化,可能今天想要專心把某種題型搞懂、明天想要多練習模擬面試來應用已經學到的知識。我發現,當我盡可能選擇我當下覺得最有趣的方法,我就能稍微享受刷題。

反之,如果我一直給自己各種時間限制,我很可能就會只急著把題刷好,走向每一題如果在某個時限內解不出來,就看解答的道路。剛開始刷題時,我有試過規定自己一天一定要刷幾題,但有時候真的會卡住達不到目標,結果徒增壓力,經過幾天我就發現這並不是適合我的學習方法,也許短期衝刺可以有些效果,但我相信這樣長期做下去,我有 95% 以上的機率會很討厭刷題,總覺得不對勁,於是我就捨棄了這個方法。

現在的我,雖然談不上愛刷題,但起碼我不討厭,甚至在過程中也有過不少好玩的體驗。

好玩學習的充分條件二 - 感受每一小步進展的意義

如果你也看漫畫,我強力推薦看看網球優等生,這部漫畫講述男主角如何一步步從網球新手,用極快的速度進入到職業等級。撇開主角的些許威能(這部的主角威能我認為不浮誇,至少是滿有道理的,不只是那種,因為我是主角所以吼一吼靠氣勢就會贏的漫畫),裡面的很多觀念我在學習或工作中都驗證過。而其中從頭貫串到尾的男主角特質,就是 "Baby steps to giant stride",透過不斷累積紮實每一小步,最後自然累積成巨大的成果。

因為這種特性,所以能夠感激每一小步的進展,並相信這每一小步終究會使我們達到心中的目標,就很重要。如果我們只關注我們是否已經達到設定的目標,就會忽略這每一小步的重要性,就算有一些小進展,也不會感到開心或有趣,這種心態就是上面提到的第一張陷阱卡 - "找到對的道路是必須的"。

如果能夠不要管距離事情做出來還有多遠,而是多去感受每一步進展帶來的喜悅、觀察你進展的一小步還可以應用在哪些地方、多得到了哪些感受跟體驗,學習就會變得更加有趣。(像對我來說,進展的一小步常常可以寫成一篇文章分享,例如這篇就是我想通往專家之路的一小步,但裡面的體悟已經可以應用在很多地方,甚至可以分享出來幫助更多人)

好玩學習的充分條件三 - 常常關注自己的狀態,已經在勉強學習就先停

大家不知道有沒有經歷過很累或很懶得學習的狀態?如果有,那可能就是你的心(或說是本能)在跟你說話了,如果這時硬逼自己學習,就會讓學習這件事的討厭分數增加,以後就很容易無意識地排斥學習。但,學習是無辜的,你討厭的其實是 "不想學卻硬逼自己學習的狀態",而不是 "學習"。區分出這兩者非常重要。

所以,如果能夠常常觀察自己的狀態,發現稍微有點不想學,或甚至還沒到不想學,只是學習的動力跟好玩感降到一個程度,就可以先停一下,可以休息、稍微起來動一動,來轉換自己的狀態,等又想學習之後再回來。做一陣子後,你會開始發現,學習時的心情是完全不同的。因為你只讓自己在能夠享受時學習,所以學習的好感分數就會慢慢上升,往好玩學習的方向一步步前進。

這個概念在網球優等生裡面也有提到,而且我覺得講得很棒:

錯誤使用理性(或是腦袋)來逼迫自己學,是讓學習變成不好玩的開端,只要能正確使用,理性就很有用。因為我們的本能未必都完全正確、也常會想偷懶,所以如果能用理性指導本能去感受正確的方向(again,不逼迫),就能讓腦袋跟心更好地互相配合,發揮各自的威力!

延伸閱讀四擴展了這邊的論述,大家可以參考。

好玩學習的充分條件四 - 接受有時會不那麼好玩

就算你已經讓自己滿足了上面提到的幾個條件,但可能還是會有沒那麼好玩的時刻。當這種時候來臨,可以先告訴自己,沒那麼好玩也沒關係。就算不好玩,你花在學習上的每一分時間,都不可能會是完全的浪費,也許效率很低,但你一定或多或少有吸收一點什麼,所以也不需要對自己太過嚴格,反而把好玩學習變得不好玩。(此時應該想的,反而是可以開始改進自己的學習技巧,下面的心、技、體部分會說明)

比達成目標更重要的事 - 建立好的學習系統(or 習慣)

講到這邊,我已經提到了幾個享受學習的重點,如果能夠在學習過程中靈活運用上面的心態,我相信就會開始慢慢變得有趣。不過,這些心態如果只能持續一天,那也沒有多大作用,如果你開始感受到學習變好玩了,就可以開始想想看怎麼建立好的習慣體系,讓好玩學習可以融入習慣,你也就能夠越學越開心。

關於建立好習慣,我極力推薦延伸閱讀二的 原子習慣:細微改變帶來巨大成就的實證法則,這本書裡面有很多好觀念值得學習跟實際應用。我覺得最棒的地方是,裡面有很多方法是從對習慣的認知著手,透過建立觀念,讓培養習慣更容易,不是只丟給你一堆方法。舉個例子(下圖出自博客來的試閱):

如果你已經可以靈活運用這篇文章提到的心態,還想更進一步成長,可以看看這本書。

擴展思考維度 - 心、技、體

最後一段,我想提一下我從火之丸相撲裡面學到的概念 - 心、技、體,因為這三者的累積都對學習能否好玩很有關係。

這篇文章著重在講 "心"。但不能只知道 "心" 的重要,所以我特別寫這一段來擴展思考維度。舉例來說,如果你身體很疲勞或在生病很不舒服,你就算有上面的心態也難以學習(這時就要去改進 "體");或就算你身體很健康、心態也不錯,但如果你沒有學習技巧(例如老是從太難的教材開始學,卻在發現學習已經受阻時還不懂找其他資源),也會一直無法進展,只是一直在亂探索,最後還是會因為無法把東西學起來、應用,導致不想學習(就需要去改進 "技")。

不過 "體" 跟 "技" 都可以各自再開一篇文章好好來探討,我在這只想說,如果你發現自己的學習已經不是困在心態的問題,那就往加強 "體" 跟 "技" 這兩個層面去觀察跟思考吧!

總結

今天分享了我對進入玩家心態學習、讓學習過程變得好玩的心得,希望看完文章的你們,可以把上面的學習心態當成一個 "可能更好的心態的起點",畢竟這也只是我向別人學習、還有自己實際體驗的總結,我也可能還遺漏一些重要的心態。如果你能把上面的分享當成參考,採納對你有用的點、改進對你來說不適用的點,你才能真正掌握如何自己讓學習變好玩。

所以我鼓勵大家多多觀察,了解自己在學習的哪些時刻感到開心(還有原因是為什麼)、在哪些時刻感到厭煩(原因又是什麼),放大那些開心的時刻、減少那些厭煩的時刻,屬於你自己、獨一無二的好玩學習方法就會浮現!

祝大家都找到心中那熱血學習的自己。如果你讓學習變得很好玩,那就算想停都停不下來!如果你的學習停不下來,那成為專家就指日可待!

最後,雖然已經追不太下去,還是放個小時候最愛的海賊片段:

延伸閱讀

  1. 食戟之靈第 168 回 - 170 回
  2. 原子習慣:細微改變帶來巨大成就的實證法則
  3. 不要對世界失去好奇心!葉丙成:人生就像投資,不是贏在18歲就好
  4. 最高效率的領導者都是最會休息的人
  5. Learning a language? Speak it like you’re playing a video game
#Self-improvement






Related Posts

[22] 強制轉型 - ToBoolean、Falsy、Truthy

[22] 強制轉型 - ToBoolean、Falsy、Truthy

[ week 2 ]  來打造 JaveScript 的基礎 - 變數 與 型別

[ week 2 ] 來打造 JaveScript 的基礎 - 變數 與 型別

[Day05]: Docker Network

[Day05]: Docker Network




Sponsored



Comments