資夢

今天將本站內容重新整理,並以開放授權釋出了。新站位址在《資夢》

歡迎舊雨新知到新站看看,如果有意參與編輯者,也可以直接在 github repo fork 和送 pull requests 喔!

廣告
張貼在 教學 | 標記 | 發表留言

Timus Online Judge 教學

Timus Online Judge 是俄國 Ural 大學設立的程式線上測驗網站,有許多程式題目可供大家練習。他支援 C++/Java/Python/Ruby/Go/Haskell/Pascall/Scala 等等多種語言,而且網站速度滿快的,還有貼心的題目難易排行。進入 http://acm.timus.ru/ 後可看到首頁如下:
Timus OJ

重要連結

在上方可以看到不少連結,這裡針對一些比較重要的部份介紹。
timus menu

  • Frequently asked questions, Guide
    這兩個地方可以找到網站的使用指引和常見問題,也有如何用特定程式語言解題目的示範,建議可以先從這裡看起。
  • Problem set
    網站的題庫區,想解題時從這裡開始。
  • Submit solution
    如果妳已經知道想解問題的編號的話,使用這個頁面可以快速送出你的程式碼給網站評分。
  • Judge status
    可以看到大家和自己最近上傳的程式碼被評分的狀態。
  • Register
    如果妳還沒註冊的話要先註冊帳號才能開始解題。

註冊帳號

我們就按下 Register 開始註冊自己的帳號吧!
Timus register
上面的重要欄位由上而下分別是名字密碼再輸入一次密碼做確認電子郵件國家。名字的部份必須要填英文,會顯示在自己頁面還有排名等等。密碼平常不會用到,只有更改資料時有用,建議可以設成跟平時的密碼不同。電子郵件一定要填有效的,才收的到之後的確認信。最下面的欄位請輸入妳看到的數字,這樣他才知道你不是亂註冊的機器人。 填好後按下 Register 就可以等著收郵件囉,如果一直沒收到的話還可以用 password recovery form 要求重寄。

Timus registered

收到的信內容大概像下面一樣,它會把你的密碼還有 JUDGE_ID 寄給妳,這個 JUDGE_ID 很重要,將來上傳程式碼就是要依據這個 ID,所以也請不要隨便把 JUDGE_ID 告訴別人喔。
Timus email

開始解題

點擊 Problem set 就可以看到網站上的題目集了,這裡我們先選擇 All problems 觀看全部的題目。
Timus problem set

接下來你應該會看到如下頁面,我們選擇 Sort by: difficulty,讓最簡單的題目被列出來,畢竟新手起步還是不要太好高騖遠才好。看來 A+B Problem 最簡單了,就從這題開始吧!
Timus all problems

這題的題目是什麼呢?程式的輸入只有一行,是兩個數字,計算兩者相加再輸出一行答案即可,簡單吧!不過在解題之前讓我們先看看題目頁面吧,首先最上面會有:

  • Time limit – 程式執行時間的限制
  • Memory limit – 程式使用記憶體的限制

再來則是題目的敘述,接下來還會有兩個段落特別提到:

  • Input – 程式輸入的資料及資料呈現的格式
  • Output – 程式的輸出

最後則會有範例的輸入及你的程式如果遇到此輸入時應該送出的輸出。
Timus 1000

等你解完程式打算上傳程式碼時,就點擊下方的 Submit solution。此外,如果卡住不知道怎麼解,還可以按下 Discussion 和大家一起討論解法呢。

上傳界面如下,在 JUDGE_ID 打入之前收到的自己 ID,然後在 Language 選擇自己使用的程式語言環境,這裡的選擇滿多的,像是 Python 就有不同版本,C/C++ 的話也可以選擇 Visual C/C++、GCC/G++、和支援新版 C11/C++11 的 GCC/G++ 等等。Problem 就是目前題目的題號。然後把答案程式碼貼在下面框框,或者用 Choose File 直接上傳原始碼。按下 Submit 就上傳了!
Timus submit

