跳到主要內容

想學寫程式的我,是否太笨了?(探討先天條件 v.s. 後天努力)



by Vanessa Wang    歡迎支持我的臉書專頁:【工程師作家的轉行人生


學寫程式以來,我最常 google 的問題不是如何運用資料庫結構,也不是哪個程式語言有什麼樣的特性。我最常查詢的問題是 “Am I too stupid to learn how to code?” (以我的智商,可以學得起來怎麼寫程式嗎?)

寫程式所要運用的邏輯思考方式,常讓我感到很挫折,因為對我而言,要以電腦、機器的角度思考問題非常不直覺。舉個例子來說,假如今天有兩個單字: flower 與 flyer,你問我它們的差別在哪裡,我馬上可以跟你說 fl 一樣、最後的 er 也一樣,只有中間的字母 “ow” 跟 “y” 不同。但我為什麼可以這麼快看出這個差別?當我要寫程式命令電腦做和我一樣的事情,去判別兩個英文單字之間的差別時,我發現人腦一秒鐘可以完成的事情,要把它分解成許多易懂的邏輯步驟說明給機器聽,是多麼奇怪的事。

每當遇到這種挫折,我不禁會想到我從小到大的數理能力,到底夠不夠用?我不是那種看到數學就害怕的人,但距離數理資優班蠻遙遠的。這時候我就會轉頭問我那位靠自學成為軟體工程師的老公,「你覺得是不是要很聰明的人,才有辦法學會怎麼寫程式?」

我的老公是一個很自律、很努力的人,因此他千遍一律的答案都是「不用。就是要多練習而已。」

但我還是難以被說服。在我的觀念裡,一個人的天資是非常重要的,而我明白我的天資落在哪裡。我從小就很喜歡報考各種智力測驗,因此我非常清楚我不是天才。

我們這輩子能做什麼樣的事情,是否天生就注定好了?像「美麗新世界」那本科幻小說描述的一樣,是否只有基因等級 A 的人才配做最高級的工作、基因等級 B的人做次重要的工作、至於基因等級落在 F的人只能做最低階的工作?

第一次認識到「固定型思維」與 「成長型思維」 這兩個名詞,是在 Angela Duckworth 的書 【恆毅力】(Grit) 裡頭。簡單而言,「固定型思維」主張人的天份是與生俱來、無法改變的:你天生有音樂細胞就是有音樂細胞,沒有的話最好從一開始就別浪費時間碰樂器。「成長型思維」主張的恰恰相反。成長型思維的世界裡,不但勤能補拙,而且勤奮還能讓一個人從本質上變得「沒那麼笨拙」。

認識「固定型思維」與 「成長型思維」的差別後,我發現我是 100% 相信「固定型思維」的。這樣的價值觀,也許來自於台灣的升學制度,讓我們從小天天接受「排名」的洗禮。在我的成長過程中,考試一分的差別甚至決定了一個學生可以在班上坐的位置:成績愈前面的人,有優先權決定他的座位。

有「固定型思維」的價值觀,也許也來自我的家庭。

我媽媽是一個很聰明的人。即使我的外婆現在已經90歲了,她還是逢人就要講一遍我媽媽小時候的豐功偉業。故事是這樣的:我媽媽在讀北一女時,身體很不好,所以曠課比率超過學校最高容許的三分之二。我的外婆覺得很不好意思,就到學校跟校長道歉,並替我媽媽申請休學。結果校長不但沒有要我媽媽休學,還跟我外婆說「喔!妳的女兒那麼優秀,她如果偶爾心情好,來露個臉就可以了!她都不來也沒有關係!」

還有另外一個關於我媽的傳說,是連遠親逢年過節都要提的:我媽小時候很喜歡看電視;她不願意錯過任何她喜歡看的節目。當親戚到我媽家做客的時候,我媽總是坐在客廳看電視。但是廣告時間一到,我媽就突然從沙發上消失了。親戚很納悶,我媽難道有隱身術嗎?這時才發現一個小女孩躲在書桌下背書。聽說我媽所有的學習,都發生在節目廣告時間,但她還是一路金榜題名。

在我們家,「聰明」是對一個人最高的稱讚。相對的,「努力」幾乎是一個負面的形容詞,就像是說「唉!那個人頭腦不怎麼樣,所以他只好努力了。」

