答案有更新,后续的故事可以点击 https://zhuanlan.zhihu.com/p/36271370
======================================
在北京一家startup工作一年 混国外社区 混github 一年后直接remote给多家国外公司工作 收入直接x4-6倍
======================================
收到一些童鞋的评论 求经验之类的 好吧 我就在这里统一回复了吧,其实就是记过去2年的流水账吧。
事情是这样的,13年我从学校毕业之后就去了北京一个比较靠谱的startup团队,我并不是科班,当时只是会一点前端,接触过Nodejs的一点皮毛,会看文档,会用Google,会一点点英语(真的只是一点点)。然后在这个团队里,我顶着比较大的压力吧,服务器是我和另一个北京某邮的实习生在开发,之前是团队大牛ceo写的。其他成员要么是设计,要么是ios或者android吧。
就酱紫 产品就要上线啦 记得是我入职2个月之后吧 那是我第一次接触这么隆重的上线,可惜的是 上线那天就见证了我有多么的不靠谱,才刚上线 数据库就写乱了,结果是通宵改代码 修bug,老大陪我一起,真的很感谢团队的小伙伴对我当时的容忍以及不离不弃。
嗯 我这一段想表达的是 我是如此的不靠谱~ 那你肯定会问 为什么如此不靠谱的人 会有remote 收入x4-6的机会呢,天理不容呀
在之后的日子 老大派了一个ios的大哥过来和我一起搞服务器 实习生倒是走了 我不再是一个人顶着压力了 进入了一个比较良性的学习与工作的循环(再次感动 谢谢老大)。在这段时间 我开始学着去Github的joyent/node下留下一些足迹,比如订阅issues还有Pull Requests,然后有时候遇到一些错误,就顺藤摸瓜,发现是Nodejs自己的问题,然后就在Github Issues里面用我那蹩脚的英语和老外们交流(in text)。再后来 我发现bug 然后我开始学着改bug,怎么让nodejs的测试通过,就酱紫,我学会了unit test,知道了mocha,tape等测试框架,那时我渐渐也明白了为什么当时自己那么不靠谱,所有的代码都没有写单元测试,更不用说什么可用性测试 压力测试啦。(我现在看到一定会抓狂,因为如果现在谁把没有测试的代码交到我手里 第一件事一定是“写测试”)。
再后来,我开始给Nodejs的一些其他第三方库提issue和pr,接受了不少,也被拒绝了不少,就酱紫一直到后来 我们发现Nodejs的一些弊端 然后商量着用C来写其中一个核心部分,于是接触了TJ大神的clibs(clibs · GitHub)这个工具,很有幸 我慢慢地学习C 也加入了这个组织,然后参与了一些issues/prs/repos。
渐渐地 我在其他开源项目的足迹越来越多,大家可以看这个:yorkie/me · GitHub,基本上是我前年的开源贡献,当然我这个跟真正的大神比起来 简直就是小孩子的级别啦。
直到去年大概3-4月的时候 其实从过年回来就开始觉得 在北京身体确实受不了 也不是公司虐待我啦,我每天工作时间确实没有到12个小时,只是不知道为什么每天觉得很困 干完公司的事情 就倦怠于学习其他东西啦,再加上当时有一家以色列的公司给我提供了一个soho的高薪工作。于是我很绝情地抛弃了和我一起奋斗的小伙伴(其实我比较冷血的啦 我觉得自己理想比友情更重要,可能以后会有另外的想法,但我从不后悔我做的决定,因为后悔没啥用,呵呵)。
于是就回家了,我整整在北京工作了1年,房子也正好到期。
然后 这是我第一次和外国人合作非开源的项目,一开始蛮好的,但是可能是因为我刚从北京回来,有一种倦怠感吧,对工作不怎么上心,所以整个过程合作其实不那么愉快,所以过了没多久,大概1个月左右,就被以色列那个公司开除了(说实话,当时很恨那个公司,但是现在 呵呵 觉得这个决定很正确,不match就早点放手,跟谈恋爱差不多 呵呵呵呵)。
终于 我失业了 没有收入 待业在家 我不断告诉自己 I need to work 但是这个时候 再找国内的公司又太掉价(太肤浅了 呵呵),于是我就开始去找国外的自由职业的机会,下面可以分成几条线说:
第一条线:http://Elance.com
这个网站是一个Freelancing的专用网站,也是我失业阶段使用的第二个网站,我开始注册账号 然后找一些前端/Nodejs的工作。结果就找到一家NYC的公司,CEO在NYC,然后CTO是加拿大非常出名的一个华人架构师,我的工作内容就是做Chrome的插件,涉及到Angular,当然也有Nodejs后端代码的部分,一开始就我们三个人,到后来来了又走 走了又来了一堆印度的、俄罗斯的、中国的,幸运 我还遇到了国内一个著名的Nodejs专家。这个团队的时薪是15刀/小时,略低啦,不过当时我接的时候还没有其他的,于是就先找点事儿做。
整个合作过程还是比较愉快的,最后我基本变成核心开发者,最后我离开前,代码基本有百分之70都是我写的,也给不少新人做项目的guiding。不过因为之后找到其他工作(其他线)比较忙,这边就没再做了,另一个原因是不断有新人来修改代码,他们根本不太注意测试、代码规范之内的,觉得很累。
第二条线:投简历
这条线几率会比较少,挑战比较大,但是收获到的当然也是比较稳定 比较高额的回报。其实我是和http://elance.com同时进行的,在国外大型的城市 都有一个像startups列表的这么一个网站,有网站的主页,于是我就去比较多的发简历 给我觉得不错的公司,然后是Github上也有一些大神会把自己的公司网址贴上去,我都毫不顾虑地去投了,当然也包括Facebook这种大公司啦。
又是New York City(呵呵 不知道是不是我的英文名Yorkie和NY相似的原因 和这个城市很有缘分),然后他们给了一个机会,先做他们出的Chellenge试题,很简单的啦,就是模仿express写一个lite版出来,我很容易写出来了(我可是express代码都看过,这个自然没有什么问题)。然后他们开始给我了一个Task,也开始算Fee了,30刀/小时(正常价)。不知道为什么他们认为那个task很困难的说,可是在我不断试错,不断沟通,当然还有不断Google 不断文档的轮番攻势下 搞定啦,然后他们就回了我一句:
You are fucking awesome !!!
呵呵 然后我算是在这个团队建立了一种核心的位置吧 我到现在也一直跟他们工作,还有另一个原因是我真的很喜欢他们的代码和沟通方式,这就是我前面说的:Match真的很重要啦,跟这个team如此match以致于我在后来收到facebook的interest invitation的时候都婉拒啦。
第三条线:开源也可以make money
这个真的可以用巧合来说啦,我偶然在http://elance.com中看到了一个需求,就是用nodejs写一个XXX服务的客服端程序,然后我就觉得 这简单嘛 再加上当时我已经有工作了 所以就抽空写了个 然后开源到Github上,再后来 我发现那个公司有Github主页,但是没有Nodejs版本的repo,于是我就给他们写邮件,大致就是说:我给你们写了个nodejs版的,然后可以帮你们维护,修bug 然后你们相应地要给我一点money花,他们很爽快的答应了,然后我就和他们负责人一直在release前的验证,fix等。
嗯,主要的线就是这些啦,其实还有很多很多很小的线 也很有意思 比如这段时间我有尝试去翻译工作,今年过完年(也就几天后)也会在某Mooc学院 “撸”一段Nodejs的课程。
总之 我觉得自从freelancing之后,我可以尝试更多之前没时间 或者没有去尝试的东西,我觉得生活不再只是程序代码,而其实你coding也不是只是和计算机去交流,因为你的代码是给人看的,所以作为程序员,就别拿这个职业作为自己有交流障碍来做借口吧,多半是社会舆论把你给定型了,其实你应该可以做得更好的,扯远了,最后再扯一下靠不靠谱的问题:
在北京那段时间 我是不靠谱的 这无可置疑,而现在 我觉得我是比当时要靠谱的,至于到什么程度,我觉得是靠谱到别人对我说了句: You are fucking awesome!!! 的程度,自己YY我现在邪恶的表情吧,那这中间我做了什么呢?有几点:
1. 我改变了心态,原来我是得过且过,现在我虽然不会把所有情况都考虑到,但是一旦我知道某一种状况会出问题,我就一定不会忽略那一个case
2. 我现在不仅写单元测试,还写过很多测试,也搭建过一整个测试系统,其中也包含一些非主流平台的测试(比如CEP运行时,自己Google哈)
3. 独立,尽量自己解决问题
所以要说有什么经验分享的话,首先:
第一,你得打你自己的招牌,我曾经的招牌是Github,是我在Nodejs的贡献排名,是我的so cute的头像。
第二,你得做到靠谱,起码得做到我现在的程度,也就是上面的三点。
Ok, 小弟献丑了 希望对大家有帮助,另外我真的重申一下,我不是大神,真的不是,我跟国内的真正大神比起来,我还是Too Young Too Simple了,但我是介意大家和大神 并且想成为大神这样的一份子,希望大家一起努力
另外欢迎大家在Github上Follow我,好吧 我写那么多就是为了骗粉丝的(毕竟是招牌嘛,呵呵)
突然发现这个主题作为女屌丝程序媛的小女子可以说说。先说说成绩(这样才能吸引点赞嘛)
我一年内跳了两次,从10k到20k。比不了动不动就double,triple的事迹,我这个成绩也属于比较正常接地气的。可始终没有进入我比较向往的BAT稍有遗憾。小女子去阿里面试,但没通过,那位阿里的面试官真的很严格,问了好多jvm优化,源码,分布式开发,集群,负荷分散,高可用性,性能调优,数据库设计,分表分库,数据缓存(redis,memcached,mongo这种),事务jta,大并发多线程,nio(netty,mina这种),异步io,http协议,soa,webservice,restful,j2ee标准,servlet,jsp,jms,消息队列中间件(kafuka这种),数据结构,算法,apache的开源软件,java的新特性,java的未来,各种场景的解决方案,等等问题。
现在想想,即使拿到了offer也不会去吧,因为在杭州,太远了。不过阿里的面试对我帮助很大,那次面试失败后,我回去恶补了高级Java工程师的各种面试题,还仔细研究了tomcat的源代码,以至于我觉得后面几家公司的面试都好简单。
第一次跳槽之前是在一家外企,这里不明说,但是写完后亲们应该都能猜到。那外企promotion的流程特别繁琐,其中要用英语写一份至少5万字以上的升职报告,然后是一堆领导审批,一审,二审,三审,最后还有老外远程视频做终审。当然也要看平时的performance,不过如果你报告写的好,performance什么的都是渣,怎么才能写出一份好报告呢,那就是潜规则了。
我就怒了,即使写了也不一定能升职,即使升职也加不了多少钱,与其花这些精力Promotion,还不如跳槽呢。就跳了,就遇到了阿里,就败了,屡败屡战,拿到了3份offer,挑选了一家C公司,也是国内知名的IT企业,工资加了5000,算是50%,让那些在原公司像狗一样写升职报告的小姐妹们嫉妒了好一阵。
其实C公司也挺好的,全是女神(亲们看我ID,就知道我是一个比屌丝男还要迷恋女神的人),比那家外企的美女多的太多了(现在国内的IT外企真心没有啥竞争力和吸引力),除了随地吐痰和到处抽烟的不自觉屌丝男员工比较多以外,真的挺好。
过了半年,我无意间在猎聘网改了一次简历后,就有无数的猎头打我电话,(这里真不是给猎聘网打广告,跳到C公司用的还是拉勾网呢,现在这些垂直招聘网站真的很方便。),猎头一打电话,心里面就又痒痒的。再加上实在受不了到处抽烟的屌丝男,PM2.5已经这么厉害了,还要抽,完全不顾别人的感受。
于是又去面试了,基本上和第一次面试的内容差不多,还是高级Java工程师,或者是资深Java工程师,都一样。面了4家,又拿了3个offer,再和hr与猎头一通讨价还价,就又加了5000。
总结一下:
很多人是温水煮青蛙,在老公司里面混混还行,迎接新的挑战时立刻变成了白痴。比如多年Java的老鸟居然答不上面向对象语言的特征是“继承,多态,封装”。还有遇到过所谓的Java程序员连线程安全都不知道的。(小女子也做过Java的面试官,想想都有些鸡冻呢。)
其实我也是温水煮青蛙的受害者,跳槽初期对面试和技术有些生疏,包括阿里的三次面试都失败,对信心真的是一次很大的打击,觉得跳槽这条路走不通。但是我没有放弃,每次面试失败,我都会把面试官的问题回滚一遍,然后找最佳的答案,专攻面试题的效果很好,比如我至少遇到过4位面试官问我“事务的传播属性”(注意不是“事务的隔离级别”),这个问题百度就可以给出完美的答案,即使不完美,你只要表现的比面试官的理解还完美就行了。
所以面试就是女神的圣斗士闯圣域黄道12宫,好的圣斗士是不会被同一招打趴下两次的。亲们想想看,面试官也是人,尤其是Java面试,能问出来的问题也就是在那么一个有限的范围里面的那么一些些问题。做好充分的准备,然后再编几个装逼的故事,忽悠忽悠,成功率非常大的。至少我认为难度要比高考小很多,你想想高考要做多少题,背多少书啊。跳槽也肯定比写5万字的升职报告还不一定能升职的事情靠谱多了。
人类是有惰性的,小富即安。跳槽具有不确定性,可以说是一次冒险行为。所以跳槽毕竟是公司里面的少数人(公司倒闭除外)。那么公司对于大多数员工采用平缓加薪的策略也有一定的合理性。承担风险到处面霸的人得到的回报多一点也可以理解,只是作为屌丝的自己不能完全跟着公司的节奏走,要保持学习和知识的新鲜度,职业规划也很重要,不要掉入温水煮青蛙的陷阱。