一位 Javascript 程序员的十年回顾(译)

我的这个十年,是从高中毕业后进入大学的第一年开始的。那时的我十七岁,没有工作,没有任何业内交际圈,是一个真正的小白。你现在正在阅读我的博客。我感到十分荣幸。

我已经零零散散的在不同的博客中讲述了我的故事。现在,我认为是一个恰当的时机记录下我认为最值得纪念的部分。

每个人的故事都是独一无二且不可复制的。我非常幸运的出生在一个中等偏上的中产阶级家庭,并且我的长相非常符合人们对程序员的刻板印象。人们愿意把机会给我。再次声明,我希望我的分享在,你对比了自己的生活之后,能够对你有帮助。即使我们的经历天差地别,但也许你可以从中获得一些快乐。

2010

我出生在俄罗斯并且在2009年完成了高中的学业。在俄罗斯,如果你的成绩达标,高等教育是免费的。我尝试在几所大学碰碰运气。我当时特别想进一所学生经常得编程大赛大奖的学校(我当时认为这样非常酷)。

然而,由于我的数学成绩不够优秀,如果我想做与编程相关的事情,就没有太多选择的余地了。在有限的选择中,我选择了给学生配备 MacBook 的那所学校。(还记得那种预装 GarageBand 软件的白色塑料外壳电脑吗?那简直棒极了!)

我在 2010 的夏天完成了第一学年的课程。我发现在接下来的两年中,那里并不会教授太多的编程,取而代之的是线性代数,物理和其他我特别不感兴趣的课程。一切事情似乎都有着不错的开端,但我开始厌烦和选择逃避那些需要早起的课程。落下的知识像滚雪球那样越来越多,我对于大学第一年的记忆只剩下焦虑和完全的挫败感。

即使是那些我自认为擅长的课程,也开始变得失控。我们的英语课程相当基础,我在任课老师的口头承诺下跳过了大多数课程。但当我准备参加最后的期末考试时,却被拒之门外,除非我向这个老师缴纳一定金额的“培训费”。这样的经历让我开始对高等教育产生怀疑和不满。

与此同时,作为一个糟糕的学生,我的情感经历同样失败。我十分难过,但我认为时间会抚平一切创伤。不幸的是,在很长一段时间里,我都没有足够的智慧从失业的困境中走出来。

好在,在专业领域,2010 年是值得高兴的一年。我得到了人生中第一份程序开发的工作。接下来就是这一切如何发生的。

在大学的旁边有一个小小的会场可以举办各种会议活动。这个会场叫做“商业孵化器”,需要注意的是,它并不是硅谷的那类孵化器,而是俄罗斯版的。我不清楚他们会孵化什么类型的商业项目。然而,他们举办了一场关于软件开发的会议,我对这类内容很感兴趣,所以我决定去看看。在现实生活中,我并不认识任何程序员,也并不知道 Meetup 的存在。

我现在已经不记得他们讲了什么。但我知道那个发言人是俄罗斯-美国外包公司的高管。我从十二岁开始编程,所以我主动接近他并询问他们是否雇人。他给我发了一份邮件,我通过了那份测试,于是几周后得到了那份工作。

我在 2010 年的夏天入职了我的第一份工作。我的薪资是 18K 一年(是的,是 18 而不是 180)。在发达国家它不值一提,但是,再次强调,这里是俄罗斯。所以租金也相对便宜。我立刻搬离了母亲的公寓,租了一套 ¥150 每月的公寓。我非常激动,用我的第一个月工资买了一台 iPhone,对它的 UI 设计惊叹不已!

再一次来到夏天,大学二年级的生活开始了。但是我已经决定离开校园。当我失去最后一点了听课和完成练习的动力后,我开始全职工作。我归还了电脑,不再出现在校园。唯一回去那次,是去取回我的文件。

