作为一个高大上的码农,你肯定用到过 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. [MetaHook] Load DTX texture to OpenGL

    This function load a LithTech *.dtx texture file and convert to OpenGL pixel format, compressed supp ...

  2. CentOS 6.5 安装Nginx 1.7.4

    一.安装准备 首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++.gcc.openssl-devel.pcre-devel和zlib ...

  3. Jenkins进阶系列之——02email-ext邮件通知模板

    发现一个很好的邮件通知模板,根据我的需求定制了一些.分享一下. Default Subject: 构建通知:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${ ...

  4. 开园子啦(浅谈移动端以及h5的发展)

    一.前言 一直以来都梦想着写几篇博客,忙于工作一直也没有抽出时间来写一下.看看大熊君.小v君等都在努力写博客,我这个不太善于言表的少年,也是在忍不住了.否则会被人家拉下更远.先简单介绍一下自己,目前我 ...

  5. Library not found for -lPods 解决方法

    使用cocoapods 经常会遇到的问题. 1. Library not found for -lPods 2. Pods was rejected as an implicit dependency ...

  6. Javascript基础系列之(五)关键字和保留字 (keyword)

    关键字不可以作为变量名或者函数名 break case catch continue default delete do else finally for function if in instanc ...

  7. AngularJS开发指南2:AngularJS初始化过程

    自动初始化 请将ng-app指令放到你应用的标签节点中, 如果你想要AngularJS自动执行整个<html>程序就把它放在 <html> 标签中.比如:<html ng ...

  8. js对象中的回调函数

    假设一个页面new多个同类型的对象,且该对象内部含异步请求的回调,很有可能回调函数中的this指向最后一次new的对象. 解决该问题的办法是,异步请求使用$.ajax并制定其context为this, ...

  9. 利用less监视模式实时预览样式刷新浏览器

    [前言]此处介绍的方法只是我个人的用法,相信大家有更好更简洁的方式. 上次写到利用LiveReload解放F5.而且LiveReload可以编辑sass/less/stylus.但是可惜发现LiveR ...

  10. Nginx 实现AJAX跨域请求

    在工作中遇到跨域请求的问题: AJAX从一个域请求另一个域会有跨域的问题.那么如何在nginx上实现ajax跨域请求呢?要在nginx上启用跨域请求,需要添加add_header Access-Con ...