# Learning Something New

> 

Published: 2011-05-15
URL: http://cdn.kaochenlong.com/learning-something-new

---

最近寫不太出技術相關的東西，那就來個比較閒聊(嘴砲)性質的主題吧!

在第三回的 AS 讀書會上，maso 兄的 talk 裡的第一張投影片寫著：

&gt; “人活得好好的，幹嘛寫 app?”

當下我也覺得，真的，人活得好好的，幹嘛找一些自己不熟的新東西來砸自己的腳?

AS2 寫得好好的，幹嘛要學什麼 AS3？
Flash 寫得好好的，幹嘛要寫什麼 iOS app？
PHP 寫得好好的，幹嘛要學什麼 Ruby/Rails？

&lt;!-- more --&gt;

在 PTT 的 Flash 板，偶爾會有一些類似「我該學 AS3 嗎」的主題。當然這樣的主題還是有少數保守派的板友會建議學 AS2 就夠用啦，幹嘛學 AS3？我承認新的東西不一定就比較好，但當看到越來越多的 lib 都只做給 AS3 的時候，也應該要知道整個環境的是往哪邊走了。

Rails 3.1 將把 [CoffeeScript](http://jashkenas.github.com/coffee-script/) 跟 [Sass](http://sass-lang.com/) 加入變成預設支援；Adobe AIR 的效能越來越好，也許在不久的將來用來寫行動 app 還滿有搞頭的；聽說 GAE 也開始支援 Go 了..或語有人對新東西會反抗或害怕，但新的東西一直在一出來，世界一直在進步，抗拒前進的人等於是在退步的. 當你遇到新的問題的時候，雖然用舊的解決方法不見得差，但說不定新的解決可以更簡單、省力。

又剛好在某個國外的研討會上，學到了 `polyglot` 這個單字，在 wikipedia 上翻到的解釋是：

&gt; “Polyglot (person), someone who uses many languages”
&gt; - Wikipedia, [Polyglot](http://en.wikipedia.org/wiki/Polyglot)

想想其實寫程式的工程師挺苦命的，為了糊口飯吃，除了基本的中、英文外，還得學各式各樣的程式語言。

我認為的”學新東西”不是指電腦程式語言，而是指學習新東西的心態。學習本身有人覺得苦也有人覺得樂，有可能你的老闆發現最近寫水果 app 好像可以賺很大，所以也要求你去學會它來幫公司賺錢，這也許會有點苦；對我來說，我沒辦法一直用同一招闖江湖，不學新東西來刺激一下我會死，所以對我來說是樂遠大於苦。而且我又是個愛現的人，每當在學習的過程中有新的領悟的時候，那種高潮的感覺如果只有自己爽，是會得內傷的。引用朋友 [Jace 在噗浪上的一段話](http://www.plurk.com/p/c0sljf)：

&gt; “分享技術的目的，在於想讓大家都能感受到自己在瞭解一個新知識的那份感動...”
&gt; - [Jace](http://www.plurk.com/p/c0sljf)

不吐不快，差不多就是這個心境。

也許有人看了 [TIOBE](http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html) 的排行，會擔心是不是自己所學的東西已經不流行了、過時了。我倒是不會擔心這個問題，任何一門程式語言被發明一定都有它的原因。

知名的 Rubyist [Aaron Patterson](https://twitter.com/#!/tenderlove)在某次的 Ruby Conference 上也提到：

&gt; “no language is perfect, every great tool has it’s dark-side”

這世上沒有所謂的最強的程式語言，只有最適合的程式語言。

### 好處?

學新東西有什麼好處?

#### 你不知道你什麼時候會用到它

我自己的故事是，記得剛退伍的第一份工作是寫 ASP 的，但剛好公司某台重要的主機的作業系統是 Linux，在我到職的第一天就發生主機硬碟空間不夠的情形。但因為同事們大多較熟悉微軟的作業系統，對於發生的狀況不太知道該怎麼做。其實我只用了簡單的 tar 指令，把一些過期但又不能刪掉的檔案給壓縮起來，並把這些動作寫成某個 shell script 並排到 cronjob 裡，問題就暫時解決了，當下也給主管不錯的印象。

#### 當你學了不同的程式語言之後，可以同時也學到不同流派的想法

雖然程式語言免不了就是 if..else.., for loop, while loop 之類的東西，但在使用者的”文化”上就有不同的設計哲學。例如在 Ruby 裡有[Enumerator#each](http://www.ruby-doc.org/core/classes/Enumerator.html#M000300)可以用，for 跟 while 就變得很少用或幾乎不用。雖然 method 後面的小括號可有可無，但大部份的 ruby code 都是把它省略掉的。

Python 的程式碼強制縮排來取代大括號，讓程式碼看起來比較有一致性。如果你對 Python 有興趣，也可以進到 interpreter 裡輸入 `import this` 就可以看到 [The Zen of Python](http://www.python.org/dev/peps/pep-0020/)。

Perl 則是「TIMTOWTDI（There is more than one way to do it）」。

每個生態圈都有自己的文化，就跟小時候做的生物觀察的科學實驗一樣，觀察各個生態圈是很有趣的。

#### 跟著趨勢走，對自己的飯碗也許也是另一種保障

時代會變、技術會變，沒人知道明天會流行什麼。

#### 習慣新的東西，也會比較習慣新的狀況

簡單的說，你手上可以運用的籌碼越多，當遇到問題的時候就有更多種的解決辦法。

#### 更有自信

承上，你會知道遇到狀況的時候該用哪種工具來處理是最快最簡單的，可以把事情做得又快又好，自信心就會慢慢的建立起來了。

#### 有”活著”的感覺

古語說得好：「滾石不生苔」呀

#### 也許本來已經熟悉的 A，有可能會因為學會了 B 之後發現原來之前在 A 那邊有更好的解法

不同的語言帶來不同的思維，也許本來卡關很久的，用了別的思考方式一下子就解出來了。

### 有困難?

好啦，用講的誰都會，但做起來就是有困難，為什麼?

#### 忙

上班趕公司、客戶的案子做不完，下班之後都很累了..

#### 下班後得帶小孩

的確，這個我不否認，照顧小朋友的確花了我相當多的時間，我幾乎得在小朋友晚上睡著之後才有自己的時間。

#### 不是資訊相關科系的..

放心，我也不是。不過這不用太擔心，老實說，除了少部份的天才外，大部份的人透過練習是可以把一門技術給學得不錯的。

### 如何開始?

那該從哪邊著手? 以下是一些建議：

#### 上課

我不是很鼓勵別人去補習班的，不過有的人就是沒人教就是學不會，那也許可以去試試無妨。

#### 參加讀書會/社群聚會/研討會

你可能可以在這裡找到同好，有同好一起學習是件樂事，而且近來實體的聚會越來越熱絡，樂見其成。

#### 要讀書

不讀書會面目可憎，我已經在胖了，再面目可憎下去就不能看了..雖然現在網路上的資料已經多到看不完了，但書本還是提供比較完整的學習結構。我習慣隨身都會帶一、二本書，也許在等車、等人的時間太無聊，可以拿出來打發時間。託 iPad 的福，現在可以一口氣帶很多本了。

#### 寫 blog

寫文章可以練習自己的表達能力、組織能力，可以讓自己學習過的東西透過整理變得印象更深刻。別擔心自己寫錯怕被高手電，其實高手都很忙，願意電你是你的福氣。又或許你會想現在大家都嘛在玩 facebook/twitter/plurk 了，誰還在寫 blog 那種過時的玩意? 那你可以參考[這篇](http://www.inside.com.tw/2011/04/16/begin_blogging)。（我剛發現原來我的第一篇 blog 文字是在 2005 年 1 月的時候，在安裝 phpMyAdmin 遇到的問題）

在 Ruby/Rails 圈應該很多人聽過[Gregg Pollack](https://twitter.com/#!/greggpollack)，不久前在他的一篇 blog 也寫到”[Looking for a Mentor](http://blog.envylabs.com/2011/04/looking-for-a-mentor/)“，像 Gregg 這麼厲害的角色也還是一直不斷的在想辦法進步，我這種小角色怎麼能不努力呢?

當然，學習新東西也不是完全沒問題，在學習的過程中，有幾點可能要注意的：

- 不要興趣太廣泛，把東西學到一定程度之後要換再換，不然最後”樣樣通、樣樣鬆”的機會很大。
- 當你學了某種程式語言之後，你可能就會把它當做你手中的鐵槌，但千萬不要把遇到的問題都當成釘子，不然就失去了學新東西的意義了。

### 我的偏方

最後提供我自己的一些個人的學習偏方，不一定適合你，僅供參考：

#### 找些硬的東西來啃

最近我試著在睡覺前把 API 拿出來啃，還滿助眠的。我現在儘量把它列為我目前每天睡覺前、起床後的工作之一，因為我覺得那是最基本的東西。不一定要熟記，但至少遇到問題的時候，你腦袋裡有關鍵字可以很快的找到答案。拜 ipad 所賜，可以讓我躺著看到自然睡著。另外拿別人寫好的原始程式碼來讀也不錯，很多高手寫的東西是書上不會教的，常會有「喔! 原來這個可以這樣寫」的體悟。

#### 聽 Podcast、廣播練英聽

我一直覺得自己的英文能力不夠，我會開英國 BBC 電台的廣播起來練聽力，部份聽不懂是難免的，但就讓自己的耳朵跟腦袋習慣這個聲音的存在。為什麼 BBC? 單純個人喜好而已。

#### 看影集練英聽

我喜歡看歐美電視影集，一週七天幾乎每天都看，如果時間夠的話，我一集會看兩次，第一次是沒字幕的，第二次才是放有字幕的。不過這個就自己斟酌了，因為很可會因為影集看了著迷而忌了原本該做的事。

### 結論

年輕時一直以為自己可以找到什麼密技能速成的，或是以為自己是天才隨便學一下就會的，事實上並不是，語言的東西不管是一般語言或是電腦程式語言根本沒銀彈，只有多練習一條路而已。

來算個簡單的數學，你知道 1.01 的 365 次方是多少嗎? 答案是 `37.78`。也就是說如果你能每天進步 1%，一年之後你會比現在厲害 37 倍. 雖然這數字有些理想化，但即便只做到三成，至少也能強 10 倍。

最後提醒大家，新技術通常很好玩，但不要盲目追求新技術，但也不要對新事物太過害怕而不去學它，過與不及之間該如何取捨，請小心拿捏。當找到屬於你自己的學習方法，也許你會發現其實這也是很有趣的。

一些個人的心得，與大家分享

