1. 程式人生 > >如何成為 StackOverflow 上合格的提問者與回答者

如何成為 StackOverflow 上合格的提問者與回答者

寫這篇文章最直接的原因是我的朋友 Rob Conery 發了一條推特,解釋他為什麼放棄在 Stack Overflow 貢獻答案。

然而,那已經是很長時間的事了。前不久,我開始寫一篇與本文類似的文章,但是文章越寫越長,並且沒有得出任何結論。現在我用一個小時的時間寫這篇文章,然後不論寫了什麼都要發出去(稍後可能會重新排版)。

我瞭解很多使用者對 Stack Overflow 的複雜感情。有些人認為它完全沒有價值,但是我相信更多的人認為它“資源有價值,但是潛在的反對意見讓人很難做出貢獻”。有些人則定期做出貢獻,在合理的時間範圍內,偶爾解釋或者檢視反對意見。

這篇文章,我將談談我的經歷,和我的一些看法,關於 Stack Overflow 存在的問題、我對一些察覺到的問題持反對態度、和如何改善目前的狀況。下面是我希望在二月份拜訪 Stack Overflow 團隊時詳細討論的主題,但我們卻忙於

討論其它重要問題

在這篇文章中,我大部分討論的是”提問者” 和 “回答者”,這是特意進行的簡化。許多使用者可能既是求助者又是回答者,我很多時候還會用不寫答案但是用“view” 寫評論的方式成為回答者。儘管任何使用者都可以擔任不同的角色,但是對提交的每個問題,每個人通常只有一個角色。當然還有其他的角色,例如“評論其它答案的評論者”,我不想花費過多的時間討論這個問題。

目標和期望的差距

與生活中大多數事情相似,當所有人目標一致時 Stack Overflow 的表現最好,因為我們可以共同邁向那個目標。相反,當人們的目標不同時則通常會出現問題。

對於 Stack Overflow 而言,最普遍的問題在於這兩個目標的差異:

  • – 提問者:儘量減少解決面臨的問題所需要的時間
  • – 回答者:最大限度地提高網站所有問題的價值,將網站視為長久的資源

就我而言,我經常有一個“試圖幫助提高軟體工程師的診斷能力,使他們能夠更好地解決自己的問題”的子目標。

例如,考慮這個問題(編造的,但並不牽強) :

Random 總是返回相同的數值,它出問題了嗎?

在我看來這是一個低質量的問題(稍後我將對其進行詳細討論)。我基本知道哪裡存在問題,但是為了達到我的目標我希望提問者改善這個問題,我希望看到他們的程式碼、結果等。如果我的答案是正確的(快速連續建立多個使用相同的基於系統時間的種子的 System.Random 的多個例項),那麼這個問題很可能由於重複而被關閉,並且很可能被刪除。以現在的形式,這個問題對網站沒有任何好處。我不想沒有確定是否重複之前就將這個問題以重複的原因關閉。

現在,從提問者的角度來看,這些並不重要。如果他們知道我知道問題可能出現在哪,他們可能會認為我應該告訴他們,以便他們可以繼續工作。如果現在就可以得到答案,為什麼還需要花費 10 分鐘來重現問題?更糟糕的是,如果他們花時間做了這些事情,然後由於重複的原因又立刻關閉這個問題,這樣看上去很像在浪費時間。

如果忽略情緒,我認為時間沒有被浪費:

  • – 提問者可以瞭解到,提出一個清晰的問題可以更快的得到答案。
  • – 提問者可以瞭解到,搜尋重複問題很有價值,因為這可能意味著根本不需要提出這個問題。

但是我們都是普通人,忽略感情顯然是個不可取的方法。在這種情況下可能發生的情況是 ( 即使我始終很有禮貌) 提問者會認為 Stack Overflow 中到處是隻關心自己權利的“交警”。 我當然可以認為這是不公平的(雖然這可能會突出我的實際目標 ) 但這可能無法改變任何人的想法。

因此,這是個問題。Stack Overflow 社群認同網站的目標,那麼在使用者提出問題時向用戶明確說明網站的目標了嗎? 值得注意的是導航頁面(奇怪的是網站首頁沒有設定該連結) 包含以下內容:

在您的幫助下,我們正在共同努力,為每個關於程式設計的問題建立一個詳細答案庫。

我傾向於稍作更改:

Stack Overflow 的目標在於建立高質量的問題庫以及問題的高質量答案庫。

這真的是一個共同願景嗎?如果提問者意識到這點,會有幫助嗎?我是希望如此,但是我懷疑它會阻止掉所有問題(我不認為有什麼能做到阻止所有問題的提問,世界不是一個完美的地方)。

讓我們轉到另一個我與其他人有不同意見的話題:低質量問題。

是的,存在低質量問題

即使不能以完全客觀的方式衡量,我也敢肯定有高質量問題和低質量問題(還有很多介於中間的)。

