前言

接上篇美国之行(上篇):旧金山和硅谷

9 月 25 号我从圣何塞国际机场坐飞机抵达 San Diego 圣地亚哥,准备第二天参加 Go Contributor Summit 2023。

圣地亚哥 San Diego

Go Contributor Summit & GopherCon

这次美国之行终于要进入正题了,前往参加 Go 贡献者峰会,和大佬们谈笑风生。

这次参加峰会的华人除了我还有欧长坤博士,他是从德国飞到美国去参会的,比我提前一天抵达 San Diego,25 号晚上我们成功会师,一起吃了个晚饭,在一家韩国烤肉餐厅。我们两个都住在市区,GopherCon 会场的附近,26 号一大早我们一起出发,走路到 GopherCon 会场。

GopherCon 会场在 San Diego 的西南海岸边的 Marriott Marquis San Diego Marina 酒店,这是一个四星级的酒店。

我们到了会场之后,找到了举办 Go Contributor Summit 的宴会厅,在门口看到了 Russ Cox (Go team 现在的 leader),看来 summit 还没开始,进去之后,看到了 Robert Griesemer 大神,内心激动不已,他坐在会场里,我们走了过去打了声招呼,问他旁边的座位可以坐吗,他说随便坐,于是我们就坐下了,等待峰会正式开始,环顾四周,全是大佬。

自我介绍

时间差不多了,看到人差不多到齐了之后,Russ Cox 走到会场中央的开始控场了,他首先欢迎了所有今天到场的成员,然后按照过往的传统,让在场的所有人轮流站起来做一个简单的自我介绍,让其他人认识一下。这也合理,因为在场的除了一些『天下谁人不识君』的大佬,其他人其实都不太认识彼此,除了会有一些比较社牛的人会主动过来自我介绍,比如现场的小黑哥哥 Carlos Amedee,峰会开始前他也坐我们那一桌,他当时就主动和我们打招呼,人挺热情的,然后我们就互相介绍了一下彼此,当然,会场里的其他人也都是大神,也有不少人其实之前就在 Go 社区里有过接触,但一些人的账号头像不是真人照片,即便看过照片也未必能一一对上,所以每个人做一下自我介绍还是很有必要的。

不过,这个自我介绍环节最终的效果还是不太好,首先因为会场太大了,而当天参会的人其实不算多,30 个人左右,而且大家又坐的比较分散,所以每个人轮流站起来说话的时候声音不够大,坐得近还好,坐得远的就很难听清对方说的话,现场也没有准备话筒,其实应该是每一个人起来做自我介绍的时候拿着话筒讲,这样更合理一点,今年是因为新冠疫情中断了三年之后重新举办的第一届 Go Contributor Summit,再加上原先在 Google 里负责 Go 开源社区运营的 Carmen Andoh 离职了,我感觉策划组织上有点乱,所以这个环节最终也就是走了一个流程。不过这里有一个小插曲,前面的人站起来说的时候都是一板一眼地介绍着自己,比如来自哪个国家、哪家公司、技术方向、使用 Go 在做什么,到了 Ian Lance Taylor 大神的时候,他站起来之后就只轻描淡写地说了一下:"Hi, 我是 Ian Taylor" 就坐下了 (好像后面还接了一句,离太远我没听清),逼格满满😂,这就好像是武林大会上各门各派自报家门的时候一个人站起来说:"大家好,我是张三丰。",一句话就够了,根本不用再介绍了😝,当时原本还有点肃穆的会场上顿时响起了一阵掌声,还有人喝彩,挺有趣的。

总之,转了一圈总算是每个人都做了一遍自我介绍,然后就开始进入正题。

圆桌讨论

等所有人都自我介绍完毕之后,Russ Cox 接着讲了一下今天峰会的大致流程:首先会给在场所有人发便利贴,每个人把自己感兴趣的、想要讨论的话题写下来,然后他会收集起来,分组归类,然后按照分桌讨论一组议题,每一轮会有三个圆桌同时讨论,每一桌的讨论时间是 25 分钟,每一轮结束之后休息 10 分钟之后开始下一轮。

根据收集上来的选题,最终所有的话题被分成了以下几组:

第一场的三个圆桌讨论:

  • WASM/WASI:WebAssembly 相关的问题
  • Compatibility:语言兼容性
  • Go 泛型相关的问题

第二场的三个圆桌讨论:

  • Runtime Performance:运行时性能
  • HTTP/网络
  • Go 语言贡献者相关的问题:社区相关的问题

第三场的三个圆桌讨论:

  • Go 汇编
  • JSON 编码
  • 工具链

大致就是这些,因为我个人关心的主要是 Go runtime 相关的话题,我以前给 Go 贡献的也大多是这方面的,所以当时我提交了两个想在这次 summit 和 Go team 交流的话题:NUMA-aware scheduler for Goio_uring networking for Go

因为我最关心的 Go runtime 相关议题的讨论是在第二轮进行,于是第一轮三个圆桌的议题我去了 WASM/WASI 的那一桌,因为我以前做过 Web 领域的技术,而 WASM 算是近十年来 Web 领域一项比较重要的技术,我知道早在 2018 年的 Go1.11 版本里就支持了 WASM,而 WASI 也在今年的 Go1.21 版本已经支持了,我蛮好奇大佬们在这方面还要讨论什么新的东西,所以第一轮我就参与了这一个圆桌讨论。

这一场圆桌讨论的 WASM/WASI 相关的议题的需求主要是来自 Stealth RocketHashiCorp 这两家公司,熟悉分布式和云原生领域的程序员应该对后者不陌生,而在今年的 Go1.21 版本中的 GOOS=wasip1 GOARCH=wasm 这个 port 的实现就是由 HashiCorp 公司的工程师 Evan PhoenixJohan Brandhorst-Satzkorn,Stealth Rocket 公司的 Julien Fabre 贡献代码实现的。Evan 和 Johan 也来到现场,Julien 不知道有没有来,因为我不知道他长啥样...,我和 Johan 以前在 GitHub 上有过一点交集,所以我知道他。

讨论开始后,主要是 Evan 在主导,他先是讲了一下他们 HashiCorp 之前使用 Go 做 WASM/WASI 的需求,因为早期 Go 只支持 WASM 不支持 WASI 所以驱动他们去给 Go 贡献代码使其支持 WASI,然后在 Go1.21 中支持 WASI 之后,他们在生产环境上使用时遇到的一些问题,主要是 Go1.11 的 WASM 在 2018 年设计之初就直接使用了 64 位的架构以支持未来的 WASM64,然而当时的 Go team 高估了 WASM64 的推进速度,时至今日 Chrome 和 Firefox 两大浏览器上的 WASM64 支持还处于实验阶段,最快也要明年才出正式版,而服务器端则更是缓慢,目前几乎所有的机器都是默认使用 WASM32 架构,而且有一种趋势表明要长期如此,因为种种实践经验都表明对于大部分场景来说 WASM32 完全够用了,这就导致了在 Go 引入了新的编译器指令 go:wasmimport 之后,用户程序的函数输入输出参数的内存布局对使用者来说不再是透明的,他们需要显式地感知内存对齐的一些细节并在必要时进行显式的类型转换,而这导致了两个问题:

  1. 指针类型转整型类型会导致该变量对编译器不可见,则可能会导致 WASM imported function 在被调用前 GC 就回收了该地址的内存,所以需要显式调用 runtime.KeepAlive 来避免。
  2. 糟糕的用户体验,因为内存布局对使用者不透明了,所以要求使用者自己显式地进行类型转换。
  3. 浪费内存,用 64 位存 32 位的数据。

所以他们希望能给 Go 的 WASM 再新增一个架构 wasm32,以解决上述的问题。然而面临一些实现上的问题,首先是现在 Go 的 WASM 已经是 64 位架构的了,现在要新增一个 32 位的架构,那么 64 位的版本要怎么处理,虽然 WASM 未来很可能直接使用 32 位作为 runtime 的标准,到时候 Go 的 WASM64 其实也没多大用了可以考虑废弃,但是现在又不能直接就做这个决定,所以还是要保留 64 位的版本,那就涉及到 32 位版本复用 64 位版本的代码的问题了,但是这个工作量怎么评估,这中间有涉及到编译器的支持,刚好这一桌有 Go team 中的编译器大佬 Keith Randall 在,他也加入了讨论,讲了很多这个工作可能需要的编译器上的支持,一开始讲的东西相关性还比较强,但是后来越讲越发散,说了太多 32 位/64 位处理的编译器细节,这里又体现出了今年这一届峰会的不专业之处,本来每一个圆桌应该要设一个主持人来控场,引导议题的讨论,做会议记录,并且当嘉宾自己说嗨之后开始发散的时候要及时把话题拉回来。

我不敢自诩为 WASM/WASI 领域的专家,在讨论的前期还敢参与几句,但是到了后面大佬们聊的有点太硬核了,而且太多细节了,我就插不进话了,只能默默聆听学习大佬们的发言了。

时间过得很快,第一轮圆桌讨论结束了,Russ Cox 起身告知所有人第一轮结束,我们休息 10 分钟后开始第二轮。

10 分钟后第二轮圆桌讨论开始,我自然去了 Runtime Performance 那一桌,这里主要是由现在 Go runtime 的两位有着一样的名字 -- Michael 的主程:Michael PrattMichael Knyszek,来解答关于 Runtime 的一些议题,这两位 Michael 我还算熟悉,因为我之前给 Go runtime 提交代码的时候常常和他们打交道,顺带说一句 Michael Knyszek 小哥长着一张娃娃脸,看起来很年轻像个高中生似的,以前最早他在 Gerrit 上 review 我的代码的时候我看他的头像还以为是个妹子🤣。因为我个人这次写了两个关于 runtime 的议题,而这两个议题也占去了这一场圆桌讨论的大部分时间🤪,所以我重点讲一下当时关于我的两个议题的讨论。

当时圆桌讨论的时候是 Keith Randall 大神拿着便利贴本子抽出了我写的第一个议题 NUMA-aware scheduler for Go,看起来是他自己也对这个很感兴趣,然后递给了 Michael Knyszek 小哥,然后 Michael 看到以后还意味深长地笑了一下,我猜测是因为 Go NUMA Scheduler 早在十年前就由大神 Dmitry Vyukov 提出并设计了初稿但是这十年来几乎没有进展,接着他开始讲他自己关于NUMA Scheduler 的理解,主要是说了 NUMA Scheduler 对于 Go runtime 的一些潜在的好处有以及在 Go 里要实现这个东西的困难,中间另一个 Michael 和 Keith 也一起讲了几句,NUMA 说白了就是 CPU 独占内存并减少共享内存访问的架构,和 Go 当前的基于 work-stealing 的 G-M-P scheduler 作了一下简单的对比,指出现在的 P 中的 mcache 和存放 G 的 runq 提供了一定的内存 locality。当前他还不能很清晰地看到 NUMA Scheduler 能带来的真实的收益,当然他也说自己对 NUMA 的了解也有限,所以他的看法也有可能不准确,但是如果在投入资源去做 NUMA Scheduler 之前能有一些实际的测试数据展示其能带来的实际性能提升的话会更好。接着我被问道是否知道其他语言上是否有实现 NUMA Scheduling 的先例,我想了想好像没有,其他人也想了想好像也没有,最后我问所以这个短期内不会有计划是吧?得到了肯定的回复。

