以下是『如何提出無法解答的問題』的十三個小技巧:
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、微信、個人博客、螞蟻森林、朋友圈、他對 TFboys 微博的轉發,今日頭條娛樂版的評論區……到一切你能找到他的地方去提問。
正確示範: 未關注人私信:你好,我們項目用的是你們的框架,我想問下可以讓 xxx 組件獲取到焦點嗎? 因為要做鍵盤切換 錯誤示範: 官方渠道:你好,我們項目用的是你們的框架,我想問下可以讓 xxx 組件獲取到焦點嗎? 因為要做鍵盤切換 13. 上綱上線 『接連便是難懂的話,什麼"KPI","績效","棄坑"之類,引得眾人都鬨笑起來』
把你的問題拔高一個層次,站在道德高地進行指責,一旦討論涉及到政治,他們便百口莫辯。
正確示範: 原來大公司團隊也就這樣啊,都不好好測試的麼?就這玩意還好意思拿出來, 就是個 KPI 產物,晉升完就不管了。 錯誤示範: 這個項目雖然是大公司的產品,在以下方面比起競品還有劣勢,個人不建議使用。 總結 總而言之,開源項目的維護者在嘗試解答和解決問題時,總是希望能親眼看到問題發生,不要讓他們得逞。另外,他們大多對未關閉的問題有強迫症,儘量多製造一些這樣的問題。