高中的時候,有一次我偷聽到我媽和我弟弟暗中進行的對話。我弟說:「我覺得阿姊應該算蠻聰明的,會考上不錯的大學吧?」我媽則回答:「會嗎?可是她每天花好多時間讀書。如果她真的很聰明,應該不需要花那麼多時間吧?」聽到這番話,更加深了我對於天才型人物的崇拜,以及對於自己被歸類為「十年寒窗苦讀型」人的遺憾。我甚至懷疑,那我努力下去還有什麼意義嗎?

「固定型思維」與 「成長型思維」的心理學研究指出,大人稱讚孩子所用的字眼,會大大地影響小孩認為天資重要或是努力重要。孩子做出一件很棒的事情時,你跟他說「哇!你真聰明!」,以及你跟他說「很棒喔!再努力一點會更棒!」這兩種說法雖然聽起來都很正面,但會教育出截然不同類型的人。

我老公就是非常「成長型思維」的人;他覺得後天努力比什麼都重要。跟我同樣生長在聯考制度下的他,為什麼能有這樣正面的想法,我是不太懂,但跟他相處那麼多年下來,我漸漸理解「努力」能為一個人帶來的改變。

我老公深信一萬小時定律,也就是,要成為某個領域的專家,你至少得付出一萬個小時在這件事情上面。於是他花了許多年的時間,不疾不徐地累積那學寫程式的一萬個小時:利用早起半小時的空檔、睡前一小時的空閒、我在滑手機、看電視的時間。他為我證明了一件事,那就是純靠天資,一個人能走的路程是有限的;但靠努力,我們的未來永遠有無限的希望和可能。

你是「固定型思維」的人還是 「成長型思維」的人呢?



留言

  1. 這很像火影忍者裡面的小李跟寧次
    一個是努力型的天才一個是天生型的天才
    但是最後他們都專精了自己的領域

    回覆刪除
  2. 哇!看來我得看一下火影忍者!

    回覆刪除
  3. 沒有天資,努力錯了方向也是枉然!
    其實,限縮在一個小小的領域來討論天生資質對比後天努力確實比較容易討論出個想法。但是擴大到各個領域後,很顯然,資質和努力都很重要!
    我小時候的夢想是進NBA,越長大就越清楚,這種事情在怎麼努力都沒用!
    同樣的,台灣有多少孩子長期學音樂?從幼稚園、國小、國中到大學,到出社會,有多少人能真的進到交響樂團呢?又有多少鋼琴天才的天分,能夠讓他們的琴技達到朗朗這樣的大師級水準呢?
    有很多人,真的面對學校的基本課業,連融會貫通都很困難,你說他們怎麼可能靠後天努力而在用頭腦、用思維、用邏輯工作賺錢的領域有一點點的成就呢?
    這樣討論下來,就很顯而易見了吧?
    大部分人都說,寫程式最重要的是邏輯,我比較好奇,在台大,除了文學院,誰的邏輯算不好?只有天才、菁英與突出這三種吧!?否則怎麼可能考進台大呢?又怎麼可能能讀到工程學院的碩士呢?
    台大可算是最難進去的學校吧!若把清、交、成、台科大等名校算進來,那其他連中字輩的學校都考不進去的人呢?
    我不是要反駁後天努力沒有用,我只是想說,有很多偏頗的想法,其實根本無法套用到整個社會,獲所有的人。
    天才父母如果生下資質真的平庸的子女,那些子女的表現沒有突出,會不會被冠上「都不好好努力」的標籤呢?如果發生這種事,那真的人生就辛苦了!
    所謂一萬小時定律,真的是要看領域,對吧!甚至也要把「時間」、「金錢」和「 進步幅度」的投資報酬率考慮進來吧!有讀寫障礙的人,能夠去當作家、去當文字編輯嗎?或者去寫程式?
    又或者,美國加州可是全世界軟體科技的重鎮,說他第二,沒有其他城市敢說第一。這樣的話,投資時間與金錢在美國加州找軟體工程相關的工作,比起在其他城市,那時間投資報酬率,差很多吧!
    據我所知,光是美國企業在給台灣軟工程師的薪水就比在加州少很多。當然物價成本、房屋成本不一樣。但是在美國和在台灣寫程式薪水就是差一截,對吧!這些因素考慮進來的話,對很多人來說才是最真切的吧!
    如果認真花個三四年學技術,在台灣的薪水可以暴漲到年薪400萬,那很多人會很拚的吧!
    就我所知,台灣有些超級業務員、有些年輕的保險業處經理,年薪高達500萬左右,那些人可是拚得不得了吧!但是,台灣有多少厲害的軟體工程師年薪可以達到500萬呢?
    如果我真的傻傻地從國高中就為了成為職業籃球員而拼命,有可能進到NBA嗎?我知道還是可以啦!去當撿球員,或者去掃掃地!
    湖人隊現任主教練法蘭克·沃格爾就是個立志從事籃球運動相關的人,原本也想當一位球員,但是因為各種因素,他很聰明的「放棄」成為籃球球員,而是切入籃球教練這一塊。他也是花了大量的時間,才一步步從大學的助理教練到基天的湖人隊總教練。至於當前的薪水呢?估計是超過年薪500萬美金!
    如果在台灣做職業籃球教練的年薪可以達到台幣300萬(我猜是沒有啦!但我也沒有做過調查),那又會有多少人願意投入在籃球教練這個領域,投入一萬小時呢?我想情況是不一樣的吧!
    要準確的討論關於一萬小時定律,投資報酬率必須納入考量吧!否則,如果只是自己喜歡,那也無所謂一萬小時吧!我打電動的時間可能就接近一萬小時,很多人打籃球,從國小打到中年,也超過一萬小時了吧!然後呢?沒有然後吧!這麼看來,很多事情若納入綜合考量後,一萬小時定律也沒有這麼適合拿來作為天生資質對比後天努力了吧!

    結論:
    後天的努力要建立在天生資質之上,並且若是認真以待,是相關於工作、收入等等,則必須把環境、工作收入一起納進來考慮。否則,面對真實且多元的每個人生,片面討論哪種思考模式是較好,則不過流於閒聊,對人生的發展在面對大眾時,往往就無法帶來甚麼幫助了!

    回覆刪除

