提問的智慧

簡評:如何讓張佳瑋回答你的問題。以答題者視角詮釋「什麼是好問題」。

本文為編程世界經典文檔(不只適用於編程,而是更廣泛的教人溝通),教程序員們如何在網上有禮貌地、合理地提問。提問前,千萬先做足功課:搜索、讀文檔、讀代碼等。

- 原文:How To Ask Questions The Smart Way

- 翻譯:王剛 <yafrank at 126 dot com >

- 時間:2013年10月26日

- 本文版權說明:Copying Policy

目錄

  • 引言

  • 提問前

  • 提問時
    • 仔細挑選論壇
    • 面向新手的論壇和互聯網中繼聊天(IRC)通常響應最快
    • 第二步,使用項目的郵件列表
    • 使用有意義且明確的主題
    • 使問題容易回復
    • 用清晰、語法、拼寫正確的語句書寫
    • 使用易於讀取且標準的文件格式發送問題
    • 描述問題應準確且有內容
    • 量不在多,精鍊則靈
    • 別急於宣稱找到 Bug
    • 低聲下氣代替不了做自己的家庭作業
    • 描述問題癥狀而不是猜測
    • 按時間先後羅列問題癥狀
    • 描述目標而不是過程
    • 別要求私下回複電郵
    • 提問應明確
    • 關於代碼的問題
    • 別張貼家庭作業式問題
    • 刪除無意義的要求
    • 不要把問題標記為「緊急」, 即使對你而言的確如此
    • 禮貌總是有益的
    • 問題解決後追加一條簡要說明
  • 如何解讀回答
    • 「讀讀該死的手冊」(RTFM)和「搜搜該死的網路」(STFW):如何明白你已完全搞砸
    • 如果還不明白……
    • 對待無禮
  • 別象失敗者那樣反應

  • 提問禁忌

  • 好問題與壞問題

  • 如果得不到回答

  • 如何更好地回答

  • 相關資源

  • 鳴謝

引言

在 黑客(Hacker) 的世界裡,你所提技術問題的解答很大程度上取決於你提問的方式與解決此問題的難度,本文將教你如何提問才更有可能得到滿意的答覆

開源程序的應用已經很廣,你通常可以從其他更有經驗的用戶而不是黑客那裡得到解答。這是好事,他們一般對新手常有的毛病更容忍一點。然爾,使用我們推薦的方法,象對待黑客那樣對待這些有經驗的用戶,通常能最有效地得到問題的解答。

第一件需要明白的事是黑客喜歡難題和激發思考的好問題。假如不是這樣,我們也不會寫本文了。如果你能提出一個有趣的問題讓我們咀嚼玩味,我們會感激你。好問題是種激勵與禮物,幫助我們發展認知,揭示沒有注意或想到的問題。在黑客中,「好問題!」 是非常熱烈而真摯的讚許。

此外,黑客還有遇到簡單問題就表現出敵視或傲慢的名聲。有時,我們看起來還對新手和愚蠢的傢伙有條件反射式的無禮,但事情並不真是這樣。

我們只是毫無歉意地敵視那些提問前不願思考、不做自己家庭作業的人。這種人就象時間無底洞──他們只知道索取,不願意付出,他們浪費了時間,這些時間本可用於其它更有趣的問題或更值得回答的人。我們將這種人叫做 「失敗者(loser)」 (由於歷史原因,我們有時將「loser」拼寫為「lusers」 。)

我們意識到許多人只是想使用我們寫的軟體,他們對學習技術細節沒有興趣。對大多數人而言,計算機只是種工具,是種達到目的的手段而已。他們有自己的生活並且有更要緊的事要做,我們承認這點,也從不指望每個人都對這些讓我們著迷的技術問題感興趣。不過,我們回答問題的風格是為了適應那些真正對此有興趣並願意主動參與解決問題的人,這一點不會變,也不該變。如果連這都變了,我們就會在自己能做得最好的事情上不再那麼犀利。

我們(大多數)是自願者, 從自己繁忙的生活中抽時間來回答問題,有時會力不從心。因此,我們會毫不留情地濾除問題,特別是那些看起來象是失敗者提的,以便更有效地把回答問題的時間留給那些勝利者。

如果你認為這種態度令人反感、以施惠者自居或傲慢自大,請檢查你的假設,我們並未要求你屈服──事實上,假如你做了該做的努力,我們中的大多數將非常樂意平等地與你交流,並歡迎你接納我們的文化。試圖去幫助那些不願自救的人對我們簡直沒有效率。不懂沒有關係,但愚蠢地做事不行。

所以,你不必在技術上很在行才能吸引我們的注意,但你 必須 表現出能引導你在行的姿態──機敏、有想法、善於觀察、樂於主動參與問題的解決。如果你做不到這些使你與眾不同的事情,我們建議你付錢跟別人簽商業服務合同,而不是要求黑客無償幫助。

如果你決定向我們求助,你不會想成為一名失敗者,你也不想被看成一個失敗者。得到快速有效回答的最好方法是使提問者看起來象個聰明、自信和有想法的人,並且暗示只是碰巧在某一特別問題上需要幫助。

提問前

在通過電郵、新聞組或論壇提技術問題以前,做以下事情:

  1. 嘗試在你準備提問論壇的歷史文檔中搜索答案

  2. 嘗試搜索互聯網以找到答案

  3. 嘗試閱讀手冊以找到答案

  4. 嘗試閱讀「常見問題文檔」(FAQ)以找到答案

  5. 嘗試自己檢查或試驗以找到答案

  6. 嘗試請教懂行的朋友以找到答案

  7. 如果你是程序員,嘗試閱讀源代碼以找到答案

提問時,請先表明你已做了上述事情,這將有助於建立你不是寄生蟲與浪費別人時間的印象。最好再表述你從中 學到的東西 ,我們喜歡回答那些表現出能從答案中學習的人。

運用某些策略,比如用谷歌(Google)搜索你遇到的各種錯誤提示(既搜索 谷歌論壇,也搜索網頁),這樣很可能直接就找到了解決問題的文檔或郵件列表線索。 即使沒有結果,在郵件列表或新聞組尋求幫助時提一句「我在谷歌中搜過下列句子但沒有找到什麼有用的東西」 也是件好事,至少它表明了搜索引擎不能提供哪些幫助。將搜索關鍵詞與你的問題及可能的解決方案聯繫起來,還有助於引導其他有類似問題的人。

