模仿是快速學習的捷徑之一

簡單地說,不要辜負別人開放程式源碼的美意。

以前,當我想要學習一個新的 framework 或是 library,總是先到官方網站或是使用 Google ,期待能找一份合適的「Tutorial」,然後自以為 step by step 就能輕鬆學會,會有這樣的想法,完全是我在學習 Java SE (我只有說 SE) 時,完全是靠 Sun 官方網站學到東西的緣故。但這個想法在我遭遇到三次「挫折」後,決定要徹底改變習慣,改變學習模式。

第一個挫折,是我在讀研究所時,實驗室座位的電腦裡使用 Debian / Ubuntu 為主要的作業系統,當時我很想要學 GTK+ 或是 Qt 來為 GNOME 或是 KDE 寫一些程式,於是我就四處尋找 GTK+ 或 Qt 的 tutorial,結果才發現 tutorial 要不是寫得「分崩離析」就是版本忘了更新,而且 GNOME 又有自己的 libgnome (based on GTK+),而 KDE 也有 libkde (based on Qt) 之類的東西,看得我真是眼花瞭亂,而且看起來 Glade 或 kDeveloper 也不是十分容易上手,結果花了好久的時間都沒進步多少。

第二個挫折是入手 iBook G4 之後,一直很想在 Mac 上寫出 Carbon-based 或 Cocoa-based 的程式,不過看了一些 Carbon 和 Cocoa 的歷史後,決定只學 Cocoa 就好。在看過一些 ADC 上的文件後,我發覺要學會用 Cocoa 寫程式是沒辦法靠 tutorial 的,因為 ADC 上的 tutorial (寫 Converter 那個)根本就沒感受到什麼 Cocoa 就寫完收工了...這樣我除了會寫 Converter 這樣的幾乎沒什麼的小 app 之外什麼都不會寫。

再來,就是在學習 J2EE 時,Java EE 5.0 的 tutorial 居然有 1300 頁!不過內容多倒不是什麼讓人覺得苦惱的事--什麼都沒教才是!Java SE 的 tutorial 寫得多好?解釋了原理及概念之後,都會有對應的 sample code 可以參考,有道是「一千句說明也比不上十行 code」,Java EE tutorial 幾乎全是在講虛無飄渺的概念性東西,對於 sample code 也是愛給不給的樣子(是的,其實它有另外打包,但就給你一整包 sample code 但又不講解,實在是很@#$@#$@#$),總而言之,完全就不像是給「新手」閱讀的 tutorial。

後來,我學會(只能說看得懂 code,也沒有很精通)這些東西,完全是靠參考一些 open source 的 project 才慢慢瞭解的。一直到我最近在寫 Rails 和 Firefox 的 plugin 時,也都是直接拿別人的 project 來學習(Rails 我還不是很熟,不過有研究過 Firefox extension dev. 的人,應該不會認為 MDC 寫得很棒吧 = =+),雖然我可能還不是完全瞭解這些東西全部的面貌,但至少從這裡開始入門,比找到一篇好的 tutorial 要容易得多了。

不過寫到這裡,我也有些感觸,如同吃東西可能遇到地雷餐廳、買遊戲可能會買到地雷片,模仿別人的 code 也可能會踩到地雷,要找臨摹的帖子,還是要慎選,一般來說我會挑比較有名、較多人使用或是作者很威(這可能很難判斷)的 code 來參考,而且看到這些高手寫出來的 code 說不定又會學到不少新東西。

  • 相當棒的心得呀。

    我好像也會這樣。遇到一個有趣,想好好一探究竟的程式或架構時,常常都會被各式各樣的 Tutorial 給搞得很心煩,到最後就是整個直接放棄。後來我的作法是,不再見一個愛一個,而是給自己一個非常明確的目標去執行,然後配合官方的 manual /doc 來學習。

    舉個例子,我最後決定使用 wxPython 來撰寫公司內部用的工具,接著是很認真地 k 了一陣子 Python 文件,了解它的語言特性,避免老是用一種新的語言,但內容卻寫得很像 C/C++。接著,又透過 wxPython 有一堆很棒的 demo 程式,直接 copy & paste 它的用法。雖然還是有很多不了解的地方,但的確是一步一步地完成了自己想要的成果 🙂