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