如何優雅地在Stack OverFlow 上進行編程問題搜索

引子

百度上搜索編程問題還是一言難盡,有些問題實在是不適合在中文引擎下進行搜索,所以還是要學會科學上網,一個好程序員的英語一定是最好的,全世界90%的編程資源都是以英語形式展現,如果不學好一門外語,恐怕在國內只能學習落後於世界2-3年的編程知識。

方法

話不多說,我以我的一個編程問題爲例來展示如何在StackOverflow上搜索問題:

問題:在Android中,如果要重寫BaseAdapter類我們需要重寫幾個方法,其中一個是方法:getItem(int position),其作用是:獲取數據集中與索引對應的數據項,但是我在別人的一個例子中看到其可以寫爲:

@Override
    public Object getItem(int position) {
        return null;
    }

而不是

    @Override
    public Object getItem(int position) {
        return mData.get(position);
    }

並且兩種方法在運行時都不會出錯,那麼問題就來了,返回null不就意味着數據集中對應下標索引的數據項爲空,那麼按理可推斷我們不能顯示相關視圖數據了,但是實際上卻是運行正確的?也就是說方法getItem(int position)至少值得我們去好好看看其有什麼作用,於是就需要在StackOverflow上進行問題的搜索了。

在這裏插入圖片描述
但是可以發現,並沒有適合我要尋找的答案:爲什麼此類的這個方法可以返回null。這是很常見的,因爲你的問題描述和別人不一定相同,或者存粹是因爲個人沒有理解這個類就來提問了,如果理解了這個方法如何運行,可能就不會問這個問題,所以,我們下面擴大一下搜索返回,直接搜索這個方法的用途。
但是我們要知道提問的方式,意圖有很多種英文含義:intent./intentation/purpose等等,我們可能無法通過一個詞查到我們想要的,所以多拿幾個同義詞試幾次,儘量記住一些英文的常見表達。

在這裏插入圖片描述
上面還是按照了分爲:

  1. 編程語言
  2. 縮小範圍
  3. 想要問的關鍵字
    的模式來進行搜索,這樣就找到了我們退而求其次要搜索的內容:Android中gerItem()方法的使用意圖是什麼,即此方法做什麼用的。

StackOverflow使用的相關背景知識

引用於簡書用戶:指尖猿
1、完整讀一遍 FAQ。

2、主觀問題不要問.

比如:

C++和C哪個好用? 我該學C#還是Java?你最愛哪款Text Editor?

必close。

3、概念問題慎重問

比如:

STL是啥?C++11有啥新特性?lambda和functor有啥區別?

這種問題很容易成爲duplicate,導致down vote。提問前要反覆搜索,確定沒有人問過才能貼。

4、代碼問題大膽問

提問前要把疑點範圍縮到最小。以C++爲例,當你爲現有class添加新成員函數時,編譯器報錯。那麼有三個部分務必貼出來。

其一,class body 內的相關部分,無關部分在代碼裏註釋下就行了:

*// other members,*etc

其二,該成員的implementation,包括該成員函數的代碼和其調用的函數的代碼。

其三,編譯器的完整報錯信息。

加好標籤,扔一句

“Why? How to fix it?”

就OK了。

用代碼說話,可以最大程度上彌補語言不足,而且這種問題不會被vote成duplicate。

5、格式比行文重要!

行文是硬功夫,需要日積月累。格式方面就簡單地得多:引用的文字務必用Ctrl+q,代碼Ctrl+k。多留意rep上k的人的提問,很快就清楚了。

6、善用tag。

相關tag儘可能多的加上去,最多可以加5個。無關tag千萬不要加。比如C的問題就不要填C++,C++的問題就不要C的 tag。tag填錯了容易把不相干的人引進來,人家惱了沒準兒就給個down。。一個down vote 扣2rep。

7、不要說“thank you!”。

SO反對沒有討論價值的comments。心存感激,就up 他的answer或comment。

實在想扯淡就開個chat room。100rep就可以開chat room了。

8、提問之後,不要離開電腦

SO的響應速度非常快,馬上會有comment、answer或者編輯建議之類的需要你處理。

9、別忘記accept別人的answer。

答主有15rep的加分,題主加2rep。

10、隨時編輯別人的帖子。

2000rep之前,只能建議修改,一旦採納,就有2rep的加分。

要知道,英語不靈的人太多了,經常出現拼寫錯誤,莫名其妙的格式更是比比皆是。隨時編輯之,順便刷rep。

11、多問幾次,就好了。

12、然後,post your answer吧~

13、若仍沒信心的話,可以聯繫我。

可以代貼,或者討論一下語言如何組織。

P.S. Stack Exchange旗下還有很多有意思的子站,不妨轉轉。

Chinese Language居然落後於德、法、日、西班牙語子站之後,記得去捧場~。

更新:

u1、珍惜每個疑惑

每個問題和疑惑都代表你踩到了知識邊界以外的東西。此時就出現了決策上的兩難:

a、我是猛查資料,猛學呢?

