作为一个高大上的码农,你肯定用到过 StackOverflow,必须的。会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门。StackOverflow 对于码农的重要性,基本就和诸葛亮对刘备的重要性差不多,它上知 Java 下知 MySQL,中间懂得各种算法。只要你拥有与它沟通的技巧,它几乎可以回答你遇到的任何技术问题。
不过,很多码农对它的体验也就仅限于此了。查询一下,找到问题,然后把里边的代码复制粘贴到自己的 IDE 里,然后接着调试代码。万一没有找到符合的条目,就只好去其他地方问。其实你本来还可以做更多,比如主动去 StackOverflow 提问,去回答其他人的问题。这样才能在里面谈笑风生,充分体会到 StackOverflow 的乐趣。
有人要问了,我在 StackOverflow 找到答案,解决了我写代码时候遇到的问题不就行了,回答问题是那些大牛的事情,我何必浪费这个时间呢?对于这种论点,虽然我写这篇文章的时候很想说它是错的,但是理智告诉我,这样做也没有错,如果非要让每个人都在 StackOverflow 上做贡献,恐怕 StackOverflow 就不好玩了。
不过,在 StackOverflow 上积极贡献自己的问题和答案还是有好处的,主要是练习英语、练习技术和扩展视野三方面。
- 首先,StackOverflow 是一个英语社区,不管提问、评论还是回答,都得用英语把自己想说的话说清楚,这个过程可以锻炼英语读写能力;
- 其次,技术方面,在 Stackoverflow 上会遇到各种千奇百怪的问题,比你在工作中遇到的多得多,这可以锻炼你快速识别和解决问题的能力;
- 最后,在 StackOverflow 的问答中会不断冒出一些新技术,有利于扩展知识面。比如我在尝试回答一个 Grails 问题的时候,碰巧提问者用到了一个分布式缓存的插件,我为了回答这个问题,先花了三四个小时阅读这个插件的文档才能开始调代码,最后问题答对了,也学到了新知识。
所以,我还是坚持认为,用一些业余时间在 StackOverflow 上贡献自己的问答是有利于国内码农的成长的。
要这么做,首先你得有个账号,这是显而易见的。但是,关于注册账号、查找问题、提问、给出自己的回答、积分规则、获得徽章的条件等等入门知识,在 StackOverflow 上都有介绍,我就不说了。具体内容你可以去 http://stackoverflow.com/tour 自己看,花不了多少时间。
这就好比你要去参加一个 party,首先你得有邀请函,还要了解这个 party 的主题,费用是 AA 还是有人赞助了,哪些人能去 VIP 包间,这些都是基本的条件。但是,除了这些以外,还有一些很重要的礼仪或惯例之类的 “潜规则”,比如穿着要求、当地习俗、禁忌事项什么的。要不然你一身西装革履去了,发现里边全是大裤衩子和拖鞋,到时候没人搭理你也是正常的;要是不小心违背了一些禁忌,保不齐被人一顿胖揍就更惨了。
其实,StackOverflow 就可以看作是程序员的一个大 party,而咱这篇文章主要就是聊聊里边一些潜规则的东西。当然了,这里只是老码农我自己的体会。兄弟水平有限,也许会有说的不对的地方,或者对某些人不适用的观点。本着言者无罪的原则,你自己判断就好。觉得哪句话对就照着做,觉得不对就当没看见呗。如果你看完了有不同意见非要提出来也可以,不过我反正是不会采纳的。
言归正传。首先我要说的是,不要把挣积分作为参加这个 party 的目的。StackOverflow 的 reputation 机制是它的一个核心,你在里面能做哪些事都和这个数字有关系。虽然我承认 reputation 很重要,但是我还是要说,reputation 是身外之物,它只是你在上面提高水平之后自然产生的副产品。
如果你就是只关注积分,那我教你两个歪招,后面的内容你就不用看了:一、多注册几个马甲,给自己所有的问答点赞,分分钟几百积分到手;二、提问题也是有积分的,多提一些门槛低的弱问题,比如 “JS 里的 == 和 === 有什么不同?”,然后选择一个正确答案也能快速得积分。两招配合使用,积分上万不是梦!再见!
好了,接着和其他同学聊。我是很不赞同那种趴在 StackOverflow 上刷题使劲挣积分的做法的,这样把 StackOverflow 功利化了。因为这样抢的都是自己拿手的简单题,全是在做熟练工,花了很多时间也没什么提高。我们的教育环境里很悲哀的一点就是题海战术,孩子们从小就是通过大量练习熟练掌握了一些没用的技能,到工作了以后还是会不自觉地照着这个套路来,多可悲!就算你花5年时间刷一万题得了7万积分又怎样?有的牛人一个回答分分钟就得到八千多个赞8万多积分我会乱说?
我觉得正确的心态是像比尔盖茨看他的银行存款余额一样看待 reputation,多点少点都无所谓。把注意力和时间集中到你感兴趣的技术领域,回答一些能对你有启发的问题。遇到自己不理解的内容,可以积极和提问者及其他回答者探讨交流,这样的收获才是最大的。
其次,就是用代码说话。Linus 说过:Talk is cheap. Show me the code. 这句话其实也是 StackOverflow 的社区文化精髓。不管是提问还是回答,尽量把代码贴进去,一段代码能抵几千字。有些新手看到一个问题觉得很简单,不假思索地就按自己的直觉回答了,然后就期待着积分蹭蹭地涨,可等了半天发现别人全点了“没有帮助”,最后不但积分没涨反而拿了一堆负分滚粗,还奇怪这是咋回事呢?
我的看法是这样的:如果问题里有代码,就不要泛泛而谈,把代码调通了再来总结,这样才会对提问者有帮助。否则,如果光是问 “NoSQL到底好在哪里?” 这种空泛的问题,或者不调代码只回答 ”因为 CSS 3D transformation 和 IE9 以下版本不兼容“ 这样的空话,他不拿负分谁拿负分?实际上,StackOverflow 里边的那些下箭头就是为这样的同学量身定制的。
通过这个过程,能锻炼严谨的思维习惯,改掉空谈的毛病。比如在生活中,问对问题和听懂问题其实都是一门大学问。时间长了你会发现,其实写代码和做人的道理很多地方是相通的。具体怎么相通呢?各人会有各人的体会,这里就不多说了。
第三,尽量写规范化的地道英语。首先不要有太低级的语法错误、单词拼写错误等,让其他人理解起来很费力,这样就像在 party 里喝醉了酒胡言乱语一样,是不尊重他人的行为;再有就是逻辑表达清晰,让别人能明白你的思路,不要前言不搭后语;最后,不要有人身攻击、种族歧视等绝对忌讳的语言,也要注意别在文字中不自觉地流露出这方面的暗示,比如“这都什么年代了,还有人用 JSP?”,这样等于说用 JSP 的人土老帽,肯定会被愤怒的 JSP 专家们集体打负分的。
如果英语水平比较初级,怎么办?也不必因此而裹足不前,大胆尝试嘛!一开始可以模仿,找几个类似的问题或答案,把其中的文字复制下来保留论述句子结构,然后把里面的一些单词替换为自己的关键词。改完之后要多看几遍,不通顺或者逻辑上有矛盾的地方要认真改过来。通过这个过程,也有利于逐步提高自己的英语阅读和表达能力。
第四,这里给新手提个醒,你问了问题,也有别人给你解答了,一定要记得标记正确答案,最好在评论里告诉回答者结果并表示感谢。这样是给回答者付出心血的应有回报,自己也能得到积分。有的人在 StackOverflow 上呆了好几个月,问了几十个问题,自己的积分还是个位数,有经验的玩家就不愿意回答这种人的问题了。很显然,他们都是看了答案就拿走用,从来不给标记或点赞的。地球人都知道,看贴回帖是一种美德。点个正确答案的标记又不会怀孕,举手之劳而已,何必省这点事呢?这种行为太损人品,绝对要避免。
如果对方给出的代码你拿来不好用,也不一定是人家给的答案不对,有可能是你没用好。这时可以在评论里给对方提供进一步的反馈,并可以利用 @ 通知对方。比如功能实现了但是会冒出异常,就把异常信息给对方,有必要的话再一并提供你的开发环境配置,让对方可以评估不同环境下的差异,并在你反馈的基础上进一步完善答案。
第五,回答问题的时候,对于表达不清或过于宽泛的问题,不要急着回答。如果提问者是菜鸟,也不要直接就给人家的问题点负分下箭头,最好先在评论中问他一些具体问题,或者要求他贴出代码,帮助他完善自己的问题,等确定自己搞清楚问题了再给出你的答案。StackOverflow 的评论区也有很多精华,特别是那些点赞数很高的,往往是对答案或问题不可或缺的补充信息。
此外,对于有助于完善问题或解答的其他评论和答案,也可以点赞支持。因为,恰如其分地对其他人的问答和评论进行评价,有助于让高质量的问答获得更多关注,这也是你对社区的一种贡献。
好了,就说这么多吧。最后我还要强调一点,就是上面我说的这些其实都是浮云,大部分是废话,重要的还是你亲自去尝试。看别人讲多少道理,都不如自己亲身的体验和领悟。在网络社区里,新手犯一些错误也没什么关系,只要自己积极参与,用心总结提高,就能得到很多收获。预祝你在 StackOverflow 玩得高兴!
- 3楼ChuckLu
- 呵呵,贡献过问题,也贡献过答案,最后的结果是:把我封杀了。,我都不知道出什么事了
- 2楼天外归云
- 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
- 1楼胡萝卜星星
- 英文不过关,只能混混csdn,混不了stackoverflow这么高大上的地方……,当然查问题经常能查到stackoverflow,google因为公司不翻墙,只能用bing