別著急,不要指望幾秒鐘的谷歌搜索就能解決一個複雜的問題。讀一下常見問題文檔。在向專家提問之前,先向後靠靠放鬆一下,再思考一下問題。相信我們,他們能從你的提問看出你做了多少閱讀與思考,如果你是有備而來,將更有可能得到解答。不要將所有問題一股腦拋出,只因你的第一次搜索沒有結果(或者結果太多)。

認真地思考,準備好你的問題。輕率的提問只能得到輕率的回答,或者壓根沒有。在提問時,你越是表現出在此前做過思考與努力去解決自己的問題,你越有可能得到真正的幫助。

注意別提錯問題。如果提問基於錯誤的假設,某黑客多半會一邊想 「愚蠢的問題……」,一邊按將錯就錯的答案回復你,並且希望這種只是得到你自己「問的問題」而非真正所需的解答,給你一個教訓。

永遠不要假設你 有資格 得到解答。你沒有這種資格,畢竟你沒有為此服務付費。如果你能夠提出有內容、有趣和激勵思考的問題──那種毫無疑問能夠向社區貢獻經驗,而不僅僅是消極地要求從別人那獲取知識的問題,你將「掙到」答案。

另一方面,表明你有能力也樂意參與問題的解決是個很好的開端。「有沒有人能指個方向?」,我這還差點什麼?」,「我應該查哪個網站?」,通常要比 「請給出我可以用的完整步驟」更容易得到回復,因為你表明了只要有人能指個方向,你就很樂意完成剩下的過程。

提問時

仔細挑選論壇

要對在哪提問留心,如果你做了下述事情,多半會被一筆勾銷或被看成「失敗者」:

  • 張貼與論壇主題無關的問題

  • 在面向高級技術問題的論壇上張貼膚淺的問題,或者反之。

  • 在太多不同的新聞組同時張貼

  • 給既非熟人也沒有義務解決你問題的人發送你私人的電郵

為保護通信的渠道不被無關的東西淹沒,黑客會除掉那些沒有找對地方的問題,你不會想讓這種事落到自己頭上的。

因此,第一步是找對論壇。谷歌和其它搜索引擎是你的朋友,可以用它們搜索你遇到困難的軟硬體問題最相關的項目網站。那裡通常都有項目的常見問題(FAQ)、郵件列表及文檔的鏈接。如果你的努力(包括 閱讀 FAQ)都沒有結果,這些郵件列表就是最後能取得幫助的地方。項目的網站也許還有報告 Bug 的流程或鏈接,如果是這樣,去看看。

向陌生的人或論壇發送郵件極有可能是在冒險。譬如,不要假設一個內容豐富的網頁的作者想充當你的免費顧問,不要對你的問題是否會受到歡迎做太樂觀的估計──如果你不確定,向別處發或者壓根別發。

在選擇論壇、新聞組或郵件列表時,別太相信名字,先看看 FAQ 或者許可書以明確你的問題是否切題。發貼前先翻翻已有的帖子,這樣可以讓你感受一下那裡行事的方式。事實上,張貼前在新聞組或郵件列錶的歷史文檔中搜索與你問題相關的關鍵詞是個極好的主意,也許就找到答案了。即使沒有,也能幫助你歸納出更好的問題。

別象機關槍似的一次性「掃射」所有的幫助渠道,這就象大喊大叫一樣會令人不快,溫柔地一個一個來。

弄懂主題!最典型的錯誤之一是在某種致立於跨平台可移植的語言、庫或工具的論壇中提關於 Unix 或 Windows 操作系統程序介面的問題。如果你不明白為什麼這是大錯,最好在搞清楚概念前什麼也別問。

一般來說,在仔細挑選的公共論壇中提問比在私有論壇中提同樣的問題更容易得到有用的回答。有幾個道理支持這點,一是看潛在的回復者有多少,二是看論壇的參與者有多少,黑客更願回答能啟發多數人的問題。

可以理解,老練的黑客和一些流行軟體的作者正在承受過多的不當消息。就象那根最後壓垮駱駝背的稻草一樣,你的加入也有可能使情況走向極端──已經好幾次了,一些流行軟體的作者退出了對自己軟體的支持,因為伴隨而來的湧入其私人郵箱的垃圾郵件變得無法忍受。

面向新手的論壇和互聯網中繼聊天(IRC)通常響應最快

本地的用戶組織或者你所用的 Linux 發行版也許正在宣傳新手取得幫助的論壇或 IRC 通道(在一些非英語國家,新手論壇很可能還是郵件列表),這些地方是開始提問的好去處,特別是當你覺得遇到的也許只是相對簡單或者很普通的問題時。經過宣傳的 IRC 通道是公開邀請提問的地方,通常可以得到實時的回復。

事實上,如果出問題的程序來自某發行版(這很常見),最好先去該發行版的論壇或郵件列表中提問,再到程序本身的項目論壇或郵件列表,(否則)該項目的黑客可能僅僅回復「用 我們的 代碼」。

在任何論壇發貼以前,先看看有沒有搜索功能。如果有,就試著用問題的幾個關鍵詞搜索一下,也許就有幫助。如果在此之前你已做過全面的網頁搜索(你應該這樣去做),還是再搜索一下論壇,搜索引擎有可能沒來得及索引此論壇的全部內容。

通過論壇或 IRC 通道提供項目的用戶支持有增長的趨勢,電子郵件交流則更多地為項目開發者保留。所以先在論壇或 IRC 中尋求與該項目相關的幫助。

第二步,使用項目的郵件列表

當某個項目存在開發者郵件列表時,要向列表而不是其中的個別成員提問,即使你確信他能最好地回答你的問題。查一查項目的文檔和主頁,找到項目的郵件列表並使用它。採用這種辦法有幾個很好的理由:

  • 向個別開發者提的問題(如果)足夠好,也將對整個項目組有益。相反,如果你認為自己的問題對整個項目組來說太愚蠢,這也不能成為騷擾個別開發者的理由。

  • 向列表提問可以分散開發者的負擔,個別開發者(尤其是項目領導)也許太忙以至於沒法回答你的問題。

  • 大多數郵件列表都要存檔,那些存檔將被搜索引擎索引,如果你向列表提問並得到解答,將來其它人可以通過網頁搜索找到你的問題和答案,也就不用再次發問了。

  • 如果某些問題經常被問到,開發者可以利用此信息改進文檔或軟體本身,以使其更清楚。如果只是私下提問,就沒有人能看到最常見問題的完整場景。

