《如何向開源項目提交無法解答的問題》

愛來自氫氣工藝喵! (づ。◕◡◡◕。)づ

開源社區里,提問和回答是最有趣的組成部分,有些你來我往,有些則石沉大海。人們提問的方式有許多迷人和實用的共通之處。我把它們提煉出來,希望能幫助到那些充滿了好奇心、且願意付諸行動去惹惱開源項目維護者的人們。

以下是『如何提出無法解答的問題』的十三個小技巧:

1. 惜字如金

『言多必失,不如悶聲發大財』

壓縮問題的字節數,不要讓對方覺得你囉嗦。用最簡單的字詞描述你的問題,提煉關鍵字,簡化掉冗長的過程和繁瑣的細節。

正確示範:

  样式编译报错

錯誤示範:

  在我的项目里引入了 xxx.css,编译时出错了,报错信息如下:
  Module build failed: SyntaxError: Unexpected token
  我是这么引用的:
  import 'xxx.css';
  balalalala .....

2. 緩兵之計

『和他成為長期筆友。』

如果維護者答覆你了,通常他們會索要進一步的信息。記住不要着急回復,那樣顯得你像個工作狂(時時刻刻泡在電腦邊,可憐巴巴的等待回復)。你還有其他生活,喝杯咖啡,聊個微信,隔上十天半個月再回復。相信我,他們很快會失去耐心而關掉這個問題,或者因為一時關不了而心情鬱悶。

正確示範:

  你:使用 Button 时发现控制台报错,提示如下。
   维护者(两天内):我没有重现出你的例子,可以提供一份可重现的示例么?
   维护者(三天后):@你
   维护者(一周后):ping~
  你(两周后):哎呀抱歉,没有及时回复,我的代码在这里。

錯誤示範:

  你:使用 Button 时发现控制台报错,提示如下。
   维护者(两天内):我没有重现出你的例子,可以提供一份可重现的示例么? 
  你(两天内):可能我的情况有些不同,这里是重现代码。

3. 夾帶私貨

『我哪有時間排查,這絕對是你的鍋。』

在一個中型或者大型項目中引入開源模塊容易遇到奇怪的問題。幾十個文件上百個業務模塊,項目工期又緊張,一一排查太辛苦了,還是另請高明吧,趕緊打個包發給對方。

正確示範:

  我的数据库项目出现了一个前端组件问题,这里是我的代码,有人能帮我看看么。
   附件:db-service-app.rar (434MB)

錯誤示範:

  我的项目里出现了一个前端组件问题,我简化了一下代码,
   发现是 xxx 组件和 yyy 组件同时使用时出现的,这里有个简单的重现例子。
   附件:component-xxx-yyy-bug.zip (12KB)

4. 賣個關子

『欲知後事如何,且聽下回分解』

總是留個後手,不要一次性把話說完,讓你的問題充滿神秘感,充分調動起讀者的好奇心。

正確示範:

   你:我的代码出错了,不知道该怎么办?
   
   你:我这里有一个问题,有人能帮我解决么? 
   你:在吗?

錯誤示範:

   你:我使用了刚刚发布的 xxx 最新版本,控制台出现如下错误...
    我是这么调用的...
    我的代码仓库在这里...

5. 弄亂格式

『怕他輕易看懂我的問題,我必須要做點什麼』

從來,永遠不要格式化問題。你又不是美工,美化格式不是你的特長。你的精力要用在項目開發中,也沒有時間去學習什麼格式化語法。至於對方能不能看明白,你才不需要關心。