有一点儿跑题了。我并不是说大学没有用,或者鼓励你辍学。对于我来说,这是正确的决定,即使我丢掉工作也可以重新回到家里去(稍后会提到)。我现在拥有了一份工作。

我有着与生俱来的先天优势在编程知识方面(一个从小就开始编程的人)。那些不具备这样特质的人通常可以通过取得学业并获得相应的能力来进入这个行业。就是这样。

2011

我工作的大部分内容是修改外包公司的垃圾程序。没有任何工作经验的我,在每一个项目中都试图使用我所能掌握的最炫酷的技术。我甚至将 random Microsoft Research projects  用在了最终产品上。我为此感到抱歉。但同时也很好的完成了很多工作。

我的第一份有趣的项目是关于旅行的。我们的客户是位于纽约的投资集团。我至今仍不了解投资,但基本上可以用邮件系统接收工作安排,而且这些安排都是需要不同层级的批准的。他们有一套服务管理系统,但这个系统相当糟糕,没有人能够说清楚它是如何运作的。我的工作就是到那里去,在纽约工作一个月,用一个月时间修复好这个系统。

这个系统是由一个廉价的外包公司完成的。九年过去了,我仍然记得它的名字。最令人难忘的是那个三万行的函数。为了搞清楚它,我必须把它打印出来,平铺在桌子上,用铅笔在上面写注释。原来那是相同的一段代码,被重复执行了五十次。我猜测写程序的人一定是按照程序的行数来被支付工资。

在那一个月,我写了无数个输出日志去探索到底哪些服务在工作,并试图重构增加了它的鲁棒性。与一个非技术公司合作是不易的。例如,我不能仅仅只是修改程序而不做书面文档的解释用来说明我的修改,这样才能得到那个公司 IT 部门的审核签字。现在,这被叫做代码审查。

在旅程的最后一天,我去一家酒吧看表演直至深夜。第二天早上,我原本计划给客户展示一个月以来的工作成果。时间安排在早上九点钟。不幸的是,我一直睡到下午一点才醒来。我向经理表示了歉意之后,尴尬并且痛苦的回到了家中。

并没有什么后续反馈。整体上来说,项目还算成功,客户可能会认为我是一个不修边幅的奇怪俄罗斯小伙。但我知道我这是在自欺欺人。我并不特别喜欢“企业类型”的项目,这样的工作十分繁琐!

我回到了俄罗斯的圣彼得堡。夏天的夜晚灯火通明。我从一个酒吧辗转至另一个酒吧,带着模糊的不安,反省了一整晚。大约早上七点钟,我终于想清楚了。我吃了一个沙威玛,坐地铁来到了公司,等待人事部门的同事,辞掉了工作。

我的一个朋友计划去克里米亚(未合体之前)旅游,询问我是否同行。我打包了行李并带了一个续航一周的诺基亚手机。在旅行的两周时间内,大多数时间都是没什么保护的,在模模糊糊的精神状态下,我几乎不记得任何事除了这两件。

一次,有个人用刀子威胁我。那个人他说会杀掉我,但是第二天他就消失了。还有一次,我愚蠢的一个人在悬崖边游泳,差点溺水身亡。这次我是被水中的一块石头救了,我爬到石头上面,很长时间都无法恢复意识。

这次旅行仿佛是一次硬件重置。我烧坏的硬件被修理,我再一次为写程序做好了准备。(但是这里我不是说让你去置之死地而后生)

唯一的重要的问题是,我的能力仍需提升。必须的!

你看,我只写过桌面应用的软件,如今还有谁听说过桌面应用软件?它不复存在了。要么是后端,要么是移动端,要么是前端。我完全不了解这些。我失业了。所以我只好搬回去和老妈一起住。(谢谢你,妈妈!)

很快,我在社交网络上看到一篇文章。那是一个从美国硅谷回来的俄罗斯人写的。他正在寻找志愿者参加他的项目开发,作为回报,他会免费教授网络开发技术。在那个时候,这听起来对我而言是一个不错的买卖。