張貼留言

這個網誌中的熱門文章

什麼是 Assertiveness? 你容易被情感勒索嗎?

來到美國後我才第一次聽到 assertive 這個單字。美國人將 assertiveness 視為很高的美德,因為那代表一個人具備足夠的自信、溝通技巧、人際成熟度,以至於能夠堅定、清楚地表達自己想要的與不想要的,卻不會因此傷害他人或顯得傲慢、無禮或威脅他人。 Psychology Today  是這樣定義 assertiveness 的: “Assertiveness is a social skill that relies heavily on effective communication while simultaneously respecting the thoughts and wishes of others. People who are assertive clearly and respectfully communicate their wants, needs, positions, and boundaries to others.  Individuals who are high in assertiveness don't shy away from defending their points of view or goals, or from trying to influence others to see their side. They are open to both compliments and constructive criticism. ” (「Assertiveness 是一種社交技能,依靠的是在有效溝通的同時尊重他人的想法及需求。Assertive 的人能清楚且尊重他人地說明自己的需求、渴望、處境以及社交界線。擁有 assertive 特質的人會積極地說服他人了解自己的觀點,也積極地爭取、辯護自己的想法。他們對於讚美及有建設性地批評同樣地歡迎。」) 美國人如此看重、欣賞的 assertiveness 這個單字在中文卻似乎沒有相對應的翻譯。Google translate 將 assertive 翻成「斷言的、斷定的、過分自信的」;我覺得這些翻譯充滿負面含義且非常不正確。 生長在台灣的我,認為台灣確實沒有 assertiveness 的文化。我觀察到的台灣人,普遍很少直接說出自己想要什麼;如果說出來,

常聽人說「現在人人都要學會 coding」-- 但到底是要學什麼?從何開始?去哪裡學?

