大學部的實務專題,是一門必修課。在這門課中,大家應該要獲得什麼樣的訓練呢? 理想中,有兩個面向的目標希望達成。一方面,是利用各位在其他課程中所學的知 識,實際做出一個成果來。所以這個成果應該要具體,而且具有良好的展示效果, 對於各位將來申請學校時有幫助。另一方面,專題的成果要深入,讓大家在專題實 作的過程中,熟悉此一主題所會使用到的相關工具,深入瞭解許多實作上的細節。 「工具」是實作能力中相當重要的一環。所謂「工欲善其事,必先利其器」。網 路工程師懂得善用 trouble-shooting 的工具,程式設計師懂得利用 debugging tool, 都能幫助你們大幅提高工作上的效率,讓你們比土法煉鋼的同儕,用更短的 時間做出更好的東西。

我們系上把專題訂在大三上下學期,是稍微早了一些。很多學校是把專題訂在大三 下及大四上的。但系上的考量是,大四上學期各位就要申請甄試,如果那時專題還 沒做完,申請時就會缺乏一個漂亮的成果可以展現;所以,比起其他學校,我們的 專題早了約一學期。另外在課程銜接的問題上,本系的計算機網路安排在大四上, 因此其實做這個專題時,各位並不是「整合所學,做出成品」,而是必須從頭學起。 對你們而言,需要新學習的東西份量會比較多,這點大家必須要有心理準備。 因此其實我鼓勵大家下學期來修我開在資工系的「計算機網路」,這樣子在著手進 行網路電話的專題時,對於相關的專有名詞及觀念,大家可以比較輕鬆地掌握。怎 樣子在大三時就修大四的必修課,李霓雅和王筱婷兩位學姐有經驗,不妨請較她們。 如果時間上衝堂,那麼有另外一個選擇是我開在通訊所的「網際網路電話」,這 裡頭也會幫助各位深入瞭解網路電話所會使用到的通訊協定。七月底時系上會開始 排下學期的課表。請這個月的負責人聯絡一下大家,詢問一下大夥兒下學期的修課 情形。Computer Network 這門是必修課,大概比較不容易變動。但 VoIP 是選修 課,修課人也較少,如果大家有共識,時間上比較好調整。原則上我月底會收到資工 先排出來的課表,到時再請聯絡人負責轉給大家討論。

有些基本的實作能力,我建議大家利用這段時間先加強一下。實驗室目前幾乎所有的 系統都是用C/C++ 開發的。有些同學用PHP 開發了AJAX 的系統,但其中抓封包的 元件也是需要用C 語言呼叫libpcap API 來完成工作。因此,各位要利用這個暑假, 好好把C 語言中有關struct 和function call 的部份複習一下。但是 computer language 的學習,光是看書是不夠的。你需要動手寫程式,同時需要看別人的code. 你自己動手寫,才能確保自己能掌握一些必要的細節;否則光看書,概念上雖理解, 但動手寫出來的程式連compile 都過不了,就更別提要做出什麼好東西了。閱讀 open source code,可以幫助你學到許多種不同的程式設計手法。現在open source 的軟體 愈來愈多,資工系的同學要懂得善用這些無盡的資源。在上述的兩門課程中,我會 指定許多的作業,促使大家來閱讀並利用Internet 上的這些open source code.另 外在各位做專題的過程中,我們也會指定一些軟體要大家個別去深入研究。

很多code 是在Linux 或FreeBSD 上執行的。我很驚訝地發現,系上許多同學,居 然對於這些 Unix 系列的 OS 不熟,只會用Windows XP 和Windows Vista. 從教學的 角度而言,這是非常無法令人接受的。資工系的同學,不能像普通的user 一樣, 只會使用圖形介面的作業環境。對於文字介面的作業系統,就很不熟悉,甚至無從 下手。這會讓你未來在就業上的競爭力大打折扣。我們實驗室的要求是,各位除了 Microsoft Windows 之外(這個我們不用要求,相信大家都很熟),在FreeBSD 和 Linux 中你至少要精通一個,作為你實作的環境。你不必太擔心你現在用FreeBSD, 會不會將來就業時公司會要求Linux? 基本上你只要會了一個,再學另一個就很 快。所以,目前來講,各位可以依照你環境上的便利性,選一個對你最合用的。 系上的stu.csie.ncnu.edu.tw 跑的是FreeBSD 6.3, 這個是現成的;另外你若想在自己 的PC 上裝套FreeBSD 或Linux, 做成multi-boot OS 的環境,這樣自己可以當 superuser 過過癮,我們也非常鼓勵。不過,如果你要動到partition 時,提醒各 位最好是先把硬碟中的重要資料做好備份。不然在安裝新作業系統的過程中造成原 本硬碟上的資料遺失,是時有所聞的事。另外一個選擇是使用Virtual PC 2007, 如果各位的記憶體夠,這是不影響原作業系統運作的一個絕佳選擇。有人會問 VMWare 是否是更佳的選擇?基本上那是一套好軟體,不過除非各位有花錢購買使用權, 否則不該在沒有license 的情況下使用。

這一個星期,我想請大家先連到系上的FreeBSD 工作站,閱讀幾份文件:

  1. man man
  2. man bash
  3. info info
  4. info vim
所謂「閱讀」,當然不是真的「純閱讀」。大家要配合上機操作,以驗證所讀 到的東西。如果有任何想法或疑問,請大家透過 mailing list 來討論。 記住,這個閱讀的 assignment 是一星期,有必要各位可以再延一星期,但不要 再拖。我曾聽過有同學光是 man bash 就花了三個月,這在時間管理上顯然就出 問題了。