我加入了他的项目。并且很快发现其实并没有真正的教学内容,我们被提供了一些网络教程,大部分时间只是相互学习。幸运的是,因为我和母亲住在一起,所以足够承担这份工作的花销。我学习了 Git, Python 基础,Django, 一点点 Css 和 Javascript, 以及一些 Bash 语法用来发布我的更改。Web 你好,我来了!

九年之后,我仍然不确定我应该如何看待这段经历。一方面,我们免费为他的个人项目工作。另一方面,我们有完整的 root 权限。这是十分让人欣喜的,我们能够将改动发布到终端产品中,并可以不断的从错误中学习。这个项目为我们学习的提供了全部基础设施。不花费我们一分钱,我们也可以随时离开。这个项目因为它的教育性衍生了一定的社交价值。它使我想到了开源软件。

我至今还是非常感谢这个人,他创立了这个临时的“训练营”,成为了我职业生涯的导师。总体而言,我并不是说,免费为别人打工是一个好的锻炼方式。我在这里讲这件事也并不是给你提供建议,我只是在叙述我自己的故事。

我制作了一个控制面板用来记录我们每个人的成长记录。我的导师建议我可以把它打包做成产品卖给其他经营网络课程的公司。“初创公司”的短暂战略是令人窘迫的。我不知道我到底在做什么,我向不同的人介绍了不同的东西。最终,我使用同一个引擎帮助不同客户完成了不同的网站建设,在整个过程中赚到了 $200。我浪费了自己以及愿意提供帮助的朋友数月的时间。我对此感到羞愧,并最终关停了它。这一线生机使我成为了一个 Web 开发工程师。

但我仍然失业!

2012

作为一个 20 岁的 Web 开发者,我只想在一个地方工作。它就是俄罗斯社交网络公司。每一个俄罗斯人都在使用他们的产品。那个产品非常成熟。他们的团队也被认为是非常酷的。几乎都是精英。

他们公司的高管经常发文章提到他们的工程师是如何的高薪。他们技术的小团队似乎对于技术的挑战和公司的待遇都非常满意。在俄罗斯的技术圈子里,很多人都知道他们的大名。

我的导师把我介绍给了他们的 CTO,我拿到了一份可以拿回家做的 JavaScript 试题。这里面包含了一个他们的一个功能,就是如何在你发消息的时候,如何预测用户的名字。我花费了两周的时间去像素级的还原了一个相似的缓存机制和去抖动方法。

现场的面试真是一场灾难。显而易见,我没有他们那个级别的经验。但是,他们愿意给我一个机会,如果我能理解他们的“产品线”。他们给了我一个可以拿回家做的练习,为社交媒体网站设计注销状态。他们希望可以展示一张手机的图片---许多人并不知道网页版的网站可以运行在廉价的手机上面。

我花费了两周的时间去设计这个页面。我在很多细节上花费了心思,甚至埋了几个彩蛋。我对自己感到满意。但是,我并没有找到一个好看的手机照片。于是,我放了一张苹果手机在上面。我想,至少在美学设计上是令人愉悦的。

我当然被拒绝了,我忽略了他们最重要的需求,我为什么这么执拗呢?我哭了好几个小时,因为我真的不想去其他地方工作。我继续失业在家,和母亲一起生活。

此时,我开始认真怀疑自己的能力。很多事情在我看来都是具有“魔力”的。我开始不断反思辍学是否正确。我在  iTunes U 上注册了 iOS 开发的课程。我同样在 Coursera 注册了两门课程:编译器和机器学习。或许那些可以让我成为真正的程序员。

独自学习这些课程让人孤单。我与 Web “训练营”的几个人组织了一次小型的聚会,我们在导师的共享空间中收集和学习在线课程。

