跳出弱鸡循环2

前情提要:跳出弱鸡循环

关于我的现状,参阅我的这个回答

几周前,我写了《跳出弱鸡循环》,不少围观群众表示嗤之以鼻。今天我就用我的经历,介绍另一种跳出弱鸡循环的捷径。

是的,学习没有捷径,但是跳出弱鸡循环有。我就在机缘巧合下走过这么一条捷径。

前几天,有人在群里问我,上班写业务代码很无聊,整天就是复制粘贴;下班了想要学习又不知道该学什么。我说,这其实就是我三年前的状态,当时我在上海的某不知名创业公司当CRUD小王子,跟你现在一毛一样。

while(做弱鸡业务){
    薪资低;
    难跳槽;
    幸福感弱;
    成就感弱;
    技术提升慢;
}

那我当时下班之后做什么来打发时间呢?

给Groovy修bug。

Groovy是JVM上一个挺小众的语言,编程语言排行榜差不多十几二十名开外吧。当时Groovy的bug很多(现在也很多),社区也不是很活跃(现在也不活跃-_-|||),我就翻他们的issue列表找软柿子bug(一会会说什么是软柿子bug),用佛系的心态修。什么叫佛系的心态呢?就是修bug完全不图回报——修完就走,深藏功与名。

这是我给Groovy修的第一个bug,也是我有史以来在GitHub上提交的第二个PR。而两年多后的现在,我在GitHub上提交的PR数字是:

截止2019年6月25日晚

你也可以访问 github.com/pulls 查看所有你提交过的PR。

这就是我要说的捷径。无论你是人是妖还是人妖,无论你经验多寡,无论你现在在做什么,这条捷径总适合你:通过向开源项目提交PR,提高自己,寻找跳出弱鸡循环的机遇。

当我说出这条捷径的时候,几乎所有的听众的第一反应都是:太难了,我的水平达不到。

我一般会反问,你试过么?你试过挨个翻阅感兴趣的项目的issue tracker么?你试过挨个阅读其中的issue和讨论么?你试过把issue中给出的可以重现bug的例子复制到本地尝试运行和重现么?

迄今为止,没有一个我怼过的人回答试过。一个都没有。你试都没试过,你怎么知道难?你怎么知道你的水平达不到?这只需要一根网线一把键盘,不需要投资不需要卖笑,连科学上网都不需要。

下面我就详细说说这条捷径怎么走。

第一步,挑一个你喜欢的开源项目。不怕用力过猛的话这里有一个GitHub星星排行榜,尽管大胆正面刚。如果胆子比较小,就挑几百几千颗星的项目。挑的时候注意一些原则:

  • 一定要活跃!可以查看其他PR被合并的情况,提交历史等。提个PR三百年没人回会严重打击你的积极性。
  • 最好不是明星项目,最怕好bug一露头你还没反应过来就被别人修掉了。
  • 业界知名最佳,不知名也无妨,可以拿来练手。但是一定要有价值,别去给阿波罗11号登月导航系统修bug。