这里顺便说一下前文提到的 Dmitry Vyukov 大神,这位是 Go 语言现在的 GMP 调度器的作者,俄罗斯人,现在定居在德国,在 Google 工作,他大学是搞高性能计算方向的,他是并行计算领域的专家,Rob Pike 说过 Dmitry 在并行编程方面可能比我们 Go team 里其他任一个人懂的都多。在 Go 1.0 中,goroutine 的调度器实现很粗糙,只有 G 和 M,G-M 模型的缺陷很明显:只有一个全局队列存放 goroutines,因为全局锁,其并发调度的性能很差,同时因为 G 需要频繁地在 M 之间传递并运行,导致其伸缩性也不足且加重了性能损耗,所以 Dmitry 在 Go 1.1 中为 G-M 调度器引入了 P 作为虚拟核心,一举解决了调度器的性能问题,这个故事又佐证了计算机领域那句经典名言:『计算机科学领域中没有任何问题是通过引入一个中间层解决不了的』,后来这位大神为 Go runtime 贡献了大量的代码,可以说是立下了汗马功劳,但奇怪的是他却从未正式加入过 Go team,后来他又在 Go 1.2 中为调度器实现了抢占式调度,接着他又提出 NUMA Scheduler,但是后来 Go team 的重心转移到了降低 GC 延迟提升吞吐量上面去了,似乎是觉得 Scheduler 的性能已经足够了,所以 NUMA 的提案好像没有受到重视,时至今日也没有被列入计划,后来 Dmitry 就渐渐淡出了,现在他基本上已经不参与 Go 语言的开发了,着实可惜。

接着下面的议题,也是 Keith 挑中了我写的另一个:io_uring for runtime, Michael Knyszek 问我具体想问 io_uring 的什么东西,我说我是之前看到 Go 语言的 GitHub 仓库上有人提了一个 proposal 希望 Go 能在底层支持 Linux 新的异步 I/O 接口,并且能对上层做到无感知,但是我有点怀疑这个是否能实现,因为 Go 当前的网络编程模式是基于同步非阻塞和 epoll (linux 平台) 的 I/O 多路复用技术的模式,而 io_uring 是异步 I/O 技术,我也有点担心如果要强行使用 io_uring 替换掉现在的 epoll 可能会破坏当前的 Go 的网络编程模式,想问问他们对此的看法是怎样的。然后他回应说,和之前的 NUMA Scheduler 一样,他暂时不能很清晰地看到引入 io_uring 能对 Go 的网络 I/O 有多大的提升,他会很乐意看到能有一些数据支撑,而且他不认为他们应该改变 Go 当前的网络模式,不管是 epoll 还是 io_uring,从 goroutine 角度看 I/O 总是要阻塞的,而且他认为就算要引入 io_uring 也大概率不会是用来替换掉当前的 epoll,可能会是一种独立的使用场景,旁边的一个小哥这时候转过头对我说,其实如果用户想用 io_uring 的话,现在就有一些开源的库可以用,再不行也可以自己调 io_uring 的系统调用,我说谢谢他的提醒,他说的这些我都知道,我只是想和 Go team 确认一下是否未来会在 Go 里直接支持,不过和前一个议题一样,两位 Michael 都说现在没有时间和人力投入到这里。

到这里第二轮的圆桌讨论时间也到了,Russ Cox 又开始提醒大家休息了,准备下一轮讨论,最后一轮讨论是开放式的,也就是每个人自己去找对应的 Go team 里的人去讨论自己感兴趣的议题,不需要固定在某一个圆桌上了。

总的来说,Go runtime 近期的重点应该是在 performance diagnosis -- Profiling、PGO,以及 Metrics 和 Tracing 这些外围工具链的开发和完善,正如 Michael Knyszek 在自我介绍环节说的那样,这些也是他最近的工作重点。所以,Go runtime 在短期内应该不会有什么突破性的重大变更,应该会是一种渐进式的小优化,慢慢进化。

以上就是我参加此次 Go Contributor Summit 2023 参与讨论的内容,因为此次峰会并没有圆桌主持人做 transcripts 会议记录 (这里又是一个槽点,因为我听说往届峰会是有的),所以这些内容都是我凭记忆写的,可能会有错漏,敬请谅解。

因为我想和 Go team 聊的议题已经聊完了,我就直接去找几位仰慕已久的大佬合影了😄

面见大佬

Ian Lance Taylor

这次来参加峰会一个主要的动机就是可以当面见到这些计算机领域里的大名鼎鼎的大神,这次可以说是如愿以偿了。

首先是 Ian Lance Taylor,他在编译器领域可以说是神一般的人物,他是 GCC steering committee 的成员,GCC 源代码的 global reviewer 之一,GCC 现如今已经是庞大无比的开源项目,支持了超过五十种 CPU 架构、十几种操作系统、近十种编程语言以及其他相关的库,上述的每一个部分都有一到多个 maintainer,这些 maintainer 只能 approve 他们各自模块下来自其他人的代码修改,而 global reviewer 则有权限 approve 整个 GCC 项目里的所有模块的代码修改 (当然,需要对应模块的 maintainer 也进行 code review)。

他大学毕业之后几年,也就是上世纪 80 年代末 90 年代初就开始写自由软件 (现在叫开源软件),并在那时开始接触 GCC 并开始为其贡献代码。除了 GCC 的作者 RMS,Ian 应该是对 GCC 项目贡献最大的人之一,他是最早推动 GCC 项目源码引入 C++ 的人之一,也是最后成功实施的最大功臣,他起草了 GCC 源码的第一份 C++ 编码规范;在 GCC 项目中,Ian 可能是最活跃的人,在 GCC 的 maillist 中,他的身影在编译器前端、中端和后端里无处不在,粗略估计有三分之一的帖子他都曾给出有价值的回复;他还是新的 GNU linker -- gold 的作者,gold 比原先的 GNU linker -- ld 要快五倍,后来他加入 Google 并参与设计开发 Go 语言之后又为 GCC 开发了 Go 的编译器前端 -- gccgo;他也是 Taylor UUCP (或者叫 GNU UUCP) 的作者,这每一个软件的开发通常是需要一个十几人的小团队才能完成的,而 Ian 几乎是一个人单枪匹马写出来的,他是那种『一个人就是一支军队』的大神,引用我认识的一位编译器大佬斌哥的话:Ian 是编程语言/编译器领域的天花板级别的人物。

除了前面提到的那些开源软件,Ian 贡献过代码的知名开源软件还包括:CoreutilsautoconfautomakeGDBPostgreSQL等,感兴趣的读者可以浏览他的这个页面查看;他还有一个博客,写的东西非常广泛,从编译器/汇编器/链接器到数据库,从奥巴马到伊拉克到阿富汗到以色列,从金融危机到保险理财,内容主题横跨计算机、金融、政治、哲学、书籍、电影,总之是天南地北无所不包,而且都很有思想,有兴趣的读者可以去看一看,当然最推荐的文章还是技术领域的。

我给 Go 提的第一个 CL 是他给我做的 code review,而且我给 Go 提交代码的这几年里给我做过最多次 code review 的人也是他。而且在我给 Go 语言提 CL 的 code review 过程中他表现出了极大的耐心和非常友好的态度,我以前还以为计算机领域的大佬多是像 Linus 这样的既自负又暴躁的老哥,时不时就爆粗口😝;有机会和 Ian 交流过后发现大神居然这么谦逊和有礼貌,交流的过程可以说是如沐春风,非常让人愉悦,当然,其极高的技术造诣也让我学习到了很多东西,所以,我个人非常尊敬和崇拜他。当然,Go team 里的很多大神也都挺谦逊有礼貌的,像是 Robert Griesemer、Russ Cox 等等 (这两位大佬我后面会继续讲),还有 Rob Pike,虽然我没有在线下接触过他,但是在线上也有过一两次的交流,给我的感觉也很好。

我在峰会的休息间隙跑过去找 Ian,跟他说我是 Andy,他记得我,我问他能不能一起合个影 (那阵子在美国到处玩,一直没睡好,气色有点差,这次就不露脸了😵),他说没问题,人还是一如既往的 nice😄,遗憾的是合影之后没来得及再多聊几句他就被其他人拉走去问一些东西了,第一轮圆桌讨论的时候他在讨论泛型的那一桌,第二轮的时候我还以为他会参加一下 runtime 那一桌,毕竟他也是 Go Runtime 的 owner 之一,没想到他去参加社区相关问题的那一桌了,最后很可惜没有和他交流多一点。

大佬趣事
  • Ian 出生成长在美国马萨诸塞州波士顿都市区剑桥市,在读高中期间经常走路穿过哈佛大学科学中心去上学,有一次他在那里看到 Richard Stallman (RMS) 在那里竖立的一些牌子说他要创立 GNU 项目,那是他第一次接触到 Free Software 的概念。
  • Ian 的父母在他小学 (初一?) 的时候要给他和他的妹妹各买一份礼物,问他们各自想要什么,他说他要一台计算机,于是他得到了一台 TRS-80 (当时上市的一种桌面微型计算机),而他的妹妹得到了一匹小马驹,最终妹妹的马活得比哥哥的计算机更久;Ian 就是从那台计算机开始学习编程最终成为了业内的顶尖程序员,而他妹妹则是一名小有名气的纪录片导演;兄妹俩都是学霸,Ian 是耶鲁大学本科,他妹妹是哥伦比亚大学本科,斯坦福大学研究生。
  • Ian 的母亲也是信息技术行业的从业者,她那个年代还是用的打孔卡编程,所以现在他家里还有一些他母亲以前用过的打孔卡。
  • Ian 曾在麻省理工学院跆拳道俱乐部训练并获得跆拳道黑带二级,虽然我搞不懂他一个耶鲁大学的学生为什么要跑到麻省理工去学跆拳道...
  • Ian 最初加入 Go team 是毛遂自荐,2008 年他在 Google 的时候听说了 Ken ThompsonRob PikeRobert Griesemer 正在公司内部设计开发一门新语言 Go,然后他去了解了一下之后觉得很有意思而且这门语言不是很复杂,于是直接动手给 Go 写了一个 GCC 编译器前端,然后发邮件给 Go 的三位创始人,然后他就顺理成章地加入了团队。
  • 我见到了 Ian 之后觉得他长得很像美国六十年代播出的动画片《大力水手》里的主角波比🤣,就是那个吃了菠菜就无敌的大力水手。