大约一整月都花在上面,之后,我收到了一份邮件。有一个人正在招开发者,他从参加这个聚会的人中听说了我。我十分讨厌这些招工的广告,直接忽略了这封电子邮件,但是这个人不断的给我发邮件,表示他想用 Skype 和我聊聊。

Roman Mazurenko 是一个不走寻常路的创业者。Roman 对 DIY 出版非常感兴趣。在几年时间里,他与几个好友,让莫斯科变得酷起来。他组织聚会,在时尚杂志里搔首弄姿。我不知道在期待什么。但是 Roman 非常踏实而且和他交谈十分有趣。他的梦想是创造一个 DIY 平台,就像这个概念视频所展示的那样。我必须搬去莫斯科并在那里一边学习 iOS 一边工作。(顺便说一句,视频里的人不是 Roman 而是另一个朋友,而且这个视频里展示的产品也是用 Flash 制作的假的动画效果。Roman 很善于制作幻象。)

我同意了他的提议。

我没有完成编译器与机器学习课程。我学到了足够的知识了解了它们并不神奇。之后,我失去了对它们的兴趣。

2013

到2013年,我的薪资是 30K 每年,几乎是之前的一倍。从美国的角度来看还是很低,但是在俄罗斯已经很不错了。我还在 Stampsy 得到了一些股份。(真相大揭秘:这些股票最终变得一文不值)

我们的团队拥有五个开发者和两个设计师。我们从开发一个 iPad 的程序开始,但其实我们之中没有人有过 iOS 开发的实际知识。我感到十分欣慰,当团队中的一个人写出需要的动画效果的时候。也是那时候,我意识到失败是命中注定的。

在几个月的时间里,我一直住在公司。回顾那段经历,我并不为自己生活就是工作的协调而感到骄傲,而且那样很不健康。然而,我在此期间学到的东西比我两年以来学到的东西都多,所以我并不为此感到后悔。

最终,我搬离了那件办公室。我搬进了一套罗马式的公寓中,它的租金是 1K 每月。公寓很宽敞,坐落在莫斯科令人愉悦的区域。而且我的上下班步行通勤时间只有五分钟。

我们认为自己编写的代码或许对其他人会有帮助。所以我们开始在 GitHub 上发布一些代码片段。我们不求回报,但如果能收到鼓励就会非常开心。我当时最受欢迎的项目收获了三十个星,对于我们来说,那真的很多了!

团队中的一位设计师向我推荐了 Bret Victor 的演讲,尤其是那篇 Inventing on Principle.。我认为那真是一个好的演讲,非常好的。

四月份的时候,我们发布第一个第一个工作成果---iPad App。苹果联系了我们并向我索要了需要放在 App store 中的素材。我们开心极了!它被当作精选应用数周之久,人们真的开始使用它了。

我们激动的情绪很快就平复了,因为我们意识到这个应用根本就没有合适的市场。这个应用被设计用来制作精美的杂志的排版,但其实没有人在它的 iPad 中拥有精美的内容。而且,iPad 相机拍出的照片像素很低!这个应用没有任何意义?我们为什么没有意识到这个问题呢?

我的个人关系也分崩离析了。我们并不是非常契合,我们大多数时候依偎在一起仅仅是害怕孤单。我们最终分手了。

在之后的几个月时间里,我并没有在我们共同交际圈中告诉任何人这件事,将全部的精力倾注在工作上。但我意识到我非常想念那个特别的朋友,我发消息给她,她告诉我她也非常想念我。于是我指定了一个一起旅行的计划。

我感冒了。日子一天一天的临近,我却感觉更加糟糕了,我非常期望那一天到来的时候我能够好起来。当火车从莫斯科到达圣彼得堡。我彻底高烧了。她告诉我,无论如何都要去她那里坐坐,她为我烧了热茶,递给我保暖的物品,我们彼此亲吻。我们正式开始交往了。

2014

对于我而言,2014 年是属于 React 的一年。