如果一個項目既有 「用戶」 也有「開發者」(或 「黑客」)郵件列表或論壇,而你又不擺弄那些代碼,向「用戶」列表或論壇提問。不要假設自己會在開發者列表中受到歡迎,那些人多半會遭受你的噪音干擾。

然爾,如果你 確信 你的問題不一般,而且在「用戶」 列表或論壇中幾天都沒有回復,可以試試「開發者」列表或論壇。建議你在張貼前最好先暗暗地觀察幾天,至少看看最近幾天保存的帖子,以了解那的行事方式(事實上這是參與任何私有或半私有列表的好主意)

如果你找不到一個項目的郵件列表,而只能查到項目維護者的地址,只管向其發信。即便在這種情況下,也別假設(項目)郵件列表不存在。在你的電子郵件中陳述你已經試過但沒有找到合適的郵件列表,也提及你不反對將自己的郵件轉發給他人(許多人認為,即使沒什麼秘密,私人電子郵件也不應該被公開。通過允許將你的電子郵件轉發他人,你給了相應人員處置你郵件的選擇)。

使用有意義且明確的主題

在郵件列表、新聞組或論壇中,主題是你在五十個或更少的字以內吸引有資格專家注意的黃金機會,不要用諸如 「請幫我」 (更別提大寫的 「請幫我!!!!」,這種主題的消息會被條件反射式地刪掉)之類的嘮叨浪費機會。不要用你痛苦的深度來打動我們,相反,要在這點空間中使用超級簡明扼要的問題描述

使用主題的好慣例是「對象──偏差」(式的描述),許多技術支持組織就是這樣做的。在「對象」部分指明是哪一個或哪一組東西有問題,在「偏差」部分則描述與期望的行為不一致的地方。

  • 愚蠢:

救命啊!我的筆記本視頻工作不正常!

  • 明智:

X.org 6.8.1 扭曲滑鼠游標,MV1005 型號的某顯卡晶元組

  • 更明智:

使用 MV1005 型號的某顯卡晶元組在 X.org 6.8.1 的滑鼠游標被扭曲

編寫 「對象──偏差」式描述的過程有助於你組織對問題的細緻思考。是什麼被影響了?僅僅是滑鼠游標或者還有其它圖形?只在 X.org 中出現?或只是在其 6.8.1 版中?是針對某顯卡晶元組?或者只是其中的 MV1005 型號?一個黑客只需描一眼就能夠立即明白什麼是你遇到的問題,什麼是你自己的問題。

更一般地,想像一下在一個只顯示主題的文檔索引中查找。讓你的主題更好地反映問題,可以使下一個搜索類似問題的人能夠在文檔中直接就找到答案的線索,而不用再次發貼提問。

如果你想在回復中提問,確保改變主題以表明你是在問一個問題,一個主題象 「Re: 測試」 或者 「Re: 新 Bug 」的消息不太可能引起足夠的注意。同時,將回復中與新主題不甚相關的引用內容盡量刪除。

對於列表消息,不要直接點擊回復(按鈕)來開始一個全新的線索,這將限制你的觀眾。有些郵件閱讀程序,比如 mutt,允許用戶按線索排序並通過摺疊線索來隱藏消息,這樣做的人永遠看不到你發的消息。

僅僅改變主題還不夠。mutt 和其它一些郵件閱讀程序還要檢查郵件頭主題以外的其它信息,以便為其指定線索,所以寧可發一個全新的郵件。

在論壇,因為消息與特定的線索緊密結合,並且通常在線索之外不可見,好的提問方式略有不同,通過回復提問並不要緊。不是所有論壇都允許在回復中出現分離的主題,而且這樣做了基本上沒有人會去看。不過,通過回復提問本身就是令人懷疑的做法,因為它們只會被正在查看該線索的人讀到。所以,除非你 只想 在該線索當前活躍的人群中提問,還是另起爐灶比較好。

使問題容易回復

以「請向……回復」來結束問題多半會使你得不到回答。如果你覺得花幾秒鐘在郵件客戶端設置一下回復地址都麻煩,我們也覺得花幾秒鐘考慮你的問題更麻煩。如果你的郵件客戶端程序不支持這樣做,換個好點的;如果是操作系統不支持所有這種郵件客戶端程序,也換個好點的。

在論壇,要求通過電子郵件回復是完全無禮的,除非你確信回復的信息也許是敏感的(而且有人會為了某些未知的原因,只讓你而不是整個論壇知道答案)。如果你只是想在有人回複線索時得到電子郵件提醒,可以要求論壇發送。幾乎所有論壇都支持諸如「留意本線索」、「有回複發送郵件」等功能。

用清晰、語法、拼寫正確的語句書寫

經驗告訴我們,粗心與草率的作者通常也粗心與草率地思考和編程(我敢打賭)。為這些粗心與草率的思考者回答問題沒有什麼好處,我們寧可將時間花在其它地方。

清楚、良好地表達你的問題非常重要。如果你覺得這樣做麻煩,我們也覺得注意(你的問題)麻煩。花點額外的精力斟酌一下字句,用不著太僵硬與正式──事實上,黑客文化很看重能準確地使用非正式、俚語和幽默的語句。但它 必須 很準確,而且有跡象表明你是在思考和關注問題。

正確地拼寫、使用標點和大小寫,不要將「its」混淆為「it"s」,「loose」搞成「lose」或者將「discrete」弄成 「discreet」。不要全部用大寫,這會被視為無禮的大聲嚷嚷 (全部小寫也好不到哪去,因為不易閱讀。Alan Cox [註:著名黑客,Linux 內核的重要參與者] 也許可以這樣做,但你不行。)

一般而言,如果你寫得象個半文盲似的傻子,多半得不到理睬。也不要使用即時通訊中的簡寫,如將「you」簡化為「u」會使你看起來象一個為了節約二次擊鍵的半文盲式的傻子。更糟的是,如果象個小孩似地鬼畫桃符那絕對是在找死,可以肯定沒人會理你(或者最多是給你一大堆指責與挖苦)。

如果在非母語論壇提問,你的拼寫與語法錯誤會得到有限的寬容,但懶惰完全不會被容忍(是的,我們通常看得出其中的差別)。同時,除非你知道回復者使用的語言,請使用英語書寫。繁忙的黑客一般會直接刪除用他們看不懂語言寫的消息。在互聯網上英語是工作語言,用英語書寫可以將你的問題不被閱讀就被直接刪除的可能性降到最低。

