如何优雅地在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’ (该方法最好用)

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