最近幾年程式設計真是個越來越熱門的行業,除了業界的需求越來越大之外,學界也大力推廣學程式的好處 — 可以訓練邏輯思維。所以有些國家就打算以訓練學生邏輯思維為由,要求國中甚至國小的小孩,必須開始學習程式設計。Scratch就是一種常被用來做程式基礎教學的程式語言。
老實說我不是很認同。我想請讀者做一件事情,閉上眼睛想想"軟體工程師"在你心中的樣子。雖然刻板印象不是件好事,不過大部份的工程師都給人不善言詞、不懂人情世故的印像。對我來說,程式設計的教育就像是在陪養木頭人一樣。我不是反對學程式,畢竟我自己就是一個熱愛寫程式的工程師。我只是覺得,對於有興趣的孩子提早學習是可以的,但不需要強迫所有人學習,因為我認為程式的邏輯跟生活上的邏輯(以下簡稱"生活邏輯")是不太一樣的東西,而且每個人都應該要會的是生活邏輯而非程式。(延伸閱讀:[曹家榮] 別搞錯方向!程式設計不是未來教育的核心)
程式可以訓練邏輯,有了邏輯不就能用在生活上了嗎?有個理論叫「學習遷移(Transfer of learning)」意思是說我有沒有辦法把學習到的東西套用在不同的情境狀態下。例如我被燒開的水燙傷,是否就知道火爐的火是燙的(類似舉一反三)。所以即使是程式邏輯很好的工程師也有可能生活邏輯不好,這可能是他沒能進行學習遷移造成的。為什麼程式邏輯遷移到生活邏輯會有困難?你們知道嗎?程式的邏輯是"看"得見的,因為程式碼就寫在那裡,而且可以利用工具去看執行的狀況和結果。然而生活的邏輯卻是看不見的。當你已經習慣這種看得見的邏輯時,有辦法去思考那些看不見的邏輯嗎?況且程式邏輯偏向數學,一加一只會等於二,而生活的邏輯可能連幾加幾都判斷不出來了,更別提能夠推論得出二的結果。另一方面,程式的世界就只在小小的螢幕當中,生活的邏輯卻是大到無邊無際,這些差異都是造成程式邏輯無法遷移到生活的原因。
如果我們的目標是提升全民的生活邏輯(對周遭人事物的邏輯),為什麼不用比較接近生活的方法訓練,而要強迫所有人用學程式的方式訓練呢?如果所有工程師的生活邏輯都很好,還會有刻板印象存在嗎?可惜我到目前為止沒看到多少人推廣非程式的邏輯訓練法,所以決定試著自己整理、歸納出一些不用學程式也能訓練邏輯思維的方法。
玩遊戲訓練邏輯推理
如果你是個自認邏輯思維不太好的新手,不妨從遊戲開始你的邏輯訓練。有一些遊戲是要玩家進行邏輯推理才能夠過關的,例如我很喜歡的桌遊「阿瓦隆」就是這樣的遊戲,玩家必須找到潛藏在身邊的同伴與敵人,才有機會獲得勝利。透過遊戲訓練是比較好入門的方式,但可能不適合作為唯一的方式。畢竟遊戲原本就有它的規則,也就是個受限的環境,如果是以提升生活邏輯為目標,這當然是不太足夠的。
學校國文課一直被刪,但其實寫作文有助於培養邏輯思維
我不知道有多少工程師跟我一樣連話都講不好。說話之前如果能夠先組織架構好,聽的人會比較能夠快速理解。不過講話有時要考驗即時的反應能力,而且無法回顧、反覆檢示修正,因此寫文章才是能夠慢慢整理思緒,有條理描述的一種訓練方式。就像寫程式一樣,把原本看不見的邏輯變成看得見的文字,才比較好檢示與掌握。在我喜歡的部落格《大人學》中,Joe也認為寫文章是培養邏輯思維的一種好方法。不過當然,文章和口語還是有落差的。即使到了現在,我身為一個軟體工程師也寫過不少文章,還是會被外子笑"不會講話"。我想主要原因是我想的慢,或是根本沒想就講出去了,不過這就跟邏輯沒有什麼關係。
不會寫文章,那就看別人的文章吧
沒有人一開始就能做好所有的事情,所以如果寫不好文章也不必覺得氣餒。小時候寫作文,老師都會教我們「起、承、轉、合」,這就是一種邏輯。寫文章的第一步是擬定大綱,因此要去看一篇文章的邏輯,就是把它的大綱摘要出來,看看別人的邏輯是什麼,想想如果是自己會怎麼寫。
以本篇文章為例,第一段先簡單帶出邏輯思維受到重視的程度、一般認為要學程式才能訓練邏輯思維;第二至四段表示反對的看法,並且說明我為什麼反對。我的說明是先從對工程師的刻板印象開始,告訴大家程式邏輯和生活邏輯是不一樣的;如果讀者以為程式好的人生活邏輯就好,那是錯誤的觀念,因為如果事實如此,刻板印象可能就不會成立,並且點出程式與生活邏輯的差異。接著我才開始本篇的重點,列舉我想到的訓練方式,並且每個項目都有各自的說明。最後當然就是本篇的結尾。
我們寫文章的目的是要訓練邏輯思考,所以重點是要有邏輯地表達自己的想法,而不是運用各種文學修詞。不瞞各位,國文是我求學階段最差的科目,所以為了逃避這些基礎學科,才跑去念技職學校。雖然沒有能力,但是我喜歡寫作,希望自己能寫好文章,所以從2002年開始斷斷續續練習寫一些東西,才會有今天你看到的各種長篇大論的文章。只要我們實際去做,就能夠慢慢進步,就怕你不做,永遠沒有開始的一天。
請用正確的語言描述
我在辦公室的隔壁坐了一位前端設計師,因為從前念的是美容,才剛接觸程式沒多久,所以邏輯不是很好。不過她很有心想要學程式,因此有需要的時候,就會請教我們程式的問題。我跟其它同事都抱持著給她魚吃不如教她捕魚的心態,因此不會立刻告訴她答案,而是希望盡量用引導的方式,請她自己把答案說出來。這個時候我注意到,我和同事都會對她說:「請用正確的語言描述」。程式裡有種東西叫"變數",類似數學裡的x和y,變數這種東西是程式設計師自己定義的,也就是說每個變數都有它的意義、作用存在。同樣的,每一行程式碼都有一個要被執行的"理由",如果沒有,那它就不應該存在。所以我們就會請她試著描述這些內容。
為什麼要強調"正確"呢,因為如果不正確的話,邏輯可能是不通的。有一次我在看同事的程式碼,影片播放完成之後,他做一個動作寫"重播",我說播完了為什麼要重播呢?結果搞了半天才知道他是顯示重播按鈕,而不是自動重播(他自己都忘記了)。這就是語意不正確的問題,如果這件事是發生在文件上,以後的設計師都以為影片播放完真的要重播才行。也就是說錯誤的語言可能會造成邏輯卡關,而且也很容易造成別人的誤解。
想要檢視自己的語意邏輯是否正確,有幾種簡單的方式。如果你有打算寫文章,在撰寫完成之後,請放置幾天甚至幾個月再回頭來看,這樣比較能找出問題。我發現有些人的狀況是這樣,想的跟說的不一樣,或是聽到的跟理解的會不一樣。所以在與人互動的過程中,你可以把對方的話用自己的理解再重新描述給對方聽,這樣除了可以確認你的理解是否正確,也能夠驗證你的邏輯是否能讓對方理解。如果對方跟你很熟,你也可以請對方用他的理解來描述你說的話,這樣才會知道自己原本說的話有沒有瑕疵。不過練習的對象最好選擇邏輯好的人,不然可能會搞不清楚該如何調整。
尋找適合的框架
前面提到寫文章有起承轉合,這就是一種框架。框架可以引導我們思考的方向,進行有邏輯性,甚至系統性的思考。例如「九宮格曼陀羅思考法」就是一種幫助我們思考的框架,如果真的不知道該如何進行邏輯思考的人,從框架著手也是一個好辦法。
用科學方法訓練你的生活邏輯
STEM(科學、技術、工程、數學)也是教育界很熱門的學習主題,近年來還加上了藝術的項目,變成STEAM,除了強調創意之外,也希望未來的科技能夠融合更多"人"的溫度。既然預期未來人工智慧可以做許多原本人類做的事,那麼這些與人相關的事物才是我們人類可以發揮價值的地方。
我認為跟生活邏輯比較有關的還是在科學上面。我們都學過最基礎的科學方法是觀察、假設、實驗、結論,這是科學研究的框架,當然也有它自己的科學邏輯在。如果應用到生活邏輯,我們可能無法實驗,因此這個框架就變成是觀察、推論、驗證結果。透過這樣的流程可以訓練我們生活邏輯的思考力。前面提到你如何判斷目前的狀況是一,靠的就是你的觀察力和判斷力,而你要預測生活上的一加一會等於二,這就是一種邏輯推論,最後驗證看你的推論是否正確。
這樣子的一個循環就會成為你的經驗,幫助你在下一次做出更好的選擇。具備高度生活邏輯的人因為可以做出有效的推論,所以可以從較少的經歷產生更多的經驗,很快就能從生活中學到教訓,因為他們很清楚整件事情的因果關係是什麼。除此之外,也比較容易從書籍或別人的經驗中學習到教訓,這些東西會變成類似數學般的公式存在他們的腦海裡,如果有辦法提取出來將它系統化,就會變成所謂的專家系統。
進行批判性思考的訓練
邏輯思考可以說是批判性思考的基礎,所以在做批判性思考訓練時,也會同時訓練邏輯思維。我念研究所時接觸到的大部份都是透過科學探究的方法來訓練,老師會針對一些議題提出問題,再請同學搜集資料、思考過後回答問題。這其實也是一種框架,只是針對特定主題,所以每個問題項目可以更貼近議題的核心。設計框架是有難度的,不是每個人都有辦法做到,所以這種方式通常必須要上課才有辦法達成。
持續多看、多想
每個人的生活情境不一樣,實在很難一一列舉,只能告訴大家持續多看、多想就對了。有次我的同事天真地問我說,能不能把我的iPad也設定他的手指解鎖?因為工作需要,他常常跟我借私人的iPad來測式,我猜他每借一次,這個念頭就在他腦海裡浮現一次,直到忍不住了才向我詢問。問題是,稍微按照正常的邏輯想一下就知道這是不可能的事情,怎麼會問出口呢?很明顯就是他根本沒有想。所以你說工程師的生活邏輯一定好嗎?這種事不用工程師也能知道答案的吧!
生活中大大小小的事情都可以運用邏輯思考,包括你的個人決策。如果你的行為符合你的目標,那麼達成目標的可能性才會提升,而評估的方式就可以運用邏輯思考。我有個朋友想存錢和女友結婚,女方也同意了,卻還是要求假日常常要出門住宿遊玩,害男方存不到錢只好說分手。當然會走到分手可能是溝通不良造成的,我們不是當事人無法評論誰對誰錯,但這件事就是因為目標與行動不符合邏輯所導致的失敗。
有位工程師單相思一位心儀的女性,以為送花送禮當個工具人就能夠獲得對方的青睞,卻遲遲沒有開花結果。他忽略了一個基本邏輯,你會對來家裡修繕的水電工,甚至是僕人產生感情嗎?當然是不會!除非你本來就喜歡對方。所以沒有結果也是理所當然的。如果你想要成為對方生命中的男主角,那就要想想自己是否有做出身為一個男主角該做的事?如果沒有,當不成男主角也是很正常的,這才是符合邏輯的結果,不要被YY小說誤導了。
如果你問我生活邏輯好的人程式邏輯一定好嗎?我的答案是否定的,因為你騎機車會甩尾不代表你會用微積分算甩尾,頂多用來評估你是否有潛力。生活邏輯不好的工程師也不必覺得氣餒,畢竟你們的邏輯其實是好的,只是還轉不過來;跟邏輯不好的人相比,只差臨門一角而已。邏輯思維的訓練只要肯做就一定會進步,而且不會因為疏於練習就退步,算是投資報酬率很好的學習項目。以上是我以自己的經驗來提供建議,希望本篇文章對於不想學程式但想培養邏輯思維的人有所幫助。