如果你用英語書寫但它是你的第二語言,最好提醒潛在的回復者語言上可能的困難以便繞過這個問題,比如:

  • 英語不是我的母語,請諒解拼寫錯誤。

  • 如果您使用某某語言,請電郵/私聊我,也許我需要您的協助翻譯我的問題。

  • 對於這個技術術語本身我很熟悉,但對於它的一些俚語或習慣表達方式就不太明白了。

  • 我已經同時用某某語及英語提問,如果您使用兩者之一回復,我很樂意翻譯。

使用易於讀取且標準的文件格式發送問題

如果你人為地將問題搞得難以閱讀,它多半會被忽略,人們更願讀易懂的問題,所以:

  • 使用純文本而不是 HTML(超文本標註語言)( 關閉HTML 並不難)

  • 使用 MIME(多用途互聯網郵件擴展)附件通常沒有問題,前提是真正有內容(譬如附帶的源文件或補丁),而不僅僅是郵件客戶端程序生成的模板(譬如只是消息內容的拷貝)。

  • 不要發送整段只是單行句子但多次折回的郵件(這使得回復部分內容非常困難)。設想你的讀者是在80個字元寬的文本終端閱讀郵件,設置你的行折回點小於 80 列。

  • 但是,也 不要 用任何固定列折回數據(譬如日誌文件拷貝或會話記錄)。數據應該原樣包含,使回復者確信他們看到的是與你看到的一樣的東西。

  • 在英語論壇中,不要使用"Quoted-Printable" MIME 編碼發送消息。這種編碼對於張貼非 ASCII 語言可能是必須的,但很多郵件程序並不支持。當它們分斷時,那些文本中四處散布的 「=20」符號既難看也分散注意力,甚至有可能破壞內容的語意。

  • 永遠不要 指望黑客們閱讀使用封閉的專用格式編寫的文檔,諸如微軟公司的 Word 或 Excel 文件等。大多數黑客對此的反應就象有人將還在冒熱氣的豬糞倒在你門口時你的反應一樣。即使他們能夠處理,也很厭惡這麼做。

  • 如果你從使用視窗的電腦發送電子郵件,關閉問題頗多的微軟「聰明引用」功能(在「工具」 -> 「自動糾正選項」的「輸入時自動格式化」下去掉聰明引用的選框),以免在你的郵件中到處散布垃圾字元。

  • 在論壇,勿濫用「表情符號」和「HTML」功能(當它們提供時)。一兩個表情符號通常沒有問題,但花哨的彩色文本傾向於使人認為你是個無能之輩。過濫地使用表情符號、色彩和字體會使你看來象個傻笑的小姑娘。這通常不是個好主意,除非你只是對性而不是有用的回復更有興趣。

如果你使用圖形用戶界面的郵件客戶端程序(如網景公司的 Messenger、微軟公司的 Outlook 或者其它類似的),注意它們的預設配置不一定滿足這些要求。大多數這類程序有基於菜單的「查看源碼」命令,用它來檢查發送文件夾中的消息,以確保發送的是沒有多餘雜質的純文本文件。

描述問題應準確且有內容

  • 仔細、清楚地描述問題的癥狀

  • 描述問題發生的環境(主機、操作系統、應用程序,任何相關的),提供銷售商的發行版和版本號(如:「Fedora Core 7」、「Slackware 9.1」等)

  • 描述提問前做過的研究及其理解。

  • 描述提問前為確定問題而採取的診斷步驟。

  • 描述最近對計算機或軟體配置的任何相關改變。

  • 如果可能,提供在可控環境下重現問題的方法。

盡最大努力預測黑客會提到的問題,並提前備好答案。

如果你認為是代碼有問題,向黑客提供在可控環境下重現問題的方法尤其重要。當你這麼做時,得到有用且及時回復的可能性將大大增加。

西蒙.泰瑟姆(Simon Tatham)寫過一篇 如何有效報告 BUG 的文章,我強烈推薦各位閱讀。

量不在多,精鍊則靈

你應該(寫得)精鍊且有內容,簡單地將一大堆代碼或數據羅列在求助消息中達不到目的。如果你有一個很大且複雜的測試樣例讓程序崩潰,嘗試將其裁剪得越小越好。

至少有三個理由支持這點。第一,讓別人看到你在努力簡化問題使你更有可能得到回復。第二,簡化問題使你更有可能得到 有用的 回復。第三,在提純Bug報告的過程中,你可能自己就找到了解決辦法或權宜之計。

別急於宣稱找到Bug

當你在一個軟體中遇到問題,除非你 非常、非常 的有根據,不要動輒聲稱找到了 Bug。提示:除非你能提供解決問題的源代碼補丁,或者對前一版本的回歸測試表現出不正確的行為,否則你都多半不夠完全確信。對於網頁和文檔也如此,如果你(聲稱)發現了文檔的「Bug」,你應該能提供相應位置的替代文本。

記住,還有許多其它用戶並未經歷你遇到的問題,否則你在閱讀文檔或搜索網頁時就應該發現了(你在報怨前已經做了這些,是吧 ?)。這也意味著很有可能是你弄錯了而不是軟體本身有問題。

編寫軟體的人總是非常辛苦地使它儘可能完美。如果你聲稱找到了 Bug,也就置疑了他們的能力,即使你是對的,也有可能會使其中的部分人感到不快。(此外,)在主題中嚷嚷「Bug」也是特別不老練的。

提問時,即使你私下非常確信已經發現一個真正的 Bug,最好寫得象是做錯了什麼。如果真的有 Bug,你會在回復中看到這點。這樣做的話,如果真有,維護者就會向你道歉,這總比你弄砸了然後欠別人一個道歉要強。

低聲下氣代替不了做自己的家庭作業

有些人明白他們不應該粗魯或傲慢地行事並要求得到答覆,但他們退到相反的低聲下氣的極端:「我知道我只是個可憐的新丁,一個失敗者,但……」。這既使人困擾,也沒有用,當伴隨著對實際問題含糊的描述時還特別令人反感。

別用低級靈長類動物的辦法浪費你我的時間,相反,儘可能清楚地描述背景情況和你的問題,這比低聲下氣更好地擺正了你的位置。

有時,論壇設有單獨的初學者提問版面,如果你真的認為遇到了膚淺的問題,到那去就是了,但一樣別低聲下氣。

描述問題癥狀而不是猜測