上傳後會看到如下頁面,可以看到程式還在執行中,其他人有的已經寫出正確解答了(Accepted),也有人有錯誤(Wrong answer),錯誤時它還會告訴你是錯在第幾筆測資呢(Test #),只是它當然不會告訴你測資的內容啦。
timus judgement result

按下重新整理,或者等一陣子讓它自己更新,就可以看到評分結果啦,正確了,是不是很開心呢:
timus accepted

點擊自己的名字可以進到個人頁面,這裡會顯示自己的積分和排名,還有解過的題目,看到一個個題目慢慢被解出來,真的有不少成就感。除此之外,也可以看看其他人的頁面喔!
timus user page

評分結果說明

  • Accepted. – 正確!
  • Compilation error. – 程式編譯錯誤,可能是打錯字等等。
  • Wrong answer. – 答案錯誤。
  • Time limit exceeded. – 程式跑太久了。
  • Memory limit exceeded. – 程式用太多記憶體了。
  • Output limit exceeded. – 程式輸出太多東西了。
  • Runtime error. – 程式跑的時候當掉了。
  • Restricted function. – 程式使用到了禁止的功能,像是企圖讀取伺服器上的檔案等等。

相關連結

張貼在 教學 | 標記 , , , , | 發表留言

資訊工程專題

前言

資訊工程專題是交大資工必修課程之一,專題的目的是讓學生根據自己所學,以一個特定主題進行研究。要通過這門課主要分為兩個部份:首先是尋找指導教授並進行研究,其次則是分兩個學期選修「資訊工程專題(一)(二)」等課程,並得到學分。

尋找指導教授與研究主題

根據指導教授和題目的不同,大家做的東西差異也很大。筆者看過有的人做很複雜的數學加密演算法;有人觀察腦波、研究情緒,也有人是做手機應用 App,也有圖形辨識、3D 變形等等。

在結束專題之後,筆者感覺,如果有志攻讀研究所的話,在決定專題時就先開始思考未來的研究方向會是一件好事。這麼做可以提早知道自己喜歡的課題,而且在準備研究所推甄時也比較不迷惘。說真的,若等到大四才開始思考這些事,真的有點匆促。此外,據說有些碩班推甄的評審委員很注重專題成果,所以如果成績不好或許也可靠優秀的專題脫穎而出。

學生以1~4個人為一組,自行尋找教授討論專題主題,不過有的時候系上也會公佈各教授的參考主題,但都沒有一定。每個老師會不會收專題生或者名額如何也沒有固定,目前上限是專任教授每年6名,合聘教授每年3名。由於是以一個學年計,所以如果上學期已經有指導學生的話下學期名額就會減少。每個教授的領域等資訊可在系上的「系所成員」頁面中取得。

在修習課程前得將專題申請表交至系辦。並不一定找完指導教授就馬上修課,所以一般人通常會提早開始找指導教授,而何時修習課程也沒有一定,筆者甚至有認識大二就修習完專題課程的同學。當然,專題的指導教授不一定會和未來碩班有絕對相關,不過也有些老師會優先收取專題生。

資訊工程專題課程

系上分別會在下學期和上學期的時間開設資訊工程專題(一)、資訊工程專題(二)等課程,通常學生會在大三下和大四上修習。這兩堂課都會開兩個班,每年的課程老師也不一定,如果同組學生選到不同班的話系辦會再幫忙湊合。而在上學期、下學期,也有另外開專題(一)、專題(二)。由於比較少人選擇這個時段,故都只會開一班。雖然並沒有規定要在何時修習專題課程,不過未來在選修前必須先通過基礎程式設計課程。

專題課程的上課方式是大家根據自己的研究利用簡報向大家報告,從研究方向、進度、成果展示等等主題不一,是由上課老師來決定。在報告後其他同學或許會提問以及提供一些建議。

專題課程的評分有一定比例由指導教授決定,另外的部份則由課程教授決定,實際比例可能根據不同班而不同。

專題相關比賽獎學金

國科會大專學生研究計畫 — 這是一項可以申請的專題研究補助款,據說不難通過。以個人為單位申請,不過同一計畫只能申請一次,故若由多人進行專題則通常會平分。同一人在同一年度僅能提出一次申請。補助包含了三萬二的人事費以及視需要而定最高一萬五的雜支費,雜支費須以購買研究相關設備為用實報實銷。在申請通過後於七月一日至次年二月底期間進行研究,在這期間如因畢業或其他原因終止研究即喪失補助資格,一般是在寒假時提出申請。實際情形以當年規定為準。

資訊工程系大學部專題競賽 — 在上學期的時候,系上會有個專題競賽,讓大家有機會在同學面前展示自己的專題,除了榮譽之外,也有一些獎金,決賽約在10月初就會結束。

大學部學生參與鑽石計畫重點領域實驗室,維基夥伴獎金 — 若是參加特定實驗室的專題計畫則有機會申請獎學金。

張貼在 交大課程 | 標記 , , , | 發表留言

交大資工相關獎學金、競賽、工讀與實習機會

前言

學生在求學的過程中,有時會因經濟上的困難,而無法專心學業。為了鼓勵學生讀書,交大設立許多獎學金提供同學申請。除了一般獎學金之外,本文也特別聚焦於資訊領域學生所能獲取的機會,包含競賽等等,期望幫助學生在資訊領域持續深造,而沒有後顧之憂。

獎學金

每個學期,在交通大學獎學金系統上都會列出許多獎學金供同學申請,此外,在交大資工的獎學金公告專欄也會列出資工系同學能申請的獎學金。同學可多加注意,本文僅列出一些比較有代表性或者較針對資工的獎學金。此外,由於交大提供學生出國當交換生的機會,而電機、資訊學院自己也有額外的交換生名額,本文也簡單列出幾項出國交換獎學金。

一般獎學金

獎學金最主要看的就是在校成績,通常以一學期為單位,一次只能申請一個獎學金。但有些獎學金由於金額較大,所以是以一個學年為單位,視個別規定為主。雖然有一些獎學金有清寒或家境的限制,但也有不限清寒的獎學金,申請前必先詳閱規則。

  • 潘文淵獎學金 – $25000

    這個獎學金在每年的上學期開始申請,僅有資訊、電子、通訊相關科系學生才有資格。由於金額較多,若申請到則下學期也無法申請其他獎學金。

  • 送珍敦品勵學獎學金 – $50000

    本獎學金於上學期申請,資訊學院有一個名額,必須要是大三或大四才符合資格。值得注意的是本獎學金的申請時間有時會比其他獎學金還晚,有可能會發生已經申請上其他獎學金而無法申請的情形。

  • 林公熊徵學田獎學金 – $100000

    本獎學金大約於9月申請,只要是大二以上即可申請。申請方式是由學生自行送件,金額滿高且只看成績而沒有太特殊的要求,值得關注。

  • 朱順一合勤學業優異獎學金 – $120000

    這個獎學金資訊學院有兩個名額,除了看成績外也會參考相關專題成果,只有在大三下可以申請。值得注意的是本獎學金申請後則大四無法申請獎學金,但在大三下是可以和其他獎學金同時申請的(仍需看個別規定為主)。

  • 資訊學院鄭宇恒獎助學金

    這是專給資訊學院的清寒生或單親子女的獎學金,獎助金額照實際審定為主。

  • 交大六十級校友李岳貞培育獎學金 – $90000

    這個獎學金是以補助一年的學雜費為主,唯有清寒生才可申請。

特殊獎學金

除此之外,也有一些不用特別申請就會發放的獎學金,以及一些因特殊目的而設立,或者專注於特殊領域而非單純獎勵整體學業表現的獎學金。其中像是服務義工獎學金等,由於性質特殊,所以可以和一般獎學金並行而不衝突,但仍需視個別獎學金規定為準。

  • 金竹獎、銀竹奬、銅竹獎 – $200000~$300000

    為鼓勵優秀新生,交大也設有大學部新生入學成績優異獎學金,只要入學成績不錯,或擁有特殊表現,就有可能被薦選。通常在正式入學前名單就會公佈,這幾乎是在交大能領取的最高額獎學金,學生可多把握機會。獎學金每學期發放一次,獲選者必須每學期都維持一定排名才能持續領受獎學金,否則無法領完全額。

  • 書卷獎 – $3000

    依班級人數而定,每學期成績名列前茅者可以獲得書卷獎的獎勵,一般而言金額為$3000且不分名次。一般的大學部學生最多可以得到7學期的書卷獎,故最多可以拿到$21000的獎學金。學校會依據成績核定名單,並公告受獎學生。

  • 核心基礎課程修課獎學金 – $2000

    交大資工也有針對部份核心課程設立獎學金,若修課成績良好就可得到修課獎學金的鼓勵,實際名額依修課人數而定。目前訂定的核心課程如下:離散數學、線性代數、資料結構、數位電路設計、演算法概論、程式語言、機率、組合語言與系統程式、作業系統概論。故最多可得$18000,實際課程仍依規定為準。

  • 施振榮社會服務義工獎學金 – $120000

    這是為了鼓勵學生參與社會服務及公益活動而設立的獎學金,在每學年初申請。獲獎同學需參與義工服務,以每時數$200~$375不等的標準支付獎學金,每學年最高可得十二萬元。本獎學金可連續申請,且名額不少,雖然由低收入戶者優先,但一般生也可申請。除此之外,也有「施振榮績優社團社長獎學金」,提供績優社團社長$20000的獎學金。

  • 殷之同電子實驗計畫獎學金 – $30000~$50000

    這個獎學金需以電子實驗相關專題成果來申請,以小組為單位,附上老師推薦函及報告。通過初審後需在評選會中以簡報及實際展示的方式介紹專題成果。

  • 大學部學生參與鑽石計畫重點領域實驗室–維基夥伴獎金 – $20000

    這個獎學金需參與特定實驗室的專題計畫並在當學期有修習專題課程才可申請,在學期初可得一萬元,而在學期末依專題成果可續得一萬元。由於一般而言專題進行一個學年,故最多可申請兩次,共四萬元。以個人為單位,同一計畫學生皆可申請。

  • 國科會大專學生研究計畫 – $47000

    這個性質較近於研究補助而非獎學金,學生可依自己進行的專題申請國科會補助。雖然是以個人為單位申請,不過同一計畫只能申請一次,故若由多人進行專題則通常會平分。同一人在同一年度僅能提出一次申請。補助包含了三萬二的人事費以及視需要而定最高一萬五的雜支費,雜支費須以購買研究相關設備為用實報實銷。在申請通過後於七月一日至次年二月底期間進行研究,在這期間如因畢業或其他原因終止研究即喪失補助資格,一般是在寒假時提出申請。

  • Google Anita Borg Memorial Scholarship – $45000

    這獎學金的設立目的是為了獎勵資訊相關科系的傑出女學生,鼓勵其從事電腦相關事業。全台名額約只有兩到三名,大學部至博士班皆可申請,僅限女性。近年交大獲獎成果豐碩。

  • 無名夢想獎學金 – $10000~$60000

    這個獎學金是以創意競賽的方式,由各組中挑選優秀的團隊授獎,此外也有清寒獎學金。

出國交換獎學金

交大和國際上多所學校皆有簽訂姊妹校契約,大學部的學生可到姊妹校就讀一學期到一學年,成為交換學生。詳細申請計畫和相關獎學金在國際事務處網站上皆有公告。在姊妹校就讀時僅需支付交通大學的學費,而不須支付對方學費,可說是出國增廣見聞的難得機會,在網站上也有學長姊的心得可供參考。國際化與發展辦公室以及資訊學院交換學生名單則有列出電機系額外和其他學校簽訂的交換學生機會。

以下列出校內最基本的交換獎學金,然而也有不少校外獎學金可供申請。

  • 優秀入學生出國短期進修獎學金 – $300000

    本獎學金是設立給特定學系入學生或成績優秀入學生而設置,最高可得一學年三十萬元的補助。

  • 優秀學生赴國外短期留學獎學金 – $200000

    這個獎學金則只要是成績優秀學生就有機會申請,詳細規定請參考網站說明。

競賽

每年資工相關的競賽可說是不勝枚舉,除了具有不少獎金外,也是非常有價值的經歷。在「獎金獵人」網站上有收集各領域的近期競賽,而在校內公佈欄或者 BBS 上也常有資訊張貼。以下簡單列舉幾項競賽:

程式解題競賽

此類競賽多半以 ACM ICPC 比賽形式為基礎,也是資工領域歷史最長的一種競賽形式。校內也有組織 PCCA,專門進行選手的培訓與相關課程的開設。

  • 新生盃程式設計競賽

    這是校內的程式設計競賽,比賽形式如同基礎程式設計的 ACM 競賽模式。以團體為單位,可由一年級新生或未曾在相關比賽中得獎的大二生參加。獎金最高可達一萬兩千元。

  • 程式設計競賽 校內例行賽

    校內偶而會舉行的個人賽,同樣是程式解題形式,獎金最高三千元。

  • 程式設計競賽 年度個人排名賽

    一年一度排名賽,獎金最高四萬元。

  • 全國大專 ITSA 盃程式設計桂冠挑戰大賽

    最近才開始舉辦的程式競賽。

  • 全國大專電腦軟體設計競賽甲組

    這可以說是國內 ICPC 的前哨戰,獎金最高十萬元。

  • ACM 國際大學生程序設計競賽

    這就是國際間最大的 ACM ICPC 賽事。得先從地區賽開始參加,最終才能打進世界決賽。如獲校內薦選出國參加比賽,除了有補助機票等費用外,也可獲得為數不少的獎金。若能在決賽中脫穎而出,其榮譽與獎金也是相當可觀。

其他相關競賽

此類競賽每年主題與獎項比較多元,所以只簡單列出幾個,建議多注意相關訊息,才有機會找到適合參加的比賽。

  • 網路通訊軟體與創意應用競賽
  • 騰雲駕霧應用程式創意大賽
  • 電信創新應用大賽
  • 全國大專校院開放軟體創作競賽
  • IBM 大型主機校園競賽

其他工讀與實習

工讀

校內的工讀有許多來源,例如「校內工讀系統」上的公告,BS2 BBS 上的訊息,或者是工讀同學之前的互相介紹等等。有時在BBS版上也會有臨時代班的訊息。另外,其實也有機會擔任像服務學習之類的課程助教,或者也有因為特定活動而產生的短期工讀機會。

一般的工讀多屬行政工作,有時在事情較少時也可能有機會讀自己的書。校內許多單位皆有工讀機會,像是系辦、圖書館、藝文中心等等。此外,校內的餐廳也可能會有打工機會,也有同學選擇在校外打工。在 PTT 上的 part-time 版也可找到資訊,家教是收入較豐的工讀方法之一,只是可能需要有管道與介紹較容易入門。在 BBS 上偶有消息,有時甚至有大學學生徵求某一課程的教學。

除了一般事務性打工,有時也會有較專業的工讀,像是翻譯或者維護網站、撰寫 App 等等。此外,在一些實驗室下參與專題或研究工作,也有機會拿到每月1~2千不等的研究費。而在資工系計算機中心擔任助教,也可拿到每月最高約 $5000 的獎金。

校內打工的薪資進帳可在「薪資暨所得稅管理/查詢系統」,獎學金也可在同一網站查詢。

實習

除了一般性質的打工,在暑假時,常有公司招募專業的實習生,此類實習除了可以累積工作經驗外,通常也有支薪。除了在竹科有不少公司外,一些較大的軟體公司也有不錯的實習機會,像是Google、IBM、Yahoo!、趨勢等,常有固定的實習機會。可多注意系上公告,但有時也需在人力銀行等網站搜尋。

張貼在 實用技能, 交大生活 | 標記 , , , , , | 發表留言

程式語言

前言

程式語言是交大資工大二的必修課程(自101學年後已非必修),使用的課本為《Concepts of Programming Languages》。在這堂課中,會概略討論程式語言設計的原則,並簡單介紹程式語言發展的歷史以及設計程式語言的原理,包含語言的語法以及各種程式結構與特性的實做方式等等。值得注意的是這堂課並非學習使用程式語言的入門課程,而是探討程式語言背後的設計原理。而學生若先擁有寫程式的經驗也能對課程擁有較好的理解。

課程內容

課程主題主要可分為三個大項,第一是語言的格式和語法。例如敘述語言 SyntaxContext-free grammarBNF,還有用分析算術運算式為例子介紹 Lexical AnalysisParsing 等概念。這部份在正規語言概論和編譯器設計概論課程中也會再次提到。

第二則是根據設計程式語言時會遇到的幾項課題,比較各種不同設計的優缺點、實做的方法,以及提一些實際語言的例子。

最後則是介紹程式語言的幾種不同設計哲學

程式語言

許多語言設計的精神如 functional languages,和常用的程式語言有很大不同。若能實際嘗試使用語言,常能獲得較深的理解,所以有些老師也會讓學生實際學習使用其中的一兩種語言,以下便條列幾個較知名的程式語言:

參考

張貼在 交大課程 | 標記 , , , , , , , | 發表留言

微處理機系統實驗

前言

微處理機系統實驗是交大資工大三上的課程,在這門課中,學生將會撰寫在 microcontroller 上執行的程式,利用實驗版或甚至麵包版,實際使單晶片和環境互動。所謂的 microcontroller,指的是把中央處理器、記憶體、各種輸入出介面等等都整合在一起的小型計算機。雖然計算能力沒有一般電腦的 CPU 好,但體積小而便宜,被運用在簡單的嵌入式系統中。這堂課使用的微處理機為 8051,使用的語言主要為 8051 的組合語言,但有些班也可能使用 8051 C 來做更複雜的操作。

在課程中將會操作許多的輸出入,包含按鍵、開關、數字鍵盤、透過光敏電阻熱感電阻配合 ADC 讀取環境的值。或者是 LED 燈七段顯示器點矩陣顯示器的輸出,控制馬達、蜂鳴器,甚至是利用 RS-232 和電腦溝通等等。

筆者的期末專題是一個搶答遊戲,利用 RS-232 從電腦終端機顯示題目,兩個玩家透過按鍵搶答,答對時玩家的四驅車會前進,誰先到達終點即獲勝,題目中也有利用蜂鳴器來實做的猜歌題。也有同學是做打地鼠遊戲。

學習資源

這堂課為重實做的課程,練習絕不可少。而讀者若有學過「組合語言與程式程式」,8051 的環境細節與組語的內容其實不深,很快就能進入狀況。讀者可以參考《The 8051/8052 Microcontroller》裡 8051 與組語的基本介紹。或者另外一本《The 8051 Microcontroller》有更全面的教學及練習題。對於 8051 C 的部份,和原始 C 的差別其實不大。讀者可參考:《Embedded C》。而市面上也可找到不少以實做為導向的單晶片中文書籍。

網路上也有不少教學資源:

環境

開發環境可以使用 Keil C51 µVision IDE,不管是組語或者 C 都可以組/編譯。如果你使用 Linux 系的作業系統,也可以使用 MCU 8051 IDE,不過需注意兩者語法稍有不同。另外一個和 MCU 8051 IDE 語法類似且在 Windows 上使用的是 MIDE-51。其中,Keil C 是多數書籍主要使用的開發環境,但免費版對程式大小有些許限制,另外兩個 IDE 則無。

由於有很多學校皆有 8051 的課程,開發板取得非常容易。搜尋「8051 開發板」、「8051 實驗板」皆可找到不少商家販賣。開發時,可以使用 ICE 和電腦連結,即時模擬程式在 8051 上執行的結果,也可以利用燒錄器實際燒到 8051 上再執行。前者較為方便,也較容易除錯,所以通常在開發早期皆透過 ICE 執行程式,事實上在課程中你幾乎不會需要把程式實際燒錄到 8051 上。燒錄器和模擬器皆可在網路上購買。和 8051 相容的單晶片非常多,基本款的十分便宜,在一般的電子材料行皆可購買。其他一些週邊材料也多半可在電子材料行購買到。或者你也可到 iCshop 等網路商店找找看。

參考練習題

  1. 用七段顯示器製作配合按鍵製作可設定的時鐘。
  2. 用七段顯示器和數字鍵盤實做計算機。
  3. 用蜂鳴器播放一段音樂。

延伸閱讀

筆者想在這裡介紹另一個平台::Arduino。他具有很低的入門門檻,且近年在各國學校裡愈來愈流行。他是一個開放的硬體開發平台,不僅軟體原始碼是開放的,連硬體電路設計圖都是開放的,玩家甚至可以自行組裝出 Arduino。可參考:Arduino 簡介。而由於具有豐富的函式庫,玩家可以輕易的寫出複雜的功能。種種因素讓 Arduino 深受業餘玩家的喜愛。在台灣,玩 Arduino 的人也漸漸增加,慢慢形成一個社群。

這也是筆者在此介紹他的原因,若讀者對自己動手作專題很有興趣,但對組語或其他硬體知識並不熟悉,則 Arduino 非常值得一試。他的開發工具從硬體、模擬器、IDE、燒錄器,通通都有官方套件,台灣也有代理商可購買。

相關連結

張貼在 交大課程 | 標記 , , , , , , | 發表留言

大學裡的實用搜尋技巧

身為資工人,搜尋技巧十分重要。許多的學問在網路上都有豐富的資源,懂得搜尋,能讓你更方便的學習。而有時遇到一些問題時,身邊的人都沒有經驗,你也沒有時間仔細鑽研裡頭的學問,此時透過搜尋引擎,往往能找到可用的解法。尤其,有時你會發現,在朋友間常會彼此詢問一些電腦上的問題,這些問題其實在網路上都可搜尋到的。若能善用搜尋,將會為彼此節省不少時間。

〈如何取得教科書〉一文中,我們已討論過實體書籍的取得,本文將注重在網路資源的探索。首先,先介紹幾個網站:

  • Google (en)

    萬用搜尋引擎,若想搜尋英文資料,使用英文版 Google 通常能得到較好的結果。尤其程式語言的資訊在網路上多以英文居多,Google 為資工人必備網站之一。

  • Google 中文

    中文版 Google,搜尋中文資料時可以使用。

  • Wikipedia

    線上百科全書,由網友編撰。你可以發現每個條目都寫的非常詳細,有時甚至比課本寫的更為完整。筆者上課時,老師甚至曾用 Wikipedia 條目講解 red-black tree

  • The Free Dictionary

    整合各大字典,查定義和解釋時可以使用。

  • Amazon.com

    線上書店,使用她倒不見得是為了購書。在 amazon.com 上,每本書幾乎都有豐富的讀者評價,加上相關書籍的推薦,使得 Amazon 變成一個協助我們判斷該使用哪本書的參考來源。

接著,筆者將依照幾個使用情境解說搜尋技巧。在下文中,若無特別說明,則使用的搜尋引擎皆為 Google (en)。

搜尋教學資源

要搜尋教學,通常只要配合幾個關鍵字就可以達到目的。例如,你想學習 Python,則可嘗試以下關鍵字:

  • python tutorials
  • python books recommendation
  • python books
  • python guide
  • python ebooks
  • learn python
  • python documentation

搜尋習題解答

當你自學時,若寫完了習題卻無法確定答案,總是會讓學習效果打折。若你想搜尋課本的解答,可以透過課本名稱加上 solutions 關鍵字,如搜尋「Introduction to Algorithms solutions」,則可輕易發現官方釋出的習題解答:Solutions to exercises and problems

有時官方並不會釋出習題解答,這時就得使用更為進階的技巧。首先注意到,這些教科書通常在全球都有使用,所以派出的習題也大同小異。而某些教授會把作業解答放在網站上,我們只要想辦法找到這些解答就行了。這時,我們通常得針對特定題目進行搜尋:

整句搜尋

想找特定題目,最重要的就是過濾掉不必要的資訊,以演算法概論中的題目為例:

Let X[1..n] and Y[1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithm to find the median of all 2n elements in arrays X and Y.

我們可以以其中較有特色的句子,配合 Google 的完全符合,用「"find the median of all 2n elements in arrays X and Y"」(注意加上雙引號)來搜尋,便可輕易發現一模一樣的題目以及參考解答。有時在題目中會有一些特殊符號,此時用完全符合搜尋可能不會有好結果,則可刪除特殊符號後,用一般搜尋方式(注意此例其實可以直接搜尋,但有些數學符號是無法表示的):

Let X and Y be two arrays each containing n numbers already

英文?中文?

資工這領域,許多資料多以英文撰成,習題解答也不例外,若是透過中文搜尋沒有好結果時,往往可以用英文找出答案。例如在計算機網路概論中,有一個跟 Ethernet 和 ARP 有關的實驗,其開頭語如下:

本次實驗主要是讓同學瞭解 Ethernet Protocol 和 ARP protocol,透過 Wireshark 的使用,來觀察兩個 protocol 的詳細資訊。

若是使用之前的整句技巧來搜尋,恐怕很難找到結果。但若將中文語句刪除,並增添 lab 關鍵字,以「Ethernet Protocol ARP protocol Wireshark lab」來作搜尋,輕易的便找到英文版的 lab 以及其 solution。

誠然,視題材的不同,也不盡然都得透過英文搜尋,有時甚至可能在簡體中文網站較易發現。讀者若無法輕易判斷時,可多試幾次不同找法。

但小心:有時你會發現找到的解答(即使是官方釋出)是錯誤的!無論如何,都得用自己的思考小心判斷。

搜尋考古題

考古題的取得通常是同學相傳或者老師公佈,但在少數的情況裡,其實透過搜尋還是能取得考古題的,舉例來說:

  • 計算機系統管理 期中考 site:nctu.edu.tw
  • 微積分 考古題 交大

使用 site 是要限定在交大網域裡搜尋。在這兩個例子裡,妳都可以找到官方釋出的考古題。

搜尋問題解法

有時當你在編譯或執行程式時會發生錯誤,此時你多半會得到錯誤訊息,透過這錯誤訊息,我們往往可以在網路上找到他的成因以及解法。但在作這種搜尋時,最重要的就是關鍵字的選法了。透過輸入重要的關鍵字,能過濾出真正想要的資訊。例如以下情形,讀者或可嘗試不同關鍵字所造成的結果:

  • source.cpp:10: warning: ignoring return value of ‘int scanf(const char*, …)’,
  • declared with attribute warn_unused_result
  • ignoring return value of scanf

像是 source.cpp 或者行號等等不必要訊息通常將之去除會得到較好的結果。而有時也可針對某些特殊語句下雙引號,使用完全符合的功能。

網路上也有像 Stack Overflow 等專門發問與回答的網站。除了可以直接到網站搜尋外,其實筆者比較習慣用「foreign key sqlite stack overflow」、「最短路徑 yahoo 知識」之類的關鍵字,直接將 stack overflow 等等插入 Google 搜尋之中。

搜尋程式碼

有時對程式的實做細節較不熟悉,想要參考前人作法,要怎麼辦呢?透過網路搜尋,一樣可以找到公開的程式碼。以 SHA-1 為例,你可以嘗試以下關鍵字:

  • sha-1 c code
  • sha 1 sourcecode
  • sha1 implementation java
  • sha 1 example

另一種方法則是直接在程式碼網站上搜尋,知名的如 Google Codegithub 等等。

值得注意的是,一旦看了別人的程式碼,有時便會很難寫出自己的東西,一般是建議先自己寫過再參考。或者,就得對自己有高一點的要求。

結語

在有網路的時代,搜尋技巧絕對至關重要。透過搜尋引擎,能讓自己接觸到來自全球的最新資訊。你也可以搜尋「google 搜尋教學」觀看更多技巧,筆者也在文末條列幾個教學,供大家參考。

延伸閱讀

張貼在 學習資源, 實用技能 | 標記 , , , , , , | 發表留言