正確示範:

  renderBatchButton() {
   return(
   <Dropdown overlay={this.renderExportMenu("2")}>
    导出出库单
   );
  }
 renderExportMenu(category) {
 let exportFile=({key})=>{
 console.log(key)
 }
 let items=[];
 if(this.props.global.template_list){
  items=this.props.global.template_list.map((item)=>{
 if(category===item.category){
  return (<Menu.Item key={item.id}>{item.name}</Menu.Item>);
 }
 });
 }

錯誤示範:

  import React from 'react';
  import ReactDOM from 'react-dom';
  import { Menu, Icon } from 'antd';
  class Demo extends React.Component {
    state = {
      collapsed: false,
    };
    toggle = () => {
      this.setState({
        collapsed: !this.state.collapsed,
      });
    }
    render() {
      return <Menu>...</Menu>;
    }
  }

6. 遺漏關鍵信息

『誒?我忘了說我沒插電源了麼?』

項目代碼一開始總是跑的好好的,你做了某個操作、或改動了某些代碼、或者在一個特殊的環境下,問題出現了。 這個區別往往是問題的關鍵,把它留在心裏就好,不要輕易說出來。

正確示範:

  你:我的代码出错了。
  维护者:我尝试了各种方式都没有重现出来,麻烦提供下重现?
  你(很久以后):哦!我是在 chrome 35 中出现的这个问题。

錯誤示範:

  你:我的代码在 chrome 35 出错了。
  维护者:好的,我也重现了,我看看怎么修复。

7. 提供錯誤的信息

『在錯誤的信息上解決問題才能體現你牛逼嘛!哈哈哈』

有時候需要做一些誤導,有意或者無意,總之製造困難是你的強項。

正確示範:

  你:我的代码出错了。
  维护者:你使用了什么版本?
  你:0.8.4(实际上本地是 0.8.3)
  维护者:你确定么,0.8.4 应该已经修复过这个问题。我再看看...

錯誤示範:

  你:我的代码在 0.8.3 版本里出错了。
  维护者:0.8.4 应该已经修复过这个问题,升级到新版即可解决。

8. 盡情宣洩情緒

『你們把我項目搞掛了,狗屎!』

開源項目導致了你的項目出現 BUG,導致了你周六晚上還要加班,導致了男/女友抱怨你不理他/她,這必須要有人負責。你的工作和生活被他們毀了,也別讓他們好過。

正確示範:

  这个项目烂透了,用起来全是坑,文档也太简略了,这样做开源真是呵呵了

錯誤示範:

  这个项目有很多细节问题,文档也不完善,请问有改进的计划么?
  我收集了以下具体问题,希望持续完善。

9. 構思宏偉藍圖

『我要造一台汽車,該怎麼做?』

嘗試問一個具有宏大目標的問題,只有那些祖母般慈祥的維護者才會嘗試回答你(這簡直不可能發生)。而且由於你表現出了在所有技術細節上的毫無準備以及極端無知,對方的回答也沒辦法讓你滿意。

正確示範:

  请问怎么打包发布? 

錯誤示範:

  我要开发一个前端单页项目,后端是 php,架构是前后端完全分离的方式。
  我尝试使用 xxx 进行打包构建时遇到一个问题...(省略五十字)请问这时我应该做什么? 

10. 自由發揮

『八股文的時代早就過去了!』

很多開源項目的維護者都是傲慢、迂腐、喜歡設定各種規矩的怪胎。例如他們常常會提供奇怪的問題模板,讓你在一個又臭又長的表單里填空。一旦你不按他們說的來,他們就會視你為搗亂分子,把你批判一番。你哪裏受得了這些拘束,想怎麼寫就怎麼寫,讓他們和他們的模板都見鬼去吧!

正確示範:

  浮层没有关闭,代码如下,求解决

錯誤示範:

  xxx 組件浮層沒有關閉
   - 使用版本:1.0.0
   - 瀏覽器:Chrome 56.0987
   - 作業系統:Windows 10
  ## 你做了什麼?
   我引入了組件 xxx,代碼如下,我點擊組件後打開浮層,做了如下操作。
  ## 你期待的是什麼?
   浮層應該關閉。
  ## 實際上的情況是?
   浮層短暫關閉後又再次彈出。
 [附上一張又卡又大的GIF截圖]
  ## 可重現的在線演示
   http://demo.com/demo.html

11. 重複提問

『重要的事要說三遍』

在不同的地方重複你提過的問題,加深對方的印象,顛覆對方的想像!

正確示範:

  问题一:发请求时报错:`405 Method not allowd`。
  问题二:您好,我这里出现了 `405 Method not allowd` 的问题。
  问题三:请求 405 错误,请问我该怎么办?
  问题 n:...

錯誤示範:

  问题一:发请求时报错:`405 Method not allowd`
  你:+1 我也出现了这个问题。

12. 出其不意

『到全世界提問,到他們想不到的地方提問』

即使你知道有官方渠道,也推薦用其他方式向維護者提問:微博、Twitter、知乎私信、知乎評論區、Email、微信、個人博客、螞蟻森林、朋友圈、他對 吳慧敏老師 視頻的轉發,今日頭條娛樂版的評論區……到一切你能找到他的地方去提問。

正確示範:

  未关注人私信:你好,我们项目用的是你们的框架,我想问下可以让 xxx 组件获取到焦点吗?
  因为要做键盘切换

錯誤示範:

  官方渠道:你好,我们项目用的是你们的框架,我想问下可以让 xxx 组件获取到焦点吗?
  因为要做键盘切换

13. 上綱上線

『接連便是難懂的話,什麼"KPI","績效","棄坑"之類,引得眾人都鬨笑起來』

把你的問題拔高一個層次,站在道德高地進行指責,一旦討論涉及到政治,他們便百口莫辯。

正確示範:

  原来大公司团队也就这样啊,都不好好测试的么?就这玩意还好意思拿出来,
  就是个 KPI 产物,晋升完就不管了。

錯誤示範:

  这个项目虽然是大公司的产品,在以下方面比起竞品还有劣势,个人不建议使用。

總結

總而言之,開源項目的維護者在嘗試解答和解決問題時,總是希望能親眼看到問題發生,不要讓他們得逞。另外,他們大多對未關閉的問題有強迫症,儘量多製造一些這樣的問題

為了讓您的瀏覽體驗更加高效、方便和個性化,遵照《中華人民共和國網絡安全法》和《信息安全技術個人信息安全規範》,我們需要您允許本站使用Cookies。 在某些情况下,Cookies是使網站正常運行的必要條件。