作为一个高大上的码农,你肯定用到过 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 玩得高兴!

老码农教你在 StackOverflow 上谈笑风生的更多相关文章

  1. 老码农冒死揭开行业黑幕:如何编写无法维护的代码[ZZ]

    下面是一篇有意思的"代码大全",可谓 逆软件工程. 老码农冒死揭开行业黑幕:如何编写无法维护的代码 原文如下 让自己稳拿铁饭碗 ;-) – Roedy Green(翻译版略有删节) ...

  2. Java老码农心得:卷了这么多年,您真的卷会了吗?

    前言 大家好,我是福隆苑居士,今天跟大家聊一下程序员在当下内卷成风的情况下,使用什么方法可以了解行业发展趋势,知道哪些该学,哪些可以略过,今年应该掌握什么,可以放弃什么,让自己时刻紧跟行业的步伐永不掉 ...

  3. 2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?

    由于众所周知的原因,原生Android开发如今已经日渐凋敝,作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmp ...

  4. 【转载】 大龄码农那些事——也谈996.ICU

    原文地址: https://www.cnblogs.com/helloyaren/p/10657414.html 请扫码关注!!! 您的关注将是您做的最正确的事情!!! 大龄码农那些事专注分享大龄码农 ...

  5. 大龄码农那些事——也谈996.ICU

    1.背景 近期Github突然有一个开源项目火了,叫“996.icu”,开源地址:https://github.com/996icu/996.ICU ,目前star的人数截止我写这篇博文时已经高达17 ...

  6. 6年DotNet码农的盲目经历

    前言   第一篇没有选择记录与技术相关的文档,是考虑到有必要给查阅这篇文档的伙伴们“自我介绍”一下,大佬们看了求带或指导,我很愿意学习,初学者们看了千万不要重复走我之前的“学习之路”:我老家贵州,再过 ...

  7. 上不了Google是码农的悲哀

    http://refyt.com/?r=34d1edb7dba42e8d 上不了Google是码农的悲哀.1. 资料大部分都在国外的网站,差不多倍感伤心.2. Google Play没有办法访问了.3 ...

  8. 码农英语四级考了6次,也能进知名IT外企

    程序员学英语 这显然不是新鲜的话题,但再怎么重复强调都不过分! 为啥要学 IT是当今世界发展最快的行业,没有之一!作为其中的从业人员,要始终保持对最新技术的关注度,难免需要阅读英文新闻或文章 平时工作 ...

  9. 【整理】待毕业.Net码农就业求职储备

    声明:本文题目来源于互联网,仅供即将从学校毕业的.Net码农(当然,我本人也是菜逼一个)学习之用.当然,学习了这些题目不一定会拿到offer,但是针对就业求职做些针对性的准备也是不错的.此外,除了技术 ...

随机推荐

  1. 【MyEclipse 2015】 逆向破解实录系列【1】(纯研究)

    声明 My Eclipse 2015 程序版权为Genuitec, L.L.C所有. My Eclipse 2015 的注册码.激活码等授权为Genuitec, L.L.C及其付费用户所有. 本文只从 ...

  2. [转] Sublime Text 3支持GB2312和GBK编码

    Sublime Text 3与Sublime Text 2的不同 其实有不少人写过如何让Sublime Text 2支持GB2312和GBK编码,例如这篇.基本原理就是先装好Package Contr ...

  3. fis-receiver:一行命令将项目部署到远程服务器

    前言 本项目基于FIS2,没了.其实fis项目本身就提供了php版本的范例,这里翻译成node版本. 项目地址:https://github.com/chyingp/fis-receiver 服务端接 ...

  4. -webkit-overflow-scrolling:touch iosBug

    IOS8+  -webkit-overflow-scrolling:touch 会导致webview崩溃 解决方案 用js动态添加样式  比如: $("body").css(&qu ...

  5. Ruby On Rails 常用的精品Gem汇总

    首先需要注明一点,本文是原创的并不是从其它地方转载.所有的数据是我从 GitHub 和 RubyGems 上码下来的,数据的截取时间就是本文的发布日期. RubyGems 的下载量可以看到在用这个 g ...

  6. 端口扫描之王——nmap入门精讲(二)

    接着讲上节的内容,上节中提到了一个时间优化的问题是使用参数-n,通过不解析地址来进行优化时间的,但是优化时间的方法还有很多,比如说我们可以通过时间优化(0-5),指定单位时间内的探针数,设置组的大小 ...

  7. 每天一个linux命令(27):ln 命令

    ln 是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在 每一个需要的目录下都放一个必须相同的文件,我们只 ...

  8. Error: java.lang.UnsatisfiedLinkError: no ntvinv in java.library.path

    Error Message When compiling or executing a Java application that uses the ArcObjects Java API, the ...

  9. Qt *.pro编写一般规则

    qmake 之 CONFIG 与 QT 乱谈 看qtcn论坛中经常有人忘记 QT+=network 等语句.随便写写吧,或许对他人有帮助. 写来写去,发现越写越乱,就这样吧,反正主要的内容很简单. d ...

  10. VB中的属性、方法和事件概念解析

    Visual Basic 语言中的所有对象都有它们自己的属性.方法和事件,其中包括窗体和控件.可以将属性视为对象的特性,将方法视为对象的操作,而将事件视为对象的响应. 日常生活中的对象(如氦气球)也具 ...