左耳朵耗子
2023-05-21

陈皓,网名左耳朵耗子,5 月 13 日突发心梗离世。我和陈皓没有见过,虽然加了微信,但一句话也没说。我在推特上关注了他,时不时能看到他发的推。能看出他很有洞察力,而且心直口快,这样的性格也容易得罪人。所以当人们为他的死表达悲痛时,我感到了欣慰,为众人抱薪者值得被缅怀。

陈皓的微信昵称就是左耳朵,他在极客时间上开了一个专栏叫「左耳听风」,我在极客时间上的 ID 叫「右耳漏风」,是在以我的方式向他致敬。我自知技术比陈皓差太远,但又想和他有点关联,想起来以前老师讽刺学生常说左耳朵进右耳多出,我干脆就来个右耳漏风。

我右耳朵的听力确实要比左耳差一点。在吵闹环境里打手机,我右耳朵听不清时就换到左耳朵,声音一下就变清晰。时间久了,我就养成了左耳朵听电话的习惯。可能我的右耳朵真的漏风,所以叫这个名字我一点也不心虚,实至名归。

程序员们为了纪念陈皓,在 GitHub 上建了一个项目记录您对左耳朵耗子(陈皓)的点滴回忆。我在 GitHub 上 star 过的项目全都进收藏夹吃灰了,但这个项目除外,每每看完都引发一些感悟。

我从《左耳朵耗子的话》这篇文章里摘录了几段。第一段是陈皓对自己的创业项目 MegaEase 选择用 Go 语言开发的原因。

首先,做流量网关,其实国内现在已经有一些东西了,一种是偏应用,一种是偏控制面。偏控制面的像 Nginx 或者 HAProxy;偏应用的像 Envoy,还有 Java 的 Spring Cloud 或者 Zuul 。但 Java 那些东西的性能又很糟糕,性能好的就在 C 和 C++ 这边,但我觉得语言门槛太高了,一般人是玩不了的。

因为流量调度网关,一定是会有业务逻辑侵入的。有业务逻辑侵入的话,就必然需要大家可以定制、可以在上层进行开发扩展。所以我们选择技术,首先你要有很高的扩展性,而且技术门槛要低。

如果用 C 语言,我相信能够参与贡献 Commit 的人少之又少,Node.js、PHP、Java、Python 都属于门槛比较低的,Go 也是,但是我们又需要兼顾性能。看了一圈所有,只有 Go 语言和 Rust 语言。

但是你要说为什么没有选 Rust 语言?首先 2016 年 Rust 还不怎么样,这几年非常火我们也在用。我想告诉大家 Rust 语言是一个很好的语言,但是我觉得它的门槛也是非常非常高的,甚至会比 C 和 C++ 还要高,真的。

所以我们觉得,要让大家可以去贡献、去扩展,语言门槛放在这里就会导致整个社区变凉,为什么像 PHP 的社区,像 Java 的社区、 Python 社区、Node.js 这种社区很多很多?就是因为门槛低参与人多,所以基于这些方面的考虑,我们选择了 Go 语言,这是第一个因素。

然后第二个因素,为什么我们会选择 Go 语言,而不是其他的?

因为我觉得一个流行技术必须要满足这么几个条件。第一个门槛低。除了门槛低以外还需要有大公司在后面撑着,没有大公司用的话不行,因为大公司用了以后就会在上面贡献更多的特性。

而且大公司用得越多,就一定会有标准化的东西出来,比如 Java、C 和 C++,很多公司都在用,就有一个标准化组织。第三个,社区很重要,必须要有社区。第四个它必须要有杀手级应用。杀手级应用的意思就是它必须要有个成功案例,没有成功案例不行。

所以这 4 个因素:门槛低、有大公司撑着、好的社区,还有杀手级应用,决定这个技术会不会成功,会不会爆。

PHP 也有大公司用,比如 Facebook,社区也很好,门槛也低,又有杀手级应用 LAMP,所以 PHP 能爆火。虽然我不是很喜欢这个语言,我非常非常不喜欢。像 Java 语言也是全部都有,门槛也低,大公司不断地投入。Go 语言其实也是这样。

但 Rust 目前来说还没看到。Rust 门槛比较高,社区并不活跃。大公司只有 AWS 说要用。杀手级应用才刚刚开始有苗头,一个是 WebAssembly 就是 Web 上的汇编,一个是它逐步进入内核了。所以现在, Rust 有一点点起势的苗头。但是它有一个非常致命的缺点,就是门槛太高。

我很早就总结过:Java 适合做业务层,Go 适合做中间件、Rust 适合做系统层。很多公司业务层也都在用 Go 写,我觉得没啥问题。是这样,业务层 Go 可以写,你拿 Node.js 也能写业务层,我以前都是拿 C 语言写业务层,所以你拿什么东西写都可以。