告訴黑客是什麼導致了問題是沒用的(如果你的診斷理論是了不起的東西,你還會向別人諮詢求助嗎?)。所以,確保只是告訴他們問題的原始癥狀,而不是你的解釋和理論,讓他們來解釋和診斷。如果你認為陳述自己的猜測很重要,應清楚地說明這只是你的猜測並描述為什麼它們不起作用。

  • 愚蠢:

我在編譯內核時接連遇到 SIG11 錯誤,懷疑主板上的某根電路絲斷了,找到它們的最好辦法是什麼?

  • 明智:

我組裝的電腦(K6/233 CPU、FIC-PA2007 主板[威盛 Apollo VP2 晶元組]、Corsair PC133 SDRAM 256Mb 內存)最近在開機 20 分鐘左右、做內核編譯時頻繁地報 SIG11 錯,但在頭 20 分鐘內從不出問題。重啟動不會複位時鐘,但整夜關機會。更換所有內存未解決問題,相關的典型編譯會話日誌附後。

由於以上這點許多人似乎難以掌握,這裡有句話可以提醒你:「所有的診斷專家都來自密蘇里州」。美國國務院的官方座右銘則是「讓我看看」(出自國會議員威勒德.D.范迪弗[Willard D. Vandiver]在1899年時的講話:「我來自一個出產玉米、棉花、牛蒡和民主黨人的國家,滔滔雄辯既不能說服我,也不會讓我滿意。我來自密蘇里州,你必須讓我看看。」)針對診斷者而言,這並不是懷疑,而只是一種真實而有用的需求,以便讓他們看到與你看到的原始證據儘可能一致的東西,而不是你的猜測與總結。(所以,)讓我們看看。

按時間先後羅列問題癥狀

剛出問題之前發生的事情通常包含有解決問題最有效的線索。所以,記錄中應準確地描述你、電腦和軟體在崩潰前都做了什麼。在命令行處理的情況下,有會話日誌(如運行腳本工具生成的)並引用相關的若干(如20)行記錄會非常有幫助。

如果崩潰的程序有診斷選項(如-v詳述開關),試著選擇這些能在記錄中增加排錯信息的選項。記住,「多」不等於「好」。試著選取適當的排錯級別以便提供有用的信息而不是將閱讀者淹沒在垃圾中。

如果你的記錄很長(如超過四段),在開頭簡述問題隨後按時間先後羅列詳細過程也許更有用。這樣,黑客在讀你的記錄時就知道該注意哪些內容了。

描述目標而不是過程

如果你想弄清楚如何做某事(而不是報告一個 Bug),在開頭就描述你的目標,然後才陳述遇到問題的特定步驟。

經常出現這種情況,尋求技術幫助的人在腦袋裡有個更高層次的目標,他們在自以為能達到目標的特定道路上被卡住了,然後跑來問該怎麼走,但沒有意識到這條路本身有問題,結果要費很大的勁才能通過。

  • 愚蠢:

我怎樣才能讓某圖形程序的顏色拾取器取得十六進位的 RGB 值?

  • 明智:

我正試著用自己選定數值的顏色替換一幅圖片的色表,我現在知道的唯一方法是編輯每個表槽,但卻無法讓某圖形程序的顏色拾取器取得十六進位的 RGB 值。

第二種提法是明智的,它使得建議採用更合適的工具以完成任務的回復成為可能。

別要求私下回複電郵

黑客們認為問題的解決過程應該公開、透明,此過程中如果更有才能的人注意到不完整或者不當之處,最初的回復才能夠、也應該被糾正。同時,作為回復者也因為能力和學識被其它同行看到而得到某種回報。

當你要求私下回復時,此過程和回報都被中止。別這樣做,讓 回復者 來決定是否私下回答──如果他真這麼做了,通常是因為他認為問題編寫太差或者太膚淺,以至於對其它人毫無意義。

對這條規則存在一條有限的例外,如果你確信提問可能會引來大量雷同的回復時,那麼「向我發電郵,我將為論壇歸納這些回復」將是神奇的句子。試著將郵件列表或新聞組從洪水般雷同的回復中解救出來是非常有禮貌的──但你必須信守諾言。

提問應明確

漫無邊際的問題通常也被視為沒有明確限制的時間無底洞。最有可能給你有用答案的人通常也是最忙的人(假如只是因為他們承擔了太多工作的話),這些人對於沒有止境的時間無底洞極其敏感,所以他們也傾向於討厭那些漫無邊際的問題。

如果你明確了想讓回復者做的事(如指點方向、發送代碼、檢查補丁或其它),你更有可能得到有用的回復。(因為)這樣可以讓他們集中精力並間接地設定了他們為幫助你需要花費的時間和精力上限,這很好。

要想理解專家生活的世界,可以這樣設想:那裡有豐富的專長資源但稀缺的響應時間。你暗中要求他們奉獻的時間越少,你越有可能從這些真正懂行也真正很忙的專家那裡得到解答。

所以限定你的問題以使專家回答時需要付出的時間最少──這通常與簡化問題還不太一樣。舉個例,「請問可否指點一下哪有好一點的 X 解釋?」通常要比「請解釋一下 X」明智。如果你的代碼不運行了,通常請別人看看哪有問題比叫他們幫你改正更明智。

關於代碼的問題

別要求他人給你出問題的代碼排錯而不提及應該從何入手。張貼幾百行的代碼,然後說一聲「它不能運行」會讓你得不到理睬。只貼幾十行代碼,然後說一句「在第七行以後,本應該顯示<x>,但實際出現的是<y>」非常有可能讓你得到回復。

最精確描述代碼問題的方法是提供一個能展示問題的最小測試樣例。什麼是最小測試樣例?它是對問題的展現,只需要剛好能夠重現非預期行為的代碼即可。如何生成一個最小測試樣例?如果你知道哪一行或哪一段代碼會產生問題,將其複製並提供剛好夠用的外圍支撐代碼以構成一個完整的樣例(夠用是指源碼剛好能被編譯器、解釋器或任何處理它的程序所接受)。如果你不能將問題縮小到特定的段落,複製源碼並去除那些與問題無關的代碼段。你能提供的最小測試樣例越小越好(參見 量不在多,精鍊則靈 )。

生成一個非常小的最小測試樣例並不總是可能,但儘力去做是很好的鍛練,這有可能幫助你找到需要自己解決的問題。即使你找不到,黑客們喜歡看到你努力過,這將使他們更合作。

如果你只是想讓別人幫忙審一下代碼,在最開頭就要說出來,並且一定要提到你認為哪一部分特別需要關注以及為什麼。

