有了網路之後,成立了許多程式人專屬的BBS或是各式的論壇,不只加速了這個詢問其他人的過程,接觸的面積也擴大,所接觸到程式人的水平更是增加。有了BBS或論壇這種形式的交流管道,讓所有遭遇到問題的程式人,都能夠在較短的時間內,在別人的協助下,得以解決自己面臨的問題。許多BBS或論壇,有所謂的「精華區」機制,蒐集了時常被詢問的問題及解答,當程式人遇到問題時,可以直接先切入,使得解決問題的速度得以加快。近來,許多論壇發展出積點制度,以給點數做為獎賞,鼓勵使用者提供解決問題的答案。這種制度還可以將實質的激勵給予那些主動協助的程式人。

BBS或論壇的交流固然為「問與答」的形式,提供了更快的速度、更多的接觸、以及更佳的水平,但真的要讓「解決問題」提升到2.0境界,其實還是等到搜尋引擎展現強大的威力之後。

當許多論壇經過程式人們用心的灌溉之後,長期下來,已經累積了許多珍貴有用的資訊。可是,由於各個論壇分散在網路世界的各處,而每個論壇又各有組織,倘若不是自己時常造訪的論壇,可能不容易找到問題的答案。而搜尋引擎──我們甚至可以直言說就是Google──便扮演著彙整聚集起來的關鍵角色,統合這些散落在網路世界各處的問與答,或是各種有用的文章。透過適當的關鍵字,不少看似難解的問題,立即有了答案。

善用搜尋引擎,立即找到答案
我有時會收到一些朋友的來信,裡頭提到他們在使用Visual Studio 2005編譯DirectShow專案時的一個linker error。它的形式大概像是這樣:



倘若你試著直接把它扔進Google的搜尋條件裡,在本文撰寫的同時所搜尋到的結果,第一筆是在forum.microsoft.com裡的一串討論串,標題為「Linker problems with VStudio 2005 and DirectShow」,有位參與討論的仁兄提供了答案:



沒錯,只要在Visual Studio 2005中,將其中的「Treat wchar_t as Built-in type」的選項設為no,上述linker回報的錯誤,即可一次全部消除。

解決問題的方式就是這麼簡單。可是,我仍然偶而會收到一些朋友來詢問這個問題。這似乎意謂著,有很多程式人嘗試解決問題時,並不會善用Google的無上神力。事實上,你要做的事情很簡單,原封不動地把錯誤訊息複製,貼到Google網站上搜尋,然後從檢索結果中找到可能的答案。許多時候,這麼做就可以解決問題,但有些時候,你會需要更進一步適當過濾收到的錯誤訊息,擷取出訊息中的關鍵字詞,然後再丟給Google。

你透過網路足以連接到數量難計的程式人,他們過去所有的討論、分享,都因為Google而將散落的片段給連結起來,這些聚集起來的片段,成了程式人共通的寶貴資產。懂得如何交付Google一把正確的鑰匙(關鍵字詞)的程式人,就能開啟這寶箱、取得寶藏。

在Google變得愈來愈強大的這幾年內,我利用這種方法,解決掉無數的問題。時常在想,倘若少掉了Google或其他搜尋引擎的力量,這些問題究竟會需要耗費掉我多少時間才能解決呢?事實上,或許根本解決不了吧。一名程式人個人的力量再怎麼強大,與數量難計的程式人力量及經驗相比,根本一點都微不足道。有了連接這無窮力量的網路,有了串接無數知識片段的Google,只要程式人知道如何用合適的關鍵字詞來啟動,答案的獲取,變得又快又簡單。

用對獨特的關鍵字詞,避免累贅、重複
而這也正是在上一回文中開章明義提到的──程式人需要不同類型的訓練。從程式設計1.0時代的強調如何獨力解決問題,到程式設計2.0時代的強調善用搜尋引擎的力量,找到解決問題的方案或是線索,加以適當地調整,修改成適合自己的解決方案。在這種情況下,知道如何把自身遭遇的問題,轉化成為能夠搜尋到準確結果的關鍵字詞,就變得重要。但是,如何寫下一個好的查詢條件?

一定要試著提供精確、而且資訊量高的關鍵字詞。越是使用一些能夠表示你問題獨特性的關鍵字詞,就越能精準地找出所需的答案。

什麼是「能夠表示你問題獨特性的關鍵字詞」呢?基本上,越有可能出現在愈多文章中的詞,獨特性就越低。我們在搜尋問題時,目的是搜尋結果越少但同時越精確。倘若我們提供的關鍵字詞可能出現在較多的文章時,就意謂著我們的搜尋條件可能會查找到更多的文章,就可能藏著更多不想要的「雜質」。

例如,之前我遇過一個Tomcat在搭配Apache做為Reverse Proxy,會發生Session遺失的情況。也許你可以輸入「java tomcat session lost reverse proxy」做為搜尋條件,但是,「java」本身是一個比較普遍的字詞,在搜尋條件中把它含入,就會引入較多和主題不相關的文章。而且,「tomcat」本身已經隱含「java」的觀念,在搜尋條件中額外輸入「java」,只是累贅,而且又會干擾搜尋的準確度。越多的關鍵字詞,不意謂著能得到較好的搜尋結果。你應該拿捏足以表達問題的完整性,又要兼顧描述字詞的獨特性。

鎖定查詢範圍,增加檢索準確性
除了鍵入更好的關鍵字詞外,由於搜尋引擎還提供許多查詢的語法,妥善運用也能提供極大的幫助。例如Google提供了一個site的語法,可以讓你限定所搜尋網頁必須在指定的網站內。例如,你可以在查詢條件中輸入:site:microsoft.com,可以限制所搜尋網頁皆在microsoft.com的網域名稱之下。對於只想要搜尋微軟官方資訊,或是微軟官方論壇上資訊的人來說,就可以更輕易地得到想要的結果。此外,像filetype的語法,也是能夠有效縮小搜尋範圍的一個工具。它讓你可以指定搜尋檔案的副檔名,例如你可以指定filetype:.h來限制所搜尋的結果一定是副檔名為.h的檔案。透過一些語法,你可以有效縮小範圍,避免搜尋結果過多。

先求準、再外擴,並且適當地搭配特定語法
搜尋技巧的重點在於,增加精確度的同時不失廣度。這二者的目標是衝突的,因為當搜尋的廣度愈大時,精確度難免下降。我們有時很難透過一次搜尋,就找到答案。而且,現在網路上查詢資訊所面對的問題是數量過多,而不是缺乏。我的建議是,先以精確度為優先考量,當搜尋結果過少,又沒有所需的答案時,再逐漸擴展搜尋的廣度。當搜尋結果過多,再利用各種限制範圍的搜尋語法,縮小範圍以提高準確度。

透過搜尋引擎來解決自己所遭遇到的問題,已是今日程式人不可或缺的技能之一。越是知道如何善用搜尋引擎來解決問題,越是能增加解決問題的效率及品質。而這也正是「程式設計2.0」時代的另一個重大的變化。

作者簡介:
王建興
清華大學資訊工程系的博士研究生,研究興趣包括電腦網路、點對點網路、分散式網路管理、以及行動式代理人,專長則是Internet應用系統的開發。曾參與過的開發專案性質十分廣泛而且不同,從ERP、PC Game到P2P網路電話都在他的涉獵範圍之內。

相關閱讀:
程式設計2.0 (1)善用優質網站資源,快速上手新技術
程式設計2.0 (3)善用開放源碼,發揮槓桿效應

熱門新聞

Advertisement