如何使用google解決問題(來自《程序員》雜誌)

如何使用google解決問題

redguardtoo著

文章選自2004年《程序員》雜誌第8期P56

前面收集了篇如何問問題的文章就是《學會提問》http://blog.programfan.com/article.asp?id=7207,覺得很不錯,這裏繼續有關如何解決問題,安安注

本文介紹了使用google解決難題的一些高級技術,重點講述瞭如何選擇關鍵字,如何分析過濾信息等等。


目錄 (目錄及一些聲明還有最後提供的技巧是網上熱心讀者,安安注
1. 聲明
2. 本文所面向的讀者
3. 如何使用google解決各種問題
3.1. 不可能完成的任務
3.2. 如何快速解決具體技術問題
3.3. 如何解決複雜抽象的問題
4. 如何提高自己的搜索能力
4.1. 態度決定一切
4.2. 瘋狂搜索法
4.3. 如何提高“搜索素養”
5. 相關的工具、資源

1. 聲明

請讀者不要使用本文所介紹的技巧從事違法、不道德的事情。我對於本文所導致的任何後果概不負責。


2. 本文所面向的讀者

本文介紹了使用google解決難題的一些高級技術,重點講述瞭如何選擇關鍵字,如何分析過濾信息等等。通過閱讀本文,你會明白在極大的時間壓力下快速解決高難度問題的技巧。你也能瞭解如何對一些複雜的問題進行調查並給方案。

(任何對解決問題有興趣的人都適合閱讀本文,只要:

你不相信“軟件藍領”的說法。你相信解決問題的能力是人的本能。你相信任何問題的本質都是一樣的。你相信解決問題需要的能力是想象力和舉一反三的能力。

說的明白一點,我希望讀者是有職業榮譽感的工程師,或者是能夠理解這種榮譽感的人。有些人害怕自己即將被技術的進步所淘汰,於是試圖通過貶低技術人員的地位來獲得安全感。由於他們不能否認技術所取得的偉大成就,於是使用一些政治手腕來間接地達到目的。最常用的手段就是雖然技術是偉大,但是工程師是分等級的(是不是封建殘餘思想作怪?),低級的工程師就是藍領,而中國需要的是大量的藍領,等等。這種有封建殘餘思想的人是不可能學習新東西的,當然也不可能理解本文,因爲要成爲google高手,就必須具備開發的頭腦和豐富的想象力。)

上面括弧裏面的不是原文內容,可能是網上讀者所加,安安注


3. 如何使用google解決各種問題

3.1. 不可能完成的任務

一箇中國公司的項目組的主要工作是測試一個日本的項目組用C語言開發的系統(調試器爲gdb)。一次日本程序員遇到了一個奇怪的問題,當他們用gdb調試時,程序會突然退出。這些程序員研究了兩天兩夜,不能找出原因。於是他們把退出前調試器上顯示的一段錯誤信息email給中國小組。要求這個小組找出原因。

那時,我剛加入這個公司。這個組的組長要我幫忙。我看了錯誤信息,用到了我不熟悉的進程間通信技術。我按照通常的調試流程,要求重現錯誤。“無法重現,因爲不知道程序是在哪崩潰的,而我們這也沒有運行環境”,回答的斬釘截鐵。我要求看源代碼。組長告訴我,可以給我看的都是舊代碼,真正出問題的代碼早更新過幾個版本了,中方暫時還拿不到新代碼。說白了,就是沒代碼。我告訴組長,在這種條件下要解決問題是不可能的。但是領導的意思是利用手頭的信息,爭取當天解決。

讓我小結一下。無法重現錯誤,沒有源代碼,不瞭解相關技術,無法定位bug的大概位置,開發者自己花了兩天兩夜也無法找出bug原因。而我只有一小段錯誤信息,除此之外連繫統幹什麼的都不清楚,並被告知不要指望進一步的幫助了。我該如何解決這個問題?

在讀者解答這個問題前,我給點提示,日本程序員都是有經驗的,他們肯定已將錯誤信息用google翻了個遍。

給出這個問題的答案花了我15分鐘時間。這15分鐘時間內我沒有讀任何文檔或者代碼。在說明答案前,讓我先試着給出思路。我猜日本人已經查過相關的技術手冊了,所以我沒有必要讀手冊。給我的信息有限,是因爲日方只能提供這些線索。現在看看給我們的一段錯誤信息是什麼?無非是程序退出時,調試器gdb打印的一些信息。例如退出的進程收到了什麼信號,該信號是哪個進程發送的等等。我的下一個假設就是日方已經google過這些信息,所以我也不能從這些信息中挖出什麼東西了。

要解決問題,就必須發揮想象力,做日本人“沒有做過的事情”。日本人沒有做過什麼?我猜沒有做過一件事情,那就是google一下冗餘信息。gdb顯示錯誤信息的時候,會以一定的格式顯示,比如若干個空格加個冒號什麼的。現在我將這些錯誤信息隨機取出一行,這一行既包括了有用的信息,也包括了冗餘的信息。我在這一行的內容前後加上雙引號,以告訴google儘可能嚴格匹配該行。然後以此作爲關鍵字google到了答案。答案來自於gdb的一個mailing list,gdb的開發者解釋說這是gdb的一個bug,該bug在特定條件下使用特定版本的gdb調試纔會發生。

事實上當時我根本沒有做如上的分析,接到任務後我做的第一件事就是google冗餘信息。這是我的習慣。冗餘信息和有意義的信息一起檢索的好處是可以快速定位到有同樣問題的人。說的更明白一點,象我這樣的懶人,如果要在網上求助的話,一般順手把調試器中的相關信息全部粘貼到網上,我不會先對這些信息進行排版的。如果要儘快地得到答案,我找的就是象我一樣的懶人。當然這樣做的壞處是會過濾掉一些有用的信息。例如我現在檢索gdb的冗餘信息,就排除了使用別的調試器的人。好在internet上信息實在是太豐富,過濾掉有用信息不是問題。真正的的問題是從無用信息中快速定位有用信息!


3.2. 如何快速解決具體技術問題

一些“聰明人”相信,只要有某種“偉大、正確”的思想(比如某種“大法”)的指導,任何難題都可以擺平(擺平的方法就是背誦一下偉大思想中的某些特別棒的詞)。沒有這種信仰的人,只是愚昧無知的小爬蟲。“聰明人”解決問題很簡單,對問題大面上講一講,再念一下咒語。本文是由我,小爬蟲中的一條寫的,小爬蟲不能理解偉大的思想。我解決問題採用和“聰明人”相反的方法。就是從不起眼的細節入手,發揮想象力,舉一反三。這個過程中“偉大、正確”的思想連影子也沒有出現。

最近我接到了一個任務,要求實現一個掃描給定目錄下的文件的模塊。問題的難點是這個模塊作爲一個共享模塊(shared ojbect),必須知道自己的物理路徑。由於運行平臺是Linux,並沒有直接支持這種功能的API函數(和Linux應用程序的部署規範有關係)。現在如果我必須實現該功能,該使用什麼關鍵字搜索?

最直接的想法就是google“get shared object path linux”。得到的大都是如何在Linux下開發共享模塊的入門文章。增加其他關鍵字,例如“shared library”,“physical path”,結果也差不多。這個問題的難點不在於選擇足夠多的關鍵字以過濾出需要的信息,而是根本就沒有信息可以過濾。之所以沒有信息可以過濾,是因爲Linux有自己的應用程序部署規範(例如配置文件應該放在/etc目錄下,可執行文件放在/usr/local/bin目錄下等)。如果遵循了這種規範,就沒有必要知道共享模塊的物理路徑了。通常獲得共享模塊的物理路徑是爲了由該路徑推算配置文件的路徑。

最終問題還是被解決了。我使用了什麼關鍵字?答案很簡單,既然正面攻擊無效,就旁敲側擊。想一想,如果運行平臺是Windows,如何實現該功能?Windows下通常用“GetModuleFileName”API實現。如果有些程序員要把Window的程序移植到Linux下,他(她)該拿GetModuleFileName怎麼辦呢?答案出來了,google“GetModuleFileName linux”。搜索結果第一條標題是“Qt-interest Archive - location of the program i am running”,就是關於如何獲得一個可執行文件的路徑的。分析一下google第一頁的搜索結果,發覺有一些干擾信息(如何判斷干擾信息我將在後文說明)。這說明我們需要稍微修正一下關鍵字。google“GetModuleFileName +linux”(這裏的加號表示linux作爲關鍵字必須出現在搜索結果中)。搜索結果第17條標題爲“Guide to Making Relocatable Applications :: autopackage”,這就是標準答案了。

可以看出,解決問題的關鍵有兩個要素。第一個要素是相關的背景知識。作爲業內人士,我知道很多公司和個人正在將Windows平臺下的軟件移植到Linux上。我也知道Windows下如何獲得全路徑。第二個要素,結合背景知識發揮想象力,通過一些有特點的細節搜索到正確的答案。“GetModuleFileName”就是細節,我想到了可以把這個詞和“linux”結合在一起搜索。

讓我再舉幾個例子,說明如何從細節入手,找到問題的答案。

比如說我要找一個名叫MySoft的軟件。我可以google“MySoft 下載”。如果這樣做卻找不到該軟件的下載網址,該換個什麼關鍵字呢?一些提供bt下載的網站會提供少見的軟件的。我不是建議使用“MySoft 下載 bt”或者“MySoft 下載 變態”之類的關鍵字。我要做的是觀察一下變態網站的下載頁面,真正的關鍵字是不起眼而又特殊的。在下載頁面我們看到“日期”這個詞,這個詞能做作爲關鍵字嗎?不能。這個詞太常用。同樣的下載頁面中的“種子”這個單詞適合做關鍵字。把軟件名和“種子”組合起來作關鍵字,應該不會使我們搜索到農業網站。觀察一下那些下載網址的超鏈接,可看到超鏈接的值爲“http://xxx.com/torrent/UPLOAD/index.php?url==4”,多觀察幾個超鏈接,可以看到“torrent”是個不錯的關鍵字。我猜google“MySoft torrent”的結果應該不會和河流有什麼關係。結論就是,可以google“軟件名 torrent 種子”來找到需要的軟件。

在上例,我對變態下載的瞭解有助於解決問題。關鍵字我是通過觀察得到的。這些關鍵字對於業餘者只是不起眼的細節。

如果我要找VB(Visual Basic)語言寫的源代碼的話,我會加上“"end sub"”關鍵字,因爲這個關鍵字是VB的語法特有的。如果我要找C/C++代碼參考,我會加上“CVS”作爲關鍵字,這是因爲很多開放源代碼的項目都是用C或者C++寫的,而這些項目都是用CVS作爲版本服務器,並用CVS服務器的插件公佈到網上的。VB語法和開源軟件,這是我的背景知識。但具有相同背景知識的人不一定能找出關鍵字來。重要的是觀察。觀察VB的代碼,觀察開源軟件的主頁,發揮想象力,從細節中提煉出關鍵字。

讀到這裏,讀者是不是有點開竅了?解決問題分兩步走。首先要有背景知識。然後是發揮想象力,將看似無關的細節結合起來,提煉出關鍵字。


3.3. 如何解決複雜抽象的問題

一些複雜抽象問題不可能快速找到答案。但是隻要方法正確,這些問題最終還是可以使用google一步步解決。步驟是這樣的。首先你對問題進行一般描述,從描述中取出關鍵字google。接下來閱讀google的搜索結果,選出有價值的文章。然後從這些文章中分析出有代表性的關鍵字,繼續搜索,閱讀結果。重複以上步驟。要注意的是,關鍵字不應冷門,因爲相對於問題的複雜性和抽象性,你的背景知識是不夠的。搜索、閱讀、搜索的步驟重複多次後,應該對問題有所瞭解了。在儘可能多地收集資料後,現在可以得出一個初步結論(不要忘記收集不支持該結論的資料)。下一步可以從大問題中提煉出小問題,使用前述的技巧解決小問題。這樣做的目的是獲得對大問題的切身感受,不是試圖解決大問題本身。關鍵是多角度收集資料。資料不應是相互證明的,最好是互相沖突的。我再強調一下,由於問題的複雜性和抽象性,不要期望在短期內使用特殊技巧解決問題。有了結論,有了支持和反對的資料,又做過一些小的試驗,你下一步要做的就是將結論,資料,試驗結果提交討論(超人可以光速飛行,你不可以)。就個人能做的工作而言,你做到這裏就不錯了。從問題本身來說,複雜抽象的問題的真正的解決,需要許多人長時間地討論和試驗。

下面我講給出演示,說明這類問題如何着手。

我們以“軟件開發行業的新手應該學習什麼編程語言,如何學習”爲例。如前文所說,應該選擇一般描述的關鍵字。所以我建議你不要把和編程語言有關的關鍵字加入,而是應該選擇如何學習編程的關鍵字。“how to”就是中文的“如何”,是老外技術文章最愛用的標題。(題外話,“how to”是我個人的王牌關鍵字)。“learn programming”的中文意思就是“學習編程”。加上前面所說的“how to”,完整的關鍵字爲“"how to" learn programming”(注意:how to 前後的英文雙引號表示將how to這個詞組作爲一個詞來搜索)。

現在我們看一看搜索結果。搜索結果第五條“Teach Yourself Programming in Ten Years(十年才能學會編程)”就是一篇很好的文章,介紹了學習編程正確的態度和方法。其他的還有諸如“How To Pick A Programming Language(如何選擇編程語言)”,你應該比較感興趣吧。還有諸如“How To Become A Hacker(如何成爲黑客)”,這可是一篇經典文獻啊(這裏的黑客是指優秀的程序員)。其他的還有“How to Get Started with C++(如何開始學習C++)”,“Instant Hacking : Learn how to program with Python(如何使用python編程)”,“How Java Works(java是如何工作的)”,“How C Programming Works(C是如何工作的)”,“How to Program Perl(如何學習Perl編程)”,“How to: Learn Visual Basic Programming(如何學習Visual Basic編程)”等等。

關於《Teach Yourself Programming in Ten Years(十年才能學會編程)》這篇文章,有必要再談一談。希望你不要被這個標題嚇住了。讓我告訴你一個小祕訣,關於如何判斷選對了關鍵字的祕訣。作爲初學者,你不瞭解軟件開發,就象我不瞭解如何導演電影。所以,也許你自認爲沒有能力分析搜索結果。有一個辦法可以幫你在初次搜索的時候作出正確的判斷。作個初學者,你會自認爲對軟件開發的“常識”和流行趨勢還有點了解,例如你認爲好程序註釋多,例如你認爲編程可以在21天你速成。這可能是一種偏見,google是沒有偏見的。如果你自認爲使用了正確的關鍵字,google的結果卻都是一些和你的“常識”唱反調的文章,說明了什麼?說明你選對了關鍵字。

假設你選好了幾種編程語言,現在該是瞭解那些語言的缺點的時候了。老外對於某種語言和某種文化最愛用的批評語就是“is dead(要玩完了)”,例如“C++ is dead”。現在就讓我們google“C++ "is dead"”(注意:is dead 前後的英文雙引號)。搜索結果有點出乎意料?搜索結果竟然大都是“Java is dead”,這不表明Java就是一種很差的語言,進一步的結論需要閱讀搜索結果。現在我們調查的編程語言是C++!讓我們實行更嚴格的關鍵字匹配,google“"C++ is dead"”(注意:C++ is dead 前後的英文雙引號)。終於得到相關的文章了。這些文章不僅討論了C++,對於你選擇其他編程語言是很有幫助的。例如標題爲“khakipants: things to learn”的文章就討論了學習OCaml和Ruby的必要性。讓我們再試一試其他編程語言(這樣多來幾次你愛上了搜索),google“"Visual Basic is dead"”,google“"Perl is dead"”,google“"Html is dead"”。

最後,你終於決定要學習一種語言,比如C++,現在就是了解一下關於C++有哪些工具和資源的時候了,直接google“C++”。


4. 如何提高自己的搜索能力

4.1. 態度決定一切

前面介紹瞭如何選擇關鍵字解決問題的技巧。接下來要詳細論述一下如何獲得這些技巧和如何進一步提高搜索水平。由於這些論述都是基於我的經驗和體會,肯定有很多偏頗的地方。如果讀者有什麼更有效的方法,請務必讓我學習(我的email見本文開始部分)。

要成爲google高手,首要的是態度。“態度決定一切”。如果你相信google是解決問題的強大工具,能夠給你帶來看得見摸的着的好處,你喜愛,崇拜google。你就有很大可能成爲google高手。一種比較天真的想法就是“因爲google太強大了,所以不應該用google”。其背後的動機是,工具太強大,人就會依賴工具而喪失了某些技能。我認爲,人(當然也包括程序員)的價值,在於人的智力,感情,道德。所謂技能,只是上述抽象品質的靈活運用而已。學習新工的好處遠不是提高了效率這麼簡單。真正的好處是獲得“原來可以這樣做”的啓發。死抱住舊工具的人不能獲得安全,他們的結局是被潮流淘汰。例如當坦克剛出來的時候,出身於騎兵的巴頓將軍毫不猶豫地擁抱坦克這種新的戰爭工具,最後成爲裝甲戰術大師,名垂青史。擔心自己喪失技能的波蘭騎兵被納粹德國的裝甲師屠殺於戰場之上。技術人員真正重要的技能,是識別新技術的價值的洞察力和使用新技術的行動力。。


4.2. 瘋狂搜索法

有了熱情,要成爲google高手輕而易舉。你需要的只是練習。接下來我要介紹練習的辦法。和一般人的想法不一樣,我不認爲“爲了特定問題猜關鍵字”這件事情本身可以作爲一種練習手段。我推薦名爲“瘋狂搜索法”的練習方法。方法很簡單,找一篇有趣的文章,將它的字、詞、句以各種方法搜索一遍。試着分析搜索結果,(分析方法在後文有詳細描述),要有一個好或者不好的結論。好,就提供了有用的信息。

讓我舉個例子。我“瘋狂搜索”一下標題爲“軟件商對用戶的角色扮演”的文章。首先google其標題“軟件商對用戶的角色扮演”。搜索結果有兩頁,可以看出該文原始出處爲ChinaByte。接下來再google作者“老單”,從搜索結果看,標題爲“老單:三說軟件從業者”的文章似乎也是同一人所寫。但是叫老單的人好像多了點。例如標題爲“老單和他的6+1彩票預測術”一文中的老單不是我們要找的人。google“老單 軟件”以過濾垃圾信息,可以看到“淺析作坊式開發”,“軟件企業裏的官兒”等文也是其寫的。只要將這四篇文章放在一起分析。一切都很明顯了。老單談的都是個人體會,文筆流暢。現在該做結論了了。我的結論是老單提供的都是真實的信息,結論是好。

接下來我們google文中的單詞。以第一句“軟件企業以盈利爲目的進行生產經營和產品銷售,自然地被稱爲軟件商”爲例。首先google“軟件企業”。看起來“軟件企業”不是一個有特點的詞,可以說是一個大詞,不是好的關鍵字。google“生產經營”得到諸如“中國農業銀行---貸款業務個人生產經營貸款”之類的文章,分析下來該詞較書面化,多出於政府公文,新聞等等。“生產經營”也象一個大詞。google“產品銷售”,得到結果多是各企業網站的產品頁面。如果將該詞和別的詞組合,似乎可定位到企業網站的特定頁面。google“軟件商”,搜索結果似乎暗示該詞是一箇中性詞,有意思的是該詞似乎同時指軟件銷售企業和軟件開發企業。中性詞的大量使用可能暗示着使用該詞的人在該文中保持着超脫的立場,可能說明作者不是業內人士。如果我是業內人士,我會把自己的職業用褒義詞來描述,例如“軟件研發人員”,“程序設計大師”等等,不會使用“軟件藍領”,“寫代碼的”等貶義詞(有些人認爲這些詞不是貶義詞)。中性詞的使用也可能是因爲作者必須適應讀者的習慣。

篇幅有限,我就分析到這了。最後讓我舉出該文最有意思的兩個詞,“受衆需求”和“漫天吹起”。“受衆需求”的搜索結果有點意思,該詞顯然大量使用於新聞廣告行業,似乎是一個專業術語。“漫天吹起”的搜索結果只有兩條,一條就是我們正在分析的文章,另一條是“聖劍傳說Ⅲ”。老單可能有意使用一些詞增加“文采”。


4.3. 如何提高“搜索素養”

這樣分析下來是不是很有趣,也許各位已經躍躍欲試了。不要急,這只是入門練習。要成爲專家,關鍵使提高“搜索修養”。搜索修養體現爲快速過濾掉無用信息的能力和定位有用信息的能力。實際工作中碰到的問題不是通過一次google搜索而是通過多次“深度搜索”才得以解決。“深度搜索”的意思是,第一次搜索得到的結果必須由人來閱讀和分析,然後以分析的結果進行下一次搜索,依此類推。我的經驗是,較難的問題往往需要進行幾十此搜索才能找到正確答案。假設每次google搜索的結果是25條記錄,我如果不做快速過濾的話,進行一次“深度搜索”需要看的搜索結果就是25×25=625條搜索記錄。進行兩次“深度搜索”需要看的搜索結果就是25×25×25=15625條搜索記錄。

要提高搜索修養,根本辦法是大量閱讀各種非技術類書籍(技術類書籍如果不是工作需要,讀起來有點累)以及進行適當的寫作訓練。這個問題本身可以寫成一篇文章,本文由於篇幅所限是無法展開了。這裏只提供我的一點心得。

過濾搜索結果的關鍵是兩點,“信用(credit)”和“風格(style)”。

所謂“信用”,就是提供信息的人的本身的可信度如何,說白一點,就是他(她)是否以前做過相關的比較優秀的工作。例如,因爲我讀過John Robbins寫的《應用程序調試(Debug Application)》,所以在調試技術方面我非常信任John Robbins。由於信用是可以延伸的(所謂愛屋及烏),John Robbins的文章中引用到的資料的作者在我的心目中也是大師。反過來說,那些提到John Robbins名字的文章的信用也要比沒有提到的信用要高。這裏有個陷阱,提到過於出名的大師的名字不一定是好事。有些大師太有名了,以至一些不學無術的人會大量引用他們的名字或者文章以掩蓋自己的貧乏。例如,提到“linus”名字次數多的關於linux的文章並不一定有多少價值。某些世界級的開源項目的骨幹程序員在也是有信用的。上述標準對我夠用了。因爲我水平有限,對於行業內的專家瞭解不多,所以我需要堅持高標準。這個標準就是,全世界範圍內有影響的項目,書,人才算有信用。

有時搜索結果不都能和大師聯繫起來。例如提供資料的人是某個“技術工作者”。這時我覺得不應從“信用”的角度來判別了。有些人會從國籍,種族,性別,年齡,工作過的公司乃至上過的中學的名字來判斷作者的信用,再推論文章的價值。這種方法有歧視的味道,也不可靠。我傾向於從“風格”出發。內在的風格是是無法掩飾的。例如我姐姐中文系畢業,雖然工作只是起草簡單的公文,但她總不會忘記在文中加入幾個“文雅”的詞,以顯示中文系沒白讀。

對技術人員來說,風格的判斷結果是很簡潔的,“好”或者“壞”。爲了得到這個結果,需要一些指標來。我簡單地談一談我使用的指標。由於我的無知和偏見,再加上篇幅有限(我正在應編輯的要求刪文章呢),這些指標肯定有很多漏洞。請讀者對我抱有寬容之心。接下來就談一談這些指標。

標題是否言之有物。《redugardtoo談中國的軟件工程實施難點》中的“中國”,“軟件工程”就是太抽象的詞。這種標題的文章如果篇幅少於100頁的話,不會有什麼真正有價值的內容。起這樣的標題的作者通常不知道自己談的是什麼,所以敢來一個龐大的標題。考慮到國人的習慣,有一個偉大標題的文章業不能一棒子打死。我建議這個指標這樣用。標題言之有物是好現象。果反之也不是壞現象,可以結合下面的指標判斷一下正文的內容再說。

正文是否旁徵博引?這是一個比較有用的指標。不學無術的人愛誇誇其談。被其引用的資料的主人可能是那種過於出名的人,也可能是有某個知名頭銜的人或者無關的著名組織。不學無術的人希望通過虛名(虛名就是和問題無關的名氣。例如貝克漢姆的名氣和軟件工程無關)和引用的數量(不是質量)鎮住別人。下面我給一個經典的反面例子,摘自名爲“克隆與xxx”的文章(可以google一下)。

例:“...xxx體是人腦中央的一個器官,印度2000年前就稱之爲"第三隻眼"。近年來美國科學家們發現,它是人體衰老的根源,是人體的生命時鐘。這項發現如同強大的衝擊波,震撼着西方國家。《紐約時報》報道;"兩千年前中國秦始皇的夢想,今天在美國實現了";《華爾街日報》發表《一場革命》;《新聞週刊》居然以《xxx熱潮》爲標題.於8月7、11月6日封面報道,闡述補充xxx的奇蹟:阻止老化、改善睡眠,倒撥生命時鐘。 在美國政府FDA認定xxx無任何副作用後,xxx的價格在美國加州迅速被炒到白金的1026倍。不過,在大規模生產的今天,每天飲用xxx僅需花費1美元。在我國也不過是7元人民幣。 美國西北大學教授格利塔在電視新聞中感嘆:"美國人爲它瘋狂了!" xxx體的衝擊波迅速渡及全球。日本《朝日新聞》、NNK電視大肆報道;香港特區政府不得不出面公告:奉勸市民飲用xxx要有節制。 1998年4月5日中央電視臺《新聞聯播》播放《人類有望活到150歲》,詳細介紹xxx體的 科技成就,《參考消息》等各大媒體也都相繼報道。中國部分城市裏出現飲用xxx的熱潮。 在美國。不少人撰文表示對xxx體成果的擔憂。如果人人都活到150歲,從外表分不出成年人的年齡,會出現許多社會問題,世界老化研究會議主席華特博士在其科學專著中指出;飲用xxx明顯提高中老年人的性慾。於是評論家們擔心, 性犯罪必將上升...”

正文是否有實例,有數據,有完整的因果關係?實例最好是親身經歷的例子。實例也可以是能用科學方法覈查的例子。因果關係指的是,由前因“必然”可以推論到後果。如果不是這樣,就必須從邏輯上說明,由前因“可能”推論到後果,爲什麼是可能的,例外情況在什麼條件下會發生等等。差的文章的常見毛病就是把“可能”說成了“絕對”,把時間上後發生的說成是前因,把先發生的說成是後果。因果關係是否“完整”,指的是是否有那種沒有寫下來,但從上下文中可以倒推出來的默認前提。說白一點,就是作者是否有一些認爲不言自明的“常識”。作者把基於“常識”得到的結論寫下來,但“常識”是否寫下來了?在電影《伊麗莎白》中,輔佐伊麗莎白一世的大臣羅伯特對她說:“作爲女王,您必須...”。羅伯特這樣說的默認前提是,他認爲年輕的女王沒有能力獨立統治英國,女王和自己的關係是學生和老師的關係。在電影的最後部分,伊麗莎白直接駁斥了這個從沒有說出口的前提,“‘必須’這個詞不是能對一個女王說的。...我是我父親的女兒。...從今以後,我將自己作出決定...”。

爲讀者考慮(considerate)。例如要給出被引用資料的來源啦什麼的。對軟件工程師來說,很重要的一個素質就是給出的代碼應該能拷貝過來就能運行,否則必須說明運行的環境。

是否使用一種權威或者命令式的口吻。這個指標是個有用但危險的指標。使用這種口吻的人要麼才華橫溢(往往也很年輕),因爲相信自己完全正確;要麼不學無術(這時候年紀就比較大了),所以才虛張聲勢以使別人不敢反駁(我完全理解某人說“以人頭擔保”原因)。最好的辨別方法是覈查細節,南郭先生最怕的就是這個。如時間緊迫,可結合前幾個指標快速的判斷一下,必要的話還可以google一下作者的名字。

有否奇談怪論?這個指標非常靈,但要靈活應用。對於比較抽象的問題(例如如何學會編程),奇談怪論通常意味着真知灼見。人越多,有價值的聲音越可能被唧唧喳喳聲淹沒。對於人人都能談上兩句的主題,發表奇談怪論比附和大衆的壓力更大,在這種壓力下一旦真的的有奇談怪論發表出來,說明奇談怪論實際上有一點道理。外行人也衆口一詞的東西常常毫無價值。例如,你真的相信“高拋低買”這條原則可以指導炒股票嗎?對於具體問題,是否要採用奇談怪論就需多考慮了。具體問題,如果採用非主流的解決方案,意味着忽略許多人的經驗,這樣做風險很大。例如,我曾經讀過一篇把整個exe當作一個dll掛上鉤子的文章。文章很酷。但不實用。關鍵在於商用程序需要模塊間的信息交流。這種酷的技術使交流不可能了。

類似的指標很多,沒法一一列舉。說到底,只要多讀書,這種指標你也可以歸納出來。熟悉文章風格的入門讀物,我推薦《The Elements of Style》(有中文版,《英文寫作指南》,陳一鳴譯,上海譯文出版社)。該文的電子版也可以找到(你應該在讀到這句前就google過“The Elements of Style”了吧)。

原文到此結束,下面是網上熱心讀者提供,安安注


5. 相關的工具、資源

下面我將提供一些有用的工具,資源,信息,可以幫你進一步提高搜索能力。我只列出了最基本的信息,例如人命,軟件名等等,作爲練習,你可以自己試着google這些基本信息。

我認爲,要充分發揮google的威力,必須使用一些工具。這些工具至少得包括一個剪貼板工具軟件,一個瀏覽器,一個文件管理器軟件。剪貼板工具的主要作用就是能夠記住所有拷貝粘貼過的內容,並提供快捷鍵快速粘貼舊的條目。當嘗試組合多個關鍵字時,剪貼板工具很用。我推薦Clipcache。好的瀏覽器支持多tab瀏覽,多個頁面的搜索結果比較時很有用。我推薦MyIE2,因爲其還支持一拖即搜,就是在當前頁面中選中一段文字,用鼠標拖動一下,該段文字就被提交到搜索引擎(使用MyIE2前需要將默認搜索引擎改爲google)。文件管理器我推薦Total Commander(以前稱爲Windows Commander)。因爲其完美支持剪貼板。將文件路徑放到google中搜索比較有用。

英語當然要好,多數資料都是英文資料。關於英語的重要性,我沒有什麼好多說的了。我只想強調一點,是否能用google解決技術問題,90%取決於英語水平。要提高英語水平,我推薦鍾道隆的《逆向法》和李陽的《瘋狂英語》。

搞軟件開發需要學習大量專業知識。google技巧不能代替專業知識的積累。你可以考慮在學習專業技術前,花一點時間學習一下方法論(不是哲學)。我推薦鍾道隆的《記憶的竅門—普通人提高記憶力的方法》、《巧用電腦寫作與翻譯》、《學習成功的樂趣—從學會英語與電腦說起》等著作。

你可以google“google”獲得google本身的一些使用技巧。google“google 車東”也不錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章