別張貼家庭作業式問題

黑客們善於發現「家庭作業」式的問題。我們中的大多數人已經做了自己的家庭作業,那是該做的,以便從中學到東西。問一下提示沒有關係,但不是要求完整的解決方案。

如果你懷疑自己碰到了一個家庭作業式的問題,但仍然無法解決,試試在用戶組、論壇或(作為最後一招)在項目的「用戶」郵件列表或論壇中提問。儘管黑客們看出來,一些老用戶也許仍會給你提示。

刪除無意義的要求

抵制這種誘惑,即在求助消息末尾加上諸如「有人能幫我嗎?」或「有沒有答案?」之類在語義上毫無意義的東西。第一,如果問題描述還不完整,這些附加的東西最多也只能是多餘的。第二,因為它們是多餘的,黑客們會認為這些東西煩人──就很有可能用邏輯上無誤但打發人的回復,諸如「是的,你可以得到幫助」和「不,沒有給你的幫助」。

一般來說,避免提「是或否」類型的問題,除非你想得到 「是或否」類型的回答。

不要把問題標記為「緊急」, 即使對你而言的確如此

這是你的問題,不是我們的。宣稱「緊急」極有可能事與願違:大多數黑客會直接刪除這種消息,他們認為這是無禮和自私地企圖得到即時與特殊的關照。而且「緊急」或其它有類似含義的主題有可能觸發垃圾過濾規則,潛在的回復者可能永遠看不到你的問題!

有一點點局部的例外,如果你是在一些知名度很高、會使黑客們激動的地方使用程序,也許值得這樣去做。在這種情況下,如果你有期限壓力,也很有禮貌地提到這點,人們也許會有足夠的興趣快一點回答。

當然,這是非常冒險的,因為黑客們對什麼是令人激動的標準多半與你的不同。譬如從國際空間站這樣張貼沒有問題,但代表感覺良好的慈善或政治原因這樣做幾乎肯定不行。事實上,張貼諸如「緊急:幫我救救這個毛絨絨的小海豹!」肯定會被黑客迴避或光火,即使他們認為毛絨絨的小海豹很重要。

如果你覺得這不可思議,再把剩下的內容多讀幾遍,直到弄懂了再發貼也不遲。

禮貌總是有益的

禮貌一點,使用「請」和「謝謝你的關注」或者「謝謝你的關照」,讓別人明白你感謝他們無償花時間幫助你。

坦率地講,這一點沒有語法正確、文字清晰、準確、有內容和避免使用專用格式重要(同時也不能替代它們)。黑客們一般寧可讀有點唐突但技術鮮明的 Bug 報告,而不是那種有禮但含糊的報告。(如果這點讓你不解,記住我們是按問題能教我們什麼來評價它的)

然爾,如果你已經談清楚了技術問題,客氣一點肯定會增加你得到有用回復的機會。

(我們必須指出,本文唯一受到一些老黑客認真反對的地方是以前曾經推薦過的「提前謝了」,一些黑客認為這隱含著事後不用再感謝任何人的暗示。我們的建議是要麼先說 「提前謝了」,事後對回復者表示感謝,要麼換種方式表達,譬如用「謝謝你的關注」或「謝謝你的關照」)。

問題解決後追加一條簡要說明

問題解決後向所有幫助過的人追加一條消息,讓他們知道問題是如何解決的並再次感謝。如果問題在郵件列表或新聞組中受到廣泛關注,在那裡追加此消息比較恰當。

最理想的方式是向最初提問的線索回復此消息,並在主題中包含「已解決」、「已搞定」或其它同等含義的明顯標記。在人來人往的郵件列表裡,一個看見線索 「問題 X」和「問題 X-已解決」的潛在回復者就明白不用再浪費時間了(除非他個人覺得「問題 X」有趣),因此可以利用此時間去解決其它問題。

追加的消息用不著太長或太複雜,一句簡單的「你好──是網線壞了!謝謝大家──比爾」就比什麼都沒有要強。事實上,除非解決問題的技術真正高深,一條簡短而親切的總結比長篇大論要好。說明是什麼行動解決了問題,用不著重演整個排錯的故事。

對於有深度的問題,張貼排錯歷史的摘要是恰當的。描述問題的最終狀態,說明是什麼解決了問題,在此之後 才指明可以避免的彎路。應避免的彎路部分應放在正確的解決方案和其它總結材料之後,而不要將此消息搞成偵探推理小說。列出那些幫助過你的名字,那樣你會交到朋友的。

除了有禮貌、有內容以外,這種類型的追帖將幫助其他人在郵件列表、新聞組或論壇文檔中搜索到真正解決你問題的方案,從而也讓他們受益。

最後,此類追帖還讓每位參與協助的人因問題的解決而產生一種滿足感。如果你自己不是技術專家或黑客,相信我們,這種感覺對於你尋求幫助的老手和專家是非常重要的。問題敘述到最後不知所終總是令人沮喪的,黑客們痒痒地渴望它們被解決。「撓痒痒」為你掙到的信譽將對你下次再次張貼提問非常非常的有幫助。

考慮一下怎樣才能避免他人將來也遇到類似的問題,問問自己編一份文檔或 FAQ 補丁會不會有幫助,如果是的話就將補丁發給維護者。

在黑客中,這種良好的後繼行動實際上比傳統的禮貌更重要,也是你善待他人而贏得聲譽的方式,這是非常有價值的財富。

如何解讀回答

「讀讀該死的手冊」(RTFM)和「搜搜該死的網路」(STFW):如何明白你已完全搞砸

有一個古老而神聖的傳統:如果你收到「讀讀該死的手冊」(RTFM) 的回復,發信人認為你應該去「讀讀該死的手冊」。他或她多半是對的,去讀一下吧。

「讀讀該死的手冊」(RTFM)有個年輕一點的親戚,如果你收到「搜搜該死的網路」(STFW)的回復,發信人認為你應該「搜搜該死的網路」。那人多半也是對的,去搜一下吧。(更溫和一點的說法是「谷歌是你的朋友!」)

在論壇,你也可能被要求去搜索論壇的文檔。事實上,有人甚至可能熱心地為你提供以前解決此問題的線索。但不要依賴這種關照,提問前應該先搜索一下文檔。

通常,叫你搜索的人已經打開了能解決你問題的手冊或網頁,正在一邊看一邊敲鍵盤。這些回復意味著他認為:第一,你要的信息很容易找到。第二,自已找要比別人喂到嘴裡能學得更多。