在短暂的生存危机之后,我们放弃了那个 iPad 的应用,取而代之的是一款网页应用。这意味着我必须要学习 JavaScript 了,这次要动真格的了!我用 Backbone 做了一个像模像样的原型,但交互成为了痛点。

我的同事最初看到 React 时选择放弃了它。但是一段时间之后,他告诉我 React 实际上并没有那么差!我决定试一试 React。戏谑的是,我第一个从 Backbone 上转移至 React 的组建就是喜欢按钮。

而且它正常工作了。非常好!我意识到 React 和我以前看到的任何东西都不一样。

React 对于我们团队来说并不难掌握。在接下来的一年中,我们借助新功能的发布,逐渐的将所有的 UI 部件都改写成了 React。React 的单向数据流原理使得我们的开发更加效率和有质量!

我们发布一个内测的 beta 版本,一些摄影师喜欢使用它创造可视化的故事。它是介于 Medium,Pinterest 以及 Tumblr 之间的应用。他并不十分引人注目,也不像上一个 iPad 应用那么失败!

使用 React 唯一的缺点是它简直没有任何的生态系统。当我们开始使用它的时候,只有一个路由(并不是 React 路由),而且我们之中并没有人能够弄清楚如何使用它。于是我们自己创造了一个。当 React 路由发布时,我们在自己产品中使用的特性也同样被采纳了。

我们所使用的案例中没有关于拖拽的解决方案,所以我移植了同事的一个函数库到 React 中。我制作了一个帮助来管理文档标题。还写了另一个库用来格式化 API 的响应。来自 React IRC 团队的 Jing Chen 提供了主要的创意,这非常有用!我还不知道,在接下来的几年里,Twitter 将会完成一个新的网页应用使用到这个库,并将维护它。

我也想为 React 做出贡献。我联系了 Paul O’Shannessy 并询问是否有我可以参与的项目。我在几天时间内就完成了第一项任务,但直到几个月后才被合并分支。大型项目的发布周期都是这样的。对于它缓慢的响应我十分失望,于是我决定投入精力到 React 的生态系统上。回想起来,那样更加影响深远!

2014年,我发表了人生中的第一次的公开演讲。我在办公室做了关于 React 的介绍。它持续了两个小时,我至今都感到吃惊,因为大部分出席的人都非常礼貌的听到了最后。

之后,我在 BerlinJS meetup 上注册并发表了演讲。我的话题是“React 和 Flux”。之前我并没有练习过,所以直到时间结束我的演讲内容只讲了一半。在课程的最后,人们对我翻白眼。从此以后,我都会在演讲之前排练三到十五遍!

2014年,我收到了 Facebook 的第一封人事电子邮件。数月之后我才发现遗留在信箱中的邮件。我们最终还是聊了一次,但是招聘我去美国的 Facebook 并不容易,因为我没有大学的文聘并且工作经验有限。哎~

2014年有一个项目特别吸引我。就像发生我生命中很多重要的事情一样,它就那么不经意的发生了。我正在将我们的代码从 require.js  转移至 webpack 以便进行代码分离。我读到了一个怪异的功能叫做“模块热置换”,它允许你编辑 CSS 文件而不用重新加载页面的功能。但在 webpack 中,它对 JavaScript 同样适用。

对于这个功能我有很多困惑,于是我在 StackOverflow 提出了我的问题。Webpack 当时十分新颖,它的开发者看到了我的提问并给予了反馈。根据 Bret Victor 曾经的一个演示作为依据,我有了足够的信息将这个功能加入到 React 中去。

我写了一个非常粗糙的概念,直接编辑源码,另外增加了一堆的全局变量。我决定在他可以使用之前都不去睡觉,直到早上七点钟,我有了一个可以在推特上演示的范例。在此之前从来没有人在意过我的推文,但也收到了一些喜欢和转发。但那二十个转发彻底验证了我的想法,我知道我不是唯一一个对这个想法感到激动的人。这个概念的证明仅仅是一次简单的尝试,然而工作之余我却没有更多的时间在上面投入精力。我最终利用休假的时间完成了它的原型。

