硅谷手记:西行与筑台
大道之行,不责于人;君子之游,必择其方。 —— 《淮南子·氾论训》
翻检 2014 年到 2017 年间随手记下的几百则日常片羽,仿佛在看一部帧率略显跳跃却带着鲜活体温的纪录片。
很多时候,正式发表的技术长文像是一座竣工后的建筑,脚手架已经拆除,水泥切面被打磨得平整光洁;而散落在每个寻常傍晚、航班起降间隙与深夜值班时刻的短促记录,才保留着施工现场的砂石、噪音与真实的狼狈。这四年里,我经历了重返跨国大厂、远赴旧金山湾区、告别按部就班的设备商生涯、以早期工程师身份跳入流媒体创业公司 Tubi TV,随后又只身飞回北京望京创建中国研发团队的全过程。
在2017年岁末,将这四年的吉光片羽按时间脉络重新编织成篇,既是对一段西行岁月的封存,也是给未来留下一份未经粉饰的底稿。
一、山景城的傍晚聚会
2014 年春天刚在湾区安顿下来时,最强烈的冲击并非来自硅谷的光环,而是每天傍晚沿着 101 号公路南下北上赶场听技术分享(Meetup)时的那种密集碰撞感。
那年五月的一个周六早晨,我原本盘算着十点二十分出发,怎么着也能赶上十一点整的斯坦福大学校园导览(Guided Tour)。结果见识到了 101 北向车道的周末堵车威力,平时十五分钟的车程硬生生挪了四十分钟。等我停好车一路小跑冲进访客中心时,导览队伍刚刚出发几分钟。也是在那几个月的奔波里,我开始用双脚和车轮重新丈量这片土地。
到了工作日傍晚,山景城(Mountain View)和桑尼维尔(Sunnyvale)成了我最常出没的坐标。那段时间经常出现一种极其奇妙的错位感:周四晚上坐在微软的园区里,听来自 LinkedIn 的工程师剖析大规模搜索架构;周五晚上又跑到 LinkedIn 的主场,听 Twitter 的核心开发者讲高并发消息流与数据分片。大家散场后端着披萨和啤酒围成一圈闲聊,没有国内技术大会上常见的商业吹捧,聊的尽是各自系统里尚未填平的坑。
印象最深的是 2014 年 8 月中旬在爱立信(Ericsson)举办的一场晚间技术聚会。当时我随便找了一排座位坐下,左手边是一位印度工程师,右手边是两位白人老哥。开场前大家寒暄起来,我才惊讶地发现自己竟然坐进了一个「苦命人」包围圈:左边那位老哥在摩托罗拉(Motorola)工作,第二天就是他在公司的最后一天(Last Day);右边那两位则在惠普(HP)供职,同样熬到了月底裁员关门的倒计时。
那一刻我坐在灯火通明的会议室里,看着台上讲师兴奋地演示着新一代云原生工具,台下却坐着一群老牌科技帝国的守夜人。硅谷最残酷也最迷人的地方正在于此:旧帝国的落日与新物种的黎明往往只隔着一条马路,甚至只隔着一张折叠椅。 同样的工程师,在不同的时代浪潮与技术栈里,命运的走向判若云泥。
两天后的中午,我步行十分钟去了公司附近的雅虎(Yahoo)总部跟一位新结识的朋友吃午饭。那是互联网鼻祖级别的公司,坐落在极具气派的第一大道(1st Avenue)上。彼时玛丽莎·梅耶尔(Marissa Mayer)上任不久,园区餐厅里人声鼎沸,免费食物相当丰盛,墙上刷着充满活力的紫色标语,乍一看给人一种蒸蒸日上的复苏感。但当我和朋友聊起他们内部的移动战略与基础设施包袱时,那种大船难掉头的沉重感依然扑面而来。三年后的 2017 年底,当雅虎的核心资产最终被拆分出售时,我再回想起那个阳光灿烂的午后,不禁让人唏嘘。
二、签证闯关与旧系统的坑
在硅谷大厂做基础设施开发的日子里,除了晚间聚会的思想激荡,白天面对的往往是极其琐碎甚至令人抓狂的工程现实与身份羁绊。
2014 年 11 月的一个深夜,我为了给一套老旧的测试环境配一个支持 HTTPS 协议的 ab(Apache Benchmark)压测工具,硬生生在终端前折腾到了凌晨。那是一台彻底切断了外网连接的陈旧 CentOS 服务器,没有 yum 源可用,任何现代工具的缺失都意味着一场手动编译的噩梦。为了一个小小的压测二进制文件,我不得不从源码开始编译整个 Apache;而编译 Apache 又需要先手动编译 APR、APR-util、PCRE 和 OpenSSL。在没有包管理器的荒原里,一层层解开动态链接库的版本冲突,就像在泥潭里徒手造车。也正是这种反复被老旧系统折磨的经历,让我后来对 Go 和 Rust 这类静态链接、单一二进制分发、自带现代工具链的语言产生了近乎本能的偏爱。
如果说老系统的依赖地狱尚能靠技术硬啃下来,那么跨国工作签证的折腾则完全是一场消磨心智的玄学考验。
2014 年 10 月底,拿到律师寄来的厚厚一沓 Petition 材料后,一连串的阴差阳错便接踵而至。律师楼千叮咛万嘱咐,让我预约面签之前务必先跟负责律师 A 通电话核对关键信息。我老老实实发邮件过去,结果自动回复说律师 A 正在休长假,下个月才回来;我只好追问能不能直接约面签,另一位助理过了好几天才慢吞吞地回复可以,并转交给了律师 B。等我终于被获准登录预约系统时,屏幕上冰冷的提示让我欲哭无泪:F1、H1 与 L1 签证的预约名额早已排到了几个月开外。
那种把个人职业规划与家庭生活悬在半空、任由官僚流程摆布的无力感,几乎是每一代硅谷华人工程师都经历过的成人礼。一年之后,当我决定离开大厂的安稳温床、申请 O1 杰出人才签证去闯荡早期创业公司时,这套令人窒息的材料准备与等待流程又完整地重演了一遍。为了证明自己在技术领域的行业影响力,我把过去十几年写过的开源项目、出版的技术译著、发表的架构文章乃至社区演讲记录一页页整理成册,装订成厚达数百页的证据卷宗。但也正是熬过了那些半夜刷面签号、反复修改律师陈述信的日子,人反而练出了一种「兵来将挡、水来土掩」的钝感力。无论外部的制度与边界如何繁琐滞重,一个工程师最终能够傍身跨海的通行证,始终是他一行行写下的代码与日积月累的创造物。
三、初入流媒体与旧金山湾
2015 年深秋,拿着新鲜出炉的签证,我正式告别了南湾的网络设备大厂,搭上摇摇晃晃的加州火车(Caltrain),北上旧金山加入当时还只有十几号人的免费流媒体创业公司 Tubi TV。
刚进公司没几天,正赶上感恩节前夕。那天是我见过的最敬业、水平也极高的安卓工程师 Benoit 在公司的最后一天。换作旁人,离职日无非是吃顿散伙饭、交接下账号、下午三点就拍拍屁股走人;但 Benoit 竟然一声不响地在工位上一直写代码到傍晚五点半,硬是把一个修复了若干关键崩溃的新版本完整打包、测试并推上线之后,才合上电脑跟大家拥抱道别。
那个傍晚旧金山的夕阳透过百叶窗照在空荡荡的办公桌上,我对自己说:这是一家值得拼一把的公司,这是一群有手艺人尊严的工程师。
初创公司的日常没有大厂那么体面,甚至处处透着捉襟见肘的滑稽。2016 年 10 月的一个晚上,我代表公司在旧金山参加完某跨国科技巨头举办的一场盛大酒会。那场发布会排场极大,满场都是衣着光鲜的行业高管与炫目的概念宣传。散场后夜风微凉,我叫车回南湾。为了给创业公司省几十块钱差旅费,我手欠在软件里选了拼车(Uber Pool)。结果司机在旧金山陡峭如过山车的坡道上猛踩油门、急停猛拐,把我颠得七荤八素、胃里翻江倒海;更要命的是,车子上了高速后又大老远拐进东帕洛阿尔托(East Palo Alto)去接另一位拼车乘客。我靠在后座车窗上强忍着眩晕与呕吐感,想起一小时前酒会上的豪言壮语,忍不住在心里自嘲:这就是真实的硅谷创业,台上是亿万美金的星辰大海,台下是为了省几刀车费在后座颠到怀疑人生的夜晚。
通勤路上的插曲也从未断过。同样在那个十月,我常坐的 Caltrain 火车在半路突然遭遇全车电力系统崩溃。车厢里的照明和空调瞬间全部熄火,列车停在荒郊野外的铁轨上纹丝不动,广播里列车员用极其无奈的语气一遍遍播报着「我们正在排查故障(Troubleshooting)」。满车厢的硅谷程序员面面相觑,仿佛看到自己写的生产环境系统在周五下午挂掉了一样。
四、传统网络的黄昏与反思
在 Tubi TV 全面拥抱 AWS 云原生架构、用 Elixir 和 Scala 处理海量并发流媒体请求的同时,我依然保持着对老东家及传统网络设备行业的关注。
2016 年 11 月底,看到行业里几家老牌网络设备巨头交出的惨淡财报与裁员消息,我在深夜写下了一段感慨。曾几何时,精通私有硬件转发芯片(ASIC)、手写复杂的路由协议栈是硅谷收入最高、壁垒最深的硬核手艺。然而短短几年间,传统电信运营商的投资持续萎缩,而以亚马逊 AWS、谷歌、微软为代表的超大规模云服务商(Hyperscalers)异军突起。最致命的一击在于,这些云巨头为了极致的成本控制与可编程性,纷纷甩开传统设备商,自己招人做白盒交换机(Custom Build)与软件定义网络(SDN)。
技术壁垒的瓦解,从来不是因为你在原有的赛道上做得不够精细,而是因为整条赛道的地基被更高维度的抽象抽走了。
那年十二月的一个深夜,回想起三年前自己在第一次创业低谷期选择离开时的心境,我曾在笔记本上写过一句话:「既不回头,何必不忘?」当时满心疲惫,甚至宁愿永远不再去触碰自己亲手创立的公司。然而在硅谷经历了两年多相对寂静的工程师生活后,我发现心底对「从零打造一支团队、做成一款千万级用户产品」的渴望从未真正熄灭。那些第一次创业留下的遗憾与教训,并没有随着时间风化,反而像潜伏在草灰下的火种,推着我在 2016 年夏天做出了回京组建研发中心的决定。
五、望京筑台与双城值守
2016 年 6 月,苦等了大半年的回美证刚一到手,我便立刻飞回北京。从望京联合办公空间里的几张桌子起步,北京比图科技(Tubi 中国研发中心)正式生根发芽。
那两年的生活被切割成了太平洋两岸的双城记。为了招募第一批核心数据工程师、移动端与后端骨干,我接连写了好几版招募长文,在技术社区、一亩三分地和朋友圈里逢人便推。到了 2017 年 5 月,好消息终于传来:《华尔街日报》与 36氪 先后报道了 Tubi TV 完成 2000 万美元 B 轮融资的消息。看着北京办公室里一张张年轻而专注的面孔,那种把一支队伍从零带出来的踏实感,冲淡了跨国奔波的所有疲惫。
然而,跨国团队的协同总要有人承担时差的代价。2017 年 12 月中旬,我人还在北京出差,但公司的告警排班系统(Opsgenie)依然雷打不动地按照美国太平洋时间给我派发值班任务(On-call)。于是那几天我过上了一种极其魔幻的作息:白天在北京办公室跟国内团队开会、看架构、聊招聘,到了后半夜刚进入深睡眠,枕边的手机便被生产环境的告警铃声骤然惊醒。顶着一头乱发爬起来打开电脑排查完故障,窗外北京的天空已经泛起鱼肚白。
更狼狈的是几天后从北京飞回圣何塞的那趟海航航班。在去首都机场前的六七个小时里,我突发急性肠胃炎,吃什么吐什么,连喝几口矿泉水都会混着胃酸吐得一滴不剩。全靠家人的悉心照拂,我才勉强撑到登机口,像一具行尸走肉般在机舱座位上整整躺了十几个小时,横跨太平洋回到了湾区。
除了与生理极限和时差搏斗,那两年在管理上也交了不少学费。初创团队在高速扩张期最容易犯的错误,就是为了填补眼前的业务缺口而在招聘标准上妥协。在北京团队从几个人迈向二三十人的阶段,我们曾为了赶进度匆忙招进过背景光鲜却缺乏工程自驱力的候选人,结果不仅没能分担核心骨干的压力,反而耗费了大量代码审阅与返工沟通的精力。痛定思痛之后,我和早期核心骨干一起重构了技术面试的考察维度:不再死抠孤立的算法题背诵,而是要求候选人现场在一个真实的微型代码库里阅读现有架构、定位缺陷并写出可验证的演进方案。跨国研发团队能够跨越一万公里与十二个小时时差高效运转,靠的不是密不透风的监控流程,而是招进一群在无人注视时依然对代码品质心怀敬畏的同行者。
哪怕在最忙碌的创业周期里,我也没有停下在业余时间持续学习与充电的习惯。早在 2014 年圣诞节前后,我就在 edX 平台上报读了麻省理工学院的创业公开课(MIT Entrepreneurship 101 与 102),花五十美元认证证书的同时,还顺手拿到了亚马逊提供的一千美元 AWS 云服务实验额度,用来折腾自己的各类开源小玩具。到了 2016 与 2017 年,从在流媒体推荐链路中尝试机器学习特征工程,到把甄嬛传六集英文版上线北美的文化输出趣事,技术与商业交汇处的每一朵浪花,都让这段筑台岁月显得格外饱满。
六、海湾大桥下的正午长跑
在双城奔波与高强度值守的缝隙里,真正帮我把紧绷的神经重新校准回来的,是跑步。
2017 年 8 月底回北京出差时,我和一位曾在旧金山工作过多年的老朋友聚餐。他也是个长跑爱好者,听我聊起在旧金山办公室没日没夜连轴转的日常,认真地对我说了一番话:「你应该每天中午出去跑跑步。你们公司离海边那么近,不跑跑真是暴殄天物。我以前在旧金山工作时,总是中午从海湾大桥(Bay Bridge)一路跑到渔人码头,那种体验在全世界都找不出第二个地方。」
回到旧金山后,我听从了他的建议,在办公室备了一双跑鞋。每逢正午阳光正好、代码或会议卡壳的时候,我便换上短裤走出写字楼,汇入内河码头(Embarcadero)步道上奔跑的人群。左手边是百年历史的渡轮大厦,右手边是波光粼粼的旧金山湾与横跨海面的银灰色大桥,海鸥在头顶盘旋,海风带着微咸的凉意灌满胸腔。
跑过三五公里之后,呼吸逐渐变得绵长而均匀。那些关于签证排期的焦虑、关于跨国团队磨合的烦躁、关于技术选型与架构演进的纠结,都会随着脚步一下下砸向地面而慢慢沉淀下来。
回望 2014 到 2017 这四年,从山景城夜色里赶场的过客,到旧金山海湾边扎根的筑台者,改变的是手头的技术栈与肩上的职责,不变的是对工程手艺的敬畏,以及在不确定性中一步步向前迈进的耐力。
行远者不恃顺风,筑高者必固其基;于无声处听惊雷,于奔跑中见天地。
参考与数据出处
- Wall Street Journal: Tubi TV Raises $20 Million for Ad-Supported Streaming Service (2017-05-09):https://www.wsj.com/articles/tubi-tv-raises-20-million-for-ad-supported-streaming-service-1494331201
- 36氪:免费流媒体视频平台 Tubi TV 完成 2000 万美元 B 轮融资(2017-05-10):https://36kr.com/p/1721469362177
- 程序人生档案馆:2014–2017 年作者原始随笔与技术聚会手记汇编