暑假的時間,很多同學沒待在學校。這沒有關係。有待在埔里的同學,我希望你能 排定固定的時間到實驗室來。有空就和學長們討論,並且請教相關的問題,學一學 你還不會的工具。從下個星期開始,實驗室應該每天早上十點到晚上十點都會有人, 週末不休息。如果你覺得早上十點太晚了,跟我講一聲。我們可以再另外安排。 不在埔里的同學,只要大家能從家裡上網,大部份的事情可以透過網路來完成。但 為了確保大家在暑假裡頭能有進度,下頭幾件事希望大家做到。

  1. 定時收發email。碩士班的同學是每天應該要check email, 除非在出差期間。 大學部的同學,一星期三次(平均兩天回一次信)也就差不多了。收到重要的訊息, 要立即acknowledge,這樣子別人才不需要再打電話催你。
  2. 不懂的就問。網路是當前熱門的產業,但它的進入障礙是專有名詞特多,所謂 的acronym & jargon.有時甚至同一個概念,不同組織的人,會用不同的專有名詞 去稱呼它,這也就令大家更感困惑。要學會這些專有名詞的方法無他,問人。不懂 的,就要盡快弄懂。如果你問了學長,學長的解釋讓你仍覺得十分疑惑,你可以請 他進一步提供參考資料,讓你自行深入閱讀。
  3. 動手做。靜態地閱讀,學習效果有限。一定要輔以動手實作,才容易加深印象。 這部份我會來觀察各位的進展,如果有同學在家中實做的進展不理想,不論是因 為家中網路較慢,或是電腦速度不夠,我會建議你早點回學校來。一方面實作環境 會比較完整,二方面有討論的對象。這樣學習效果會比較好。
  4. 寫下你的心得。專題最後會以成果報告的型式呈現。我們希望大家能在過程中 除了實作能力外,也加強文字表達的能力。第一次寫技術性文章的同學,往往詞不 達意,甚至連標點符號都不太會用。這不能怪各位,因為平時BBS 上是不需要用標 點符號的!有同學告訴我,他平時在BBS 上寫文章,只需要用到空白和... 兩種「 標點符號」,因此在缺乏練習的情況下,當大家第一次要把腦中的想法寫成專題的 技術報告時,往往覺得難以下筆。我們希望大家在平時的Weekly Report 中,就練 習寫下來,這星期試了什麼軟體,讀了什麼文章。而當你成功地把一套軟體安裝起 來時,寫一份HOWTO document。在寫作的過程中,你會去參考到網路上前人所寫的 許多文件。在比較中,你就可以學到各種不同的表現手法,進而發展出自己的寫作 風格。

我發現有些同學有「藏拙」的習慣。當老師要求大家表達意見時,怕自己的意見不 夠成熟,講出來會不好意思,就乾脆不講。這不是我們實驗室的風格。我們實驗室 中,所有人都應該勇於表達意見,並努力聽取他人的意見,以廣泛學習他人不同的 觀點。即使你講出自己的觀點後,被人指出其中的盲點,這也沒有什麼丟臉的。「 吾生也有涯,而知也無涯」,每個人難免都有自己學習上的盲點。能經由別人的指 正在學生時代把這個觀念弄清楚,遠比你進入業界工作,在推出一個產品失敗後才 學到教訓,要來得幸運多了。因此我鼓勵大家,有問題就問(當然,在問之前要做 功課),有想法就試著寫下來與別人討論,有機會就動手實作。這樣子多方面齊頭 並進,相信各位會在這門專題課程中獲得深厚的訓練。

以後不論是Weekly Reading 或是「畢業展」這些我要求大家表示意見的項目,希 望不要再有同學保持沈默。這些我要求大家表示意見的項目,並不是各位可以自由 決定要不要回答的。它們就像是這門課的作業一樣,各位必須經由每星期的作業, 來加強自己在這門課所應有的訓練。作業不交,後果一定是不好的。因為它會造成 你的練習不足。

此外,在閱讀上,我指定給各位的只是minimum requirement。每份文件在結尾時 都會有reference list, 網路上也很容易經由關鍵字找到相關的文章。希望大家能 多看。有時同一主題第一篇你看不太懂,再看第二篇、第三篇,不同的解釋方式看 多了,你慢慢就懂了。所以,不要只限於看老師指定給各位的文章,然後說:「老 師,我看不懂。」然後就很開心地因為看不懂,所以接下來的事當然也就不用做了。 我希望大家來找我討論時,能告訴我:「老師,關於您所指定的那篇文章我看了, 初步的瞭解是它使用OOO 方法來解決XXX 問題,但我不明白的是AAA,於是我又 去找了BBB 及CCC文章,我的理解是DDD ...」。如果各位能做到這步,大概就可以 確保專題一定可以做得很好;將來進入研究所,也一定可以成為非常成功的研究生。 各位另外去找的這些文章,希望也要把它們列在你的 weekly report 上。 為了方便確認是哪一篇文章,請大家不要只有列篇名,最好同時也附上 URL. 另外,提醒大家,不要為了求快,而只看中文的文章。許多第一手的資料都是英文 的,如果你不看英文的文件,那就會錯失許多好的資源。對於不習慣讀英文的同學 而言,閱讀英文文件固然比較耗時。但只要各位從現在開始努力,相信一年下來, 各位就可以毫不吃力地閱讀這些技術性的英文文件了。

這兩個星期,碩二的學長們放暑假。所以各位可能還沒有討論的對象。下星期起, 我會幫各位分組,每位同學大約會跨兩個主題,同時試著去學兩個主題相關的知識。 到時我們再根據各位對每個主題掌握的程度來訂出每一個人專題所確切要達成的 目標。下星期一在我收到各位的Weekly Report 後,我就會開始進一步assign各組 要著手的主題。