免责声明:再一次的,我并不是说你“应该”在晚上或者休假的时候工作,我并不是在炫耀我的劳动,没有做这样事情的成功人士大有人在!事实上,如果我能够更好的管理时间,我很有可能找到一种方法在不受打扰的日常时间里完成它,或者干脆学习如何在被打扰的过程中推进进程。如果我假装这一切都是在四十个小时内完成的,那么我一定在说谎。我分享这些仅仅是在说自己的故事罢了。

2015

我们发布了产品的 beta 版进行内部测试。这是一种成长,不过时缓慢并且线性的。公司的资本即将耗尽,正在想方设法凑到更多的资金。而我则想花更多的时间在开源的项目中。

我也想发表我的第一次会议演讲。当然,我想要讲的内容就是热加载,即使我知道已经有人在 ReactConf 提到了它,人们也不会再为此感到激动。于是我决定在我的演讲方案中加一些料----“时间旅行”,这个点子依旧是收到 Bret  的启发。这个方案被采纳了,在接下来的几个月时间里,我并没有更多的思考这个问题。

四月份的时候,我的薪资被拖欠数周之久。虽然最终还是发下来了,但我已经意识到,是时候找一份新的工作了。我找到了一家使用我其中一个项目的公司,他们同意在接下来的几个月内赞助我的工作。

我的女友问我是否想要结婚,我告诉她,我会在三十岁之后结婚。她问我“为什么?”,我找不到任何正当的理由,所以我们很快买了结婚戒指领证结婚。我们的婚礼话费是 $100 。

我的演讲日期临近。但我仍不知道如何实现“时间旅行”。我知道 Elm 语言有着相似的功能,但我不敢去研究它们,因为我担心它并不能在 JS 中被很好的应用。

那时,市面上非常流行 Flux 函数库。我尝试了其中的几个,对 Andrew Clark 的 Flummox 印象深刻,我模糊的感觉到与 Flux 的协同运行能够让我实现时间旅行。Sunil 的概论让我有了一个想法:用 Flux 模式的变体, reduce 函数取代存储。我的脑海中已经为它取了一个优美的名字。这正是我的演讲所需要的。

我赶在演讲之前终于实现了能够时间旅行范例的 Redux。我在 Skype 上做了第一次演习。因为演讲的速度过快,我总是喃喃自语,最终大汗淋漓。在演讲的最后,我向组织者询问演讲的效果,他说,“挺好的,人们很喜欢你”,我以为他只是看到了我的窘迫,委婉的安慰我而已。

我向之前公司的设计师求助,帮我更加完善了幻灯片的内容。在其中添加了动画和过渡效果。因为幻灯片的改进,我也变得更加冷静和自信。我最终练习了十几遍。

我飞到了巴黎参加我的第一个技术研讨会。这也许是我人生中最幸福的一天。这一次,我见到了那些优秀产品的作者。在我身边的都是最优秀的 UI 和偶像。我仿佛置身霍尔沃茨魔法学院。

我的演讲差一点就落空了。在早上,我发现我的电脑连接不上投影仪。我只有几个小时的时间。Christopher Chedeau 非常慷慨的借给了我他的电脑。于是我把自己的现场演示安装进了他的电脑。(除了 Sublime 的证书,如果你看了那场演讲,你可能会有印象。)

一开始,由于 Node 版本的问题,我的范例根本无法运行。会场的无限网很差,根本没有办法下载另一个版本的 Node。幸运的是,我发现了一个 npm 命令可以重新编译文件的内容。它拯救了我的演示内容。我最终用他的电脑顺利的完成了演讲。

