编辑|冬梅
策划 | Tina
编者按:
比学软件更重要的,是理解软件行业发展趋势。放眼世界,软件和科技公司的影响力愈发显著,IT 行业已成为全球经济增长的重要引擎。去年年中,有报道称,美国七大科技公司创下了新的里程碑,总市值历史上首次突破 15 万亿美元,占美国 GDP 一半。与此同时,中国软件产业尽管还存在差距但也发展迅速,因此我们也要清醒地认识到,要想在激烈的全球竞争中脱颖而出,就必须不断学习,成为具有国际竞争力的软件人才。
此外,云原生是过去十年最重要的计算范式,而大模型则推动着云计算等基础架构以及工具层面的变革。云原生和大模型的快速发展,对软件工程师提出了更高的要求。作为软件工程师,我们不仅需要掌握传统的编程技能,还需要不断学习新的技术和工具,以适应快速变化的技术环境。
在这样的背景下,InfoQ 策划了这场圆桌对话,分享嘉宾视角下对 AI 时代下软件行业发展趋势及开发者职业成长路径的见解和心得,帮助开发者群体掌握未来技术发展趋势,树立个人技术竞争力,从而助力每一位软件工程师在未来的职业道路上走得更远、更稳。
嘉宾
黄东旭,PingCAP 联合创始人兼 CTO;
李令辉,云原生数据库 ClapDB 创始人,前滴滴出行首席架构师;
马驰,北欧 FinTech 平台工程师,瑞典马工(主持人)
马驰:数据库被誉为计算机领域的明珠,然而一个值得深思的问题是,为何中国厂商在技术软件领域尚未具备足够的国际竞争力。美国的 Oracle、PostgreSQL,瑞典的 MySQL 等数据库产品都具有强大的国际竞争力。反观国内,一些程序员被质疑能力不足,认为他们只会按照产品经理的要求编写业务代码,然而正是这些程序员打造出了具有国际影响力的小红书、TikTok、支付宝、微信等应用。作为技术精英,你们却在国际舞台上缺乏竞争力,这该如何解释呢?
黄东旭:我们确实是在做国际市场相关的工作。先说结论,再探讨原因。从 PingCAP 过去 30 年做国际化的观察来看,中国技术软件厂商是有竞争力的。在与海外竞争对手正面交锋时,我发现中国出海的这一波厂商,尤其是我认识的很多朋友,技术实力并不逊色。比如在数据库或开源数据库领域,像 Redis 刚出来时,只有一万多行代码,规模很小,难道中国人就写不出来吗?显然不是。再看 MySQL,其代码其实有些混乱,毕竟它是一个发展了二三十年的项目。从软件工程师水平来看,中国走在最前列的软件开发者他们自身技术实力是过硬的,他们开发的产品在实际应用场景中也具有很强的竞争力。然而,体感上会觉得美国有 Oracle、PostgreSQL、MySQL 等,而中国产品的声量和影响力似乎没那么大。这其实主要在于如何让别人知道中国产品产生的影响力。一方面,中国的产品已经在全球市场产生重要影响,比如 PingCAP 的 TiDB,它支持了 LBMB Pinterest 等海外应用,还支撑了日本的 PayPay,这是日本国民线上支付的重要应用,背后的数据存储全靠 TiDB,几百台服务器的规模相当庞大。
从宏观或客观角度看,过去中国技术软件开发者与世界交流脱节,中国有自己的生态系统,包括开源生态。像 PingCAP 和 TiDB 在国内已发展 10 年,很多人知晓并使用,但刚出海时发现,中国的开源社区与海外是割裂的。海外社区对中国的一些平台和内容并不了解。PingCAP 开始认真在海外做社区建设、品牌和知名度提升,也只是近两年的事。而像 MySQL 有 20 年历史,Oracle 有 40 年历史,这是一个客观的实践差距。另一方面,中国基础软件开发者参与国际社区的方式方法还在摸索。PingCAP 算是做得不错的,10 年前就开始在 GitHub 上开源,语言也用英文,但即便如此,这两年在与海外打交道过程中也踩了无数坑。
总结一下,第一,从产品硬核能力上,我们不用妄自菲薄,中国技术软件顶级人才与美国差不多;第二,我们现在刚出去,处于建立品牌认知阶段,还需要时间;第三,我们做事的方法有些不太对,也在不断摸索。
李令辉:马工刚才的问题里有你一贯的风格,就是偷换概念。比如把基础软件公司和小红书、TikTok、抖音去对比,这就好比不能拿美国的 ARM 和苹果对比。ARM 虽然是更基础的软件公司,但它的市值跟苹果没法比,苹果每天跌掉的市值可能都比 ARM 高。这说明越靠近消费市场、越靠近最终用户的产品,声浪越大、市值越高、收入越高。但这并不意味着底层的技术提供商和供应商不重要。苹果公司几乎全世界人都知道,但除了从业者,知道 ARM 的人并不多。
再来说说中美基础软件开发者对比这个话题。其实创业做数据库之前,我不算基础软件开发者,更像是使用者,也曾是 PingCAP 的客户。严格来说,这并非我们的问题,而是行业发展规律使然。我认为之前整个行业没有真正意义上的技术性公司。我曾在社交媒体上吐槽,中国之前没有所谓的科技公司,只是利用科技做传统行业的公司,如利用科技做电商、媒体、聊天等。在没有科技时,用传统方式不也能进行吗?所以科技是造福其他行业的,但我们没有真正意义上的自己的科技行业。严格来说,2010 年以后,随着 GDP 增长,中国大公司有钱投入,才有了真正的计算科技公司,像华为,早期也是通信领域的设备公司。
关于影响力的问题,我们不太擅长掌握规范、话语权,我觉得责任主要在教育。中国教育让学生都在做题,做题的人怎么去研发新试卷呢?Oracle 数据库诞生后,创造了数据库行业,这张卷子是谁出的?亚马逊做云之前连云都没有,这张卷子又是谁给的?如果把所有优秀的人才在 20 岁前都困在屋里做卷子,以此筛选人才,筛选出来的人将来却要开创,这不是开玩笑吗?这就相当于培养赛跑运动员去游泳,通过跑步选拔了你,但家里却没有水。现在你长大了要去游泳,这本来就是缘木求鱼。我觉得从业者要思考这个问题,更关键的是整个行业的上下游,上游是生产人才的学校,下游是招聘方和消费者,我们是中间环节,学校培养人才,我们生产商品再卖出去,形成闭环。美国大学靠校友捐款培养人才。
总结一下,如果在别人出好的试题和赛道上,中国基础软件的竞争力和美国差不多。但如果要开辟新赛道,或重塑客户认知、塑造新标准,中国整体差距还较大。
黄东旭:我完全认同这个结论,虽然可能不是全部原因,但至少这是一个从宏观上看很重要的能力缺陷。就拿 Databricks 来说,大家都知道它最近融了一大笔钱。回顾其历史,在大概三年前甚至更早一点的时候,Databricks 推出了一款新的云端计算引擎叫 Photon,这个引擎并未开源。当时它原有的产品线还是基于 Spark 的批量处理云平台。但有了 Photon 这个新东西后,Databricks 做的第一件事并不是急着去卖,而是先定义了一个市场,叫做 Delta Lake,宣称自己的产品就是 Delta Lake,说以前的数据仓库已经过时了,它的 Delta Lake 最厉害。这么一宣传,赛道里就成了它一家独大,用户一试,确实不错。从技术层面剖析,它用的还是那些老技术,如存算分离、存储引擎优化等。我觉得中国在性能、数据量等方面很擅长“内卷”,但在像 Databricks 这样定义赛道方面,确实与美国差距较大。
马驰:如果我现在是一名程序员,我能出色地完成任务,做出很好的优化,领导交代的工作也都完成得很好。但你们说这还不够,因为不能定义标准。那对于一个已经年年拿 A 的程序员来说,下一步该做什么呢?从你们的个人经历来看,在这方面有没有突破呢?还是说你们也受限于教育、文化或惯性,难以突破呢?
李令辉: 首先,我觉得这个问题还是得让教育来背锅,但咱们就不深入展开了,大家只要记住是教育的问题就好。我们太喜欢做题了,我有个朋友曾跟我说他孩子数学考试分数不错,但数学本质上不是算数比赛,而是抽象概念的比赛。真正的数学家一辈子没算过几个数,他们主要是推导公式。
其次,从我个人的创业感受以及在大公司工作的经历来看,我发现创业过程中我的抽象思维不断提高,这是一个被动的过程。核心原因是我手里的研发资源变少了,抽象能力就提高了。当我手下有 200 个程序员时,我就不想费劲去抽象,直接把子功能、子模块拆分给大家做就行。但当我发现手里只有两个人时,我就会想着要么写个代码生成器,要么写个编译器。所以我觉得很多时候创新是被逼出来的,我真的是这么觉得的。我自己创业时,公司研发人员很少,对外却宣称有百万大军,其实也就不到 10 个人。我觉得我们的代码其实就是个代码生成器,先生成一堆代码,再生成一堆代码,原因并非后来发现这样做有很多好处,起初完全是因为人手不够。如果我像华为那样有上万开发人员,我干嘛费劲写代码生成器呢,直接给每人分配一个 SQL 去优化就行。
我觉得美国人这么做也有一个原因是他们人力成本太高。这件事很可能在我们的人均 GDP 越来越高时发生变化,当大家发现与其雇 10 个人,不如让一个人闲下来,冷静下来,抽象一下更划算时,情况就会改变。有个很好的比喻,他说 只要看中国什么时候洗碗机普及了,就说明人均 GDP 上去了,因为总有人算账,觉得让老婆洗碗比用洗碗机便宜。只有当 洗碗机比人工洗碗更划算时,我们才会更愿意使用机器。想想大公司里那些年薪五六十万、七八十万的程序员,他们在做一些非常细节、具体的小优化,比如一个页面分给三个人,这三个人写了 10 年,这是真的。有什么必要把这三个才华横溢的年轻人限制在一个页面上呢?还是因为页面优化和人力成本差不多,差不多 1000 个页面,就分配 500 个程序员,每人两个;或者两个人一个团队,分四个页面。我觉得核心还是行业从业者应该提高要求,让工作更有挑战性,有更多的事情可做,这是一种被动提高的方法,主动提高我觉得挺难的。
黄东旭: 我每年都会回头看团队的效率,特别关注这个指标,即多少人能干出多少事。对我们这样的公司来说,大部分成本是人力成本,而人力成本里绝大多数是程序员。所以一个优秀的程序员,他产生的影响一定比很多人要大。我在做事时,倾向于不轻易说“给你 10 个人去做”。因为一旦给团队说 10 个人去做,团队就不思考了。加人是最简单的动作。有时为了防止大家陷入思考惰性,我会故意提出一些看似疯狂的要求,比如让系统性能提升 100 倍,成本下降 1000 倍。如果目标只是让性能提升 10%,大家就不会去思考和创新,因为 10% 的小修小补很容易实现。但如果目标是优化 1000 倍,虽然你自己心里得先有可行性验证,但不能直接告诉团队答案,因为思考过程也是达成共识的过程。总之,优 秀的程序员通过自己的思考,产生的影响是非线性的,一定要用好这种能力。
从刚才聊的宏观层面,如思考方式、抽象能力,单从程序员个人发展角度看,如何锻炼这些能力呢?我的经验是,程序员不要自己乱思考。世界上很多好东西已经发明出来了,比如 Unix 等,人家已经做出来了,背后的思考成果和过程都以博客、文章、访谈等形式存在。我的建议是,动手前先多看经典的东西,多思考,写代码并非关键动作。我会花很多时间看一些老东西,如 Unix、Plan9 等漂亮的设计,这个过程也是学习过程,思考人家为什么要这么做。
1
每天时间被榨干,国内开发者该如何自我提升?
马驰:很多创新都是在资源受限的情况下被迫发生的。以前我在国内华为做程序员,大家都了解华为的工作文化。后来跳槽到北欧公司,对比非常明显。在北欧,不可能像华为那样投入大量人力,比如给你 100 个人或 50 个专家,这种情况是没有的。北欧公司在做同样的事情时,更多地借助外部工具,大量使用工具来提高单个程序员的效率,程序员做的无用功也更少,所以总体效率并不比国内差,甚至从长期来看速度可能会更快一些,因为浪费率非常低。举个直观的例子,在国内我们也会用代码检查工具,工具检查后会给出一个 Excel 表,程序员就得拿着这个表一行一行对照。这项工作可能占工作量的 80%,真正编程的时间很少,大部分时间都花在了一些莫名其妙的事情上。但当我进入北欧公司后,发现那里的工具非常尊重用户时间,不会让用户在 Excel 里给 1000 行打勾,而是尽量提高信噪比。这导致了一个现象,同样是互联网程序员或基础软件的使用者、开发者,北欧同行的生活质量比中国同行要高很多。但从技能上来说,我不觉得北欧程序员就比中国程序员强,甚至我觉得中国天才程序员的比例可能会更高一些。
现在来探讨一个具体问题。对于刚毕业的年轻人,如果他们也想成为像你们一样的顶尖程序员,能从你们身上学到什么呢?他们肯定无法直接复制你们的经验,那么他们应该从哪里学习技术?看经典固然重要,但能在微信公众号上看到经典内容吗?另外,如果他们想去做市场营销,去改变用户的认知,又该如何培养这种能力呢?
黄东旭: 微信公众号上肯定无法让你看到真正的经典,那上面的内容大多很表面。因为这世界上所有不花努力、茶余饭后花 10 分钟就能获得的东西,一定不是好东西,也不会让你有实质性的收获。比如看微信公众号,你能因此变成好的乐器演奏者或钢琴家吗?显然不能。所以,我觉得有两点很重要。第一,要去找到经典,从历史入手,追溯到最根源、最接近经典源头的地方,看第一手资料。不一定非要看具体代码,我以前就犯过这个错误,初中、高中时对 Linux 很感兴趣,一上来就看源码,但感觉没什么用,当时虽然看起来很努力,最后却没什么收获,看过就忘了。反而是去看一些访谈,了解设计思想、作者背后设计系统的哲学,先理解这些,再深入细节,这才是看经典的好方式。
第二,即使你理解了系统为何精妙、设计为何出色、经典为何是经典,也还不够,关键在于实践。实践部分其实更重要,就像成为钢琴家必须练琴一样。前面听音乐、了解好东西是在培养品位,不能只听低俗音乐,要听经典,培养审美。然后通过练习,让手形成肌肉记忆。我觉得知行合一,把这两者结合起来是比较好的。以前我和很多年轻人交流,他们说平时天天 996,没时间干别的。但我认为,现在大环境变差了,996 拿的钱也有限,不如趁这时候多提升自己,把心态放平,这也不耽误挣钱。
李令辉:这个问题确实挺难回答的。东旭的观点我完全认同,他对经典的欣赏很有见地,比如 Plan 9 我也看过一些。不过,我们俩是殊途同归。我觉得他像个具有古典浪漫主义的艺术家气质的程序员,会从经典出发去实践。而我恰恰相反,我是个实用主义者,我所学的所有技术都是因为别人付钱让我去做项目。我从不免费学习知识或做项目。所以,我的判断完全不是从美感或品位出发的,在我看来,品位就是用最低的成本赚最多的钱。如果一个设计不能让我后续用最低成本维护、用最少时间达到效果并赚到钱,那它就不是好设计。
我当 CTO 多年,带过很多程序员,他们写的有些代码虽然在形式上看起来很完美,变量名、函数名起得很漂亮,注释位置也很讲究,但从实用角度来看,这些代码可能存在很大问题。因为它们没有从实际运行、维护以及最终效果等角度去考虑,所以在我看来,这样的代码并不好,甚至可以说是糟糕的。毕竟我们的代码最终是要运行的,要编译出来、解释执行,还要方便别人维护。如果只注重表面的美观而忽视了实用性,那么这种所谓的“美”只是主观的,并不符合业界的实际需求和标准。
在我看来,什么是品味?我从 Linus Torvalds 的观点说起。虽然我不太喜欢他的品味,但他讲的有道理。在庞大的 Linux kernel 项目中,保持简洁的代码,不搞魔法,用基础的 C 语言而非高级语言,是完全正确的。这样能有效维持项目的简单直白和可维护性,也不易被黑客埋后门。但这换到其他项目未必适用。很多程序员讲品味时,会引用 Linus Torvalds 的观点,但 Linus Torvalds 也只是在 Linux kernel 中如此。所以,我认为所谓品味,你应该问自己:解决这个问题该用什么方法最优雅?这包括几方面考虑:一是你面临的脑力负担,需不需要了解全貌才能解决;二是你要承担多大风险,作为工程师,首先要考虑的是项目会不会因你的选择而失败;三是收益。
不同项目的品味是不一样的,但核心是,如果你不能量化为什么做这个选择,那这个选择很可能是人云亦云。中国人其实很谦卑,我面试时喜欢问程序员都看什么技术文章和博客。如果他列举超过 3 个,我就不太想要;超过 10 个,我觉得这人肯定有问题。因为中文媒体没什么可读的,有那么多时间看中文媒体,不如去干别的。这也说明他品位差,看不出哪些是垃圾。更可怕的是,他很可能被这些垃圾影响。我最害怕的是,一些程序员在项目讨论中搬出大名词,却不知道这些人的真实水平。你放着权威的教材不看,去看中文博客,如果你要相信权威,就找最权威的。东旭读经典的做法是对的,因为经典被那么多人筛选过,你获得营养的概率远高于垃圾,时间不会白费,比订阅一些不靠谱的博客强多了。
黄东旭:我觉得品位这种事,最终体现在你做选择时。作为一名 CTO 或资深程序员,设计众多系统,每时每刻都在做决定,比如这个接口设计成什么样,或者这个地方要不要抽象成一个模块。品位就是在这些决定中的一种行为准则。你会觉得某个地方需要这么设计接口,虽然当下看不到收益,但相信未来你会感谢自己当初的决定。
有意思的是,现在我回头去看 PingCAP 系统,至少是我参与决策的那些部分,发现大多数正确的决定在当时看起来都非常反直觉。如果当时按照那个环境下所谓的大 V 或主流设计方案去做,最后回头看你会庆幸自己没听那些微信公众号或主流人士的说法。尤其是当你的组织变大后,作为技术掌舵人或决策者,你做出反直觉的决定,就意味着底下的人会问为什么要这么做,眼前的利益明明应该这么做,为什么不做呢?所以我自己在做重大决定时,第一个倾向是能不做就不做,能晚点做就晚点做,保持系统的简洁,也就是所谓的品味。作为古典程序员流派,我更倾向于以简单为美。
2
“把问题解决好,你就厉害了”
马驰:作为仍在一线写代码或看代码的 CTO,我想问一个比较尖锐的问题。国内很多高级技术人才,如高 P、大 V 或技术专家,他们早已不再从事一线工作,主要转向管理岗位,但仍以技术专家的身份去指导年轻人。我想知道,你们觉得自己和他们最大的区别在哪里?在对外输出方面,你们有什么不同?如果年轻人想要超越你们,他们应该怎么做呢?
黄东旭: 程序员并没有绝对的优秀与否之分,评价标准并非线性。写代码比我快一秒钟,或者接口设计比我好一点点,都不能简单判定谁更出色。不存在这样一个明确的标准,每个人都可以从他人身上学到东西。如果真有值得学习之处,交流其实更为重要,而不是纠结于谁更优秀。这涉及到自我认知的问题,我建议就是放弃所有这种自我优越感,每个人都能从对方身上学到东西。不用总想着超越,没有什么超越不超越的。若要谈超越,我觉得现在的年轻人学习环境比我们当年学计算机时好太多了,但这也可能带来选择焦虑。当信息过多时,反而容易让人失焦,这或许是一个挑战。
李令辉:我给他的第一个建议是别当程序员了,因为程序员很可能是末代职业,现在加入这个行业并不是一个很好的选择。第二个建议是我自己也可能要转行了,因为随着行业发展,“打不过就加入”似乎成了常态。我认为“超越”这个词用得不好。这是因为我在中国参加技术大会听了几年之后,后来不太愿意参加了。我发现大家讲的内容都类似,比如在前端领域,四场演讲中有三场都是关于 React 的四种场景应用,其中 80% 的内容都是重复的。我觉得大家没必要都讲一样的东西,一场就够了,或者大家事先沟通一下。后来我当了演讲人,发现大家还会对稿,这就更夸张了,难道没发现和别人讲的内容一样吗?既然一样,为什么还要重复说呢?
我觉得程序员这个职业和传统职业最大的不同在于,我们不需要做前人做过的工作。传统工作比如做面,你做不到别人做的面,所以你要不断练习,做到接近那碗面的水平,才能成为好厨师。但程序员不是这样,别人把一个库放到 GitHub 上,你拉下来就能用。TiDB 开源了,你直接用就好了,何必换种语言再写一遍呢?大厂最喜欢做这种事,他们喜欢把别人的东西换种语言再写一遍,然后证明自己更厉害,评完级就把项目扔掉。我觉得这是考核机制的问题,一个人把别人做过的事再做一遍,这没什么了不起,甚至在这个行业是可耻的。如果所有人都重复做一件事,我们就不会有现在的计算机科学和互联网。我们是在前人的肩膀上再走一步,才形成了现在的巨塔。Google 那么厉害,它重写 Nginx 了吗?它做的 GFS、BigTable 等都是以前世界上没有的东西,它需要这些东西。至少一开始,Google 的初心不是为了考试。我觉得不存在超越,你可以做最好的自己。看看世界上需要什么,有什么问题需要解决,把问题解决好,你就厉害了。你不需要和任何人比较,你就是最厉害的。
我们应该庆幸现在的年轻人比我们那时候卷多了。比如东旭他们刚创业时,用 Rust 写的 Raft 应该是市场上的第一家。现在你知道市场上有多少家吗?大厂几乎人均一套 Raft。有什么必要每个年轻人都写一遍?写完了又怎么样?也没有发明 Raft。为什么要把别人的工作再做一遍呢?如果你觉得这就是一种超越,那我觉得你永远超越不了,这就是最大的问题。
在我之前两三年,经济还没这么差的时候,我面试了很多大厂的年轻人,人人都擅长 Raft,每个人都精通。我不知道我们为什么需要这么多精通的人,硅谷可能都没有这么多精通的人。Google 也就一个组在做这个事,Meta 也是一个组在做,而且那些组也不是专门做这个事的,我觉得没必要这样。
3
除了 AI,还有那些技术值得关注
马驰:回到年轻人的视角,如果他们想做一些有趣的东西,肯定需要利用一些新技术和最近的技术进展。在 2025 年,会有哪些新技术能够帮助年轻人更好地解决一些旧问题,提出新的方案呢?我们知道 AI 肯定是其中之一。除了 AI,还有其他一些技术也值得关注,比如 Rust 语言和云原生技术。这些技术能否给年轻人一些探索的方向呢?
黄东旭:我觉得我做很多事情的出发点,不仅仅是公司业务上的探索,更多的是因为有趣,或者是因为我自己需要。比如我现在的助理不够智能,我想用人工智能来整理我的日历、邮件和个人数据。这可能看起来是一个有趣的挑战,或者是我自己需要的东西。在做的过程中,我至少会倾向使用以前没用过的那些技术。
因为公司大了,我现在不需要亲自写代码赚钱了。现在我写的代码大多是框架型的,让团队成员把它重构为可用于生产的东西。虽然角色有所变化,但我写代码的核心依然是尝试使用以前没用过的技术和架构。我学习和做事的方式,不是看技术是否过时或新颖,而是看这个技术本身是否有趣,我能从中学到什么,或者最简单的就是觉得这东西很酷,能让这个周末过得开心。大概就是这样,不要太功利心重。当然,这可能也是作为创始人的一个特权。比如我特别不喜欢管理团队,作为创始人,我可以把这些日常管理事务交给我们的副总裁,我则专注于技术方面。所以还是要相信团队和分工。
马驰:因为东旭现在不需要面试了,但是作为要面试的年轻人,令辉老师有哪些建议给他们呢?
李令辉:在面试这个问题上,我始终秉持着初心,我是一个实用主义程序员。我的第一个建议其实和东旭有点相似,那就是跟着兴趣走。人活几十年,社会上现在也没到饿肚子的地步,尤其在咱们国家,吃饭是不用担心的。所以,在这个前提下,没必要逼着自己做不喜欢的事。我觉得这是最重要的,因为你不喜欢的事,很可能你不擅长,或者这件事本身就有问题。不喜欢一定是有原因的,要么违反你的人性,要么违反你的道德。不做自己不感兴趣的事本身就是一个加分项,你会更有意愿去钻研,不会觉得累。比如我过去三四年,每天工作十四五个小时很常见,虽然赚钱也不多,但核心是开心,因为做了自己感兴趣的事,就不会觉得累。
第二个建议是,我也面试过很多人,曾帮大厂主持过校招。记得有个年轻人过来跟我说:“面试官,我有想法了,可以吗?”我反问他:“你觉得我们公司缺想法吗?我们公司领导们想法多得很,缺的是干活的人。”我觉得年轻人不要太好高骛远,第一件事是把手头的问题解决好。你对技术感兴趣没问题,对什么感兴趣都可以。倒退 30 年,那些获得图灵奖的人做的事也是非主流的。科学这东西谁知道呢?你感兴趣什么就去做什么,任何感兴趣的事都值得投入时间。人生就是用来浪费的,花在自己感兴趣的事上就结束了,没关系。至于哪个东西能中彩票,这个不知道,知道了也没用。将来我们知道搬砖特别挣钱,但身体又搬不了。
马驰改变了我的一个观点。我以前觉得抬杠很没意义,虽然我自己以前也爱抬杠,后来反思觉得挺浪费时间,就不怎么抬了。但后来我发现抬杠有两个好处:一是去魅。你不抬杠,容易在我们这个文化体系里把位高权重人的话奉为圭臬,觉得他说什么都是对的。其实你抬抬杠,会发现没人总是对的。在这个过程中,你能了解对方是怎么想的,想想这个想法对不对。如果这个人连思考过程都没有,就是拍脑袋,你不用听了。抬杠的过程有助于去魅,并且强迫自己找证据、了解真相。拍人马屁时你不需要时间,只要付出点尊严就行,但抬杠不一样,你不学习就不能抬杠。敢于抬杠是一个挑战权威的过程,并且强迫自己学习。对很多想从事真正有价值事情的人来说,这是有意义的。无论是创业还是做科研,其实都是挑战别人的共识。没有跟一万个人抬杠的勇气和决心,很难做成事。无论做什么创新的事,都是这样。
我记得当时有很多自媒体说中国有多少数据库公司、软件公司。他们没去看国外的情况,只是看到国外成功的几个,就觉得国内的不行。我做过竞品调研后才知道世界上有多少奇奇怪怪的数据库。数据库真的很多,只有足够多才能产生好的。如果大家都做一样的,那确实没意义。但如果大家都做不一样的,剩下的那个可能就是好的。所以,年轻人要想办法做和别人不一样的那个人,无论是做人还是做事。别人都做得那么好了,你还有什么希望?你要做点自己感兴趣,觉得还没人好好做的事。
黄东旭:我觉得“去魅”这件事在程序员或软件开发行业里特别重要。老实说,编程本质上是个手艺活。编程语言其实没那么了不起,无非就是那几个关键字。程序这东西,你写多了,自然就熟练了,大家水平也差不多。所以,没必要因为谁说过什么就觉得他特别厉害。这种盲目崇拜权威的做法其实不太好。
我也不是完全反对抬杠这件事。抬杠更多是一种心态。现在我年纪大了,有时候会说“你说得都对”,但心里其实会想一遍抬杠的过程。这种内心的质疑很重要。我回想一下自己,编程能力最强、精力最充沛、头脑最开放的时候大概是在初中和高中。那时候我学编程比较早,正好处于叛逆期,又赶上了开源运动的浪潮。90 年代中后期的开源社区,大家的共同“敌人”是微软,一提到微软大家都嗤之以鼻。大家都觉得自己是民主战士,这种氛围让我在各种论坛里很活跃,也让我对权威有了更多的质疑。但后来我发现,真正重要的不是怼天怼地,而是完成“去魅”之后,能够发自内心地欣赏曾经的“敌人”做得好的地方。比如以前我觉得微软的东西都不好,但后来才发现,微软的 IOCP(输入 / 输出完成端口)在并发和异步处理方面做得非常好。这就是我想说的最后一个建议:当你完成内心的质疑和“去魅”之后,能够真正欣赏对手的优点,这就是一种成功。放弃自己的自我优越感,你会发现无论是朋友还是曾经的“敌人”,都有值得学习的地方。
马驰:我觉得在很多领域,我抬杠都能抬胜,但这并不是因为我经验丰富或能力超强。我觉得有一点特别重要,尤其是在中文圈子——就是要和国际上最先进的技术和社区保持接触。开源社区就是一个很好的例子,它不分国籍,是世界上最前沿的圈子。如果你能融入这个圈子,就能站在巨人的肩膀上。当你再去看一些封闭行业里的所谓权威、老师傅或大 V 时,就会发现他们其实已经和时代脱节了十几年甚至几十年。*
李令辉: 对于年轻人的焦虑问题,我可能不知道具体该做什么,但我清楚不该做什么。首先,不用再花太多时间去研究传统的 CRUD 架构。一方面,云计算的发展导致存算分离,这一趋势将带来巨大变化。我坚信未来业务代码会全部运行在这种分离架构上。大约在 2020 年,我在飞书群里和人争论过这件事,甚至愿意赌上 10 万美金。虽然目前还没完全实现,但我相信这只是时间问题,因为网络发展实在太快了。旧时代的经验可能反而会成为束缚,所以不要再去研究那些所谓的“企业 Java 架构”,那些东西已经过时了。
其次,传统软件工程在未来也会因 AI 的加持而发生重大变化。过去,软件工程是在全人工条件下保证可靠性,但我一直是这套流程的反对者,尤其是反对其中 20%~30% 的教条主义,比如严格的测试覆盖。我觉得有些地方没必要那么严格。虽然我反对这些,但我仍然接受并使用了 70% 以上的内容。我发现,代码工具虽然看起来很方便,比如自动生成代码的功能,但可能会带来很多问题,让我陷入无尽的 bug 排查中。所以,我建议大家谨慎对待这些工具。总之,如果你擅长的都是那些特别边缘的技术或经验,那么在未来一两年内,这些可能就会被完全替代,变得毫无价值。
黄东旭:现在很多工具可以自动生成代码,比如 Cursor,它在局部生成代码可能还算可以,但如果一次性生成几百行代码,我觉得这种做法完全不可靠。现在很多人还在鼓吹 Coding Agent 之类的东西,但在我看来,除非你只是开发一些简单的系统,比如食堂管理系统,或者做一些前端的简单功能,这些工具或许还能用。但如果指望它们能替代一个优秀的工程师,那我觉得还差得很远。
说到学习建议,我还是觉得要回归一些万变不离其宗的基础知识。比如现在大家都在讨论 Serverless、Lambda,包括我们自己也在用,TiDB 的云服务也很快会完全运行在 Lambda 架构上。但你会发现,很多基础的东西其实并没有变。比如,一个系统的性能瓶颈在哪里?吞吐量和延迟受什么影响?在这个快速变化的时代,我对年轻程序员的期望是不要丢掉基本功。举个简单的例子,最近大家都在说云原生对象存储,S3 是新的磁盘。很多年轻人看到这个结论,就觉得 S3 很厉害,是新的存储方式。但如果你真正去设计系统,会发现当 S3 遇到瓶颈时该怎么办?S3 本身也是一个大型的分布式系统,可能需要扩容。你不一定非要自己做一个 S3,但你得了解这个系统是怎么工作的。所以在这个日新月异的时代,我还是要建议大家去看经典的东西,这些才是根本。
马驰:我想再提一个问题,眼界是不是也很重要?我觉得程序员其实不应该仅仅追求成为中国最优秀的人,从一开始就应该立志成为全世界最优秀的人。我们的年轻人应该一开始就应该朝着“我要做到全世界第一”努力,而不是“中国第一”,因为“中国第一”可能只是全世界第 100 个。我也注意到,很多年轻人其实受限于语言、文化和网络接触的限制,在接触世界一流技术时有很多障碍。在这方面,你们有什么具体的建议吗?
黄东旭: 我觉得这个问题其实很明确:如果不会英语,那就去学。现在全球化是大趋势,英语不仅是语言,更是一种思维方式,尤其是技术领域,它已经成为了全球交流的通用语言。如果你想进步,就必须克服语言障碍,融入全球化的交流中。中国年轻开发者确实需要提升眼界。有一个简单的方法就是多看像 Hacker News 这样的国际知名技术社区,并积极参与其中的讨论。
4
国内外开发者之间的认知差异
马驰:东旭,你们公司是一个国际化公司,在美国、新加坡和中国都有开发者。那你们有没有注意到,这些不同文化背景的程序员会有一些比较明显的区别呢?
黄东旭:我觉得不同文化背景的程序员确实存在一些明显区别。比如在美国,我发现程序员们会花更多时间去思考问题,他们在产品设计、宏观规划方面表现得更好,通常会在想清楚之后才动手。这是美国程序员的一个好习惯,美国程序员在产品设计和端到端体验驱动做事方面,比中国程序员做得更好。
而中国的那些优秀的程序员,编码速度非常快,但很多时候会出现返工的情况。比如做到一半发现方向不对,需要推倒重来。这是一个很有意思的现象。最近我跟很多国内外的同事做一对一交流,发现中国同事往往会直接跳到产品缺什么功能、某个地方要怎么改这种很具体的事情上,跳过了思考过程。相比之下,海外的高级工程师在面对同样的事情时,思考顺序是不一样的,他们会从为什么要做这件事、路径是什么、资源如何分配,最后才得出结论。简单来说,思维方式的不同是我体感上最大的区别。
我发现国内很难找到好的技术软件产品经理。之前国内有一些说法“人人都是产品经理”,“人人又都不是产品经理”。这两年我在做基础软件和产品化的工作,发现这是一个非常专业的工作,有很多方法论值得认真对待。但在基础软件或云产品领域,中国确实缺乏优秀的产品经理。
李令辉:我曾经做过一个无代码(No Code)项目,当时我们在招聘产品经理时,找了一些曾在无代码平台上实施过项目的人来面试。当时我有个比喻:这就好比把一个手动挡汽车司机找来开无人驾驶汽车,结果他天天问离合器在哪里,没有离合器怎么开车?这就是问题所在——最终用户并不一定能成为好的产品经理。要成为一名优秀的产品经理,需要非常有悟性的用户,最好是那些对整个产业链上下游都有深入了解的人,或者说是“天才”。毕竟,第一个产品往往是天才创造的,他们才有可能胜任产品经理的角色。
我也特别反感“人人都是产品经理”这种说法。我面试过的产品经理至少有几百人。因为在上次创业时,我主要负责产品和技术,发现很多时候是产品拖了技术的后腿。所以我们在招聘产品经理时,发现了一个现象:在互联网最火的时候,全北京能学会编程的人都去当程序员了,而那些学不会编程的人则都去当产品经理了。
马驰:我观察到在云计算和技术软件领域,很多产品经理有一种“低幼化”的倾向。他们会把一些很严肃的生产力工具,比如数据库、操作系统或对象存储,设计得过于可爱、甚至做一些布偶。这其实是一种非常独特的中国现象。在欧美,这种情况很少见到。我认为这种做法其实显得很不专业。
黄东旭:在美国,一些基础软件创业公司,尤其是近几年的小公司,也出现了类似的“低幼化”倾向,这其实随着“开发者关系”岗位的兴起而逐渐显现。你会发现,这些公司大多处于早期阶段,可能只有三五个人。他们这么做,一方面是为了招聘,因为这个群体大多是年轻人,公司需要打造一个酷炫的形象。但你会发现,这些公司一旦发展到一定规模,有了企业客户,他们的形象就一定会向更严肃的方向转变。举个例子,大家都知道的小强数据库(CockroachDB),其实有不少企业客户因为名字的问题而不喜欢它。当然,他们的 CEO 个性也比较强,但我个人认为,如果面向企业客户或做严肃的基础软件,还是应该更严肃一些。
国内的情况又有所不同。国内所谓的运营人员,我觉得很多时候是因为自己没有想清楚,就去参考海外比较火的开发者关系是怎么做的,然后无脑地照搬过来。因为大公司预算多,老板也愿意花钱,而花钱做事总是最容易的。比如搞个布偶之类的,又是花钱方式中最简单的一种。所以,归根结底还是缺乏思考。如果各个行业都处于互相内卷、不思考的状态,就会卷到一些稀奇古怪的方向上去。
李令辉:发公仔至少有两个好处。首先,它好歹是有用的,毕竟有些事情更没用。其次,中国作为生产大国,是公仔的原产地,公仔的成本比美国便宜多了。在北欧发公仔,成本至少要乘以 20,而在中国发公仔几乎是白送,几乎没有成本。比如阿里和腾讯每年都要做很多公仔,可能根本不用加预算,直接拿其他部门发剩的公仔来发,就能完成一个 KPI,这不挺好的吗?
我觉得运营和产品营销手段不存在唯一正确的方式。很多公司做完之后,别人怎么做我们就怎么做。比如开源,前几个靠开源起家的公司对微软来说也是“大逆不道”,微软当时觉得这些人靠免费倾销,简直不要脸。但实际上,只要有效就行。我倒觉得,只要有效就 OK,关键是无效。所以,无效才是原罪。
我参加过很多大会,也被发过很多公仔,甚至曾经拥有全中国所有互联网公司的公仔。但公仔和公仔也不一样。如果公仔做得好看,放在家里确实会让人天天看到,对公司的印象也会加深。从这个角度看,公仔的成本可能比在分众传媒打广告更划算。我觉得更好的推广是做包。你看程序员们都背什么包?发包就是活广告。我觉得中国公司在运营上确实有一些独到之处,我们重新发明了一些外国人觉得无效,但我们觉得有效的方法。比如“砍一刀”,把美国人都搞晕了。
我觉得核心还是产品本身的问题。如果产品不好,怎么卖都不行。你不能怪营销不行,而是产品本身没做好。但如果产品真的很好,你也不知道是产品好还是营销厉害。比如当年 ChatGPT 刚出来的时候,一用就知道这是好东西,谁用谁知道,甚至有人愿意花钱去淘宝买账号,每个月多交钱去用。如果产品不好,怎么营销都没用。但如果产品很好,怎么卖都能找到办法。现在的问题是,老板给你一个烂产品,你用尽所有办法都卖不动,那该怎么办?最后发现送公仔可能还算便宜的。
我也看到很多中国软件公司的困境,比如花 5 美金买一个 GitHub Star,这种事到底图什么呢?核心还是产品不够好,需求不够刚性,产品不够核心。对我们所有创业者来说,创业者首先是个产品经理,产品到底给谁用,为什么用户要用,这才是关键。
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有