你不應該覺得這樣就被冒犯了,按黑客的標準,回復者沒有不理你就是在向你表示某種尊敬,你反而應該感謝他熱切地想幫助你。

如果還不明白……

如果你看不懂回答,不要馬上回復一個要求說明的消息,先試試那些最初提問時用過的相同工具(如手冊、FAQ、網頁、懂行的朋友等)試著搞懂回答。如果還是需要說明,展現你已經明白的。

譬如,假如我告訴你:「看起來象是某輸入項有問題,你需要清除它」,接著是個 不好 的回帖:「什麼是某輸入項?」。而這是一個 很好 的跟帖:「是的,我讀了手冊,某某輸入項只在 -z 和 -p 開關中被提到,但都沒有涉及到如何清除它們,你指的是哪一個還是我弄錯了什麼?」

對待無禮

很多黑客圈子中看似無禮的行為並不是存心冒犯。相反,它是直接了當、一針見血式的交流風格,這種風格對於更關註解決問題而不是使別人感覺舒服而混亂的人是很自然的。

如果你覺得被冒犯了,試著平靜地反應。如果有人真的做了過格的事,郵件列表、新聞組或論壇中的前輩多半會招呼他。如果這 沒有 發生而你卻發火了,那麼你發火對象的言語可能在黑客社區中看起來是正常的,而將被視為有錯的一方,這將傷害到你獲取信息或幫助的機會。

另一方面,你會偶而真的碰到無禮和無聊的言行。與上述相反,對真正的冒犯者狠狠地打擊、用犀利的語言將其駁得體無完膚都是可以接受的。然爾,在行事之前一定要非常非常的有根據。糾正無禮的言論與開始一場毫無意義的口水戰僅一線之隔,黑客們自己莽撞地越線的情況並不鮮見。如果你是新手或外來者,避開這種莽撞的機會並不高。如果你想得到的是信息而不是消磨時光,這時最好不要把手放在鍵盤上以免冒險。

(有些人斷言很多黑客都有輕度的自閉症或阿斯伯格綜合症,缺少用於潤滑人類社會「正常」交往所需的腦電路。這既可能是真也可能是假。如果你自己不是黑客,興許你認為我們腦袋有問題還能幫助你應付我們的古怪行為。只管這麼干好了,我們不在乎。我們 喜歡 現在這個樣子,並且一般都對病號標記有站得住腳的懷疑。)

在下一節,我們會談到另一個問題,當行為不當時會受到的「冒犯」。

別象失敗者那樣反應

在黑客社區的論壇中有那麼幾次你可能會搞砸──以本文描述或類似的方式。你會被示眾是如何搞砸的,也許言語中還會帶點顏色。

這種事發生以後,你能做的最糟糕的事莫過於哀嚎你的遭遇、宣稱被口頭攻擊、要求道歉、高聲尖叫、憋悶氣、威脅訴諸法律、向其僱主報怨、忘了關馬桶蓋等等。相反,你該這樣去做:

熬過去,這很正常。事實上,它是有益健康與恰當的。

社區的標準不會自己維持,它們是通過參與者積極而 公開 地執行來維持的。不要哭嚎所有的批評都應該通過私下的郵件傳送,這不是事情運作的方式。當有人評論你的一個說法有誤或者提出不同看法時,堅持聲稱受到個人攻擊也毫無益處,這些都是失敗者的態度。

也有其它的黑客論壇,受過高禮節要求的誤導,禁止參與者張貼任何對別人帖子挑毛病的消息,並聲稱「如果你不想幫助用戶就閉嘴」。有思路的參與者紛紛離開的結果只會使它們變成了毫無意義的嘮叨與無用的技術論壇。

是誇張的「友誼」(以上述方式)還是有用?挑一個。

當黑客說你搞砸了,並且(無論多麼刺耳地)告訴你別再這樣做時,他正在為關心你和他的社區而行動。對他而言,不理你並將你從他的生活中濾除要容易得多。如果你無法做到感謝,至少要有點尊嚴,別大聲哀嚎,也別因為自己是個有戲劇性超級敏感的靈魂和自以為有資格的新來者,就指望別人象對待脆弱的洋娃娃那樣對你。

有時候,即使你沒有搞砸(或者只是別人想像你搞砸了), 有些人也會無緣無故地攻擊你本人。在這種情況下,報怨倒是 真的 會把問題搞砸。

這些找茬者要麼是毫無辦法但自以為是專家的不中用傢伙,要麼就是測試你是否真會搞砸的心理專家。其它讀者要麼不理睬,要麼用自己的方式對付他們。這些找茬者在給自己找麻煩,這點你不用操心。

也別讓自己捲入口水戰,大多數口水戰最好不要理睬──當然,是在你核實它們只是口水戰、沒有指出你搞砸的地方,而且沒有巧妙地將問題真正的答案藏於其中之後(這也是可能的)。

提問禁忌

下面是些典型的愚蠢問題都最好別碰。

  • 問:我到哪可以找到某程序或 X 資源?

  • 問:我怎樣用 X 做 Y?

  • 問:如何配置我的 shell 提示?

  • 問:我可以用 Bass-o-matic 文件轉換工具將 AcmeCorp 文檔轉為 TeX 格式嗎?

  • 問:我的{程序、配置、SQL 語句}不運行了

  • 問:我的 Windows 電腦出問題了,你能幫忙嗎?

  • 問:我的程序不運行了,我認為系統工具X有問題

  • 問:我安裝 Linux 或 X 遇到困難,你能幫忙嗎?

  • 問:我如何才能破解超級用戶口令/盜取通道操作員的特權/查看某人的電子郵件?

好問題與壞問題

最後,我將通過舉例來演示提問的智慧。同樣的問題兩種提法,一種愚蠢,另一種明智。

  • 愚蠢:我在哪能找到關於 Foonly Flurbamatic 設備的東西?

這個問題在乞求得到 「搜搜該死的網路」(STFW) 式的回復。

  • 明智: 我用谷歌搜索過「Foonly Flurbamatic 2600」,但沒有找到什麼有用的,有誰知道在哪能找到這種設備的編程信息?

這個人已經搜索過網路了,而且聽起來他可能真的遇到了問題。

  • 愚蠢: 我不能編譯某項目的源代碼,它為什麼這麼破?

提問者假設是別人搞砸了,太自大了。

  • 明智: 某項目的源代碼不能在某 Linux 6.2 版下編譯。我讀了常見問題文檔,但其中沒有與某 Linux 相關的內容。這是編譯時的記錄,我做錯了什麼嗎?