Robert Griesemer

接下来我们来聊聊 Robert Griesemer,他是被誉为『欧陆第一名校』的苏黎世联邦理工学院的博士毕业生,没错,就是爱因斯坦的母校;Robert 是编译器和分布式领域的大拿,在他设计开发 Go 语言之前,他是 JavaScript 和 WASM 引擎 Google V8、Java 虚拟机 HotSpot 和 Google 分布式锁和配置管理服务 Chubby 的主要贡献者之一,V8 Engine 和 HotSpot VM 有多牛逼就不用我在这里赘述了吧!他的另一项主要工作 Google Chubby,可能因为是 Google 的内部系统而非开源项目,所以知名度比起他的前两项可能稍逊一筹,但是就这个项目本身却绝对是同样牛逼的:Chubby 是一种高可用、持久化的分布式锁服务和配置管理系统,基于著名的 Paxos 算法实现,适用于大规模分布式系统。Google 内部的很多核心的基础设施都依赖于 Chubby 做分布式资源同步,比如 Google 在大数据领域的三驾马车 GFSBigtableMapReduce,还有其他等等,除了一开始作为分布式锁服务,Chubby 后来在 Google 内部也作为 Name Server 被其他服务重度使用来管理配置信息,现在已经是 Google 内部的分布式系统的首选 Name Service。

我以前写过一篇分布式主题的文章《分布式事务和系统之底层揭秘》,其中有稍微介绍过这个牛逼的系统,有兴趣的读者可以重温一下。学习分布式理论的同学应该也都读过 Robert 的论文 《Paxos Made Live - An Engineering Perspective》,可以说是关于 Paxos 算法的应用方面的经典论文了;同样的,我在《分布式事务和系统之底层揭秘》中也推荐过。我和 Robert Griesemer 在 Go 社区的交流比较少,寥寥数次而已,我和欧博两人当时进入会场之后坐在了 Robert 大神所在的那个桌子上,自我介绍环节过后,可能他对于我们这两个在场唯二的中国人面孔比较好奇,和我们攀谈了起来,Robert 本身是瑞士人,德语是瑞士的官方语言,约有三分之二的瑞士人讲德语,所以他听到欧博说他在德国生活,就问他的德语说得怎么样😆,然后接着问我说中国的开发者使用 Go 相关的服务会有困难吗?因为某一堵不可细说的墙。我笑了笑,回复了他一下,这个话题就不展开了🤫,然后他还兴致勃勃地对我说他的妻子是中国人,我还蛮诧异的,马上问那你会说中文吗?他笑着说不会😂,试图把对话的语言从英文切换成中文的尝试失败😵,然后我问他去过中国吗,他说去过。

同样是在峰会的休息间隙,我问 Robert 能不能合个影,他说当然可以,然后就放下手上的东西过来和我拍了一张照片😍

大佬趣事
  • Robert 的妻子是中国人,这个前面讲过了,他也去过中国,实际上他 2015 年还去过 GopherChina 大会的现场,在上海,还发表了演讲,他好像是 Go 语言的三位发明人中唯一一位去过中国的?我不确定。
  • Robert 曾经在一个采访中说过,他在和 Rob Pike 以及 Ken Thompson 一起设计 Go 语言的过程中有很多分歧,他曾经有好几次因为一些语言设计上的分歧而失去理智冲 Ken Thompson 怒吼,然后当他回到自己的办公室,冷静下来之后对自己说:"嘿!你是怎么敢吼 Ken Thompson 的?!",当时坐在一旁的 Rob Pike 转头坏坏地问 Ken 你当时有吼回去吗?Ken 老爷子说:"No, No, No!",哈哈哈,这个蛮好玩的!

Russ Cox

最后来说说 Russ Cox,这位现在 Go 语言的掌门人。他在网上的 ID 是 rsc,他是麻省理工学院 MIT 2008 届的博士毕业生,他本科和研究生都是在哈佛大学就读的,Go team 里的又一个学神。他所在的项目组是隶属于 MIT 计算机科学与人工智能实验室的并行与分布式操作系统组,他们组的官网上有陈列组员的个人介绍信息,Russ 的毕业证信息就在上面:https://pdos.csail.mit.edu/~rsc/

Russ 在哈佛大学就读期间就在 Bell Labs 贝尔实验室里实习 (开车往返这两个地方一趟要 8 个小时,我不知道 Russ 是怎么做到的😅),那时候他和 Rob Pike 一起开发贝尔实验室的分布式操作系统 Plan 9 (上世纪 80 年代末由贝尔实验室的 Ken Thompson 和 Rob Pike 等人发起并领导的项目),后来他去 MIT 攻读博士学位期间顺便去了 Google 实习,就在他博士快毕业的时候,Rob Pike 和 Ken Thompson 一起和他介绍了他们正在设计的一门新语言 Go,并大概是这么对他说的:"嘿,我们正试图把我们以前在 Plan 9 开发软件时非常喜欢的所有东西用在那些我们想在 Google 里写的软件里,你想过来帮忙一起搞吗?",然后 Russ 就这样被这两位传奇程序员忽悠上了贼船,哈哈开玩笑的,事实上 Russ 一直都认为他能在博士毕业以后直接加入 Go 团队是发生在他人生中最幸运的事之一,他说仿佛自己过去十年所学的一切东西就是为了这一刻而准备的。

Russ 在 2008 年 8 月拿到博士学位之后就去帮忙开发 Go 语言,当时的 Go 语言,用他的原话讲,还只是一个几乎没有任何标准库的原型语言,他加入团队之后就接手了编译器和 Runtime 这两大核心模块,并协助一起开发了标准库,之后依靠这些先前的经验,他和其他人一起完成了标准库后续的所有重构和优化,这就是为什么当你去看 Go 语言的源码的时候会发现 Russ 的名字几乎无处不在,到处都是他的 commits。事实上 Russ Cox 在刚开始加入 Go team 的几年的 commits 记录只能用恐怖如斯来形容,他是真的热爱写代码热爱 Go,即便是他说过在自己有了孩子之后在 Go team 里写代码的时间比起以前要少很多的情况下,他在 Go 语言里的代码贡献时至今日依然是断档式的第一。

实际上,Russ Cox 和 Ian Taylor 两个人几乎是同一时间加入了 Go team,而且他们两个也是除了前三位创始人最早加入 Go team 的元老,加入之后做了大量的工作,所以严格说起来 Go 语言的实际创始人应该是有五位:Rob Pike,Robert Griesemer,Ken Thompson,Ian Taylor 和 Russ Cox,就这样他们几个人夜以继日地写代码完善 Go 语言两年之后,Go 诞生并开源了,这个世界从此多了一门好玩的编程语言。Russ 曾坦言他一开始并没有想到 Go 最后能有这么大的影响力,成为现如今的主流编程语言之一,他在 Go 正式开源的前几天曾对 Rob Pike 说过,他对 Go 的期待仅仅是发布之后会引起一些人的注意,如果更理想化一点,下一个像 C++ 或者 Java 那样的主流语言出现之时,能从 Go 那里把并发模型和 Interface 的设计抄过去用,就是我们对计算机编程领域的一点微小贡献了。很显然,最后 Go 的发展是大大地超出了几位创始人的意料了,不仅被全世界各大科技公司采纳作为主要的后端语言之一,而且还诞生了像 DockerKubernetesIstio 等等这样伟大的开源软件,甚至直接促成了 Cloud Native 浪潮,成为云原生第一编程语言,Go 以后在计算机发展史上注定要留下浓墨重彩的一笔。

后来 Ken Thompson 正式退休 (其实 Ken 老爷子和其他两位一起设计 Go 语言的时候就已经是半退休的状态了) 并渐渐淡出 Go 团队之后几年,他就和 Rob Pike 一起领导 Go 语言的开发团队,再后来 Rob Pike 也进入半退休的状态,Russ 就正式成为了 Go 语言团队的 Tech Lead,一直到现在。

Russ Cox 除了在 Go 语言上的贡献之外,他在 Bell Labs 和 Google 内部的贡献也是极其巨大的,前面已经说过了他很早就在贝尔实验室实习并参与开发 Plan 9,他后来还把 Plan 9 的用户态的几乎所有软件都移植到了类 Unix 系统上:Linux, FreeBSD, Mac OS X, NetBSD, OpenBSD, SunOS, Dragonfly BSD,Google 里也有不少 Infra 是他开发的,据我所知,Google 的代码搜索引擎就是他写的,在 Google 内部,他和 Rob Pike 都有着相当大的技术影响力,有很多基础设施都是出自他们之手,我曾和一些 Google 里的工程师在聊天的时候听他们提起,他们在公司里用一些基础设施的时候如果看到其架构设计具有很明显的 Unix 风格时,去翻看源码的时候大概率能看到是 Rob Pike 和 Russ Cox 等这些从 Bell Labs 出来的人写的。

他从 2006 年加入 Google 之后的技术职级一路升到了现在的 Distinguished Engineer (T9),这已经是 Google 里工程师的天花板了,下一步就是 Fellow 研究员了,这个有多牛逼呢?要知道 Ken Thompson 这样的计算机领域的传奇,在 2006 年刚加入 Google 的时候也是 Distinguished Engineer,当然他后来变成 Google Advisor 了。

Russ 那天忙前忙后,又当主持人控场,又要全场跑去参与各个圆桌的讨论,还要把控时间节奏,在每一轮讨论结束之时提醒每个圆桌的成员进行下一场讨论,所以我当时没有什么机会能和他一对一地进行交流,这张照片也是在峰会结束之后,所有人都到酒店大堂去取午餐的时候,我刚好碰见他,那会儿才能和他聊几句然后合个影。

Russ Cox 有一个技术博客,时不时会分享他在计算机技术方面的所思所得,非常推荐阅读,因为 Russ 是 MIT 计算机博士毕业,有很强的学术背景,因此他的技术文章具备极强的逻辑性和条理性,同时行文也非常严谨,一丝不苟,同时言简意赅,通过抽丝剥茧直达计算机技术的本质,可以说是秋水文章不染尘。比如他最近的关于未来 Go 要引入 Coroutine 的文章 Coroutines for Go,非常清楚地阐明了 goroutine 和 coroutine 的区别以及为什么 Go 未来需要引入后者,一直以来社区里有为数不少的初学者对 goroutine 有错误的理解,以为 goroutine 就是协程,实际上这它们是不同的概念,我在很多年前的技术文章中也有专门的指正:《 GMP 并发调度器深度解析之手撸一个高性能 goroutine pool》,但这个误解似乎一直存在,我想通过 Russ 的这篇文章应该可以消除这种误解,非常清晰;还有他的其余博客比如讲内存模型的系列,都是非常优质的技术博客。除了能从他的博客学习到技术,更重要的是他作为 Go 语言的 Tech Lead,他的博客时不时会透露出 Go 语言未来的发展计划,甚至是专门写一篇博客阐述 Go 语言以后要新增的功能和模块,所以从 Russ 的博客还能窥见 Go 未来的发展方向。

