天天看點

StackOverFlow提問的藝術

在Stack Overflow提問的檢查表,相信大多數混迹在StackOverFlow的人都己經養成了這個習慣,才會讓它的氛圍如此友好.

本文翻譯/整理自《Stack Overflow question checklist》,作者Jon Skeet是Stack Overflow的傳奇使用者, reputation高居第一位, 貢獻過大量優質回答, 尤其是C#/Java領域。 他的這篇文章提供了一個簡短的提問指南:

提問之前你做過研究嗎? <注1>

你是否說明了自己試過哪些方法解決問題?

你說明你使用的程式設計語言/平台了嗎, 包括版本号?

如果你的問題包含代碼, 你是否已經改寫成最小且完整的程式?<注2>

如果你的問題包含代碼, 你是否檢查過代碼格式?<注3>

如果你的代碼不能編譯, 問題中是否包含了編譯錯誤資訊?

如果你的問題不包含代碼, 你确認不需要嗎?

如果你的程式抛出了異常, 問題中是否包含異常資訊和堆棧回溯(stack trace)?

如果你的程式的輸出結果和預期不同, 你是否說明了你的預期結果是什麼, 你為什麼這麼想, 以及程式的實際結果?

如果你的問題和本地化有關(語言,時區等), 問題中是否包含了相關的資訊?

你是否檢查過問題的格式是否正确?

你是否檢查過拼寫和文法?<注4>

你是否認真讀過自己的問題, 确認問題對一個不了解問題背景的人也能明白?

如果以上任何一個問題的答案是否定的話, 很可能你提問前需要再修改一下問題。 我知道這聽上去像是不少工作, 但它能幫助你盡快的得到答案。别忘了你是在請求他人用自己的善心幫助你, 你有義務讓他們的工作盡可能的簡單。

注1: 如果你從“這怎麼不工作了”到“應該去問個問題”隻花了不到10分鐘, 那很可能你的研究還不夠。

注2: 理想情況下, 你的代碼應該可以讓回答者複制, 粘貼到編輯器, 編譯, 運作, 然後就能看到問題輸出。 指令行程式适用于這樣的标準(除非你的問題和使用者界面有關, 最好用指令行程式)。 去掉任何和問題無關的代碼, 但保證可以複現問題。

注3: 代碼最好不需要水準滾動, 這可能需要你從IDE複制代碼之後做些額外的處理。 為了那些願意幫助你的人花點時間把問題表達清楚吧。

注4: 我明白很多Stack Overflow使用者母語不是英語, 我們并不要求完美, 隻是希望你做過努力。如果你清楚自己英語不好, 找一個同僚/朋友幫你改改吧。k