不知不觉入职Google也已经半年多了,在家工作也有半年多了。工作上的事情渐渐熟悉,想写写这半年多来的一些感受。

Google内部对于Google员工称为Googler,而新入职的New Googler则被称为Noogler。在入职办手续的时候,在入职Orientation的时候总是能听到这个词。一开始的时候我要参加一个为期数周的培训,说是培训,其实是一些老员工来给新人介绍介绍内部工作流程和内部工具。

Google内部有一大堆的内部工具,似乎大公司内部都很喜欢自己造轮子?一方面是大公司的需求可能是地球上独一份的,比如Google的代码管理显然不能用基于Git的,又比如海量数据存储分析倒逼Google开发大数据框架(其开源实现就是Hadoop)。而这种前沿需求又意味着抢先开发完善该领域就极有可能在未来成为事实标准,最近的例子就是Kubernetes,K8s其实不是Google为了内部开发的,内部有名为Borg的类似容器编排系统(Container Orchestration System)的工具,K8s借鉴了一些Borg的设计重新在开源许可证下实现了一套容器编排系统,并成功成为了现在行业的事实标准和云原生(Cloud Native)应用的基石。另一方面就是大公司有足够的人力资源和技术储备来开发和维护内部系统。现在传统行业,或者说非互联网行业向云计算迁移,一个主要动力就是自己维护IT基础设施需要持续、大量的投入才能达到勉强可用的水平,这部分的成本其实本身并不是必须的,云计算提供了一个把这部分工作“外包”出去的可能。但这对于大型科技公司来说不是问题,毕竟这是它们的老本行。并且由于上一个原因,开发这些东西在未来是很有可能带来收入的,所以大公司更倾向于开发和使用自己的内部工具。

说到造轮子,我所能想到的最典型的就是自己造编程语言了。Apple为了自家平台搞了Swift还挺顺理成章的,Google的工程师用C++用着不爽怎么办?造个新的你不会吗?于是一个静态链接,二进制分发,性能比肩C/C++,语法简洁类似C,还不用头疼指针的Go语言诞生了(当然,语法简洁必然带来的是表达能力的下降,比如我很不喜欢的if err == nil和没有构造函数只能用工厂方法)。另一边Facebook的工程师也不爽PHP,于是他们也另起炉灶搞了一个Hack语言,虽然我没有学过Hack,但是光看例子就有一股宇宙第一语言的味儿扑面而来。该说各个公司造的语言还都挺有各个公司的特色的吗?

扯远了,培训就是主要讲内部用的代码编辑器,提交review,跑test,提bug一类的东西。由于我的日常工作是在GitHub上的开源项目,所以培训之后我也再也没用过这些东西。

对了,所有这些工具全部都是跑在浏览器里的,这一点是最让我大开眼界。也不知道是这些内部工具催生了高性能浏览器的需求,还是Chrome强悍的性能让完全WEB化成为可能。浏览器里面跑一个全功能IDE,并且要在Google这种代码量下达到可用,比后来的VS Code要强多了。另外我也是第一次知道Chrome有扩展可以实现完整的SSH客户端,以及黑魔法一样的远程桌面(同样是跑在浏览器里,非内网环境却几乎感觉不到延迟,我怀疑跟Google Stadia的技术有共通的地方)。还有GSuite那一大堆办公套件全都是纯WEB的,感觉Google里是万物基于Chrome(怪不得会有Chrome OS这种东西呢)。

经过了一开始的一两个月之后,我就开始在慢慢上手我现在主要工作的项目了,项目本身是用Go语言写的,属于Kubernetes的相关工具吧。上手倒是没什么太大的难度,代码都在那里摆着,看就是了。从一开始的修修bug,再到后来慢慢写写小功能,做一些同组其他项目的工作,也还算是轻松愉快吧。唯一有点头疼的写设计文档,也许是我一直都是move fast的所以经常在写文档的时候不知道该写什么,一个我已经理解的东西再把它解释一遍让我很烦躁,可是不解释的话又觉得整个文档都没什么好说的,毕竟我得先理解了才能写。

我还有一个很深的感触,那就是大公司真的太大了,当然也许是WFH给我造成的心理错觉,我每天能有联系的也就是同组的几个人,所以开会和邮件里大片大片的陌生名字。还有就是大组100多号人都只是在做Google Cloud下的一个service,Cloud也只是Google的几个大部门之一,更别说Google是AlphaBet旗下的一个公司了。真正的是成为螺丝钉了,ま。いいんじゃない?我是觉得不太care的。

说到WFH,来大公司我最看重的免费三餐一次都没吃到,天坑啊,导致我天天都要纠结点什么外卖或者要做什么。还有免费咖啡,啊啊啊,好气啊。现在说要WFH到明年七月,也就是说还有大半年,说着说着快要过了一半了,似乎也没有那么遥远了。