大佬趣事
  • Russ 出生成长的家就在贝尔实验室附近,所以他从高中时期就一直在贝尔实验室的计算机科学部门泡着,就是那个诞生了 Unix 操作系统、C 语言、Lex 词法分析器、Yacc 编译器以及编译器领域的龙书的地方,也因此他能在很年轻的时候就结识了那些当时还在贝尔实验室工作的计算机领域的传奇人物如 Ken Thompson、Rob Pike 等,后来上大学之后还去了那里实习,更是直接和 Rob Pike 合作一起开发 Plan 9 操作系统。
  • Russ 曾说过自己是 Rust 编程语言的粉丝,他平时会花很多时间研究并汲取 Rust、Swift 等和其他比较老的语言在设计上优点。

当然,当天来参会的 Go team 成员都是大佬,但是因为种种原因我没有一一去当面结识一下,这肯定算是一个遗憾,希望下一届能有机会"再续前缘",不过我第二天去会场退换前一天购买但是打开之后发现是坏的 Gopher 玩偶之时,遇到了 Michael Knyszek 在大堂里坐着,上去聊了一会儿,不过没多久他就有事先走了,所以很可惜也没有聊多久。

圆满闭幕

最后,在 Russ 的组织下,此次 Go Contributor Summit 2023 的全体参会人员一起照了一个合影(终于还是不得不露一下脸🐶

合影的时候本来想着和 Ian 站在一起拍的,我叫了他过来,他也正在走向我旁边的位置,但是一个小姐姐刚好走过来站在我左边,Ian 看到之后就默默退到旁边了...,哼,女人🌝

突然想起一个有趣的事,在全世界最流行的前 20 种编程语言中,只有三门语言是由计算机领域最高荣誉图灵奖的得主设计和实现的,分别是 C 语言 -- 由 1983 年的图灵奖得主 Dennis RitchieKen Thompson 设计实现,Fortran 语言 -- 由 1977 年的图灵奖得主 John W. Backus 设计实现,还有就是 Go 语言 -- 由 1983 年的图灵奖得主 Ken Thompson 参与设计实现。如此看来, Go 在编程语言的世界中可以说是出身顶级名门的超级富二代了。

Go 杂谈

在写前面『面见大佬』那一章节里的 Russ Cox 的时候,突然想起来一些关于他在成为 Go 语言的 Tech Lead 之后在 Go 社区发生的一些陈年旧事,止不住手痒再写一点字啰嗦几句,讲讲故事,权当消遣,不感兴趣的可以跳过。

Russ Cox 作为 Go team 现在的掌门人,他前两年曾说过他现在主要的工作是一些 leadership 方面的事情,以及协调团队资源、决定开发优先级之类的工作。事实上,要做好这种影响力巨大的开源项目的 leader 非常难,因为团队里和社区里有很多不同的意见,特别是这些意见很多时候来自于一些编程高手、领域大佬,这些人都有极深的技术造诣以及非常强烈和自我的个人认知体系,大多数时候谁也不服谁,谁也说不服不了谁,这个时候作为话语权最大的 leader 是有着非常大的压力的,很多各执一词、悬而不决的提案都需要他来一锤定音,有时候甚至要力排众议去拍板做决定,最后结果一旦不如意还要承受来自社区的指责谩骂;Go 自开源以来所经历的最大的公关危机应该是 2018-2019 年由"准官方"的包管理工具 dep 被 Russ Cox 自己搞的 vgo 替换的事件继而引发的社区关于 Go 语言的归属权、开放性的质疑和信任危机:《Go is Google's language, not ours》,Go team 的回应在这里,Ian Taylor、Rob Pike 和 Russ Cox 这些 Go 创始人都出来回应了,Robert Griesemer 没有现身,我印象里他好像太喜欢参与这一类的争论。

这个事件的导火线是 depvgo (modules 的前身) 的官方包管理系统之争,整个来龙去脉太过复杂,vgo 的作者 Russ Cox 从他的视角讲述过这个故事,dep 的团队也从他们的视角讲述过这个故事,双方各执一词,俨然已经变成了一出罗生门,我也算是当年的亲历者,跟帖吃过瓜;简单来说,就是 Go 在诞生之后很长的一段时间都没有一个官方的包管理系统,在 2018 年的 Go1.11 正式释出 modules 之前,这中间有近十年的空白,这期间在社区中诞生的且拥有一定用户体量的包管理工具就有 godepglidedep 等,我当年在尝试给我的 Go 项目引入包管理之前就调研过四五种,包括前面提及的那几个,最后我选择了 glide,虽然那时候社区里用的最多的是 dep,但是我不太喜欢 dep,相比之下 glide 更合我的胃口一点,这里不讨论工具的代码实现的优劣,仅仅是个人口味的问题;先说一句,我个人对那几个社区的包管理工具都不太喜欢,甚至我对后来 Russ Cox 做的 vgo/modules 用着也不太爽,经常吐槽。

正如我前文所言,我对那几个社区的包管理工具甚至后来的官方版本都不甚满意,而且,虽然我非常敬重 Go team 里的一众大神,但不代表我会盲目地支持 Russ Cox 和 Go team,所以我对这件事里的各方都不具有倾向性,因此我自认为我可以就这件事发表一点相对客观的观点:先说结论,以我个人的角度来看,Go team 在这件事情上的表现非常不专业,不管是前期还是后期的种种行为都不占理。 当然你可以不同意我的看法,当年那些相关的争论在现在在网上都能找到,我相信每个人看完都会有自己的想法,每个人的想法也不必一致。

这件事简单来说就是 Go team 虽然一直想解决包管理的问题,但是 Russ Cox 也曾坦言官方团队中并没有这方面的专家,于是他们当时采取的策略是把包管理工具的开发下放到社区,让社区来主导,后来 Go team 甚至和社区中的专家 Sam Boyer接触并委托他在社区中成立 dependency management working group (也叫 package management group,后续简称为 pkg mgmt group),召集领域专家一起做包管理工具,也就是后来的 dep,然后这个项目就开始了,甚至这个项目的源码仓库还是建立在 GitHub 上的 golang org 下面的,这也难怪在 vgo 横空出世之前社区里都认为 dep 就是未来官方的 Go 包管理系统。

然而,就在 dep 项目在社区里高调地搞了一年多之后,期间很多社区里的人无偿地为这个项目贡献了很多代码,Russ 最终却以 dep 和 Go team (主要是 Russ 本人) 的技术分歧太大,而且 dep 的实现有很多缺陷导致其无法集成到现有的 Go 工具链中为由,决定废弃 dep 推行他自己设计开发的 vgo (后来演变成了 modules),这个事情当时犹如在本就不平静的社区里投入了一枚深水炸弹,顿时就炸开了锅,后来 Russ 在社交媒体上做了公开回复,声称在前期他曾就一些技术细节和 pkg mgmt group 有过讨论交流,但是以 Sam Boyer 为首的几个成员和他有很大的技术分歧且拒绝配合做修改,于是他不得不自己另起炉灶做了 vgo;这个陈述遭到了 pkg mgmt group 侧的反驳,称 Russ 在 dep 开发期间以及他决定独自做 vgo 之后都极少和 pkg mgmt group 进行交流,Russ 和他们开会讨论的次数不超过 3 次,而且少数的几次交流他都表现得极为强势、不容置喙,后来在技术上的分歧也只是 Russ 个人无法说服 group,他们当时只是希望 Russ 能把他自己的想法改进得更有说服力一点,但是没想到 Russ 直接决定抛开他们自己单干。

pkg mgmt group 其中的一位核心成员说,虽然技术上的分歧一直存在,但是他们都愿意和 Russ 一起合作慢慢讨论出一个可行的方案来解决,但是 Russ 领导下的 core team 似乎更倾向于他们自己去做,不带社区的人一起玩了。该成员称自从 pkg mgmt group 成立的第一天起,他们就经历了很多痛苦,因为他们太想做好这个事情了,他们殚精竭虑且无偿地去搞这个事情:

  • 从社区征召领域精英加入
  • 在核心小组之外再成立二级咨询小组
  • 花了一年半的时间调研、收集用户反馈
  • 深入去研究了社区中其他现有的第三方包管理系统
  • 严格遵循设计方案的小组评议,以求每一个模块的设计方案都能在组内达成一致
  • 煞费苦心地写文档、修改文档

之所以要做到这种地步,主要是因为他想给社区未来的后来者树立一个典范,关于如何去做一个 Go core team 自己不太想做而下放到社区的项目。然而,最终当 Russ 宣布 vgo 将成为 Go 的官方唯一的包管理系统之时,他们首先是震惊,因为正如前文所述,Russ 和他们 group 的交流一直都很少,其次就是心灰意冷,他们这么多人忙活了近两年的时间,最后一切的努力都付诸东流。Sam Boyer 后来参加了一个技术访谈,他表达了对 Russ Cox 在这整个事件中的种种行为的不满,而 Russ 看过之后对他表达了歉意。

Go core team 自己把包管理系统下放给社区是整个事件中我最不能理解的一个决策,也是我认为是他们第一个也是最愚蠢的一个决策,包管理系统这么重要的东西居然"外包"给社区?君不见『宇宙第一编程语言』(狗头) C++ 这么多年被集火攻击的其中一个点就是没有一个统一、好用的包管理系统,导致这方面在社区里乱成一团,这种东西在我看来只能是由 core team 来做,至少要由他们来 lead 这个事情,即便是说当时 core team 里没有相关的领域专家,需要求助于社区,在我看来也不能完全放手;后来 Russ 在社交媒体上公开道歉也主要是说 Go team 没有更早、更多地介入社区里的包管理工具的开发,导致最终失控,他作为 Tech Lead,需要担首要责任。

这起事件对 Go 的伤害是巨大的,从一开始的针对 Russ Cox,发展到后来火烧到了整个 Go team,质疑 Go 语言不是开放的技术,而是 Google 的私人财产,而且极大地损害了 Go 语言在开源社区中的信誉:本来已经把工作委托给了社区,然后在社区的开发者勤勤恳恳地研发了一年多以后,Go team 却毫无征兆地推翻了社区的工作而且另起炉灶,这对那些给 Go 的开源生态做贡献的开发者来说无疑是极大的负面影响,今天可以是 dep 被 Go team 否定并由官方自己重新做,保不齐明天就轮到自己做的开源项目了;这种质疑的声音时至今日依然不绝于耳,我想还会持续下去...,但是邮轮已经驶出,沿着 modules 的航线行驶很久了,一切已成定局,不可能再调转航向走另一条航线了。

一直以来开源社区都在期望能探索出一种民主、高效的管理模式来运营那些具有巨大影响力的开源项目,仅针对大型开源项目的管理来说,似乎高效和民主往往无法同时得到满足 (请勿过分联想),Rust 核心团队这两年鸡飞狗跳的现状就是佐证之一。从过往的经验来看,(仁慈) 的独裁者的模式似乎是一种更好的选择,比如 Linux Kernel 社区中的 Linus (独裁却不仁慈),Python 社区中的 Guido van Rossum (独裁但仁慈),不知道 Russ Cox 在其中是属于哪一种,我在给 Go 提交代码的过程中和他的交流其实少之又少,仅有过几次在 GitHub issue 上的交流,以及这次线下的见面,总体而言我对他个人的印象还是挺好的,人比较随和、彬彬有礼,至于说和他在技术上进行交锋的体验如何,那我就不得而知了。

趣事

我在 San Diego 期间,有幸受到 Go 夜读的杨文和欧长坤博士的邀请,一起录制了一期播客,主题是介绍我和 Go 语言以及开源社区的一些经历:我何时接触到 Go、喜欢 Go 的原因、我给 Go 语言贡献代码的一些经历、我写的开源项目、我参与的其他开源项目、参加这次峰会的感受、最近在读的书或者看的电影等等。我们聊着聊嗨了,最后持续了很久,访谈音频还在剪辑阶段,估计会剪成两三期播,敬请期待!

圣地亚哥动物园 San Diego Zoo

圣地亚哥动物园被多家主流旅行媒体世界动物园排行榜中位列第一位。创建于1916年是全球规模最大的动物园,栖息着 800 余种、超过 4000 只动物。它也是全球少数拥有大熊猫的公园之一。它由非营利的圣地亚哥动物学会(Zoological Society of San Diego)运营,占地面积为 43 公顷。在美国也是受访人数最多且最受喜爱的动物园。

我是在 26 号上午参加完 Go Contributor Summit 之后,下午去了圣地亚哥动物园 San Diego Zoo,这个动物园是在市中心旁边的巴尔博亚公园内部,离我住的地方很近,圣地亚哥还有另外一个很有名的野生动物园 San Diego Zoo Safari Park,这个动物园就离得比较远,距离市中心北部约 40-60 分钟的车程,如果乘坐公共交通则需要两个小时左右,两个动物园的定位不一样,圣地亚哥动物园里的动物来自全球各地,包括亚洲、大洋洲、非洲、中美洲、南美洲等,而圣地亚哥野生动物园里的里的动物则更多来自世界上干旱地区,例如非洲、亚洲大草原。从游客评价来看野生动物园会更有意思一点,这里的“野生”,是指动物围栏很矮或者没有(非危险动物区),并不是躲笼子车里看动物的那种 “野生”。相对于市区的圣地亚哥动物园,这里更大,有趣的项目更多,不过因为我在圣地亚哥停留的时间比较短,而且还要参加 Go Contributor Summit 和 GopherCon,所以没有太多时间在市里游玩,而野生动物园离市区太远了,实在安排不过来时间,只能以后有机会再去了。

动物园本身在 Balboa Park 巴尔博亚公园里面,公园占地面积很大,由动物园、博物馆、美术馆、花园/绿地,餐厅/商店组成,巴尔博亚公园是来圣地亚哥必打卡的地方,这里就像是都市文化中心,凝聚了这个城市的创造力和想象力,公园临近市中心,整个公园就像是一个精致的大花园,拥有 17 个博物馆,赢得大奖的戏剧院,还有步行就可以到达的圣迭戈动物园。这些博物馆的造型都非常有设计感,带着浓厚的西班牙文艺复兴时期的色彩。这个公园可以逛很久,但是很可惜我在那里待的时间不长,没有深度游览。

我个人比较喜欢逛动物园,出去旅游每到一个地方只要时间允许的话都会去当地的博物馆和动物园逛一逛,我去圣地亚哥之前就已经听过圣地亚哥动物园了,第一次是从《老友记》里,第一季里 Ross 养了一只猴子,后来因为猴子进入发情期有攻击性而不得不送到动物园,一番波折之后送到了圣地亚哥动物园,另外就是动画电影《马达加斯加》系列,我特别喜欢这个系列的动画电影,特别搞笑,主角是四只动物:狮子、斑马、河马和长颈鹿,第一部里它们意外流落到非洲东南部的马达加斯加之后,长颈鹿一通分析之后说它们在圣地亚哥动物园,第二部它们又意外到了非洲大草原,长颈鹿又说它们是在圣地亚哥动物园,笑死个人;有趣的是长颈鹿的配音演员就是老友记里的 Ross 的演员,梦幻联动了属于是。

圣地亚哥动物园的成人门票价是 $65,门票包含以下项目:

动物种类:你可以看到北极熊、熊猫、考拉、猿猴、大猩猩、企鹅、大象、长颈鹿、灰熊、河马、鸟类、各类爬行动物、狮子、斑马、老虎等等。

动物栖息地:动物的栖息场地通常比野生动物园的要小,这样游客就能集中看到更丰富的动物活动。

展区与景点:

  • 观光导游巴士:双层巴士带你游览整座动物园。
  • 熊猫峡谷:在熊猫展览区,动物园管理员将解答你的一切问题,与你谈论动物园的著名标志。
  • 北极风光与北极熊:那里是动物园北极熊的家,在那里你可以看到憨厚的北极熊在水下游泳,欣赏北极狐,驯鹿,鬃狼等等等等。
  • 大象展区:了解大象以及其他加州本土动物,包括大型鸟类,猎豹,狮子和猫鼬,的历史以及进化。
  • 失落森林:这里是老虎、河马、猴子、大猩猩的家园,还有斯克里普斯鸟苑和欧文鸟苑 ,在这里宛如身临真实的森林之中。
  • 都市丛林:来这里参观长颈鹿、袋鼠、考拉、火烈鸟、犀牛等等更多其他种类的动物。
  • 探索前哨:孩子们的乐园,孩子们可以在操场上尽情奔跑,在宠物动物园与可爱的动物互动,还可以学习观察许多爬行动物、昆虫和鸟类。
  • 高空缆车:乘坐缆车俯瞰整座展览,鸟瞰动物园和周围的巴尔波亚公园。
  • 夜间动物园:圣地亚哥动物园在夏季会延长闭园时间,在盛夏的夜晚享受音乐与更多活动吧。

圣地亚哥动物园其实可以逛一整天的,为了值回票价,我建议至少也要在里面玩个完整的半天,里面的动物种类繁多,而且门票也包含了不少项目,有时间的话还是推荐把所有的项目都体验一下,我本来计划当天中午就过去的,但是因为突然有其他事情耽搁了,导致晚了两三个小时,到那里的时候已经是下午了,所以在里面也就待了两三个小时,好多动物都没去看,动物园是下午五六点就闭园了,我记得当时是五点半,所以感觉有点未尽兴,有点亏。

另一个不要太晚去的论据是,太晚过去的话动物很可能都准备回笼了,所以也看不到啥,就比如我想去看的大象和河马,结果去了之后基本没看到,那只大象不知道为啥躲在石柱后面,在那里一直蹭也不知道是在蹭什么鬼;河马则已经准备回笼了,我只看到它的一个背影...

中途岛航母博物馆 USS Midway Museum

中途岛号是 20 世纪服役时间最长的航母,也是建造时期世界上最大的航母,可容纳 4500 名船员。游客可以参观引擎/控制台等 60 多个地点,30 架以上的战机提供免费的语音讲解,并且支持中文。中途岛航母博物馆在世界各地的游客中好评如潮,属于圣地亚哥必去景点。

中途岛号在 2004 年 6 月 7 日作为一个博物馆开放。 截止 2012 年,它迎接了大约1百万游客。 2015 年, 中途岛号成为美国最受欢迎的海军战斗博物馆。该博物馆收藏了 13000 多件物品,每年举办 700 多个活动,其中有 400 多个是海军退役仪式、再入伍仪式、服役部队变动仪式。 它每年也会接待大约 50000 个参加实地考察的学生和大约 5000 个孩子。

该博物馆提供免费的语音导览,由曾在中途岛号服役的的老兵录制,他们讲解了中途岛号上的 60 多个地点,包括寝室、发动机房、画廊、禁闭室、邮政办公室、飞行员准备室、办公室、飞行控制室等。 游客也可以进入飞机驾驶舱、观看讲解影片、体验飞行模拟器。 此外,还有针对青少年的语音讲解。

中途岛号位于圣地亚哥的海军港。 那里有300多个泊车位。它离公共交通枢纽和圣地亚哥其他的海滨景点很近,可以步行抵达。 中途岛号博物馆 每天上午 10:00 至下午 5:00 开放。

中途岛号不仅会举办私下活动,近年来,它也成为热门的媒体取景点。2012 年,它举办了全国直播的美国国家大学体育协会篮球赛。 这场比赛是圣地亚哥州立大学对阵雪城大学。 美国偶像、旅行网络、探索频道、福克斯新闻网、钻石求千金、改头换面、历史频道、军事频道都曾经在中途岛号拍摄节目。

中途岛号航空母舰博物馆由当年服役的军人担任志愿讲解员,并且博物馆提供中文导游服务。整个博物馆分成 3 个组成部分,第一部分是人员和机器(Man and Machine),它坐落在机库层和前甲板。第二部分是海中城市(City at Sea),坐落在船的第 2、3、4 层甲板。第三部分为船顶部(On the Roof), 坐落在战斗甲板,而航空母舰博物馆的主要进出口就设在第一部分。

舰上有一个小影厅,里面有大概七八排座位容纳游客,正前方有一块屏幕放映一部 15 分钟的沉浸式电影讲述了二战最重要的(美日)海战之一的故事,电影放映之前会有一个美国海军的退役老兵站在第一排座位前方讲述他们海军在中途岛航母上服役期间的一些故事,还有他们这些老兵退伍之后回到这里当志愿者的一些趣事,比如我听的那一场的那个老兵讲了他自己在服役期间跟随中途岛号前往参与越战的故事,现在航母上有很多退伍老兵过来当志愿者,为游客科普中途岛号的相关知识,这些志愿者中有不少人并不住在 San Diego 但还是会定期过来当志愿者,比如他有一个同事,现在住在 Denver,他每半年会自己开车过来一次。

大众熟悉的泰坦尼克号豪华游轮的标准排水量约为 4.6 万吨,而中途岛号航空母舰 1945 年 3 月下水服役时的标准排水量约 4.5 万吨,而作战时的最高排水量能达到 5.5 万吨。中途岛号航空母舰长298.4米,最多载员 4700 人,最高航速 33 节(海里/小时)。中途岛号在其服役期间为了适应近现代战争的变化曾进行过数次的现代化改造,排水量也随之逐步增大,最终达到 6.1 万吨左右。

中途岛号在1943年开始建造,在1945年下水,并于日本投降后一个月服役,所以其实中途岛号航母实际上从未参与过第二次世界大战,该航母主要参与的战争是越战、韩战和海湾战争。

我接下来参观的是航母的顶部,也就是甲板,这里的飞行甲板是航空母舰的战斗部分,在航母的顶部。这里还有驾驶台、海军上将和舰长的宿舍和指挥室等。飞行甲板上有很多美国老兵,担任义务导游,甲板上还有一个小型的电视屏幕播放飞行战斗机的介绍,同样有一个退役老兵在那里为游客讲解。

我最后参观的是船舱也就是二层甲板,需要从中间的机库层走楼梯下去。这下面主要是航母的机舱控制室、士兵和军官的宿舍、浴室、食堂和办公室,还有军械室、引擎车间、医疗室、服装间、理发室,甚至还有一间小教堂,总之应有尽有。

中途岛号在 1992 年退役,并在 1997 年除籍,是 20 世纪服役时间最长的航母,服役时间从 1945 年到 1992 年,大约 20 万海军士兵曾经在它上面服役。这期间,它创造了数次海军航空的突破,也参与了一些人道主义任务。 它也是唯一从冷战开始到冷战之后之后期间都在服役的航母。2003 年海军将中途岛号捐赠给民间组织,改装为博物馆舰,停靠在美国海军战斗机武器学校的故乡,圣地亚哥。

最美海滩 La Jolla Cove

La Jolla 是西班牙名,为珠宝的意思。拉荷亚(La Jolla)是一个富裕、多山的海滨度假胜地社区,占地 7 英里(11公里),位于南加州圣地亚哥市北部,沿太平洋弯曲的海岸线。拉荷亚在 2008 年和 2009 年的房价在全美国最高,平均价格为 184.2万 美元(2008年)和 212.5 万美元(2009年)。2004 年人口数大约是 42,808。拉荷亚三面环绕着峭壁和海滩,位于圣地亚哥市中心以北 12 英里(19公里),橙县以南 40 英里(64 公里),气候温和,平均 70.5 华氏度(21.4 °C)。著名的加州大学圣地牙哥分校就位于拉荷亚。

La Jolla Cove 距离市中心大概 20 分钟的车程,乘坐公共交通的话则要 1 个半小时,碧蓝的海水、狭长的海岸线、海滩、草地、海狮、海鸥、成排的棕榈树,一起构成了圣地亚哥最美、最有人气的海滩。

参观完航母博物馆之后,下午就直接坐公共交通过来 La Jolla Cove,这里我又要吐槽美国拉胯的公共交通,在 Google Map 上查了路线之后,需要先坐城市轻轨,然后换乘公交,结果我愣是一直找不到地图上显示的那个轻轨的站点,在我所在的位置附近有另一个站点,但是地图上却一直显示的是另一个,让我百思不得其解,最后我干脆不管了,直接去我能找到的那个站点,找到了地图上显示的那一趟轻轨的车次,也不管是不是地图上的上车点,反正我想车次是对的,理论上应该能到目的地,正当我在思考的时候,刚好那一趟车次要开走了,还记得我之前提过美国的公共交通有时候车次之间隔的时间挺长的,我看这一趟再不上就要等 40 分钟才有下一趟,我就直接跳上那一趟车了。

我之前说过美国社会的自监督信用体系,这里又体现了一把,我猛地跳上车之后才发现我没有买票,因为轻轨站点是开放式的,也没有工作人员查票,于是我在车上赶紧找有没有自助购票机器,但是没找到,于是我问旁边座位上的一个美国大叔我怎么买票,大叔笑了笑说你其实应该在上车前买的,他说车站边上有一些自助购票机器,在那个上面自己买就行,然后他招了招手让我坐下,说既然你这次都上车了,就不用买了,我说这不太好吧,能补票吗?他说你如果非要补票的话就等你到了目的站点之后在那边的机器补一下票吧。然后他就和我聊起来了,问我来美国做什么的,我说过来参加一个技术峰会顺便旅游,他又问是什么技术峰会,我说计算机相关的,一直聊到我到站了,他起身帮我指了一下车站旁的购票机器的位置,我向他道谢之后就下车补票了,然后换乘公交,这里又有槽点,不同车次的公交分散在不同的公交站,关键是这些公交站都在那里的一个地方,地图上又没有准确的位置,我只有自己一个个找,后来找到我要坐的那一趟车在轨道对面,还得穿过地下隧道过去,搞的我差点误了车。

沿着 La Jolla Cove 的海岸线往西边走 10 分钟左右,有个叫 Children's Pool 的小海湾,这里有不少海豹聚集在那里,同样往东走 10 分钟左右,也有另一个小海湾,这里则是有很多海狮聚集,因为海豹和海狮长得很像,所以有时候我也傻傻分不清楚,不过有两个比较简单的可以区分它们的方法:一是海狮头部两侧有明显的外耳而海豹只有不明显的耳洞(如果不仔细观察,几乎看不见),没有外耳。当然,这并不影响它们的听觉;

二是看爬行方式,海狮有巨大的前鳍,能撑起自己的身体且保持身体平衡,它们也有后鳍,海狮的后鳍可以弯折到前面配合前鳍在陆地上优雅地“行走”。与海狮相比,海豹的前鳍要小得多,无法支撑身体保持平衡。而且,海豹的后鳍不能向前弯曲,当在陆地上活动时,它只能以一种非常尴尬的姿势前行(通常是肚皮贴着地面蠕动向前),所以那些能支撑起上半身并前行的就是海狮,而那些只能像毛毛虫一样肚皮贴地面蠕动前行的就是海豹。

沿途修建了很多绿色凉亭,供游客休息和观赏海景,很适合作为背景拍照。

最美海滩确实名不虚传,这里实在是太适合出片了,喜欢摄影的朋友强烈推荐过来这个一顿狂拍。

不过很遗憾的是没能在这个最美海滩观赏到传说中的最美日落,那天日落的时候云层太厚了,把夕阳遮住了,基本看不到日落,最后只看到一点晚霞。La Jolla Cove 其实不算大,如果只是逛这个海滩,顺便拍拍照的话其实一小时就逛完了,所以我感觉在日落前两个小时到这里就行了,我来的比较早,一直在等日落,等得有点久,我是 9 月底去的,那时候日落时间应该差不多是晚上六点半。

当然,La Jolla Cove 周边其实还有不少其他景点,如果计划把这里附近都逛逛的话,那也可以再提前一点过来,我感觉如果要这附近都玩一遍,可以玩半天到一天都行。

最后,我又双叒叕要来吐槽这边的公共交通,体验简直太差了,我傍晚从 La Jolla Cove 回程的时候,按照路线是要先坐公交然后换乘轻轨,公交是不标明行车方向的,要靠自己看,我刚开始差点上了相反方向的车,还好我上车之后谨慎地去找了一下司机确认方向,然后他告诉我这趟车的方向和你要去的地方是相反的,你要到对面街道去等车。公交换乘轻轨的时候就更坑了,在站点等城市轻轨的时候,那里有好几个站点都挤在一起,根本不知道我等那趟车是停在那个点,而且和公交站一样没有标车的方向,关键是还没法通过车的方向来判断,因为每条轨道上的车似乎都是双向的,我一直在那边等了半个多小时,那里的轻轨是按照车身颜色区分的,地图上显示我应该等的是蓝色的车,结果一直来的都是红色,而且和地图上的车次时间是匹配的,把我搞晕了,然后问了下旁边的一个老外,结果他都搞不懂,最后实在没耐心了,打了个 Uber 回去了。

趣事

在 La Jolla Cove 等日落的时候,沿着海岸线往西走的时候路过一个卖手链、饰品之类的小地摊,摆摊的是一个好看有气质的小姐姐,应该是有着南美血统的美国人,San Diego 本身紧邻墨西哥,历史上先后被西班牙,墨西哥,美国殖民和占有,所以建筑风格混搭,很有特色,人口方面有很多南美裔。她扎着很多小脏辫,戴着头巾,我感觉很有那种南美风情,我路过的时候看了看她的摊子上的饰品,小姐姐很热情地笑了笑跟我打了招呼,于是我开口问能否让我给她拍一下照片,本来以为可能要吃闭门羹,没想到她欣然应允,然后我举起相机对着她,她也对着镜头做起笑脸,于是我拍下了这张照片。

再晚点的时候,我沿着海岸线往回走准备坐车回市区的时候又经过她的摊子,那时候已经接近傍晚了而且气温下降了很多,加上海风挺大的,就更冷了,她已经在短袖衣服外面穿上了一件外套,我见她还没收摊,蛮不容易的,就在她那里买了一条手链,之后和她闲聊了几句,我问她这些手链、饰品都是她自己做的吗?她颇为得意地给予了肯定的回复,我又问她这么晚了还不收摊吗?每天都在这里摆摊到这么晚吗?她说再等一会儿就准备回家了,其实也不算很晚,而且她住的也不远,她也不是每天都来,我最后问她平时在你这里买手链、饰品的人多吗?她说看情况,通常情侣游客多的话就卖得好一点,因为男生会买来送女朋友,我表示理解这其中的逻辑哈哈,最后,我和她道别之后,就坐车回市区了。

市中心

圣地亚哥的市区给我的感觉是白天非常冷清,甚至比旧金山的市区还冷清。白天走在街上,通常看不到太多人,很多办公楼看起来也都是空置的,没看到几个上班族,车流倒是有,但也不是特别密集。但是一到了晚上又到处都是灯红酒绿的,各种餐厅、酒吧看起来挤满了人,我真的很好奇这些人白天都跑哪去了,难道是大部分住在市区的人都不在市区里工作,所以白天市区里没人,晚上人才回市区开始夜生活?

因为我就住在市区,所以有空就在市区闲逛。

圣地亚哥市中心的 homeless 问题也挺严重的,我在市区逛的时候看到 homeless 的频率还蛮高的,有时候一些精神状态有问题的流浪汉还会突然大喊大叫,有一次我在等绿灯过马路的时候,不远处有一个正在遛狗的女孩子,那边有一个流浪汉,突然无预兆地破口大骂,把小姐姐连人带狗都吓了一跳...,还有一次,我从 GopherCon 会场回酒店的时候过马路的时候看到旁边有一个很壮的、赤裸上半身的流浪汉倚靠着栏杆,一脸伤心欲绝的表情,等我走过人行道之后,他突然就大哭了起来,我听到声音回头看了看,在我后面牵着狗的一个女生被吓的连连后退,在那里等到那个流浪汉走了之后才敢走过人行道。

圣地亚哥的美食挺多的,有很多特色美食,首先是墨西哥菜,因为临近墨西哥,所以有很多加州墨西哥风格料理,也称为加州泰坦风味,在圣地亚哥是最流行的美食之一。这里汇聚了许多墨西哥裔居民和移民,这样就为圣地亚哥提供了一大堆地道的墨西哥风味菜肴,包括玉米饼、辣椒酱、卷饼、泡菜和炸玉米饼等。我住的地方楼下就是一家平价的墨西哥 Tacos 餐馆,不过我感觉不太好吃,La Jolla 那边好像有一家比较有名的叫 The Taco Stand,在市区好像也有分店,可以去试试。市区的 Fifth Av. 那里有一整条美食街,一边是意大利菜:意面 Pasta、Pizza、海鲜等等,一边有很多牛排餐厅。圣地亚哥毗邻墨西哥湾,因此拥有丰富多样的海鲜资源。在这里,你可以品尝到各种鲜美的海鲜,比如螃蟹、龙虾、虾、贝类、墨鱼等等,如果喜欢吃海鲜,去到圣地亚哥以后可以去海边尝尝。至于美式餐厅就更多了,可以试试那里的加州传统牛肉汉堡,可以自己搭配肉类、奶酪和调味品,直接和餐馆的工作人员说你的需求就行。

我眼中的美国

陈旧的基础设施

在美国加州的一个多星期,一个直观的感受就是基础设施比较陈旧,机场、地铁、火车站等,很多公路也都非常破旧,比如旧金山市区的很多马路看起来给人的感觉就是损坏待修补的状态,而且市区里有些地方看起来挺脏的。

我猜是因为美国 (欧洲同理) 的基础设施建设的年代比较早,年久失修就导致了现在的这种破旧的观感,而且因为政府本身多年的财政赤字,地主家也没有余粮了,政府拨款的高优先级不在城市基础设施上面,因为基础设施虽然旧,但基本没有大问题,就这样凑合着用了。

顺便说一下,美国有超过两万个机场,在其国内基本代替高铁满足了国民的中长途出行,这大概也是美国的高铁系统不发达的原因之一。而且很多机场距离市区很近,特别是那些上世纪五十年代之前建的机场,那时候很多城市规划可能都还没完全确定,而且城市土地还比较充裕,当然还有商业上的考量,离市区近能够更好地促进旅游业和其他服务行业的发展,所以在市区经常可以看到飞机从头上掠过;后来政府规划新建的机场因为噪音、安全和城市土地资源紧张等原因而大多选择在离市区较远的地方修建了。

基于信用的社会体系

前面讲过,美国的整个社会可以说是建立在一套自我监督的信用体系上的,比如坐公交基本没人查票,火车站是开放式的,有购票机器,自己买票自己上车,很多时候也没有列车员查票 (不是全部没有,也有会查的),就算你逃票也没人管,地铁就更不用说了,就那个地铁站的设计,逃票不要太容易,而且我发现马路上也基本没有摄像头,开车如果闯红灯也没人抓,高速公路上虽然有限速指示牌,但实际上没有测速仪,也是全靠自觉。

上一篇文章分享过几个小故事,我在旧金山市区和硅谷那边都曾遇到过坐公交刷不了 Clipper 卡的问题,但是司机都是直接让我去后面坐着,不用付钱了,而且看起来日常中司机也不怎么管坐车的乘客有没有刷卡或投钱,基本也靠乘客自觉;还有本文章前面分享的在圣地亚哥那里坐城市轻轨上车前忘买票的故事,它那个设计给我的感觉就是不在乎坐车乘客到底买没买票,因为上下车是不需要查票的,自由上下车,买票是在轨道旁边的自助购票机器上买,你买不买票不影响你坐车,你买的票的目的站点是哪个也不影响你可以在任意一个站点下车。

这倒不是因为政府觉得本国人的道德水平普遍很高不会逃票,主要是在美国逃票被认定是“窃取有价服务”的行为,你要是没有被查到就算了,一旦被查,可能要面临高额罚单和强制社区劳动,不仅会在个人档案中留下犯罪记录,而且会影响到其信用记录,甚至可能影响就学、就业、贷款。所以我觉得美国政府对于这种让个人自我监督的执法思路是从成本对冲的角度考量的:通过提高个人的违法成本从而达到缩减在公共服务上需要投入的监督人力成本;再比如信用卡,在美国绝大多数个人日常消费都是通过信用卡,而个人一旦发生了不良的信用记录,其信用卡的正常使用就会收到很大的限制,将对个人的日常生活造成极大的影响,不仅如此,一旦个人信用记录出现“污点”,则很容易被金融机构、商家列入“黑名单”,之后再申请贷款、找工作时将面对诸多难题。美国雇主在面对求职者时,尤其是较为重要的金融财会类岗位,往往会先调取其信用报告,考核其信用记录基本情况,并从侧面窥探其人品可靠程度。虽然可能不多,但是也有听说在婚恋交友、房屋租赁的时候对方会要求提供信用记录以了解其财务和生活状况,因此,这就要求个人对其信用进行严格的自我监督。

所以,这其实就是经济学上的博弈论实际应用,政府和公民处于对抗游戏中,政府的诉求是规范公民行为,又因为政府在其中处于优势地位,所以可以制定部分游戏规则,迫使公民对自己的行为进行权衡与博弈,从而完成对公民行为的约束。

科技创新中心

美国作为全球的科技创新中心,在那边确实能感受到极强的科技气息和极客文化,如果在硅谷 Mountain View 山景城那边的话,有机会可以看到 Waymo 等自动驾驶公司的汽车在路上跑,或者如果在旧金山市区想体验一下坐自动驾驶汽车出行可以下载 Waymo 的手机 app 打车。如果是打 Uber 的话,今年 5 月份 Waymo 和 Uber 达成合作,提供接载乘客出行的网约车和 Uber Eats 优食订单派送服务,不过好像主要是在亚利桑那州的凤凰城等城市,加州那边还没消息。

不过 Uber 目前正在弗吉尼亚州的费尔法克斯、迈阿密、加利福尼亚州的洛杉矶和山景城试行自动派送服务,全方位投入全电动人行道机器人和自动驾驶汽车向社区派送订餐,如果运气好说不定能在路上看到。

去年有看到新闻说 Amazon 计划在加州等地方投放 Prime Air 无人机,用来送快递,也不知道后来搞得怎么样了,我在加州的时候倒是没看到。

在硅谷还可以去参观各大科技公司,Google、Intel、Apple、Facebook、IBM,还有一些科技博物馆,像是 Intel 的芯片博物馆、计算机历史博物馆、和 NASA Ames 研究中心。

在圣地亚哥的 GopherCon 2023 大会上也能看到很多科技公司的技术演讲,关于一些技术实践的分享,涉及了很广泛的领域,比如这两年最火的生成式 AI -- 类 GPT 模型、游戏、云服务、分布式系统、数据库、网络、密码学、云原生、DevOps 等等,在 GopherCon 你甚至能听到关于 Rust 的技术分享🐶

我们都知道全球科技行业的技术突破和商业模式很多都是从美国开始的,这与鼓励创新和随处可见的黑客文化和极客精神不无关系,比如在 Go Contributor Summit 上的参会者可能从事的技术方向各不相同,但是大家在探讨 Go 未来的可能性的时候更喜欢天马行空地畅想而不受限于自己熟悉的领域,而且有来自全世界各地的开发者自发地无偿地去为开源技术贡献他们的才智,仅仅是为了 having fun;再比如今年的 GopherCon 上有大佬过来教大家怎么用 TinyGo 去玩嵌入式系统,通过可编程硬件教你怎么去 hack 硬件,操控大疆无人机,控制机器人,驱动 MIDI 控制器来制作音乐,破解并操控 LED 灯和 OLED 屏幕,使其按照你的喜好闪烁起来...

多种族和移民文化

美国是一个多种族和移民国家,这个每个人都知道。在美国,你走在大街上可能一路上能看见来自全世界各个种族的人,比如我在旧金山那边坐公交和打 Uber,司机有美国白人、黑人、南美人、中东人、华人,和他们交谈的时候各种英语口音袭来🥹,而圣地亚哥也有很多亚裔人口,还有墨西哥人和其他拉美裔,我自认为英文口语还是不错的,但是也顶不住这些 Regional accents of English,和美国本地人用英文交流基本没有问题,然而如果是移民而且口音较重时,完全听清他们的话就有不小的难度,基本上要全神贯注仔细听才行;当然,在唐人街的话就轻松很多,我大多数时候可以直接用普通话和粤语。

喜欢多元化的人大概也会喜欢美国的这种多种族和移民文化,可以看到不同种族的人和感受不同的文化,我个人觉得还是比较有意思的,多元化的人、多元化的价值观、多元化的思想。美国的科技引领全球有一个关键的因素就是美国通过移民吸收来自全世界的优秀科学家、工程师,通过聚集全世界各行各业的精英,促进本国的科技、经济和文化的繁荣。我记得以前在油管上看过一个在美国纽约的街头采访,主持人会在路上找一个个在纽约当地工作生活的人,问他们如何看待纽约这座城市,各种各样的看法都有,什么曼哈顿房价贵、物价消费水平高、生活节奏很快等等,其中有一个人的说法让我印象深刻,他大概是这么说的:"这是全世界最棒的城市!在纽约,你随便走进一家餐厅,就能看到一台桌子上坐着一群人,他们中有美国人、阿根廷人、印度人、法国人、西班牙人、德国人、日本人等等,这些来自世界不同地方的人聚在一起用同一种语言 -- 英语在讨论工作、生活...,你在世界上的其他城市看不到这样的景象,只有在纽约才能看到如此不可思议的事情!",我想这位路人的此番结论大概也能推而广之到美国西海岸的加州和其他地方。

小费文化

这算是一个美国特有的产物,我个人认为是一个文化糟粕,而且在世界范围内也算是臭名昭著了,我不仅看过中国人骂,还看过日本人骂,看过欧洲人骂,我甚至还看过美国本地人也在骂!小费这种东西就是典型的资本家将劳资矛盾转移给消费者的无耻行为,之所以有小费这种东西是因为美国服务业的从业人员的基本工资很少,所以需要小费这个额外的收入来源才能支撑员工的基本生活消费,但是正常来说,服务业的工作人员的基本工资或者说底薪应该是由雇佣者提供,底薪由政府规定,而行业实际工资水平的高低由市场自动调节,至少不应该由消费者去操心。然而很遗憾,在美国小费文化已经根深蒂固,即便是后来美国的服务业底薪渐渐地有所保证,从业人员依然不愿意放弃小费,也算是人性使然吧。

而且,我感觉美国的小费文化正在往失控的方向走,我在美国的时候,晚上在酒店刷 tiktok 的时候,有刷到一个视频,那视频收集了很多美国本地人在网上对服务业小费越来越高越来越离谱的吐槽,第一个是美国年轻女生吐槽她有一次早上上班前去咖啡厅买咖啡,结账的时候刷卡要给小费,她看了一眼上面的三个小费比例,在美国结账的时候通常会在账单上面给出你愿意付的小费,按你消费的金额的比例算,会有三挡,从低到高,以前通常最低档是 15%/18%,你可以直接选择其中一个比例付小费,当然你也可以选择给任意其他的数额,那个小姐姐当时看到的三档中的最低档是 25%,于是她吐槽这个太离谱了,服务员就只是把咖啡递给她而已,这就要收四分之一的小费?第二个是一个美国大姐,她的遭遇甚至更加离谱,她说她有一次去一个 grocery store 也就是杂货店买东西,她结账的时候看到旁边有自助结账的机器,于是她就直接通过机器结账,刷了信用卡付款之后她居然看到屏幕上弹出一个窗口,请她为此次服务付小费,她说她当时简直想骂人,WTF?我用的是自助结账机器,又没有人给我提供服务,这为什么也要付小费?然后她霸气地就直接把窗口×掉走人。还有其他的例子就不一一说明了。

我个人也很不喜欢这个所谓的小费文化,感觉这东西已经在日常消费中无孔不入,吃饭喝咖啡要给小费,打车要给小费,买东西要给小费,甚至住酒店也要每天给打扫房间的清洁工小费,如蛆附骨如影随形。。。而且要是服务员的服务态度好也就算了,虽然大部分时候服务员的态度确实都还是不错的,但我也遇到过服务员的服务和态度很一般的时候,最后结账的时候也要收个 20% 的小费,就端个盘子上来,全程来回不到十米,而且态度也不好,我心想你 TM 哪来的脸这也敢要 20% 的小费啊?而且小费最早是给服务员的,因为店主付给他们的基本工资很少,所以小费是他们另一个很重要的收入来源,但是我去某些很小的店吃饭,都没有服务员,就是店主自己招待客人,结果最后这 TM 还要小费,合着现在小费这个东西就是个筐,啥都往里装呗。。。直接变成了税可还行。

Homeless 问题

我前面讲过很多在美国路上看到 homeless 的事情,说实话,在美国的街头上行走,碰上 homeless 的概率确实挺高的,通常不需要大惊小怪,但是偶尔会有一些精神状态有问题的,突然发作,也挺瘆人的,尽量离远一点,我前面也讲过两个相关的例子。我当时预订了圣地亚哥在市中心的民宿之后,房东还和我说附近可能有 homeless,一般不会有什么事,但要是你实在觉得很不舒服或者对你影响很大,可以打电话给他,他找人过去驱赶一下。关于美国为什么会有这么多 homeless,原因很复杂,有的是因为吸毒毁了生活,有的是因为精神疾病,有的是因为失业了所以流落街头,还有很多人是因为破产,破产的原因也多种多样,有的因为创业破产、有的因为赌博破产,甚至有不少是因为离婚要付给前妻一大笔赡养费而破产,总之大多数是被迫成为 homeless 的,好像也有极少部分是主动选择成为 homeless 的,这我就不懂了。

因为吸毒、赌博而成为 homeless 的这些自作孽的例子就不说了,有一部分 homeless 是因为生病了,特别是精神疾病,我曾经在 Quora 上看过有一个答主讲述他哥哥成为流浪汉的事情,应该是几年前的回答了,我记得那个答主说他哥哥当时五十多岁快六十了,然后精神出了问题但是他一直觉得自己没病,所以拒绝去看医生,然后就天天住在自己的房车里到处去流浪,答主和他的另一个兄弟给他付油钱和买食物,还有买其他一些杂物,他拒绝搬到两个兄弟的家里住,还说他会去找一份工作,城里的流浪汉收容所只会让那些有工作但是没地方住的人进去,所以他也去不了,而且如果是有精神疾病要先接受药物治疗。

现在来讲讲因为破产而成为 homeless 的情况,美国是一个消费主义极度发达的国度,而个人一不小心就可能导致信用破产,前面说过美国的个人信用是非常重要的,一旦信用破产,随之而来的可能就是变成 homeless,因为你在个人信用记录破产情况下基本不可能找到工作,而没有工作就没有收入来源,当仅存的积蓄花完之后就只能流落街头;有一种导致信用破产的情况是学生贷款,因为美国的教育产业是市场化的,所以高中、大学的学费很贵,特别是大学,很多学生在上大学的时候会通过学生贷款来支付学费,参加工作之后需要从自己的工资中取出一部分来还学贷,一旦失业就会断贷,然后导致信用破产,美国现在约有两万亿美元的学生贷款,这是一个天文数字,而且根据美国教育部公布的数据,学生毕业之后三年内学贷的断供率还不低,在 10% 左右,我记得三个月前拜登政府宣布免除 80 万学生总额 近 400 亿美元的学贷的新闻还挺火热的;还有一种破产是离婚破产,美国以前有不少州是有离婚丈夫须终身付高额赡养费给前妻的法律的,即便是无过失离婚,现在好像是改成了离婚之后付赡养费直到前妻再婚,这好像也是不少美国人破产的原因。另外,目前有一种观点是人类现行的所有经济制度都有结构性缺陷,导致全世界会周期性反复地发生经济危机,而每次全球性、区域性的经济危机都会导致大量的公司和个人破产,比如上世纪 90 年代初日本经济泡沫的破裂以及 1997 年的亚洲金融风暴,直接导致了日本的失落的三十年;而 2007-2008 年的环球金融危机则更是对全球经济造成了在非世界战争时期前所未有的衰退,美国更是在这场危机中首当其冲,此次危机更是成为了后来的占领华尔街运动的的导火索,运动后期越来越多因为经济危机失业的人群加入其中,最后更是导致了暴力冲突。

关于欧美真实的 homeless 的情况,有兴趣的话可以去油管上的一个频道看看,叫 Invisible People,上面有很多对 homeless 的采访,其实蛮心酸的,是我在美国的时候在 Quora 上搜为什么美国那么多 homeless 的时候看到的,我晚上在酒店的时候会看看。其中观看次数最多的一个采访视频,是一个刚满 18 岁就变成 homeless 的男生,他被他的母亲赶出家门让其自生自灭,对他说你成年之后就要自力更生了,采访那天刚好是他的 18 岁生日,他说这是他成为 homeless 的第一天,他那时候在盐湖城,正在找一个地方过夜,他说他当前最大的目标就是能找到办法回到加州,然后完成他的高中学业... 这个节目通常会在最后问被采访者如果给他三个愿望,他/她会许什么愿,这个 18 岁的少年说第一他希望他父亲还在世,第二希望他能再见到他的姐姐妹妹们,第三希望他能回家,最后主持人说话的声音都哽咽了;还有一个在洛杉矶的 homeless,他和妻子在一起,一开始他妻子家里打电话邀请他们过来一起住,但是当他们到了之后却一直联系不上妻子的家里,电话一直没人接,于是他们就被流落街头了,她老婆不得不去卖淫赚钱后来还意外怀孕了,他们在街上经常被偷东西,还经常被黑帮"收税",他被黑帮打过十几次,后来他老婆还得了脑癌导致癫痫,采访者问他如果给他三个愿望它会许什么愿,他想了很久,他说这很难,他很久没有许愿祈求什么了,因为他每天都在忙着生存下去,最后他说第一他希望他老婆的身体能好起来,第二他希望他能有一个家庭,前面他提到如果他有家庭可能就不会沦落至此了,我猜测他应该是孤儿,他说他想不到第三个愿要许什么,留给有需要的别人吧;还有一个老人在丹佛,声称是空军退役老兵,身患皮肤癌、痛风、风湿性关节炎、肺病、哮喘,脑子里有过两个弹片,虽然已经取出来了但他还是经常癫痫发作所以驾照被吊销了,每个月只有 230 美元的补助,他说昨晚他的所有东西都被人偷了,背包、衣服、鞋子所有东西,这种事每个月都会发生一次,他说他这辈子养育了三个继女、三个继子,三个亲生儿子 (不太确定,因为他后面又说了三个继子,不确定是纠正前面的话还是并列的),以及一个胖前妻,但是现在没有人赡养他,他的三个愿望是做自己、有一个房子可以住、还有一个浴室可以洗澡。他很乐观,他说:"我愿意接受现在的自己,尽管做现在的自己非常不容易,上帝说过会拯救世人,希望他能说到做到。"

城市里的 homeless 泛滥确实影响到了很多人的生活,很多人不喜欢、厌恶甚至是憎恨 homeless,但是确实有很多人不是自愿成为 homeless 的,我想我真正想说的是:普通人过好自己的生活,如果有条件的话可以做一些举手之劳的事帮助别人,不要圣母心泛滥,但是倒也不必那么急切地投入到社会达尔文主义的怀抱。

工作, 消费, 房价

湾区那边有很多科技公司,许多从世界各地过去的人在那边从事互联网或者其他科技领域的行业,有很多华人和印度人在各大互联网公司里,Google、FaceBook (现在叫 Meta)、Amazon、Airbnb 等公司里有很多华人工程师,我记得以前 Airbnb 里工程师有将近一半是华人,现在不清楚还有没有这么多。所以,如果是计算机行业的人,在湾区的就业机会还是很多的,而且硅谷作为全球的科技创新中心,如果是在那边工作还可以做很多前沿的科技方向,除了那些大公司,还有很多小而美的前沿科技公司,当然,前几年的全球经济衰退导致的大裁员,在硅谷那边好像也不少,就业环境估计现在也没有以前那么好了,但毕竟还是全球的科技创新中心,机会还是很多的,而且美国政府也是很欢迎全世界的科技人才前往美国的,当然,前提是人才。

我个人感觉那边的消费还是挺高的,前面也说过美国的消费主义盛行,物价也高,当然房价也很高,当时在那边看了一眼了周围的房价,着实很高,加州的房价在全美也算是名列前茅了,当然,全世界所有经济发达的地区房价就没有也不可能是便宜的;而且加州的税也很重,个税:联邦税和州税、销售税、房产税等,也算是美国税收最重的州之一了。加州具体的个人收入、物价、房价和税收等信息,网上一大堆,感兴趣的可以自行搜索。

以上就是我对美国的一些所见所闻所思所感,需要说明的是这些东西仅仅是我个人的经验和看法,以及部分是从一些网上的资料得来的,可能是片面的或者主观的,未必可以代表真正的、客观的情况,敬请谅解。

全文完,感谢阅读!