使用軟件產(chǎn)品寓免,或多或少都會遇到問題罩驻。對于商業(yè)產(chǎn)品,我們可以咨詢客服尋求幫助筝家。對于公司自己研發(fā)的產(chǎn)品轧钓,我們可以直接請教專家同事序厉。但對于開源軟件,在遇到問題時毕箍,如何才能及時有效地尋求幫助呢弛房?
本文以開源類庫 SeaJS 為例,說說我心目中的最佳實踐而柑。
提問前
遇到問題時庭再,心里都很著急捞奕。在決定向開源社區(qū)提交問題前,最好先做做以下功課:
嘗試從官方文檔中找到答案
確保自己閱讀過至少一次官方文檔拄轻。這樣在遇到問題時颅围,如果能回憶起只言片語,就可以再去讀一遍相關文檔恨搓,問題往往也就解決了院促。
Google 是你的朋友
對于成熟的開源項目,你遇到的問題斧抱,很可能別人也遇到過常拓。這時通過 Google、StackOverflow 等網(wǎng)站的搜索服務辉浦,可以幫你快速定位并解決問題弄抬。永遠記住,地球上的你并不孤單宪郊,包括你遇到的問題掂恕。
挖掘 Bug 寶藏
開源軟件一般都會有自己的 Bug 管理方案,比如 WebKit弛槐、V8懊亡、jQuery、SeaJS 等等乎串。從它們的官網(wǎng)上找到 Bug 管理地址店枣,然后通過搜索看看有無你遇到的問題。對于活躍社區(qū)來說叹誉,這一招經(jīng)常很管用鸯两。比如 jQuery 的 Bug Tracker,通過右上角的 Search Tickets 可以找到非常多有用的信息长豁。一個運作良好的 Bug 庫甩卓,經(jīng)常是一座巨大的寶藏。SeaJS 是直接通過 GitHub Issues 來管理蕉斜,你可以在 Issues 中找到很多信息逾柿。
求助身邊的朋友
如果你使用的開源軟件,在朋友圈或同事圈里也有人使用宅此,那么抬起你的腳机错、或拿起你的電話,真摯誠懇的探討不會遭遇拒絕父腕,而會增進友誼弱匪。不要猶豫,你的內(nèi)心渴望面對面交流,你的朋友也是萧诫。
如果以上 4 步都無法解決你遇到的問題斥难,也別猶豫,立馬向開源社區(qū)提交問題就好帘饶。
提問時
提問有很多種哑诊,比如你認識作者,直接面對面請教就行及刻。下面探討的是如何通過互聯(lián)網(wǎng)的方式來問問題镀裤。
平和對等的心態(tài)
很多開源軟件都是免費的,作者往往是業(yè)余時間出于興趣在維護缴饭,沒有義務回答社區(qū)問題暑劝。提問時,不要把自己擺在顧客的位置颗搂,比如
項目馬上要上線了担猛,請務必幫忙解決
這是我的郵箱,請及時聯(lián)系我
另外丢氢,也不要把自己擺在乞食者的位置傅联,比如
冰天雪地跪求解答
救命啊,我的網(wǎng)站掛了
在開源社區(qū)卖丸,一切皆是朋友纺且。無論對方是 Linux 內(nèi)核的作者盏道,還是某個 jQuery 插件的作者稍浆,你和作者都是對等的。你的提問是在幫助開源軟件完善猜嘱。平和對等的心態(tài)衅枫,可以讓你的問題贏得更多人的閱讀和思考。
通過正確的途徑提交
如果遇到問題的開源軟件有專門的 Bug 管理系統(tǒng)朗伶,請最好到這些指定系統(tǒng)中提交弦撩。比如,對于前端開發(fā)工程師來說论皆,下面這些 Tracker 系統(tǒng)很重要益楼。
還有各個開源類庫的 Issues 庫,比如 SeaJS 的是:seajs/issues
最不好的途徑是
- QQ 点晴、阿里旺旺感凤、微信等群組。這些群組主要是用來工作或休閑的粒督。對開源項目來說陪竿,在這些地方提問,作者一般不會關注屠橄,效率非常低族跛。
- 微博闰挡、Facebook 等社交網(wǎng)絡。不少人在微博上通過 at 或私信詢問 SeaJS 問題礁哄,這些我經(jīng)吵ば铮看不到〗憬觯看到了花枫,也不情愿回復。微博是扯淡掏膏、交流情感的地方劳翰,一般是寫代碼寫累了,才去逛逛馒疹,很少會有在社交網(wǎng)絡上回答技術問題的心情佳簸。
通過正確的途徑提交問題,一般可以讓你的問題得到及時準確的回復颖变。
使用明確生均、有意義的標題
抱著平和對等的心態(tài),找到合適的途徑后腥刹,就得靜下心來將遇到的問題寫成文字马胧。書寫文字不是一件簡單的事情,我們可以從遵循一些簡單的規(guī)則開始衔峰。
首先是標題要簡潔清晰佩脊,要言之有物。比如
我遇到了一個 Ajax 問題
SeaJS 在我的瀏覽器上運行不了
上面的標題很糟糕垫卤,光看標題作者無法知道發(fā)生了什么事威彰。當開源社區(qū)的問題很多時,上面這類標題穴肘,經(jīng)常會讓作者直接忽視或?qū)?yōu)先級降到很低歇盼。更妥當?shù)臉祟}是
Ajax 請求未返回正確的 responseXML
SeaJS 2.0 在 IE6 上運行時拋錯
明確、有意義的標題评抚,可以幫助作者確定問題具體是什么類型豹缀、預估需要多少時間解決、是否現(xiàn)在馬上解決等慨代。一個好的標題邢笙,也有利于社區(qū)知識的沉淀和后期搜索。標題有如一個人的顏面衣著鱼响,雖然不是關鍵鸣剪,但在嘈雜的信息社區(qū)中,這很重要。
遵循良好的模板
如果社區(qū)提供了問題模板筐骇,一定要仔細看下债鸡。比如 Google Code 社區(qū),當你創(chuàng)建一個問題時铛纬,會自動提供以下模板:
What steps will reproduce the problem?
該問題的重現(xiàn)步驟是什么厌均?
1.
2.
3.
What is the expected output? What do you see instead?
你期待的結果是什么?實際看到的又是什么告唆?
What version of the product are you using? On what operating system?
你正在使用產(chǎn)品的哪個版本棺弊?在什么操作系統(tǒng)上?
Please provide any additional information below.
如果有的話擒悬,請在下面提供更多信息模她。
遵循這個模板去描述問題,經(jīng)常能省很多事懂牧。作者一般也非常歡迎通過模板提交的問題侈净。如果社區(qū)沒有提供模板,也可以自己遵循以上模板來提交僧凤。
下面針對問題內(nèi)容畜侦,具體說說一些需要注意的點。
語法正確躯保、格式清晰
雖然我們不是作家旋膳,但正確的語法、清晰的格式途事,可以讓讀者賞心悅目验懊,也就更有心情幫你一起思考解決問題。
對于很多需要代碼來描述的問題盯孙,要尤其注意格式鲁森,比如
seajs.use('jquery',function($){$(document).ready(function() { /* ... */ })});
可讀性不如
seajs.use('jquery', function($) {
$(document).ready(function() {
// ...
});
});
GitHub 的 Markdown 語法可以很好地支持代碼排版祟滴、語法高亮等振惰,建議書寫代碼時,一定要先閱讀下說明:GitHub Flavored Markdown垄懂。這能讓你的內(nèi)容看起來很專業(yè)骑晶,社區(qū)也就更有意愿會去幫助你,否則糟糕的排版草慧,經(jīng)常帶來的是發(fā)帖之后的石沉大海桶蛔。
描述事實、而不是猜測
事實是指漫谷,依次進行了哪些操作仔雷、產(chǎn)生了怎樣的結果。比如
我在 Windows XP 下用 IE6 打開 seajs.org 后,點擊“5 分鐘上手 SeaJS”碟婆,這時瀏覽器彈出腳本錯誤提示电抚,例子顯示不正確。
上面是一段比較好的事實描述(更好的是把錯誤提示也截圖上來)竖共,而不要像下面這樣猜測:
SeaJS 在 IE6 下運行不正常蝙叛,我懷疑是源碼第 213 行有問題。
上面的描述公给,會讓作者一頭霧水借帘、甚至很惱火。盡量避免猜測性描述淌铐,除非你能先描述事實肺然,在事實描述清楚之后,再給出合理的猜測是歡迎的腿准。
對于前端項目來說狰挡,如果能提供可重現(xiàn)錯誤的在線可訪問代碼,那是最好不過的释涛。一旦你這么用心去做了加叁,作者往往也會很用心地立馬幫你解決。
描述目標唇撬、而不是過程
經(jīng)常會有這種情況它匕,提問者在腦袋里有個更高層次的目標,他們在自以為能達到目標的特定道路上卡住了窖认,然后跑來問該怎么走豫柬。比如
SeaJS 的 parseMap 方法在遇到 map 的多個配置項同時匹配同一個路徑時,應該允許用戶指定是全部生效還是僅第一個匹配的配置項生效扑浸。
上面這個問題的背后烧给,提問者實際上想解決的是如何通過 SeaJS 來做版本管理。提問者選擇了通過 map 的方式來實現(xiàn)喝噪,但這過程中遇到了問題础嫡,因此跑過來繼續(xù)怎么走。然而酝惧,如果只是描述過程榴鼎,往往會把作者也繞進去。
實際情況卻是晚唇,提問者選擇的路本身就是一條崎嶇之路巫财,對于要解決的問題,實際上有更好的方式哩陕。這種情況下平项,描述清楚目標赫舒,講清楚要干什么非常重要。
在描述自己是怎么做之前闽瓢,一定要先描述要做什么号阿。提問題時,What 往往比 How 更重要鸳粉。
要有具體場景
無論在開源社區(qū)扔涧,還是微博、知乎等平臺上届谈,有一種非常常見的問題:
如何維護 JavaScript 代碼枯夜?
如何使用 SeaJS 進行模塊化開發(fā)?
這類問題還有很多艰山,每每遇到湖雹,只能笑笑,然后悄悄地忽略掉曙搬。因此這類問題很難回答摔吏,就如下面這些問題一樣:
如何才能讓生命有意義?
如何打敗淘寶纵装?
這類提問者征讲,一般比較浮躁,經(jīng)常對問題本身也沒有經(jīng)過思考橡娄。踏實的提問者诗箍,不會讓問題浮在空中無法回答,而會在具體場景中讓問題落地:
我的項目有 20 多個 JS 文件挽唉,接下來還會急劇增加滤祖。目前遇到以下問題……(省略五百字)…… 請問如何維護?
仔細檢查瓶籽、確保準確
是人都會犯錯誤匠童,特別是在如此快節(jié)奏的互聯(lián)網(wǎng)環(huán)境下。好不容易把問題描述清楚時塑顺,不要急著立刻提交汤求。在提交前,至少保證從頭到尾再仔細閱讀一遍茬暇,比如語法錯誤首昔、錯別字寡喝、標點符號糙俗、排版等等。做到這些预鬓,不光是尊重別人巧骚,也是尊重自己赊颠。
提問后
提交問題后,建議通過郵件等方式訂閱回復劈彪】⒈模互聯(lián)網(wǎng)上最有效的溝通方式是異步溝通,不要期待作者馬上回復沧奴,也不要心煩意亂著急地等待痘括。出去看看天,數(shù)數(shù)云朵滔吠,你會逐步明白什么是風輕云淡纲菌。
盡可能補充信息
在接收到回復時,仔細閱讀疮绷。最經(jīng)常的情況是翰舌,社區(qū)回復的,經(jīng)常不是你想要的冬骚。比如
根據(jù)你的描述椅贱,問題無法重現(xiàn)。能否提供具體使用環(huán)境和重現(xiàn)步驟只冻?
這時要淡定庇麦。仔細看看自己提交的問題描述是否足夠清晰,如果有可補充的信息喜德,盡量補充女器,以幫助作者能盡快定位問題。比如
很抱歉住诸,我前面有一步描述不正確驾胆,實際情況是我是在 IETester 中運行的……
謙和淡定的交流,不光能幫助你解決問題贱呐,還有助于你結交更多朋友丧诺。
適當?shù)目偨Y
當問題終于解決時,建議對問題進行總結奄薇〔笛郑可以編輯原帖,也可以通過博客等方式總結馁蒂。你的總結呵晚,會讓遇到同樣問題的朋友們受益,并且對自己的技能也是一種提高沫屡。前端業(yè)界饵隙,無論國內(nèi)還是國外,有很多牛人之所以成為牛人沮脖,很大程度上都是因為有總結思考的好習慣金矛。
不要忘記感謝
最后芯急,記得感謝。很多開源軟件的作者驶俊,都是利用業(yè)余時間在創(chuàng)作代碼娶耍。你的感謝,匯集許許多多大家的感謝饼酿,會讓開源社區(qū)充滿愛與力量榕酒。