Go 语言写业务层,我觉得天然有一个好处就是 Go 没有太多乱七八糟的东西,它特别适合写面条代码。所谓的面条代码就是这个业务流程长啥样就怎么写,不需要任何抽象,这些代码也懒得重用,我直接写就好。国内的很多 Go 语言开发者,我觉得可能有 80% 都是从 PHP 转过来的,因为太适合写面条代码了。

但是,当你的架构变得越来越大、越来越复杂,里面一定要有一个框架的。比如 MVC 框架。**为什么你发现 Java 代码写不烂,因为它有框架保证。**但 Go 语言代码我看烂的就有一大堆。另外,服务越来越多,你开始要运维,做配置中心、服务治理那些中间件,但这方面,你会发现 Go 语言可用的不是很多,而 Java 那边成熟的一大堆。

所以,早期的项目,你用什么语言都行。假如说我们把场景分成 0 到 1、1 到 10、10 到 100,我今天跟大家说, 0 到 1 你爱用什么语言用什么语言,随便你用,Rust、Swift、Kotlin 随便什么,C 语言都行,你要用汇编写业务代码,我觉得都没问题。

但是 1 到 10,你开始要尊重两个东西。第一个你的开发速度要快,第二个你的稳定性、性能这些要保证因为要扩展用户,这个时候,你就必须得选一些工业化的语言。像 PHP 可能就有点受不了,Go 语言或者 Java、Ruby、Python 这些都还可以,因为生产力各方面都还可以。但是如果 10-100 的话,哎呦,我估摸着只剩 Java。所以,关键是你公司在哪个阶段。

有时候我们上网一看,哇,大量都是 Java 不行、Java 反人类、Java 太啰嗦,但是你可以看看,说的那些人他们可能都在小公司哈哈哈,因为他的业务场景的确不需要用 Java,他说的是对的。或者是那些独立开发者,都是从 0 到 1,他爱用啥就用啥,自己舒服就好。

但是你看那些大公司,银行、电商、电信,只要是这种有交易型的用户公司,包括哔哩哔哩所谓的自己用 Go,但是他做电商,你看他用啥,还是用 Java。Java,跑不掉的这个事情。

下面这段是他在创业中的两点反思。

创业几年的反思

我创业也是很坎坷崎岖的。看似很好的一条路,但是一到创业的过程中,就发生了像中美贸易、疫情、资本趋于谨慎等等各种问题,互联网一片惨淡。现在也还有很多各种问题,所以其实都还是挺不容易的。

但是我坚持“条件受限是好事”,让我可以去想一些更重要的东西。比如很多公司可能想怎么样拿投资,现在我在想的是,怎么样能让我们的公司不拿投资,自己成为一个能盈利的公司,能成为一个真正的公司,不是被人包养需要寄养的一个公司。这些是我每天在思考的。

其实大家也可以去思考,**这个世界其实并不完美,你会遇到很多很多让你很无助的事情,**我也经历过工资发不出来,自己掏钱给团队发工资的时候,我一晚上睡不着觉,也经历过。

但是我想说的就是,所有的路都是可以走的,不用担心。但不是纯靠坚持,关键是你一定要去想方法,想更好的、更优的解,这个事很关键,千万不要使蛮力,没有太大意义。这是我创业学会的第一个道理。方法会比努力更重要,所以我们不加班,如果团队在加班,我觉得我们肯定方法不对。

我创业学会的第二个道理是关注你的重点,不追小兔子。能让你分心的事情太多太多了,你不知道你前面那座城池有多高。因为你从来没见过,一路上都会有很多很多的小兔子来找你。你一看,这个兔子好看,我来追一下,那边又有一只蝴蝶,你就忘了你未来要去哪。

这两个东西我觉得挺重要,这也是我创业这几年来受到最大的两个教训。我觉得跟我们的人生也是很相通的。

最后这段,是陈皓谈大龄程序员和所谓的 35 岁危机。

35 岁危机

我在一些群里,40 岁程序员的群,然后还有些 35 岁以上程序员的群。我觉得那些群我连一天都不想看,太无聊了,里面就是各种八卦,我不知道为什么这些中年人天天都喜欢聊八卦,今天看见这个社会热点又怎么样,那个热点又怎么样。

我觉得是这样的,不要觉得 35 岁、40 岁会是一个坎。我今天也在写代码,有句话是这么说的:“人不是因为变老了才没有热情,而是因为没有热情才会变老。

有的人说我老了,我学不动了。不是的,因为你学不动,你才变老了;不是你老了,你才学不动。这个世界上有大量这样本末倒置的因果关系的逻辑,如果你学得动,或者你还对这个事情充满憧憬,有想法,愿意去奋斗的话,70 岁你都不老。

像我今天这个样子,我也不觉得我老。我觉得很多年轻人可能还不如我,他们在 20 多岁、30 多岁,可能就已经放弃了自己的人生,我今天还没有放弃。所以, 35 也好, 40 也好,不用去想这个数字的事。

左耳朵耗子活出了我理想中的样子,也说了很多我心里想说的话,我,右耳漏风,愿以他为榜样。不过我得健健康康的,可不敢熬夜了。

END