我認為 Stack Overflow 中這樣的問題可以看做高質量問題:

  • – 提出一個問題,並且明確知道該問題的要求。這個問題應該能夠非常明顯地看出答案是否回答了問題(這與答案是否正確無關)
  • – 避免無關緊要。這可能很困難,但是我認為這是有效工作的一部分:如果在開發 web 應用程式時遇到問題,至少應該嘗試確定 web 應用程式的上下文是否與問題有關。
  • – 對其他人儘量有幫助。這是避免不相關因素的非常重要的原因。很多使用者需要將字串解析為日期。較少人需要使用 X 框架的 Y 版本通過定製及專有網路協議與 COBOL 編寫的客戶端互動時將字串解析為日期。
  • – 闡述提問者進行過的嘗試、進展以及卡住的位置。
  • – 在適當的情況下(通常情況)包含一個證明問題的小例子。
  • – 格式正確。不要使用整頁的段落,不要使用沒有格式化的程式碼等等。

Stack Overflow 上有很多符合所有這些要求的問題,或符合以上大部分要求的問題。

我有理由認為這樣的問題比另外一些問題質量高,一些問題可能只是一個家庭作業的照片。我曾經見過這樣的問題,雖然,它們並不總是那麼糟糕,但是我真的不知道如果這都不能認為是一個低質量的問題,我們還能達成什麼一致意見。

當然,在此之間還有很多問題——但我認為接受存在低質量問題的觀點非常重要,或者至少經過討論並找出不同意見。

經驗有助於寫出好問題,但並非絕對必要

我看過許多文章聲稱 Stack Overflow 對於新使用者來講過於困難,因為,新使用者很難寫出一個好問題。

我認為接受網站協議並願意為之付出努力的新人,至少能提出一個合理的問題。他們可能需要花費更長的時間進行研究並寫出問題,而且寫出的問題可能不會像有經驗的人在相同情況下寫出的問題那樣簡單。但是我相信,整體而言,新使用者能夠寫出質量足夠好的問題。他們可能沒有意識到他們需要做什麼或者為什麼這樣做,但這是一個擁有不同解決方案的問題。而不僅僅是”提問者可能是技術新手,所以我們需要回答沒有任何幫助的糟糕問題”。

一個稍稍不同的問題是使用者是否具有寫出真正優秀問題所需的診斷技能。這是一個我非常重視的話題,而且我真的希望有一個好的解決方案,但是我真的沒有。我堅信,幫助程式設計師提高自己的診斷能力,除了在 Stack Overflow 中提出更好的問題之外,將對他們有巨大的好處。

一些使用者在 Stack Overflow 的表現像個混蛋,但是大多數人不會這樣

我當然不會宣稱 Stack Overflow 社群是完美的。我看到過一些使用者對提出低質量問題的人非常無理,我不是要為此進行申辯。如果你看我非常不禮貌,那麼請阻止我。我不認為要求改進問題本身是粗魯的,我們可以非常禮貌地要求改進問題,也可以非常刻薄地要求改進問題。我完全贊成提高 Stack Overflow 的文明水平,但是我認為這不能以犧牲網站質量為代價。

我還經歷過要求提問者提供更多資訊時,提問者的反應非常無理的情況。這不是一個單向的問題。在這個方向上,我看到過比回答者更加粗魯的行為。事實上,這些問題通常被關閉或刪除,所以只是隨便瀏覽網站的人通常不會看到這些。

我的時間非常有限,所以我們來看最重要的一點,我們需要對彼此更友好。

Jon 的 Stack Overflow 宣誓

我故意把它稱為我的宣誓,因為這不是將我的要求強加於他人的地方。如果你認為這也是你想遵循的原則(或許有一些修正),那再好不過了。如果 Stack Overflow 決定在網站指南的某個地方採用它,我非常歡迎,並且他們可以對其做任何適當的修改。

從本質上來講,我認為許多問題看起來像是提問者和回答者之間的一種交易。因此,建立一種契約是合理的(雖然這聽起來更像是商業用語),因此,我傾向於使用一個誠心的宣誓。

作為一個回答者,我將…

  • 不表現的像個混蛋。
  • 記住我正在迴應的是人,是有感情的。
  • 認定我正在迴應的人是誠心地希望得到幫助。
  • 要明確,對問題質量的評論不是對提問者的價值的指責。
  • 記住,有些時候,我正在迴應的人可能會感到他們正在被指責,即使我不認為我有這個意思。
  • 要明確,評論如何改善問題時提出積極的具體建議,不要消極地強調現狀。
  • 答案要清楚,記住不是每個人都與我的技術背景相同(所以有些術語可能需要連結等)。
  • 花點時間好好展示我的答案,使用盡可能易讀的格式。

作為一個提問者,我將…

  • 不表現的像個混蛋。
  • 記住任何一個回答問題的都是人類,都是有感情的。
  • 認定任何一個回答我問題的人都充滿善意並試圖幫助我。
  • 記住我是在要求其他人放棄自己的時間來幫助我解決問題。
  • 在提問之前先研究自己的問題、儘可能的縮小問題範圍、給出儘可能詳細的相關資訊來減少回答問題的人需要花費的時間。
  • 花點時間好好提出自己的問題,使用盡可能易讀的格式。

我希望大部分時間我可以遵循這些誓言。我懷疑自己有時候做不到,所有希望通過明確的寫出來,閱讀它,使自己成為一個更好的社群成員。

我認為如果每個人在 Stack Overflow 上釋出任何內容之前都遵循這樣的誓言,我們的社群將會更加美好。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

任選一種支付方式