如果你是写Java的,其实Groovy是个不错的打怪刷经验的地方。它的好处在于:

  • 纯Java实现,可以通过GitHub协作。(我给OpenJDK修过bug,首先得会C/Make,其次得会用Mercurial,最后还要通过邮件组寄送patch,烦都烦死你。)
  • 足够有名,bug足够多,高中低档bug都有,不愁找不到bug玩。
  • 社区虽然不十分活跃,但是有几位大牛鼎力支撑,不用担心没人理。(Paul King几乎以一己之力支撑起了整个Groovy项目,国内也有一位活跃的committer孙岚知乎

第二步,挨个翻他们的issue tracker,找软柿子bug。什么是软柿子bug呢?就是那种能稳定重现(有可以重现的代码样例),并且“看上去比较重要”的bug。这种bug不一定好找,但是也不难找。实在找不到你可以埋伏几个月,每天翻一翻,总能捡到漏的。(你可以订阅GitHub仓库的通知,有任何风吹草动你都能收到邮件,后果是……一天几千封。)

Issues就是你走上人生巅峰的第一个台阶,加油吧骚年!

能稳定重现的bug都是好bug,不能稳定重现的bug别说你,我看着都发怵。

“看上去比较重要“的意思是说,你修掉之后不会引起太多的讨论——你要是给对方提交个feature PR对方可能会拒绝,但是修bug,尤其是明显的bug的PR几乎是百分百能通过的,减少了很多撕逼的麻烦事。

第三步,花时间修掉它,提PR。说的轻巧,实际上你可能会遇到很多困难。

首先,你可能对GitHub不熟悉,不知道怎么fork,也不知道怎么提PR。这里有一些视频可以帮助你,手把手一步步教你如何从零开始(那种连GitHub账号都没有的零开始)做这一切:

前置知识 - 使用Git/GitHub/Markdown进行项目协作 - 写代码啦!xiedaimala.com

其次,你可能经验太浅,压根不知道/跑不起来项目的代码,根本没法在本地重现bug。怎么办?

没办法,只能一步步硬啃这个骨头,各个项目之间差别极大,所以我没法给出一个万能的建议。虽然只能硬啃,但是你可以求助场外观众。具体方法就是碰瓷式请教:clone下来项目之后,翻项目的git历史,找到提交者的邮箱,然后把你碰到的问题总结一下,写邮件给他(们)。一个人不理你就发一万个,总有好心人愿意帮助你这只菜鸡。

记得要用英文写。(之所以强调这一点是因为真的看到有人在Gradle里面发中文issue……Gradle只有我一个人能看懂中文啊……)

最后就是最大的问题了,bug不会修。这个……其实跟你日常修的bug没有本质上的区别,无非就是项目复杂一点,调用栈深一点而已。调试器+打log大法总能搞定的。我最爱修的bug就是那种“上个版本没有,这个版本突然出现的bug”,只要开两个窗口同时debug对比两个版本的差异即可轻松找到问题。重要的是耐下性子,别心慌,反正没人催你。还是有问题的话,周末来看我直播演示修bug,广告在本文最后。

在这个过程中,你不可避免地会暴露出自己菜鸡的一面。比如说我当时给Groovy修bug的时候,对方让我squash一下commits,我回答……不会。当然大佬才懒得跟你们这些菜鸡计较,他们顺手就帮你解决了。别害怕,别灰心,谁也不是一生下来就是大神的。

你看我找了那么多理由,其实就是不会,完全没听明白他让我squash是在干啥

修掉bug之后记得补几个测试。别把不测试的习惯从公司带过来,修bug不加测试百分百不会被接受的。如果你对这个过程发怵,害怕搞错了被人耻笑,你可以拿我们的练习题练练手,我们有个机器人自动帮你通过并merge:

hcsp/fix-add-functiongithub.com图标

说了这么多,你可能不由地要问,“我也没看出来捷径在哪里啊?”

捷径在于,只要你能静下心来专攻一个领域,你会非常快的看到收获:

  • 你会发现从“啥也不懂”到“能给他们提交PR“的过程中,个人能力得到了极大的提高。你从实战中锻炼出了git的各种骚操作能力、修bug的能力、写测试的能力等等。你被迫去学习各类知识以达到“能解决这个bug“的能力。我自己就是一个受益者,我从给开源项目提交PR的过程中受益匪浅,学到了非常非常多CRUD小王子学不到的东西。
  • 如果你能给著名项目修一两个bug,足以让你的简历脱颖而出。必须指出,这其实不难,很多著名开源项目里也有非常低级的bug,只需要你付出稍微多一点的耐心和努力。举个栗子,这个是我还没加入Gradle时给Gradle修的一个软柿子bug,它完美的符合我们挑软柿子bug的要求:能稳定重现,并且是一个毫无争议的bug(空指针异常)。连上调试器调试最多几个小时就能找到问题所在,一点也不难。
  • 如果你能长期(几个月时间)攻下来十个八个的bug,你会发现很多机遇。比如,猎头会勾搭你(我就被勾搭过),你可以可以主动勾搭仓库的协作者求内推。这都是混脸熟的功效。假如你能给antd修几个bug,你猜你能不能找他们求蚂蚁金服的内推?假如你能给typescript修几个bug,你猜你能不能找微软的人求内推?在2017年的春天,我给Gradle修了大概四五个bug,后来Gradle接纳我的邮件中是这么说的:
We deeply appreciate your passion for Gradle and determination to work with us.

这就是捷径所在。你只需要付出几个月的时间,就可以获得意想不到的收获。这一切跟年龄、学历、经历完全无关,你通过给开源项目修bug的过程,锻炼了自己的能力,也让其他人看到了你的能力——你不需要再和其他人一起挤海投简历的独木桥——你完全可以找混脸熟后的小伙伴走后门(内推),也能避免HR对你学历的鄙视(技术总监指名要的人,轮得到你来指手画脚?)。

当然,一切的前提是,你要有去做的决心,和毅力。看完了本文热血沸腾三分钟之后去打游戏……那你还是在弱鸡循环里呆着吧。

最后是毫不令人意外的广告时间,我打算这周末开个直播公开课,聊聊这个跳出弱鸡循环的捷径,然后现场直播给阿里巴巴的一个开源项目修bug。我们周日晚上20:30不见不散!

主题

  • 走近Java与互联网后端开发
    • 什么是后端开发
    • 后端开发的日常工作
    • 后端开发的前途和钱途
    • 入门指南

视频地址:

写代码啦!xiedaimala.com
  • Java进阶:跳出弱鸡循环
    • 工作两年,看不到上升空间怎么办?
    • 进阶学习指南与书单
    • 简历、面试套路与职场上升捷径
    • 直播为阿里巴巴的开源项目修复bug

视频地址:

写代码啦!xiedaimala.com


===========================

2019.7.22更新:我现场直播演示给Apace Maven修bug:

https://www.bilibili.com/video/av59544269?from=search&seid=5080318435633366133www.bilibili.com

===========================

现场直播给SpringBoot找bug:

https://www.bilibili.com/video/av65456902www.bilibili.com

==========================

想和我一起学习,欢迎联系我:

编辑于 2019-09-02

文章被以下专栏收录