我在观众席上看到了很多在 Twitter 上就已经认识的人。其中就有  Jing Chen。我是在 React 小组的 IRC 聊天中认识的她,我跟她打招呼,她问我 Facebook 的人事是否联系过我,我告诉她我没有办法获得美国的签证。Jing 问我是否有兴趣去伦敦的办公室工作,在此之前我根本不知道伦敦还有工作室。我打电话给我的妻子,询问她是否愿意搬去伦敦,我以为她会拒绝,但是她几乎没有犹豫的回答“可以”。所以,我决定参加面试。

在会场里有四个 Facebook 的雇员,于是 Jing 直接在酒店安排了一次完整的面试。那次的面试过程非常普通,除了每个人都大汗淋漓,因为这里是巴黎,外面酷热难耐。

一切都是这样瞬间发生的,我根本没有时间作准备,更没有时间紧张。当我无法用三行代码交换数组中的两个元素时,我变得惊慌失措。我请求 Jing 不要看我。她对我说 “我知道你可以交换这两个元素的”,这句话给了我信心,最终我顺利的通过了面试。可能我的这次面试并不完美,但我最终拿到了 offer。

我的演讲轰动一时。Andrew Clark 也因此停止开发 Flummox,那个当时最受欢迎的 Flux 函数库,开始支持 Redux 的开发,这个我们合作完成的函数库。人们开始在生产环境中使用 Redux 。新手在阅读使用文档 时可能会非常困惑,因为它是给那些已经在这个领域有很多经验的人看的。我依旧没有工作,而英国的签证需要等几个月之久。

我开始用这个几个月的时间在 Patreon 维护我的项目,尤其关于 Redux 使用文档的说明,创建了一个小的样本程序,并且录制了一小段视频。我在 Patreon 上大约每月能够筹集到 5K。这比我之前的任何工作都赚钱。来自 Egghead 的人们给我寄来了麦克风,让我用以录制“学习 Redux” 的课程,我如今每次看到它都感到羞愧,但是它一度非常流行,并且给我带来了不错的收入(大约 3K 每月的版税)---尽管它们都是免费的。

Facebook 的人接手了大部分的移民流程。我的妻子和我只需要填写一些文件,参加英语测试以及一些体检流程。Facebook 帮助我们做了大部分搬家的工作,甚至包括把一只猫从俄罗斯送往英国。(这一项就花掉了大约 $5K)。我被按照四级工程师的标准雇佣,初始薪资是 100K 每年。四年后还会拿到一个价值 125K 的原始股。我还拿到了 18K 的签约奖金,它在我安家的这件事上起了很大的作用。(顺便说一句,英国的技术工人工资低于美国)。

我在十一月底到达伦敦。在此之前我从来没有来过伦敦。我们在机场搭乘了一辆黑色的出租车。在最初的十分钟时间里,我们并不清楚如何关掉车内的热风,以至于错过了窗外的风景并且汗流浃背。当我们终于关掉了热风,窗户上雾气也消退了之后,睁大眼睛看向窗外,伦敦真的太美了!

第二天, Roman Mazurenko 因为一场车祸身亡。他刚刚拿到美国的签证,去莫斯科只是为了取回自己的文件。他曾经告诉我,莫斯科有股邪恶的力量。他并不想让你离开,我再也见不到我的这位朋友了,不仅仅是 2015 年,永远也见不到了。

Roman 有一份数字遗产,由他的朋友来维持。我知道,事实上,他会喜欢苹果商店里那个充满讽刺意味的 2,5 星评价。

2016

新的工作,新的城市,新的国家,不同的语言。并不熟悉的口音。大公司。风向标。会议室。项目。团队。文档。表格。Shit. Fuck. Fuck. Fuckety Fuck, Shit, Oh Dear, Blimey!

我几乎忘记最初的几个月是如何度过的。我在不断变化的环境压力中试图理解人们说了什么。我的头儿到底对我说了什么?请他重复一遍是否会很无礼?可以写给我吗?

