ADZ 學習筆記

Ruby/Rails, Startup, Life

有效率學習一門技術的訣竅 - 突破靠想像力

| Comments

這裏說的想像力一種把某件事想成某個樣子的能力,在解決問題上扮演著「如何簡化、或複雜化問題」的關鍵,而在學習上也影響著效率、和理解抽象的知識的能力。

學習歸零

曾經有一個程式設計題目如下:

# input:
3

# ouput:

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

一開始解題的思路是,我要想辦法先從 input 3 得到寬高 5,再用兩層回圈去處理 offset。硬幹出第一個版本後一直在想有沒有辦法讓 offset 的處理變簡單。

過了幾個禮拜後想到一種方式來實現,就是「把這個圖案想成金字塔、數字代表高度、樓層」用這概念來想,不用處理那麼多 offset,概念上也變得簡單多了,實作上只需要三層迴圈:一層迴圈跑樓層 (1..3)、第二層跑樓層的寬、第三層跑樓層的高,過程用 override 的方式 蓋上去

雖然說第二個版本的效能會比較差,但如果面對的問題是複雜到無法寫出第一種答案的情況,第二個版本的問題理解方式就派上用場了。

這也能說明為什麼有些人寫程式一直很順利,有些人會一直碰到一些奇怪的問題,有時候我們常常會卡在一個觀點,其實放棄它只需要一個念頭,從0開始重新認識問題。

把抽象概念朔型

我還記得好幾年前聽一些前輩在談論怎麼設計系統,內容充斥著專有名詞、抽象概念,那時的我聽起來很吃力,也很好奇他們真的都懂對方在說什麼嗎?還是只是敷衍再隨便聊聊。不過近幾年我也變成那樣子的人了,其中最大的改變是,我對那些抽象事物的了解已經在腦中有非常清楚的畫面。

當我能夠想像越多抽象的東西例如:layer, queue, chain ... etc,有種被打通任督二脈的感覺,我開始能理解 framework 或 ORM 怎麼被設計、也開始懂得欣賞別人的程式碼,直到最近這一年我才開始覺得我真正開始做程式 設計 了。

小訣竅

剛剛說的想像力不是天馬行空式的,你可以透過 更小的學習範圍更大量練習 去體驗你正在學的東西,過程中你可以試著把學到的東西跟你以前學過的東西、或現實生活中的經驗關連起來,並用很多不同觀點去看同一件事情。

系列文章

  1. 有效率學習一門技術的訣竅 - 閱讀:練習 (1:9)
  2. 有效率學習一門技術的訣竅 - 讓需求引導學習
  3. 有效率學習一門技術的訣竅 - 避開學習障礙
  4. 有效率學習一門技術的訣竅 - 當個容易被幫助的人
  5. 有效率學習一門技術的訣竅 - 突破靠想像力

Comments

comments powered by Disqus