[留學] 窮學生就是要省錢!

Wednesday, July 23rd, 2008

距離要去美國的時間轉眼間只剩一個月了,最近終於也把簽證、體檢等雜事辦完,可以開始打包行李準備迎接未來的留學生生活了。因為油價上漲,能帶上飛機的行李限重越來越低,生活用品我打算都到美國再買,所以最近就開始研究起在美國購物的秘訣。

美國土地廣闊,人們都相當依賴網路購物,而在網路上買東西就一定要知道怎麼利用現金回饋(cash back)來省點錢!目前網路上最多人用的cash back網站有三個:EBatesFatWalletMicrosoft的Live search cashback

這三個網站分別和上百家商店合作,只要透過這些cash back網站連結出去並完成交易,就可以拿到一定比例的現金回饋。這些現金回饋其實還蠻多的,一般來說是2%~5%,但也有一些店的回饋甚至超過20%。我之前在Priceline訂過旅館,就是透過Ebates連過去的,雖然只有2%的回饋,但在什麼都漲的時代把小錢累積下來也是很可觀的。如果你常買機票之類的大額支出,那更是能輕易拿到上千台幣的回饋喔。

最後順便提醒大家一個好康的情報,如果你透過我的EBates連結去註冊,馬上就能得到5塊美金的回饋喔,並且我也會有5塊美金的介紹費。(就當贊助我寫blog吧 :D

附帶一提,這不是只有住美國的人才能用喔。有些商店是能把東西寄到台灣的,而且現金回饋是以支票的方式支付,在台灣也是能收到喔。

追求神乎其技的程式設計之道(四)

Tuesday, July 15th, 2008

程式設計到底是什麼?

2000年IOI在北京舉辦,這年台灣的代表隊成績還算不錯,拿到三銀一銅,比較可惜的是我第一天表現不理想而落到了銅牌,雖然不至於兩手空空無顏面對江東父老,但也知道自己的實力大概就在銀牌和銅牌的邊緣處吧。IOI結束後,我又回到了學校,但因為已經取得大學保送資格,在學校其實也是輕鬆寫意,成天就看自己的書或研究自己有興趣的東西。

在這段時間中,我開始有所警覺,我發現我雖然很會寫程式解題,但那都是一兩百行以內的小程式,真實世界的程式根本不是這個樣子的!雖然我能很快看出一個問題該用什麼演算法效率最高,並且在很短的時間內把自己的想法正確地轉換成程式碼,但我還是不知道市面上的軟體或遊戲是怎麼做出來的。

我這時才開始接觸C++和物件導向的概念,我突然發現要寫個大程式還真不是簡單的事,除了程式語言外,還有好多瑣碎的函式庫得學。像是要畫圖就要學2D的SDL或是3D的OpenGL,要做Windows GUI程式就要學Windows SDK或是MFC,要寫網路連線就得學socket,要讓遊戲執行順暢甚至得用組合語言寫某些部分…。好多好多東西不斷湧出來,學這些東西很有趣,因為我一邊學就會一邊聯想到學會這個功能後可以用在遊戲裡的什麼地方,於是整個學習過程就像把我夢想中的拼圖一塊一塊拼上去一樣,非常有成就感。

邊寫這種實用性的程式時,我也發現以往在比賽中累積了很多不好的習慣,像是濫用全域變數、變數隨便命名、把整個程式塞在main裡…。這些壞習慣在寫小程式看不出來有什麼差別,但隨著程式規模變大,這就變成了很致命的習慣。而這種習慣一但養成,之後會變得更難改,所以強烈建議初學程式設計的朋友們,一開始就不要偷懶,從認真幫變數想個好名字開始吧!

這段期間也讓我想了很多關於程式設計的有趣問題,像是寫程式到底算是科學+工程,還是藝術?寫程式必須要非常非常精確,任何一個字打錯都可能會讓整個程式跑出完全不同的結果,這對於天生就容易犯錯的人類來說實在是艱鉅的挑戰。為了避免錯誤太多,我們只能用一些固定的流程並強迫程式設計師遵守,讓可能的錯誤減到最低,這就是所謂的軟體工程。雖然有工程的影子,但寫程式卻是很難精確管理的工作,因為面對同樣的問題,不同的人絕對會寫出不同的程式,甚至是提出不同的解決方法﹔有的程式可能要跑三天三夜,有的程式卻能在瞬間得到正確解答﹔有的程式碼雜亂不堪,也有的程式碼井然有序清晰易讀﹔有的人要花三天寫1000行,也有人能在一天寫100行就達到完全相同的效果﹔這些程式的目的可能完全相同,但呈現方法卻有千萬種,軟體工程難道可以限制每個程式設計師大腦運作的方式和速度嗎?

從程式碼的觀點來看,不同的人寫出的程式碼也一定不相同。從程式碼的排版、命名、段落安排、抽象化程度、運作流程可以看出作者的個性、態度、思考邏輯及深度。從這個角度來看,寫程式更像是種藝術,就像是畫筆或樂器一樣是一種表達自我並將思想具體化的工具。

另外我很感興趣的是,人一定要寫程式才能叫電腦做這麼多複雜的工作嗎?能不能教電腦寫程式,讓人只要告訴電腦要寫什麼樣的程式就好?或是有沒有更簡單更方便的方法能和電腦溝通,並且保有同樣的控制力?

就在被這個問題困擾著的同時,我意外從一本書看到基因演算法(Genetic Algorithms)這個名詞。稍微研究過後讓我大吃一驚,因為我發現基因演算法是一個超級有效率的搜尋演算法,可以在幾近無限廣大的可能解裡面很快找到接近最佳解的答案。所以,我很快想到了,如果想要讓電腦寫程式,其實就是告訴他要寫的程式要達到什麼目的,並讓他在幾近無限大的可能程式中找出能跑出我們需要答案的那個程式。這是一種把寫程式視為搜尋的概念,我當時想到這件事非常興奮,但我並不知道其實早就有人想出同樣的概念(這叫Genetic Programming),並已經做了許多研究。

其實有時候無知是件好事,這樣才會有勇氣在不知道這個問題有多難的情況下去嘗試看看。如果我當初就知道這問題其實是能拿好幾個博士學位甚至是得到圖靈獎(Turing Award, 資訊界的諾貝爾獎)的難題,我可能連繼續嘗試的勇氣都不會有了。

(待續)

追求神乎其技的程式設計之道(三)

Saturday, July 12th, 2008

勁敵

熱血的少年漫畫都有一種標準公式,熱血但什麼都不懂的主角,加上一個天才勁敵的刺激,讓主角能在不斷遭遇的困難和挫折中不斷爬起來進步。就像火影忍者中的鳴人和左助,或是棋靈王中的進藤光與塔矢亮,要進步最快的方法就是找到一個遠遠超過自己的勁敵作為目標並且努力打敗他。

我在高一時參加校內的資訊能力競賽初賽,在都還搞不太清楚要比賽什麼東西時就去參加了。當時只會用BASIC,知道要用筆寫程式時還嚇了一跳,還懷疑閱卷老師難道能在頭腦裡執行程式嗎? 我記得那題目不難,我每題都有寫,但最後只拿了個佳作,離學校的代表隊還遠得很(話雖如此,我也是唯一有得獎的高一生了)。過了幾個月,我非常驚訝的發現台北市的資訊能力競賽,竟然有一個建中的高一生SBB拿了一等獎,更可怕的是他接下來又在全國能力競賽拿到二等獎,才高一就已經有能選上奧林匹亞國手的氣勢,前途無可限量。

受了他的刺激,我非常拼命學習,先花一個月自己把C語言學起來,接下來就到圖書館借回所有有關資料結構和演算法的書,每天都拼命看。這是我進步最快的時期,當時我在家自己跟著已經進入IOI培訓營的選手們一起練習ACM Online Judge上的題目。每天到學校都在看Introduction to Algorithms,因為沒有電腦,只好用紙筆練習解ACM Online Judge上的問題。白天在學校想解法,回家就在電腦上把程式寫出來,並submit上去看看結果對不對。透過這種方式練習,可以看到自己解出問題的數量不斷增加,強烈的成就感能刺激自己不斷練習不斷思考,如此循環之下真的進步得非常快。

很快地,在我升上高二後,我發現我已經寫了三百多題,進入ACM Online Judge世界排行榜的前幾名了。同時我也發現有另一個跟我一樣每天都增加好幾題的人,沒想到竟然就是跟我同年的建中SBB。雖然我每天都能寫兩三題,但SBB的解題數仍遠遠在我前面,逼得我只好印出所有題目,帶去學校不管上課下課都在紙上解題。就這樣我們的差距慢慢拉進,不知不覺我們也站上排行榜的前兩名。如果我今天多寫一題,我就能暫時站上第一,但隔天馬上又會被他超越過去,彷彿他早就已經囤積了數十題起來等著慢慢折磨我一樣。

就在這樣的刺激下,我就像漫畫中的熱血主角一樣快速成長,進入了勁敵所在的境界。我順利從校內初賽、中區預賽,一路拿第一進到全國決賽。非常戲劇性的是,在這年全國能力競賽,SBB拿了滿分得到第一,我錯了半題排名第二,而全國能力競賽一向是前兩名都為一等獎,也就是說我和SBB原本應該都是一等獎,沒想到評審說我和第一名的滿分有個落差,所以一等獎就改成一名,而我就變成了二等獎第一…(實在很嘔,但也不能怎樣Q_Q)。比賽雖然輸了,但我沒有很難過,因為我知道自己還能再進步,還能變得更強,繼續努力下去我很可能可以選上奧林匹亞的國手。

國手之路

高中各學科的奧林匹亞是每年一度的國際盛事,奧林匹克運動會比的是人類體能的極限,而各學科的奧林匹亞比的則是運用腦力的極限。我第一次是從YJL那聽到這比賽名字的,但那時覺得非常遙遠,因為我看到連他這麼厲害的人都選不上國手,可見這不是一般人能輕易踏進去的領域。

改變我想法的是中一中穿堂的一張照片。中一中有個不錯的傳統,只要代表學校參加比賽或科展獲獎,學校就會把獲獎學生的照片掛在穿堂的榮譽榜上。還記得高一時在穿堂閒晃,一個個欣賞歷屆學長們偉大的功績,突然間發現有個叫CLK的學長厲害得不得了,不但在中區能力競賽拿第一,到了全國也還是第一,而且他還選上了97年IOI的國手。後來我才知道他以前也是中一中電研社的社長,而那屆的副社長也非常厲害,自己寫了一個microkernel作業系統代表台灣去美國參加國際科展。有這些如傳奇一般的學長,給了我很大的激勵作用,我這時突然覺得自己或許也能像他們一樣有照片被掛在上面的一天。現在想起來,還真不知道當時自己怎麼能這麼有信心,其實有種不知天高地厚的感覺。但或許也因為如此,才沒有被這種「看起來很困難」的目標嚇到而連嘗試的勇氣都不敢拿出來。

很有趣的是,在我剛上高一時,CLK是中一中第一個也是唯一一個資訊國手。但就在我高一下的時候,有三個高三的學長竟然同時選上99年IOI的國手。因為一年資訊國手名額只有四個,一直以來都是建中學生呼聲最高,這年我們一口氣拿下三個名額簡直是不可思議的奇蹟。我也因此而信心大增,彷彿我每天在他們旁邊練習也能受到逸出的強者氣息感染而變強一樣。

就在我在全國能力競賽拿到第二名後,我就開始為IOI培訓營做準備。IOI培訓營大約收30人,要關在師大內集訓四週,每天都請教授來上課,每週進行一次模擬考。第二個禮拜結束會先淘汰一次,留下來10個人再繼續廝殺,直到四個禮拜結束。培訓營過後不是馬上就能知道成績,還要過一段時間才會知道四個國手是誰,但因為留到第二階段基本上就等於有了保送任何大學資訊系的資格,所以第二階段的氣氛其實還比較歡樂一些。

在師大集訓的四週讓我認識很多在這個領域頂尖的強者們,我覺得這更勝於實際上在課堂上學到的東西。這些強者們如今都還持續在資訊界的各個領域活躍,常常覺得不管到哪參加活動或研討會都還是可以碰到這些有相同背景的人,可見這個培訓營真的也訓練出許多資訊界的中堅份子。

在集訓時,大家也不是每天各自悶著頭寫程式。其實很不好意思說,當時在培訓營進步最多的可能是魔法氣泡對戰的戰術…。雖然有電腦就會被拿來玩電動,但培訓營的學生還是比較特別。每年培訓營都會流行一些能用程式寫AI來決鬥的遊戲,像是坦克大戰、俄羅斯方塊等等,我們那年流行五子棋,大家利用空閒時間寫五子棋的AI,碰在一起時就讓各自的程式互相決鬥分個高下,玩起來比自己親自下去玩還刺激很多。

經過四個禮拜的集訓,每天討論演算法,每天寫程式,到最後連睡覺都會夢到程式碼。當時因為才高二,也不會覺得壓力很大一定要留到第二階段甚至要選上國手,一直抱持平常心反而意外表現得不錯。結訓過後,我每天沒事就盯著培訓營的網頁看,希望能趕快看到國手名單公佈。就在名單公佈的那天,我盯著螢幕驚訝的說不出話,我竟然真的選上國手了!這真的是平常完全不敢想像的事情,真的沒想到我竟然也有一天能讓自己的照片被掛在中一中的穿堂上….。

(待續)

追求神乎其技的程式設計之道(二)

Monday, July 7th, 2008

(本來沒有想寫這麼長的,哪知道一下手後欲罷不能…。看來這系列文章會變成長連載了。)

資訊奧林匹亞與程式競賽

在升上高中前,我因緣際會透過一個國中的同班同學認識了他的哥哥YJL。YJL比我大三年,我要進中一中時他剛好畢業,很巧的是他很會寫程式,一直都是中一中的資訊能力競賽代表隊成員。剛認識他時,他就demo給我看他用QBASIC自己寫的橫向捲軸射擊遊戲,當時看得我目瞪口呆,我完全沒法想像QBASIC竟然能寫出這麼順暢且華麗的遊戲。這個demo如果不說,我一定會以為這是市面上在賣的商業遊戲(我那時還以為一定要學C才能寫出這種遊戲)。

透過YJL我也得知原來高中還有資訊能力競賽和奧林匹亞這種比賽,聽他述說跟全國的高手一起比賽寫程式時,讓我不知不覺也熱血沸騰起來。我把他高中時留下的各種參考資料全帶回家,並透過他認識了更多還在中一中的強者學長們,就這樣在踏進高中校門的同時也決定了我這三年的方向。

這裡我先介紹一下對於高中生最重要的資訊比賽。高中的學科能力競賽是教育部主辦的比賽,包括數學、物理、化學、生物、地球科學、資訊,每間高中通常會先辦個校內初賽來選出代表選手,再由這些選手參加各區域的能力競賽,最後各區的前N名(每科的人數不同)才能參加全國競賽。以資訊科來說,我記得是校內取6名,中區再取6名進全國決賽。到了全國決賽能拿到前10名,還能直接保送進資訊奧林匹亞的培訓營,不用再另外參加培訓營的入營考。至於資訊奧林匹亞(International Olympiad in Informatics, IOI)則是國際性的資訊比賽,參加的人是從每個國家挑選出來的頂尖高中生,每年輪流由一個參賽國舉辦,選手要進行兩天每次連續五個小時的頭腦比賽,其中只有一半的人可以得到獎牌。

這些比賽和一般的程式比賽其實很不一樣。這種比賽比的是解決問題的能力,不是比賽軟體實做的能力。題目比較像數學問題,只是除了紙筆外,還得用某種程式語言實做出能解出正確答案的程式,也就是說參賽者必須想出問題的解法(演算法),再透過自己擅長的程式語言寫進電腦,讓電腦執行後輸出問題的答案。這種解題比賽主要考驗的是運用資料結構和演算法以有效率的方法解決問題,並寫出正確程式的能力。大學有個類似的比賽是ACM ICPC,問題類型和IOI很類似,但比賽的模式和方法則有很大差異,有興趣的人可以自行尋找相關資料。雖然IOI是給高中生參加的比賽,但IOI題目的水準其實非常高,如果你能輕易解出IOI的問題,那… 我跟你打賭去Google面試也有99%的機率會通過。順便一提,Google Code Jam就是一個開放給所有人參加的解題比賽,題目類型就跟IOI和ACM ICPC差不多,前一百名就有獎金,還能免費去Google Mountain View總部玩一玩喔。

參加比賽是一個評估自己實力的好方法,沒在比賽會場上較勁過,真的很難體會解題與寫程式能力的差距可以有多麼巨大。一個頂尖的程式設計師和一個普通的程式設計師,其生產力是很輕易的能有十倍甚至百倍以上的差距,而寫出來的程式碼品質及效率也是同樣會有如此巨大的落差。

透過良性的競爭,高中這段時間也成了我進步最快的一個時期…..

(待續)

追求神乎其技的程式設計之道(一)

Saturday, July 5th, 2008

最近有讀者問到我學寫程式的方法和經驗,讓我一下掉入時光隧道回想起當初用VB寫出自己第一個遊戲時的成就感,但當初沒料到的是我真的就此迷上了電腦和寫程式的快感,不知不覺也過了10年的光陰…。在這篇文章中,我想寫出我對程式設計的看法和我一路學習上來的歷程和經驗。寫程式是一條無止境的道路,不只是科學和工程,更是一種藝術。而我還在追求「神乎其技」的半路上,雖然還有很多要學的,但我也希望能讓初學者更容易看清楚這條路是什麼樣子,避免陷入盲目追求新技術的死巷中。

一切的開始

如果是從DOS時代開始玩電腦的玩家,應該都知道當初DOS有兩個內建的QBASIC小遊戲:貪食蛇和猩猩丟香蕉。這兩個小遊戲是許多人兒時共同的回憶,我還記得我國小時曾有幾堂電腦課,當時老師在台上嘰哩瓜啦的不知道在教什麼,而台下每台電腦都是貪食蛇或丟香蕉的畫面(老師對不起,其實我就是帶頭做亂的罪魁禍首…)。

微軟把這兩個QBASIC遊戲附在DOS內對我產生了莫大的影響,那是我第一次發現到原來QBASIC和不只是像PE2能打打字而已,QBASIC竟然能把一堆看起來像咒語的文字變成遊戲!幸運的是我家剛好有本第三波的QBASIC入門書,沒事我就自己拿起來翻著看,雖然當時太小,即使把整本都看完了還是搞不懂貪食蛇是怎麼寫出來的,但也誤打誤撞知道了原來這就是程式設計,原來我能直接把貪食蛇檔案內的一個數字改掉就能有幾百條命可以死,原來學寫程式就能做出電腦遊戲…。對小孩子而言,知道這些事就像告訴他魔術師袖子裡的秘密一樣,我一天到晚興奮地要老爸帶我去書局看電腦書,彷彿真的可以搞懂電腦螢幕背後的一切魔法一樣,我也夢想著有一天能寫出自己的遊戲。但當時我沒想到的是,我還真的花了十幾年的時間在探索電腦的魔法…。

MUD與黑白棋

升上國中後,家裡裝了一台28.8kbps的modem,當時的internet還沒完全成形,在沒有Google的時代internet是沒什麼價值的。當時的modem最常被我拿來上一些撥接式的BBS,那時候的撥接BBS站台還不少,最棒的是還能從站上抓到很多軟體和各式各樣的教學文章,像是如何用組合語言寫電腦病毒,如何破解大富翁2之類的文章。這些文章對當時的我就像武林密籍一樣,雖然沒辦法完全看懂,但我也是從中得到很多零碎的概念,像是16進位的換算、組合語言、中斷向量、常駐程式….。

在國二時,我還不小心迷上當時一個超熱門的MUD – 萬王之王(KK),每天放學回家都急著連上線,讓家裡電話整晚都忙線中,玩到每個月電話費都是上千元,搞得我媽數次警告要把modem收起來再也不讓我上網了。(還好她沒真的這麼做,不然我現在就沒辦法寫這篇文章了。)

MUD是現在MMORPG的純文字版,整個虛擬世界都用文字描述,並且只要用telnet就可以連上去玩了。但內行的玩家都知道,玩MUD應該要用zMud或是UNIX下的tintin++,因為這兩個軟體可以設定所謂的trigger,偵測到某些事件的發生,就能自動採取事先指定好的動作。因為一切的訊息都是由文字呈現,所以偵測事件非常簡單,只要看看有沒有特定字串出現就可以了;而要做特定的動作也很簡單,就是送出文字指令而已。(眼尖的人一定會發現,這其實就是現在MMORPG外掛的最原始形式。)嚴格說起來,zMud是我首次寫「實用程式」的平台,我學會透過trigger在MUD的世界中寫自動化的機器人,自動在迷宮中遊走,自動換裝備打怪練功..。這時的我突然體會到,會寫程式真是太棒了,我在MUD中簡直跟神一樣。其實當時我也不過只會用最基本的變數、if、迴圈而已,但透過在虛擬世界中寫機器人的練習,讓我的邏輯思考概念有飛快的進步,也給我了非常強烈的動力想好好學一個正統的程式語言。

升上國三後,很幸運的透過推薦甄試提早上了台中一中,升學壓力解除後,老師和父母就完全不管我要幹麻了。這時我終於有了一段完整的時間可以好好的再把BASIC重新學過,無奈的是在我國三時QBASIC已經快滅絕了,取而代之的是Windows上的Visual Basic,我只好硬著頭皮買本新書來從頭學起VB。當時我看的是王國榮的VB 5入門書,整本書有六七百頁吧,比我國三所有課本疊起來都還厚,現在想想小時候真的有點不知天高地厚竟然相信自己能看完這麼厚的磚頭書。那時候我每天上課就帶著這本磚頭去學校,這樣看了幾個禮拜下來,沒想到我這時突然都看得懂了,很多原本不知道有什麼用途的概念突然都相互連結起來了。(多虧了在MUD裡的訓練!)就這樣,某天突然有種打通任督二脈的感覺,我發現我全搞懂了,迴圈、陣列、Windows GUI控制項、去背貼圖…,我突然想通要怎麼用程式語言寫出遊戲了。

從那之後,每天回家就是打開VB寫程式,我想寫個黑白棋來檢驗自己的想法,我把自己知道的所有概念都放進去,有GUI元件、有貼圖、有動畫、有音效..,這是我第一個完整的程式,從頭到尾每一行都是自己寫出來的。(以現在的眼光來說只能說是一個期末project規模的小程式,但對當時的我可是意義非凡)

這個黑白棋讓我印象最深的其實是debug的痛苦經驗。我花了一個禮拜把程式的核心部分完成,但在吃子的時候卻跑出一個不明的bug會打亂整個盤面。為了找這個bug,我又花了一個禮拜,每天從早到晚都在想哪裡寫錯了,後來慢慢trace了好久,才發現竟然只是一個變數忘了歸零!!!

這種bug很常見,不過只是programmer最容易犯的無心之過之一,但這件事對我的影響非常大,它讓我花了很長時間在想以後要怎麼避免犯同樣的錯。我後來才知道一個普通的programmer和厲害的programmer從這裡就會分出高下:普通programmer犯了這種錯會覺得很平常,並提醒自己下次別再這麼笨了,但實際上不久後一定又會再犯同樣的錯;厲害的programmer會反省自己寫程式的方法,並改變原有的方法或習慣來避免以後再度產生同樣的bug。

古老的程式設計教材(尤其是C語言),都說要把變數宣告在函式的一開頭,並且因為變數宣告完還得經過初始化,所以很多人習慣是在函式開頭宣告並初始化所有變數。這不是錯的,可是,這其實就是會導致bug的元兇。
因為變數在開頭就被初始化,這樣在真正要用到它的時候就能直接拿來用,但是如果這個變數需要被歸零(也就是重新初始化)並在迴圈中重複利用,就很容易會忘記要再多做這一步。(在多層迴圈中更容易發生)

我為這個bug苦惱了幾天,後來才意識到這是coding style的問題,只要改變宣告變數的習慣,就能避免犯這種錯誤。如果一開始就在迴圈內宣告並給定變數的初始值,而不是在函式開頭宣告,就不會有這種bug跑出來了。有了這個經驗後,我歸納出一個原則:「永遠在變數需要被用到的最內層區塊才宣告並初始化該變數。」這種原則很重要,我日後一直放在心裡,它也幫助我避免掉未來再犯同樣錯誤的可能。(事實上,我後來再寫了十年的程式,再也沒有比這更痛苦更長久的debug經驗了…)

(待續)

終於退伍了!!!

Tuesday, June 24th, 2008

終於撐過去了,從去年7月23日到今天,經過11個月又1天半,我終於退伍了!!!!

欠國家的債終於還完,鬆了一口氣,我又是自由之身啦!!

哇哈哈哇哈哈!!!

販讀書店要關門了..

Thursday, May 15th, 2008

剛在PTT看到這消息..

作者 yasgale (在我還沒睜開眼之前) 看板 bookhouse
標題 [情報] 台大後門的販讀要結束營業了
時間 Sat May 3 17:29:45 2008
───────────────────────────────────────

今天興高采烈地去販讀報到時
赫然發現販讀的門口貼了張布告
說:因為租約到期,5/17起停止營業
如果要便宜的書,請洽台中販讀

唉呀呀 又少了一家便宜的好書店了

這家書店就開在台大辛亥路後門附近,離資訊系館很近。記得在台北時,每天晚上到辛亥路去吃飯常會經過這家書店。店面雖小,但書很便宜,老闆挑得書也都還不錯,此外還有多種雜誌,讓我每次吃完飯路過都會想順便進去逛一逛。

這樣的好書店沒想到這麼快就經營不下去了,真是很可惜啊。

愛書的人們趕快趁這三天去販讀見見它最後一面吧。

MIT,我來了!

Saturday, March 29th, 2008

從去年從研究所畢業後,一邊在Google當intern一邊匆匆忙忙考了GRE,又緊接著在七月去還欠國家的一年債(感謝老天現在只剩11個月了),當兵中一邊準備申請學校要的各種書面資料,一邊唸英文準備考TOEFL和GRE (again..orz)。一直忙到12月,把所有資料用UPS寄出去後,才終於鬆了一口氣。

時間快轉到2008年2月14號。我無預警的收到來自MIT的兩封信,其中一封來自一位我很有興趣的教授,標題竟然是「congratulations on admission to MIT」…..。然後,忍不住尖叫起來。

雙手一邊發抖一邊仔細把信看過一次,還確定一下今天不是愚人節,信的來源真的是在美國麻薩諸塞州的麻省理工學院(MIT.edu),而不是台灣的MIT.edu.tw,才真的確定了這個不可思議的admission。

我申請的是MIT EECS的博士班(Ph.D.),雖然他們把電機(EE)和資訊(CS)合成一個系,但實際上CS的學生是獨立在另一個資訊科學及人工智慧實驗室(CSAIL, Computer Science and Artificial Intelligence Lab)工作的。CSAIL是MIT傳說中的AI Lab和LCS(Lab for Computer Science)合併來的。MIT AI Lab是由AI始祖Marvin Minsky和John McCarthy所創立,是AI最早的發源地。另外,hacker這個詞也是在MIT AI Lab被發明的,最典型的hacker始祖Richard Stallman就是在這裡hack了AI Lab的雷射印表機,進而展開他的GNU計畫,發展出了Emacs、GCC等軟體。

MIT是全世界理工學生的夢幻聖地,那裡聚集了無數的天才、諾貝爾獎得主、大師級教授、hacker,三不五時就會有新聞報導MIT又發明了什麼驚世新科技。能得到MIT的入學許可,我也沒什麼好考慮的了,縱使還有其它學校的申請結果還沒出來,我也不等了。謹慎的填好MIT Graduate Admissions Reply Form,練了一個禮拜的英文簽名(以後就都得用英文簽名了,當然得先練好一點),在 “Yes, I plan to attend MIT.” 下面打了勾,決定了我未來數年的去處。

MIT,我來了!

日劇與人生

Saturday, February 23rd, 2008

(警告,以下有提到「料理新鮮人」之結局)

最近剛看完一部描述一位年輕大學生為了成為廚師的夢想而奮鬥的日劇「料理新鮮人」。劇中的主角一開始是個在鄉下餐廳打工,充滿傲氣,自以為什麼都會的年輕廚師,在一次到東京的義大利餐廳「帕可那雷」打工的經驗後,才突然了解自己只是個半調子,就像井底之蛙一樣無知渺小。為了成為獨當一面的廚師,他放棄了女友和大學生活,回到帕可那雷以「斑比諾」(Bambino,義大利文的小嬰兒)的名字從服務生開始做起。

故事過程想當然是班比諾經過重重努力和奮鬥,終於得到認可當上了帕可那雷的廚師。但劇情並不是在這裡就結束了,在最終話裡,帕可那雷主廚突然決定離開自己經營了數十年的餐廳,並和好友到一個新地方再從一個斑比諾做起。

主廚對斑比諾這麼說:

斑比,我和遠藤兄在義大利學到的是,
只要還繼續做這個工作,就不能停下自己的腳步,
該學習的,該知道的,還未見過的事,這些都還多得數不盡,
多到花一生也無法窮盡,你懂嗎?

這番話對於正處在人生重要十字路口的我,在心中激起無限漣漪。(害我在心中不斷吶喊,我懂,我懂)
雖然主廚是以廚師的身份說了這些話,但其實這段話對於任何職業,任何身份的人都同樣適用。人生之路如此之長,許多人離開學校進入社會工作後,就鬆懈下來,靠著一兩個技能每天過著反反覆覆、渾渾噩噩沒有目標和夢想的生活。在我當兵之前,身邊的朋友都有自己的夢想,並且也很努力腳踏實地去實現,讓我有種錯覺以為這世界就是這樣運轉的。入伍後,接觸到社會各層面的人,才了解到有許多人對自己的人生只是抱著得過且過的心態,能有個工作混口飯吃能過活就好。這並不是能力的問題,因為我也看到很多人其實都有能稱上專業的一技之長。我想差別只在於這些人停下了腳步,他們不願意再繼續學習、繼續前進。

我認為學習是人最重要的能力。從我們呱呱墜地開始,我們學著爬、學著說話、學走路、學著如何判斷是非、學習並了解這個世界。如果我們只是為了一技之長而花了二十幾年上小學、中學,一直到大學,結果只是在社會上做一個每天重複做著同樣工作的螺絲釘,這樣真的有把我們身為人的價值完全發揮出來了嗎?這樣的人和部工作機器有什麼不同?

目前的台灣社會也處於一個難堪的停滯狀態,政黨鬥爭和族群分裂把台灣搞得一團混亂。隨處可見人們抱怨政府害他們生活過得一天比一天還苦,但我一直很納悶,為什麼這些人總是把責任推給別人呢?難道他們自己不用為自己的生活不如意而負責嗎?為什麼同樣是農民,有人能做基因品種改良將蔬果外銷世界,而有人只是整天抱怨開放WTO以至於被迫和全世界競爭?同樣是在夜市賣小吃,為什麼同一條街上就是有幾家店能大排長龍,其他店卻總是在趕蒼蠅?

只是把問題推給別人並不能解決任何問題,就像主廚在最後對斑比諾所說的:

這些都不能怪到別人頭上去,
自己做得不順利不能推說是別人的錯,
推說時局不好,推說是社會的錯,
因為這是我們自己選擇的工作,
所以說,不能把責任推給任何人,
如果不順利,全都是自己的責任。
能這樣想,一切都會很簡單,你說呢?

「料理新鮮人」的結尾我很喜歡,斑比諾沒有因為達成了在帕可那雷當上廚師的夢想而停下腳步,他反而在夢想達成後的失落感來臨時思考未來,並決定離開帕可那雷到義大利去從零開始學起。每個人都應該要對自己的一生負責,只要還活著,就不能停下腳步,該學習的事情永遠也學不完。如果只是自己停止前進了,有什麼理由應該要父母或政府來負責自己的不如意呢?

真實與虛擬

Sunday, January 27th, 2008

雖然上一篇才寫了MMDays的壞話,但很快就又在上面看到有趣的文章: 感官極限的哲學狂想:當感官真實不再真實。(well, 雖然這篇哲學意味濃厚的文章跟原始的MMDays風格搭不太上,但這議題其實我也頗有興趣。可見讀者的愛好真是很難捉摸,這世界真的很需要personalized filtering agent來把我們從資訊之海裡拯救上岸)

好吧,回到正題。

Mr. 情人節想必也是The Matrix攻殼機動隊的愛好者。我從小時候看的機器人卡通開始,就一直對人工智慧和機器的極限存在許多幻想。如果真的有天我們能做出能通過Turing Test的機器,那它會想些什麼事?到那天我們是不是也對大腦有足夠的了解,甚至能把大腦中的資訊dump出來,再插個USB就傳送到機器腦進而複製出一個有著同樣記憶和思考模式的「人」出來?那到了這一天,我們如果能自由操控記憶和思想,是不是就分辨不出自己是不是真實存在,還是只存在於電子訊號模擬出來的精神世界中?

每個人都知道笛卡爾說過「我思故我在」,也就是因為「我」有對自身的存在產生懷疑,所以這個有在思考懷疑的「我」則是必定存在的。但這個存在的意義也只是代表了精神上的存在,至於精神是附在肉體之上或是由機器模擬出來的就不得而知了。

看完The Matrix後,我就在想到底有多少人會想脫離虛擬世界?雖然虛擬世界也是像真實人生一般必須工作、必須吃飯、甚至還得受苦受難,但也是比回到活像石器時代的錫安來得舒適。如果在虛擬人生中就能得到生理與心理的一切滿足,那麼真的有必要去區分現實與虛擬嗎?或者說,有多少人在乎這個絕對的真實呢?

哈佛大學的校訓是Veritas,也就是拉丁文的「真理」。科學的目的是追求真理,大學生理當也要追求真理。但現代社會的大學生似乎比較喜愛追求成績與平安畢業,如果能有個能被評為老師打100分的正確答案,又有多少人在乎這是否就是真理呢?

我相信對於虛擬或現實的抉擇完全取決於每個人自我的人生觀與生活態度。現在的線上遊戲雖然離完全的感官模擬還差得遠,但還是吸引了無數人沉迷於其中,要不是他們還得回到現實生活吃飯睡覺,我絕對相信會有更多人們就一輩子待在第二人生裡當個快樂幻想英雄了….

台中的書店

Saturday, December 22nd, 2007

自從結束在台北六年的讀書生活搬回台中後,突然有很多不習慣。不習慣台中的路都歪歪扭扭,搞得我不看地圖根本搞不清楚方向;不習慣在台中沒什麼朋友,平常都得一個人外出溜達;以上都還是小事,我覺得最奇怪的是台中竟然找不到便宜又好逛的書店!

在台北住了六年,前兩年醉心於電腦技術,每個禮拜都跑天瓏補充電腦書。不管是中文還英文,幾乎都沒有找不到書的煩惱。後來電腦書少買了,開始看一般類別的書,就常常去逛金石堂或誠品。這兩家連鎖書店都還蠻好逛的,書的種類很豐富,平台上的推薦書也都還不錯,而且在某幾家有座位的還能坐著慢慢看,可是最大致命傷就是沒有折扣可言XD (對於一個愛買書的窮學生,價錢當然很重要)

後來發現傳說中全國最便宜的水準書局就在師大附近,慕名而去參觀後,不禁有點失望。書雖然便宜,但空間實在太擁擠,很難好好逛,除非是事前知道要買什麼書,不然平常實在不太想進去XD 還好不久後,另一家便宜書店政大書城也開在那附近。店面大又寬敞,書的種類也還算齊全,最重要的是不用會員卡也有好折扣。於是逛政大書城就變成平常很重要的活動了。

搬回台中後,看書的需求大量增加,但我跑遍台中市還找不到一家就能讓我滿意的書店。連鎖書店如誠品、金石堂、諾貝爾最多都打9折而已(而且還要會員卡),雖然好逛,但每個禮拜都要買就會很心痛。便宜的書店也不是沒有,像是科博館門口的販讀都打75折,但只有小小一間而且裡面擺的書大半都不合我胃口。在台中教育大學附近的雅聖軒店面大多了,但書不算多、更新的也不快,不太能常常去挖寶。最近還發現一家在上石路的悅讀,店面也不大,整體感覺是三家折扣書店中最合我胃口的。只可惜店面小就不可能擺齊所有種類的書,所以我每個禮拜放假都得先跑這三家小書店,再回去逛諾貝爾之類的大書店,避免漏掉了一些比較不熱門的好書。

台中市號稱是世界最佳文化與藝術城市,沒想到要找個如政大書城之類的便宜好書店這麼難。是因為台中人比較愛誠品,還是台中人比較捨得花錢呢?


講到台中的書店,其實我覺得最不可思議的是電腦書店。

在我國高中時期,台中還有幾家專業的電腦書店,像龍軒、電子街的龍達、逢甲的揚業和唯軟。後來一家一家收掉,現在只剩下龍軒和唯軟存活著。但唯軟賣書的區域大大縮水,已經連誠品都比不上了。而龍軒也蠻糟的,一大半在賣遊戲、材質光碟等東西,真正賣書的地區擺的又是些不太專業的中低階電腦書,一小櫃的原文書區擺的書跟我上大學前沒兩樣…。

沒想到在台中竟然買不到專業的電腦書,要買書還是得跑回台北,實在很囧啊….