什么,我要给一个苏格兰的女士打电话,询问她我的社保号?我根本不知道她在说什么。什么是社会保障?为什么我会有一个 “零”的税号?为什么我的工资比想象中的低?等等,这里的人们真的在上税?我生病了怎么办?什么是 NHS ?

我在 2016 第一次来到美国的时候(部分原因是入职培训),一整天没有吃饭,喝了非常多的咖啡,终于在给同事解释热加载功能的时候彻底因为惊慌失措晕倒。我们呼叫了急救车,为此花费了 $800 (幸好,这次是由 Facebook 付账,或者说,至少没有由我来承担费用)

即使公司为我解决了大部分的问题,更换工作场地也是非常让人头疼的。我以为我在入职的时候已经完成了一切,但是我却忘记去警察局登记。(我把这件事和去邮局登记混淆了,那也是一件必须完成的事情)当我最终发现搞砸了的时候已经比当初晚了几个月。我们被告知这可能会影响签证。幸运的是,至今为止都没有任何影响。

最开始,我被指定加入伦敦的 React Native 团队。通常情况下,我们雇佣一个人让他参加训练营,然后自主选择团队。但是,我没有这个自由选择的机会。我是被指派好的。但是,我对  React Native 并不是特别感兴趣。我和 Tom Occhino(他当时主要负责 React 团队) 聊了这件事,他推荐我成为 React Core 团队(位于美国)唯一的驻英国成员。因为我早已经习惯了在开源项目中远程办公,所以我同意了。

2016 年,是 React 蓬勃发展的一年,但是每个人都在通过不同的打包、监听、编译等程序构建自己的“模版”。React 变成了 JavaScript 模块化,ES6 等复杂工具的同义词。Christopher Chedeau 建议制作一个命令行交互的 React 初始化工具。所以我们花费了几周的时间完成了发布了第一版的  Create React App。

2017

Egghead 上的课程持续为我带来了可靠的版权费。我毫不犹豫的把它花在了吃穿上。

直到 2017 年我才意识到这笔版权费作为额外的的收入是需要缴税的,所以我大概欠了女王陛下 30K。嗯,就像所有的成年人那样,我找到了一位会计师,用我所有的积蓄处理了这个烂摊子。

在工作上,2017 的大部分时间,我们都在重新梳理 React。你们看到的 React 16就是最后的成果。Sophie 在这里讲述了这个故事。

除了税务方面,我的个人生活还发生了其他的一些事情。我还在适应新环境。在与政府打交道方面也更加得心应手。我不再害怕打电话。我能够观看没有字母的电影。我学会了处理国家健康服务和私人保障。我停止了个人项目的维护。

2018 - 2019

过去的两年时间转瞬即逝,我因为身处其中而无法看清什么是重要的事情。

在专业领域,我们项目越来越受欢迎。如果你关注 React,你会知道我们正在做的一些事情。我已经成长为一名合格的工程师,尽管还有很多的东西需要学习。我们在伦敦的团队也开始茁壮成长,我不再是孤军奋战。

人们偶尔会在大街上认出我。这会让我感到不安。一次,有个人在桑拿房认出我来,就开始抱怨 React。请不要学习那个人。

我升职了。我把这个博客当作一个个人项目。我另开辟了一个个人的项目,在那里我将反思这两年的经历。我在互联网上认识并会见了更多的面孔,他们最终成为我社交平台的一个个头像。这是非常有趣的。

我一直明白自己喜欢 UI 设计。我迷上了 Visual Basic。花费了十年时间设计 UI, 然后又创造了一种方式去构建 UI,然后去讨论并解释它。不过我现在意识到,解释这件事给予我的动力和构建它一样重要,或许,更加重要。

我期待能够在接下来的十年时间里做更多的事情。

或者,我可以说,是这个十年?

欢迎来到 20 年代!

原文阅读

你可能感兴趣的:(一位 Javascript 程序员的十年回顾(译))