提問者已經指明了運行環境,讀了常見問題文檔(FAQ),列出了錯誤,也沒有假設問題是別人的過錯,這傢伙值得注意。

  • 愚蠢: 我的主板有問題,誰能幫我?

某黑客對此的反應可能是:「是的,還需要幫你拍背和換尿布嗎?」,然後是敲下刪除鍵。

  • 明智: 我在 S2464 主板上試過 X、Y 和 Z,當它們都失敗後,又試了 A、B 和 C。注意我試 C 時的奇怪癥狀,顯然某某東西正在做某某事情,這不是期望的行為。通常在 Athlon MP 主板上導致某某事情的原因是什麼?有誰知道我還能再試點什麼以確定問題?

相反地,這個人看來值得回答。他或她展現了解決問題的能力而不是坐等天上掉餡餅。

在最後那個問題中,注意「給我一個回答」與「請幫我看看我還能再做點什麼測試以得到啟發」之間細微但重要的差別。

事實上,最後那個問題基本上源於 2001 年 8 月 Linux 內核郵件列表(lkml)上的真實事件,是我(Eric)當時提了那個問題,我發現 Tyan S2462 主板有神秘的死機現象,郵件列表成員給我提供了解決此問題的關鍵信息。

通過這種提問方式,我給了別人可以咀嚼玩味的東西。我設法使之對參與者既輕鬆又有吸引力,也表明了對同行能力的尊敬並邀請他們與我一起協商。通過告訴他們我已經走過的彎路,我還表明了對他們寶貴時間的尊重。

事後,當我感謝大家並評論這次良好的經歷時,一個 Linux 內核郵件列表的成員談到,他認為我得到答案並不是因為我的名字掛在列表上,而只是因為我正確的提問方式。

黑客們在某種方面是非常不留情面的精英分子。我想在這事上他是對的,如果我 表現得 象個不勞而獲的寄生蟲,不管我是誰都會被忽略或斥責。他建議將整個事件作為對其它人提問的指導,這直接導致了本文的編寫。

如果得不到回答

如果得不到回答,請不要認為我們不想幫你,有時只是因為被問到的小組成員的確不知道答案。沒有回復不等於不被理睬,當然必須承認從外面很難看出兩者的差別。

一般而言,直接將問題再張貼一次不好,這會被視為毫無意義的騷擾。耐心一點,知道你問題答案的人可能生活在不同的時區,有可能正在睡覺,也有可能你的問題一開始就沒有組織好。

還有其它資源可以尋求幫助,通常是在一些面向新手的資源中。

有許多在線與本地的用戶組織,雖然它們自己不編寫任何軟體,但是對軟體很熱心。這些用戶組通常因互助和幫助新手而形成。

還有眾多大小商業公司提供簽約支持服務,別因為要付點錢才有支持就感到沮喪!畢竟,如果你車子的汽缸墊燒了,你多半還得花錢找個修理店把它弄好。即使軟體沒花你一分錢,你總不能指望服務支持都是免費的。

象 Linux 這樣流行的軟體,每個開發者至少有一萬個以上的用戶,一個人不可能應付這麼多用戶的服務要求。記住,即使你必須付費才能得到支持,也比你還得額外花錢買軟體要少得多(而且對封閉源代碼軟體的服務支持與開源軟體相比通常還要貴一點,也要差一點)。

如何更好地回答

態度和善一點問題帶來的壓力常使人顯得無禮或愚蠢,其實並不是這樣。

對初犯者私下回復 對那些坦誠犯錯之人沒有必要當眾羞辱,一個真正的新手也許連怎麼搜索或在哪找 FAQ 都不知道。

如果你不確定,一定要說出來 一個聽起來權威的錯誤回複比沒有還要糟,別因為聽起來象個專家好玩就給別人亂指路。要謙虛和誠實,給提問者與同行都樹個好榜樣。

如果幫不了忙,別妨礙 不要在具體步驟上開玩笑,那樣也許會毀了用戶的安裝──有些可憐的呆瓜會把它當成真的指令。

探索性的反問以引出更多的細節 如果你做得好,提問者可以學到點東西──你也可以。試試將很差的問題轉變成好問題,別忘了我們都曾是新手。

儘管對那些懶蟲報怨一聲「讀讀該死的手冊」(RTFM)是正當的,指出文檔的位置(即使只是建議做個谷歌關鍵詞搜索)會更好

如果你決意回答,給出好的答案 當別人正在用錯誤的工具或方法時別建議笨拙的權宜之計,應推薦更好的工具,重新組織問題。

請回答真正的問題!如果提問者已經做了自己該做的研究,並且說明嘗試過X,Y,Z,A,B與C都沒有得到想要的結果,那麼回復「試試A或B」 或者給出一個內容為 「試一下X,Y,Z,A,B或C」的鏈接將極其無益!

幫助你的社區從中學習。當回復一個好問題時,問問自己 「如何修改相關文件或 FAQ 文檔以免再次解答同樣的問題?」,接著再向文檔維護者發一份補丁。

如果你是在研究一番後才做出的回答,展現你的技巧而不是直接端出結果。畢竟「授人以魚,不如授人以漁」。

相關資源

如果需要個人電腦、Unix 和互聯網如何工作的基礎知識,參閱 Unix 和互聯網工作的基本原理。

當你發布軟體或補丁時,試著按 軟體發布實踐 操作。

鳴謝

伊夫林.米切爾(Evelyn Mitchell)貢獻了一些愚蠢問題例子並啟發了編寫「如何更好地回答問題」這一節,米哈伊爾.羅門迪克(Mikhail Ramendik)貢獻了一些特別有價值的建議和改進。

原文:How To Ask Questions The Smart Way

譯文:How To Ask Questions The Smart Way

園長:本文寫於 2004 年,作者以技術回答者的角度,詮釋了他眼中的好問題。中文翻譯並不是特別理想,美式翻譯痕迹太明顯,但是能看。

開放版權,任何人都可以複製粘貼但是不能商用。


推薦閱讀:

美圖蔡文勝:從路邊擺攤到身家百億,他是如何做到的?
Issue 11 重訪黑客
職場被同事妒忌,是最好的事
CEO如何防止被CTO害死?
為什麼國內的寬頻上行速度相對下行很低,能從技術上解釋一下么?國外也是這樣么?

TAG:沟通技巧 | 互联网 | 高效工作 |