為何而寫? 接觸 Linux 的基本要求 提問前該先做的事 撰寫提問的內容 - 五大要點 提問的好範例 提問後的回應 最後,一點延伸閱讀 為何而寫? Linux 可 說是一門新興的資訊科技領域,其自由軟體(Free Software)/ 開放原始碼(Open Source)的概念,代表了每個人都有機會、有權利去使用 / 學習 / 修改 / 開發這些開放的軟體程式以滿足自己的需求,並且不受到軟體專利(Proprietary Software)的限制。因著其自由的特性,越來越多的人投入了這塊領域,有的是基於工作上的需要、有的是純粹的電腦玩家、甚至也有為了反對微軟(Microsoft)而投入的人,簡而言之,就是各形各色的人都有。 也因為這樣,網路上的 Linux 討論區總是充滿著許許多多的問題,像是系統安裝的問題、軟體設定的問題、程式編譯的問題等等。同樣的,也有許多熱心的人士願意貢獻自己的時間去分析、解答提問者的問題。然而在多次的一來一往下來,我們卻可以時常發現到一些現象,而這些現象是應該要被糾正的,例如: (1) 提問者在提問前沒有利用其它管道釐清、解決問題(例如線上搜尋、軟體手冊、書籍) (2) 提問者在資訊的提供、內容的敘述上草率、不清楚,令人難以分析 (3) 提問者的態度不佳,或只會一味的索取,彷彿討論區是花錢買來的技術支援 這些現象會導致討論區充斥大量具重複性、低質量的問題,並徒增問題解決所需的時間。另外,討論區同時也是個可供搜尋、整理的知識資料庫,大量低質量的問題會導致某種程度的資源浪費。而除此之外,DR 認為最嚴重的,莫過於草率的問題會磨損回應者的熱心。DR 在討論區上回應問題比發表問題還要多得多,所以不可否認的,確實是偏向以一 個回應者的角度去撰寫這篇文章,但也絕對是站在一個希望雙方皆得益的立場上思考。一個要先有的認知是:回應者是以自己有限的時間去處理討論版上的問題,沒 有任何報酬。也許有人會在乎所謂的發表數或是一些虛擬的榮譽(如果有的話),但大多數的人都有更正經的事要做,甚至有人還有孩子要養,而如果討論區一而 再、再而三的出現那些草率、甚至是擺明想拿別人時間換自己時間的問題,人的熱心就很容易變得灰心,而提問者也就無法得到任何協助。如果讀到這裡還無法體悟,就麻煩設身處地想一下吧。 所以說,要得到良好的討論過程與結果,提問者也有責任去付出努力。 大約一年以前,DR 寫過一篇《Linux:如何問一個好問題》, 文章中對於如何在 Linux 討論區中適當的發表問題有些大概的見解。然而現在看來,真的覺得裡頭寫得不怎麼樣,把許多要素以較為混雜的方式參入,而且最大的毛病就是沒有提供任何正面 的範例供人參考。所以 DR 這次決定以重頭來過的方式去撰寫這篇文章,希望寫得比先前更有條理且明白,也希望能使讀者在閱讀這篇文章後,能夠明確的瞭解應該怎麼在討論版上提問。 接觸 Linux 的基本要求 這 個標題乍看之下有點奇怪,提問心得怎麼會需要談接觸 Linux 的基本要求?其實這部份談的是接觸 Linux 所需要的「基本知識要求」。想必大家都知道「知識」是一層一層的,要先擁有基礎的知識才能進一步的取得並瞭解更進階的知識,例如要先擁有生物學的知識才能接觸 醫學、要先擁有物理化學的知識才能接觸核能。至於 Linux 的基本知識要求,以過去在討論區中的經驗表示,主要有兩種知識的缺乏會造成困擾:一個是基本的軟硬體與網路知識,如果提問者不知何謂 IP、不知 BIOS 的作用為何、不知硬碟與記憶體的差別、不知如何取得主機板晶片組的型號、不知作業系統的角色為何,那麼就會造成嚴重的溝通困難。另一個則是英文知識,如果發現提問者的問題癥結其實是看不懂英文訊息、不想看英文文件、或者是不願意花點時間查單字或專有名詞,於是把討論區當翻譯機在用,那麼其態度就有很大的問題。 如果提問者有上述的狀況,請在提問前補強自己的知識、修正自己的學習心態。 提問前該先做的事 首先要說明的是:提問絕對不是在遭遇問題時該先做的事。志願性、非義務的討論區服務應該要作為解決問題的末後選項,提問者應該先經由以下的方法去解決問題: (1) 先排除是否為硬體問題(記憶體、超頻等),別忘了接觸 Linux 最好要有基本的軟硬體知識 (2) 手上有相關書藉就先行查閱 (3) 查看軟體的說明文件(例如 README)、官方網站的內容(討論區、文件、FAQ、Mail List) (4) 使用搜尋引擎(推薦 Google,Yahoo 也可以考慮),看是否有類似的問題 (5) 利用討論區裡的搜尋功能看是否有相關討論 其實並不要求上面所列的方法都要做到,只是提問者在事前所做的越多,體現的價值與努力就越多(也可以得到更多關注),反之做的越少,所彰顯的就越少。一個糟糕的例子是提問者被發現既吝於購買書籍,又懶得上網搜尋資料,時間和金錢都不願意付出,這樣的態度就很容易得到負面的回應。有人會認為新手跟老手的差別不過在於知識經驗的多寡,但從提問前的作為來看,DR 會說新手跟老手的差別在於一個把提問放在前頭,一個把提問放在後頭。如果你已經懂得在提問前有所努力,並充分的表達出來,那麼在這部份就不再是個新手了。 撰寫提問的內容 - 五大要點 問題還是沒有解決時,就開始好好的準備提問內容吧。 第一個要點是詳細說明你的操作環境: 請一定要說明所用 Linux 的 distribution(發行版本),例如 Fedora 8、Ubuntu 7.10、RHEL 5 等,這是因為 distribution 之間往往有套件管理、設定工具等許多方面的不同,這會大大影響對於問題的理解、以及問題解決的方式。如果 Linux 是裝在虛擬軟體(VMware、VirtualBox 等)上的,也要確實的表達出來,並且要說明虛擬軟體的版本。再來是說明硬體設備,如果是系統安裝的問題,請一定要說明主機板、CPU、顯示卡、記憶體、硬碟這 些最基本的硬體型號,特定的狀況也應該要提供特定的硬體型號,例如顯示有問題,就該提供顯示卡 / 顯示晶片以及顯示器的型號,而如果音效有問題,就該提供音效卡的型號。如果提問者沒有辦法分辨問題是否跟哪些硬體有關,那就盡可能的詳細列出所有配備。而 如果該問題涉及網路,請清楚的說明網路的連線方式(ADSL、Cable Modem、浮動或固定 IP 等)。至於軟體部份,如果問題來自使用某個軟體、或是某些軟體的集合(例如 Apache + MySQL + PHP),那麼請詳細說明軟體的版本與安裝方式(原始碼編譯、系統內建、另外下載的套件與出處等等)。 第二個要點是清楚說明你做了什麼: 例如更改了哪些設定、安裝了什麼、又執行了哪些動作,如果提問者是參照了某份線上文件做操作,那麼也請貼上該文件的連結。而如果提問者是按照某個書籍操作,也應該將書籍內的說明列出,因為不應該假設回應者能夠瞭解該書的內容。如果是網路服務方面的問題,也請記得列出防火牆(iptables)以及 SELinux 的設定內容。通常在執行這個要點時,提問者也可以順便再一次省察自己的操作流程有沒有任何疏忽或紕漏。如果提問者已經嘗試過一些解決問題的方法,也必須表達並且詳細說明,這可以表達出提問者在提問前的努力(就如先前所說的),也使回應者可以得到更多線索,並且可以避免給予提問者一個已經嘗試過的解法。另外,一個糟糕的狀況是提問者刻意隱瞞一些資訊,甚至是提供假訊息,這類的原因有些是提問者為了隱瞞自己所做的一些蠢事、或者試圖掩蓋自己的無知甚至懶惰,但又因為需要而採取不誠實的敘述方式,而這真的是不好的作法。 還有個必須提醒的是:提問者不該有「理所當然」的思維,不應該認為:「xxx 是理所當然,所以不需要多做說明」,如果事情都照提問者所想的理所當然,那為什麼提問者還需要問問題呢? 第三個要點是詳實的描述訊息: 請將輸出的(錯誤)訊息確實抄下並列出,如果沒有訊息也要將錯誤的狀況以及發生的頻率或時間點敘述清楚,千萬別在這部份打馬虎。訊息的敘述必須是最原始的訊息, 而不能是被提問者「解讀」後的訊息。如果訊息實在太長,導致難以張貼在討論區,可以做成文字檔然後找個線上空間放置,或者至少將訊息的最後一段列出。DR 甚至還有見過將錯誤畫面拍攝下來再放置到網路上的作法,也就是說,提問者可以使用各種方法讓狀況更充分且確實的表達出來。 log 紀錄是分析問題的一大利器,然而對於初學者來說,要怎麼從(往往很長的)log 中找出有用的訊息是比較困難的一點,如果提問者確實感到困難,也應該將完整的 log 貼出。如果實在太長,那麼就使用先前提到的文字檔上傳方式做處理。 第四個要點是平實、誠懇的表達: 首先是提問的心態,當提問者遇到問題而發出提問時,必須要先有一個謙卑的態度,就是自己的想法與知識可能會在討論當中被糾正,有些錯誤可能會被指明出來。這時應該就事論事,不可用情緒化的方式思考,也萬萬不可因著情緒做回應。 時時保持謙卑,才是謀取知識的正確方法。 再來要注意,討論區不是聊天室、不是即時通、也不是個人的網誌,應該以正確的書面寫作方式去表達。注音文、火星文、地方用語(粵語、台語等)或俗語都不應該出現在敘述當中,而且會影響其它地區人士的理解與觀感。段落與標點是絕對必要的,一個毫無段落和標點的文章不僅難以閱讀,也會讓人對提問者的教育水平產生質疑。 避免廢話以及華麗的詞藻,「救命啊」、「誰來救救我」,甚至「我是新手」、「我是初學者」這些都算是廢話,對於問題的理解毫無幫助。至於避免華麗的詞藻,應該就不需要多做解釋了,糟糕的狀況是提問者花了很多時間把問題寫得像是一篇富麗堂皇的散文,最沒真正的把狀況和環境敘述清楚,這就是完全的本末倒置了。 最後一個單純的說明是要有禮貌, 聽起來很廢話,但是這年頭沒做到的人越來越多。所謂禮貌不是說一定要稱呼人家「大大」或是「大俠」(對岸常見用詞),冠稱反而是無所謂。「請」、「謝謝」 等具有基本禮貌的表達是應該要有的,雖然提問主要的重點還是在於準備的內容。糟糕的狀況是用命令句去要求對方回應,或者用激將法的方式(是高手就出來回答 云云……),這些都是非常惡劣的提問,只會造成別人的反感。 第五個要點是明確的標題: 這個要點放在最後是因為 DR 認為,雖然標題是擺在內文之前,但實際上應該是要撰寫內文完後再去撰寫標題,因為標題等於是作為內文的大綱, 所以標題的一個基本要求就是不能寫得跟內文完全無關,更不應該刻意將標題誇張化。糟糕的範例例如:「問個問題」、「快來救我啊」這類既不明確又等於廢話的 標題是會令人反感的,在許多討論區更是會因為題意不清而直接刪除。正確的方法是加上幾個關鍵字去構成標題,例如:「安裝 openSUSE 10.3 出現錯誤」、「CentOS 5 中的 postfix 啟動出現 warning」這類都屬於清楚明確的標題。 提問的好範例 以下就來幾篇良好的示範,首先是第一篇範例:
沒錯,前面的要點寫了那麼多,絕對不是要求提問者要把問題寫得多複雜、多有學問,只要確實依提問者所能的說明狀況、過程與環境,清楚的表達出前因後果,那就會是一個良好的提問。 接下來看第二篇範例:
這也是個明確說明過程與訊息的好例子,並且雖然該例子的提問者不肯定問題是否跟硬體有關、或是跟哪些硬體有關,但他願意以開放的態度去預備可能需要補充的資訊。 第三篇範例:
這篇範例除了說明狀況外,也明確表達了提問者所做過的努力與研究,問題的要求也寫得相當明確,可以為整個討論清楚劃定範圍,而且最後也不忘將軟體環境做些補充。 至於不好的範例 DR 就不打算在這邊提了,下一個部份是提問後的回應: 提問後的回應 呃, 首先一個事實是:並不是所有的問題都會得到回應,而沒有回應的原因以二分法而言,一種是沒有人「懂得」回應這個問題,這類狀況就不太算是提問者的責任,可 能是問題真的太難、或太少人遇過、或者就是討論區的人口太少。而另一種是沒有人「想要」回應這個問題,這對於提問者來說就可能要好好檢討了,是不是提供的 資訊太少?還是表達的方式和態度有問題? 有許多提問者在沒有得到回應的狀況下會採取所謂「推文」的作法,這不僅違反許多討論區的規定,也 會影響許多人對提問者的觀感。事實上,推文是可以採取合乎規定且良性的方法,誠懇許多的推文方式是:嘗試且主動的說明更多資訊以及狀況,或者詢問自己的提 問是否有需要改進的地方(是否令人看不懂、是否過於草率)。這樣做絕對比單純用個「頂」字或是「推」字來得有誠意太多了。 DR 在撰寫提問內容的部份就已經強調過謙虛的態度很重要,在面對回應者的回應也是如此。要記住,「提問」本身就是一個有求於人、尋求幫助的事情,而普遍情況 下,回應者也沒有特別得到什麼利益(除非這是一個令雙方都能長知識的討論)。所以保持謙虛才能擁有良性且具有價值的討論。 最後,一點延伸閱讀 有 許多 DR 認為「有了更好」的觀念或方法並沒有寫在這篇文章裡頭,因為 DR 傾向朝「基礎」去寫(希望他人閱讀起來會真的覺得很基礎……)。而一些在其它文章中已經表達得相當徹底的觀念,DR 也沒有在這邊多提。然而這些沒有寫到的、沒有多談的觀念,仍然是相當重要而不可偏廢,所以 DR 列了一點延伸閱讀: 《提問的智慧》- Eric S. Raymond 原作、D.H.Grand 翻譯,雖然該文是比較針對 Hacker 社群中的狀況,但對於初學者而言仍然有許多應該被提醒的觀念。 《再致提問者》- 這是 netman 對一些討論區現象的回應,明確的說明提問者所該有的學習態度。 《三秒練功房》- 的版規……雖然這是三秒的個人網站,但還是表達了許多重要且正確的提問觀念。 《Linux:如何問一個好問題》- 呃,作者就是 DR,雖然寫得不好,不過還是有挑出許多應該被注意的問題。 →Back to DarkRanger.no-ip.org |