最近換工作,要學很多以前我沒用過的程式語言技術,像是 TypeScript, GraphQL, Relay 等等。於是我上網找了很多免費的、付費的教學影片,像是在 YouTube、 Udemy、PluralSight 等等平台。 但很多教學影片從製作至今已經過了兩三年甚至五六年。在軟體的世界,過一年就人事已非了,何況是現在去看 2016年的教學說明。許多 web packages 的版本在六年間已經從 version 5.x 跳到 18.x 之類的... 因此即便那個教學影片再怎樣的手把手教學都沒有用。資訊已經完全過時。 軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。 軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。 許多人常萌生要自學 coding的念頭,但因為不得其門而入,一不小心熱情就會澆熄。身為一個自學 coding轉行當軟體工程師的人,我理解這種感覺。我們身在一個資訊爆炸的時代,但資訊量太大,找到對自己有用的教學資源其實就是自學最困難的一步。 很多人想到要學 coding,會想「課程會不會很貴?」「會不會很難?」「會不會需要花很久的時間?」其實這些問題都問錯了。自學 Coding是個知難行易的學問;如果知道怎麼找自學的資源,不用花多少錢甚至免費就能達成。如果找到對症下藥、適合自己的資源,認真跟著看跟著做也不會難上手。但如何找到那個沒有過時、資訊正確又適合自己的課程?很多人花了大把時間、大把金錢就卡在這個第一步。 我舉一個生活化的例子你就懂了。Ikea 的傢俱你說難組嗎?其實一點都不難,但先決條件是 Ikea的說明文件非常好懂、資訊正確,而 Ikea 家具的品管做得不錯,大部分我們買回家的包裝裡頭零件都正確,因此照著說明書一步一步完成不難還非常有成就感。 但我們也都買過很爛的家具組:說明書沒人看得懂、裡頭的零件缺一大堆,甚至連家具的裁切、材料本身都有問題,大小根本組不起來。不然就是說明書過時了:零件已經改版本了,但說明書沒有更新。如果組一個家具要一直打給客服補貨、換貨,而且甚至問題在哪裡我們都推敲不出來、客服那頭沒人回答我們問題... 我們一定非常洩氣,很快就放棄組家具了。我們一定心想「組家具太難了!」 以網頁開發這塊的 coding來說,

是不是要「很聰明」、「數學很好」才能寫 code?

在我去年開始自學寫程式之前,我常常問是軟體工程師的朋友:「寫 code 很難吧?感覺超難懂。」在我心目中,寫 code 跟「數學能力」最有關係。 有趣的是,凡軟體工程師給我的回答,幾乎都一樣:「不會呀。學寫 code 就像學英文、日文那樣,就是一個語言。」 但我不是很能夠被這個答案說服,因為我以往跟程式語言的歷史告訴我,寫 code 是很困難的。我從高一第一次接觸 C++,到後來大一上土木工程系的必修課也是修 C++,經驗都蠻慘的,因此我就宣判自己沒有寫程式語言的天份。直到去年我從零開始再次透過線上課程自學寫 code,我才終於體會朋友們說的「學 code 就像學任何一個異國語言一樣」這句話的意思。 就從我高一的時候,第一次接觸程式語言的故事說起吧!那時是我學校的物理老師鼓勵我學程式語言的。他以完全免費的方式輔導我在假日期間學 C++,大概也是看到我對理工科有興趣,想說我可以自學寫一些小程式、搞不好還能參加什麼比賽之類的。於是他給我開了書單,讓我買了兩大本比字典還厚的 C、C++ 教學工具書(這種書現在還存在嗎?)來看,並且給我出功課,要我自己研究怎麼做出一些程式。 但朽木如我,一直碰壁,步步都感到挫折。那時的我,還不知道怎麼「自己找答案」,因此我心中一直期待老師可以好好示範他到底要我做什麼,因為我連他出的功課的題目、他到底想要我做些什麼我都不了解,也不知道從何問起。現在回想起來,老師心中一定是想:「這有什麼難的?自己看書,看不懂去找答案,不就這樣嗎?實際做做看、做不出來用力想直到做出來為止,難道還要手把手教學嗎?」但要知道那時候的我,雖然很喜歡數學、物理,理工能力不差,但「電腦」對我而言,就是一個玩接龍和踩地雷的工具,因此我連怎麼按照書上的說明去設定寫程式的環境都搞不清楚。 總之,第一次學寫程式的經驗,就在我心中無限多個黑人問號中無疾而終。直到上了大一又再次遇到 C++。 這次我以為我可以學得比較好,畢竟這是我第二次跟 C++ 碰面了。我們用的課本,再次是那種厚得令我第一天就把它切割成三分的工具書。但豈知第一堂課老師也就講完差不多三分之一本課本,一下就上完一、兩百頁的進度。 「等等啊!」我心中吶喊。第一堂課我們就從 Hello World 上到 for loop,而且是雙層的 for loop, 因為要用程式語言畫出這個形狀: