介紹兩種思維模式,以及寫程式所需的思維能力與鍛鍊方法。
許多人覺得寫程式很難(或是覺得理工科的人太直男),依照個人教學經驗來看,多數是沒有先建立起寫程式的邏輯思維。
一堆課程也是直接教你程式語法,好一點的會用實際案例帶你學習寫程式(有注重到應用面),但常常會忽略提及邏輯的重要性。雖然這個觀念已經融合在語法當中了,但對於無法建立起這套思考邏輯的人來說,就是會摸不著頭緒!
究竟為什麼會有這樣的思維落差?程式設計的邏輯思維又是什麼?又如何自行訓練?
PS. 這篇文不會提到任何程式語言的語法
邏輯思維 vs. 形象思維(Logical Thinking vs. Imagery Thinking)
以下以條列式,簡介兩個思維差別。
邏輯思維 Logical Thinking
- 又稱抽象思維
- 以科學抽象概念,對事實進行判斷、推理
- 線性的,一步一步推敲,較嚴謹
- 對「是」與「非」的概念需要分明,有所立論
形象思維 Imagery Thinking
- 又稱直感思維
- 人類以生俱來的,以具體形象來表示事物
- 非線性的,有時相當跳躍
- 粗略概括的,沒有「一定」的概念,常是「結合」的概念
不同思維的原因與影響性
關於這兩個思維更詳細的介紹,有興趣的朋友可以自行 Google 查閱。但以上看下來,或許你已經心裡有譜,為什麼邏輯性高的理工科常會被套上「直男」,而藝術家則常被說為「太讓人抓不住」的等等刻板印象了。
其實是因為在現今教育的訓練當中,假如一個人太過接受某一方的訓練方式,不知不覺中在日常生活裡的思維也會是那樣的。
而事實上,這兩種思維都相當重要!邏輯思維是現今科學發展、問題解決很重要的能力,可以說許多事物的運行建立在邏輯思維上;形象思維則是重要在人的本能上,你如果具有形象思維,與人溝通與生活或許會更游刃有餘,且提升到商業面來看,針對人的大腦去做設計也是常用的手段。
或許一個人天生哪種思維能力強一些,但透過後天訓練依舊能增強另一種思維能力。
程式設計的邏輯思維運用
個人認為程式設計的邏輯思維依序可以分為三種能力:拆解問題 → 個別攻破 → 組裝。
拆解問題與定義的能力
今天遇到一個問題,你都需要先拆解這個問題當中有哪些事情需要考慮,答案有可能是列舉,也有可能為「是」或「否」。
能夠知道答案的,就能在這步驟先定義下來,不能知道答案的,就丟到下個步驟。
舉個抽籤選同學上台報告的例子:
- 全部被抽的同學有誰?
- 抽幾個?
- 抽完要不要放回去?
- 要不要先把籤混一混再抽?
合理解決個別問題的能力
在拆解出有那些問題需要考慮之後,下一步你需要合理解決個別問題。
沿用上面的例子:
- 被抽的同學有誰?
- 這個問題可以在上一個步驟直接定義,也可以選擇在這裡定出解決方案
- 例如你想先選班級,再選某幾位同學,那這也是一種方法設計,同時又涵蓋上一步的定義的概念
- 抽幾個?
- 這個問題可以在上一個步驟直接定義,也可以選擇在這裡定出解決方案
- 例如你想先選抽幾個,再開始抽人物,那這也是一種方法設計,同時又涵蓋上一步的定義的概念
- 抽完要不要放回去?
- 假如要放回去,又可以分為每次抽完一個放回去,還是抽完多少個放回去?需要你來設計
- 舉一個可能不合理的解決方案:一下子抽一個就放回去,一下子抽三個才都放回去,對同學們公平嗎?
- 要不要先把籤混一混再抽?
- 直接開抽可能有樣本不均的問題
組裝解決步驟的能力
找出全部問題 → 定義完已知事項 → 解決完個別問題之後,最後就是如何組裝步驟的能力了。
就像組裝木頭家具的時候一樣,你不顧順序任一組裝,有時就會發生某個零件先拼上去,後面的零件卻被卡住進不去了的情況,這就是錯誤的組裝。
如何自行訓練?
遇到很多情況可以訓練自己畫流程圖(Flowcharts),流程圖的概念包含了拆解步驟、是「是」還是「非」的路徑該怎麼走等等的概念,等於上面三個能力的訓練。
流程圖的部分可以自行 Google 畫法與例子,但個人認為不用太在意制式化的表達,只要能達到邏輯訓練即可。除非你工作需求上需要你學會畫正規的 UML (Unified Modeling Language),通常軟體工程師比較有這方面的需求。
日常場景也可以使用,例如今天你有很多工作要處理,你需要先處理哪個任務?任務要如何處理?這些事情其實都需要邏輯思維。
這邊推薦很方便的線上繪圖工具:draw.io
以及有完整介紹正規流程圖中各種符號意義與教學的網站:Creately
後集待續與結語
有了邏輯思維之後,緊接著就可以認識寫程式時的必不可少的邏輯流程控制,不管是哪種程式語言,一定都有相對應的作法,將在未來為大家介紹。
不僅寫程式會運用到以上三種能力,從學生時代的組長/社長,到出社會的 PM(不論是 Product Manager, 還是 Project Manager)、商管人員、創業家等等,其實一直在訓練這些能力。邏輯思維的多層面運用,也是為什麼推崇邏輯教育的原因之一(但我不支持盲目推崇程式教育,還不如推哲學教育)。
但千萬要記住,不要只顧著增強邏輯思維,而忘了形象思維也是相當重要的,並沒有誰好誰不好這種事。