跳脫盲點,學習如何「系統性」思考問題

Photo by Ben White on Unsplash

跳脫盲點,學習如何「系統性」思考問題

踏入後端,脫離瀏覽器的開發環境,正式在 Node.js 的環境下寫程式,使用 Express 框架和各種套件,跟著助教實作各種專案,這邊 npm install 套件、那邊 require 套件進來,隨著專案規模越來越大,使用到的套件越來越多,檔案越來越大,我越寫越心虛,跟著教案做得出些什麼,卻不理解每一行程式碼在做些什麼?為什麼這裡可以這樣寫?這一行程式碼執行完又產生了什麼?想用 console.log() 印出什麼,又不知道 () 內該放入什麼?

越來越多疑問不斷累積,在專案加上操作資料庫的部分後,崩潰的感覺湧到快要潰堤,看了官方文件後,疑問越來越多,而此時的自己已經不是寫程式的菜鳥,知道應該自己做過功課再來提問。但是,什麼都看不懂,更不知道該如何問起?I don't know what I don't know!

於是,我開始做各種嘗試,讓自己跳脫這種崩潰感

第一步:在每一份作業中提問

反正什麼都看不懂,即使作業寫得出來,也不知道自己在寫什麼,那就就當下最疑惑的問題來向助教提問吧!

  • 作法:就當下卡住的部分來提問
  • 結果:助教就提問內容回答,透過助教的回答內容,發現自己卡住的部分是框架和套件的語法,以及 CRUD
  • 修正方向:重新理解 CRUD 和重構作業中的路由
  • 修正結果:做完之後依然迷惘

第二步:以為框架和套件都有自己的特殊語法

這時候的我,以為框架和套件都有屬於自己的一種語言,就像這個世界上存在英文、德文、法文、中文....等各種語言,所以要去熟悉這些工具,就要去熟悉他們各自獨特的語言

  • 作法:
    1. 在週記回顧中寫下以上的心得,再問助教該如何熟悉這些特殊語言?
    2. 像學習教練求助,透過對話釐清自己的盲點,和尋求建議
  • 結果:
    1. 助教一看就知道我遇到的問題是什麼,貼給我參考文章,並引導我該朝什麼方向思考,所謂給魚不如給釣竿教他如何釣魚,助教並沒有直接說出我的盲點,而是用引導的方式讓我反思和釐清問題。
    2. 透過跟學習教練的對話,發現自己習慣以「全觀」視角在學習,只是會用套件語法對我來說並不是真的學會,還想更深入知道為什麼某個套件的語法能夠這樣被使用?又是怎麼被打造出來的?
  • 修正方向:看助教寫的文章,尤其是講述「系統性思考」的文章,反思自己是否踏進了「見樹不見林」的雷區?
  • 修正結果:好像看見一絲曙光,開始退一步思考這些工具的共同特徵是什麼?是 Node.js!再退一步,Node.js 根基是什麼?噢!是 JavaScript!

第三步:與其盲目寫程式,不如先停下來好好理解 JavaScript 的本質

走到這一步,我停下剩下的實作專案,用大約一週的時間,好好去學習實作課程中所缺少的原理的部分

  • 作法:在 Udemy 上看 JavaScript 課程,從最基本的型別到 Closures、Prototypes這些概念,到 OOP & FP 架構,用一週的時間去理解這個程式語言的基本特性和大致上能夠怎麼應用
  • 結果:
    1. 用英文去理解比用中文理解容易很多,因為這個語言本來就是講英文的人打造出來的,以原文去理解,很多專有名詞、概念和解釋都清晰很多
    2. 知道這些概念並不等於會使用這個語言,但不清楚原理卻一直盲目使用也很危險,概念是讓人更能看懂程式架構,看得懂大致的架構,對於理解套件怎麼被使用的確有幫助

透過一步一步退後看待問題,幫助我從在一個點(套件的語法)上鑽牛角尖,到能夠比較快看懂整個脈絡,至少不知道這個套件語法的時候,能夠從 node_modules 裡,看懂一些原始碼,即使目前還不會 TypeScript ,也能大致從原始碼中找到一些端倪,猜到這個 method 為什麼這樣使用。

總結:問問題也是一種學習管道

初學者很容易遇到「不知道該如何提問」的窘境,有時候是不知道自己的問題點在哪?或是沒有意識到自己在某個部分還不理解;稍微學過一丁點基礎之後,又變成不知道自己要做到什麼程度才能提問?

如果是初學者,看過大致上的理論後,在實作中還是會卡住,卡住的點就是可以提問的地方;稍微學過一點基礎的話,上網找資料,看了幾篇文章之後,還是無法理解,這時候建議設個停損點,趕快找人問。

對於「不知道該自己做到什麼程度才能提問?」,以下是我的恩師的回答:

「其實學習本身就是一個提問的開始。只要有機會就應該提問,不管這個問題有多蠢。當然如果被詢問的對象被問太多次,沒那麼多時間回應你,就是不斷的詢問不同的人,其實得到的回應也不完全相同,也可以自己做一個比較,找到自己最適合的solution。」

一開始問問題很容易長篇大論描述問題,又提不到重點,或是看完、聽完前輩回答之後,還是不知道對方在說什麼,這時候思考一下,或是讀完對方提供的參考資料,再就對方的回答和資料內不理解部分提問。來回提問過程中,不僅能學習到這位前輩的思考脈絡、他如何拆解這個問題,也能從對方提供資料中抓到一些關鍵字。

最後,千萬不要忘記對引導和幫助自己的導師和前輩表達感謝,並且記得對方的幫助,在自己有能力的時候也給予新人幫助和鼓勵,把良好的團隊文化延續下去!

學無止境,千萬不要害怕遇到問題,更不要害怕自己問題這麼多,是不是學不會?No!No!No! 沒有學不會,只是「現在還不會」,只要肯問肯學,絕對學得會!

特別感謝我的恩師 Ivan 老師 medium iT 邦幫忙部落格