b、還是暫時放下,日後再說呢?

正確的策略是判斷此知識點與知識邊界的距離。

若在知識邊界以外很遠的地方,那就選b,日後再說。強行學習只會捨本逐末、事倍功半。但問題是我們自己很難判斷該知識點與知識邊界的距離。便捷的辦法就是把問題PO到SO上去。只要能把事兒說清楚,SO n多大牛會迅速給出解答的。

據此決策:進,爲知識版圖開疆拓土;退,爲捲土重來埋好伏筆。

舉個栗子:

假設你C++學習兩三週,剛懂一點兒constructor、destructor什麼的。這時編譯器報錯:

rvalue reference %¥%#%%……&##%

你看不懂,就把代碼和報錯信息發到SO上。瞬間蹦出個很nice的大叔,200多k的rep,全站排名一兩百,C++ gold badge 好幾枚。大叔無比耐心地回了個巨長的answer,從C++11的新特性開始扯,什麼move constructor, move assignment , std::move ,rvalue reference和lvalue reference的區別,列了一堆鏈接要你看。該答案瞬間引來n多up vote,你的question也因此被up vote n多。

——此時,你要做的是:1、按照答案修改代碼。2、待圍觀羣衆向大叔致敬的差不多了accept他的answer。3、知道這是跟move之類的C++11新特性有關,就齊了。

一個月內不要碰這個帖子,就當什麼都沒發生過。一個月後,開始系統學習move semantics了再翻出來細讀。

u2、勇於PO代碼,善於追問。

PO代碼出來常有意外收穫。比如:經常會有牛兒指出:你的變量命名不規範,bad practise什麼的。此時要comment追問一下:這麼寫都有什麼弊端?我應該怎麼寫?

代碼這個東西,能得到大牛的指點會少走很多彎路。

當然,PO代碼之前,要做好篇幅控制,無關代碼不要貼,相關代碼精簡到最小才貼。這不但是尊重別人的勞動,也是對自己很好的訓練。

u3、不急於accept answer。

即便有人已經解決了你的問題,也要等等再accept。這樣做有兩個好處:

其一,多收集不同的聲音。若長時間都沒有不同意見,就更加確認當前answer的正確性。這種情況下該答案會收到更多的up vote,你的question也可能收到些up。

其二,若有不同聲音出現,他們之間會掐起來,從而引來更多圍觀,最佳答案也會隨之浮出水面。如果英語過關就跟着討論。否則可以乾點兒別的事兒,過段時間再收割answer。

u4、珍視站友對你帖子的編輯。

他們往往會從兩個方面編輯你的帖子:

1、格式;

2、拼寫和語法。

仔細閱讀,你收穫的不單是技術上的,更是英語上的。另外,2000rep以上的站友可以直接編輯你的帖子。不要見怪,不要見外。

一,提問前一定要搜索,先在 Google 搜索,然後在 StackOverFlow 上搜索,當實在找不到答案後再提問。

對於那些靠搜索就能得到答案的問題,StackOverFlow 上的廣大羣衆是毫不留情的,反對票數量蹭蹭得往上加啊。

提問:

1,In my limited experience with … 謙虛表達自己在某方面的經驗

2, I am searching for a long time on net. But no use. Please help or try to give some ideas how to achieve this. 找了很久未果,求助攻

3,after searching around for a decent XX solution and found that everything out there was difficult to use. 找了N種方法都發現太TM難了。

4,I’ ve looked around and apparently I’ve got the choice between these libraries/ solutions: 說明自己是努力搜索過的,然後目前有了哪幾種方案

5,which seems it’s a promising solution. 看起來是一個好解決方案

6,Ive tried multiple variations of this, but none of them seem to work. Any ideas? 試了很多種方法都無效,求助

7,Wanted to know if it’s good practice to do that and what would be the best way to do that? 我的做法是否正確,是否有更好的法子?

8,Thanks in advance. 先行謝過

回答問題:

1,If I understand you correctly, you want to xxx 如果我沒理解錯,你想。。

2,Can you provided more details about your use case ? Can you provide more xml and code setting the url ? 提供更詳細

當別人回答你的問題後,你對回答的評論:

1,thank you for your answer sincerely 感謝回答blabla

這些感覺就差不多了,其他說來說去也都是這些套路,回答問題或者提問時多看看別人的表達習慣,也可以做記錄,好記性不如爛筆頭嘛。說明一下,上面的中文不是翻譯,只是一個說明,方便我快速定位的。

stackoverflow 搜索問題技巧

引用來源

  1. [[keyword] keyword是你要搜索的關鍵詞

  2. “關鍵短語” 雙引號之間加上你要搜索的關鍵短語或詞

  3. title: ***** 表示你要搜索相關文章的題目是*****。

  4. body:“關鍵短語” 用來搜索文章內容中含有關鍵短語的文章。

  5. 在搜索關鍵詞的任意位置加上* ,可以擴大搜索範圍。

  6. 在其他搜索引擎上搜索時在最後加上’stackoverflow’ (該方法最好用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章