什么是 AI 时代的高效工程师?



想了很久的标题,既不想具体到个人的工作体验,也不想对 AI 做一些空洞的预言。于是引经据典,借用之前写过书评的 Effective Engineer,随便聊一聊这两年对软工行业的思考、经历、和认知。

不成体系,笑骂由人。

我是个对新事物非常谨慎的人,也许在这一点上并不适合做程序员。我算是大模型很早期的体验者,在 ChatGPT 出来之前的一年,我就用 GPT-3 的 API 写过一些基础课的作业(按要求写 SQL 语句之类的)。但总体来说非常浅薄,停留在对新技术猎奇的阶段。2023年3月,某个学历史的朋友来三蕃找我玩,大吹特吹 AI 如何改变了他的工作流程。我嘴上简单质疑了一句大模型目前看不到像广告这么成熟的商业模式,心里暗自得意,觉得这是文科生才会担心的问题,作为谷歌工程师,我的工作目前看很安全。

一周之后,GPT-4发布,llama 开源,微软集成了 copilot,谷歌推出了 bard。

一年之后,我准备跳槽,发现劳工市场和两年前已经发生了剧变。2024年3月,股市创下新高,但招聘市场非常冷淡,面试一份基础后端的工作都会有10年经验被裁的程序员来竞争,谷歌2023年1月那一波被裁员的人到现在还没找到同级别同薪水的工作。简单的观察就是,市场预期很好,但是公司好像不需要招很多人来维持预期。

带着对这位朋友的歉意,我写下这篇文章,认真回答他当年的问题:作为一个工程师,我如何定义“未来有意义的工作”?

AI 是对通用智能的抽象

还在 CMU 读研的时候,我就在很多门课上听到一个共同的概念:抽象 (Abstraction)。操作系统是对计算机架构的抽象,云计算是对分布式资源的抽象,数据库是对文件系统的抽象,TCP/IP 是对信号的抽象…几乎每一节软件系统相关的课,最后的主题都会归结于抽象。上班之后,我对抽象有了更深的理解:MapReduce, Spanner, TensorFlow, 这些谷歌工程师的杰作,就是对各自商业问题的抽象。

简单解释,就是接口的使用者,不需要、更不应该理解接口内部的实现。以我所在的安卓部门来说,应用工程师不需要理解 Android framework 的实现,framework 工程师不需要理解内核或者虚拟机的实现。他们只需要理解本领域内需要解决的问题,就可以使用下游的抽象进行开发。一个出色的软件开发者,就是用好下游的接口,做好自身商业问题的抽象,让上游变成使用其接口的白痴。

那 AI 是什么?大模型是对通用知识的抽象,机器人/自动驾驶是对物理世界的抽象。对工程师来讲,AI 的发展,会进一步封装每一层的抽象,会最小化每一层对其上下游的依赖,甚至于连最后一步 – 用代码把商业问题抽象出来 – 也可以被自然语言所取代。

如果我解释的很难懂,用陆奇老师的话说:大模型让获取智能的成本降低到几乎为零。而且这是一个不可逆转的过程,当人们习惯了谷歌地图的便利,没有人再回去买一张三美金的地图;同样,当人们认为大模型能给出比搜索更可靠更方便的结果,没有人会回到充满广告的搜索引擎。至于广告,他只是一种分蛋糕的把戏,只要蛋糕越做越大,在分蛋糕的问题上,后世子孙比我们更有智慧。

高效工程师是高质量的私有数据

接着抽象的概念往下想,那么工程师和 AI 的关系是什么?用大模型的话说,工程师的专业知识是帮助基础模型做 RAG 的私有数据。用通俗的话说,工程师和其他职业的门槛会越变越模糊,如果说有一个共同点,那就是对某个商业问题要有深刻理解,实现商业问题的编程语言可以是 assembly,也可以是英语。

接下来可能是一个争议很大的观点,那就是我们经常说的 “generalist SWE”(通才软件工程师)会逐渐走进历史。大模型叫 foundation model 不是没有道理的,前面说过,基础模型是对通用知识的抽象,工程师的价值在于提供通用知识之外的见解,比如对某个传统行业的理解,比如基于模型的反馈进而做出的判断,又或者做一个某项专利技术的提供商。在 AI 发展的过程中,工程师会更多地体现团队里其他角色的技能,比如产品、营销、甚至法务,而不会再像今天一样,一个团队需要几个专门写不同模块代码的工程师:前端、后端、云端集成, etc. 注意,我并不是说 AI 能直接生成这些代码,而是在 AI 的帮助下,不同模块之间的“粘合”成本越来越低,低到一个应届毕业生即可胜任,毕竟软工里大部分的知识,都是通用知识。

举个例子吧,10年前(2014年左右)的后端开发还是一个相对混沌的领域,对后端工程师要求很高,每个问题几乎都没有很统一的解决方案。比如 auto-scaling、数据库读写性能优化、防止 DDOS 攻击这些经典问题,那个时候你还需要写代码去自定义或者自己找开源方案。现在这些问题全都被集成到了云厂商的控制面板里,花点钱点点界面上的按钮就行了,甚至像一些不常想到的参数设置,还没等开发者意识到,有的云厂商就在后台帮你自动优化了。这就是一个抽象程度越变越高的问题:做到最后,你只需要懂你的 “business” 就足够了。

最近看课代表和 Howie 徐老师做的一期访谈也是深有感触,就是 90% 的公司和 90% 的员工都在做着无意义的工作。以前的硅谷大厂有一个潜规则,就是公司与其让他们跑到竞争对手那里,不如花点钱招进来,安排一些意义不大的工作。但现在看来这个理论不是那么有说服力了,首先 Elon 裁了 Twitter 的 80%,Google/Meta 都裁了几轮,但并没有对 business 造成任何影响。虽然 Sundar 不可能像 Elon 那么疯狂,但把意义不大的维护工作外包给中国或者印度已经是共识了,班加罗尔的房价都因此涨了不少。

高效的工程师,就是找到那 10% 真正有意义、值得思考、可以产生杠杆级影响力的问题,然后在解决它的过程中不断学习、持续迭代。

成为创业者 (entrepreneur),而不是技师(technician)。

AI 时代是个体户时代

每个人都是开发者,每个开发者都是一支创业团队。

如果观察中国互联网最成功的巨头,阿里和字节做的事情非常类似,就是让每个普通人都能成为创业者。马云说让天下没有难做的生意,张一鸣说让每个人都有表达的平台和观众,本质都是提供一个高度抽象的平台,让创业成本越来越低、研发流程越来越敏捷、生态系统越来越成熟。AI 对智能的抽象,会促使工程师加速研发周期,找到真正有意义的问题,然后调用下游的接口解决它。

那大公司做什么?一是平台和基础设施的搭建,二是和高校一起资助科研,这就是陆奇提到过的 “科学家 + 创业者” 的模式。所以大模型只是前菜,也许个性化才是 AI 的潜在价值。这种价值通过赋予个体前所未有的创造力,甚至可以进一步解构社会强权或集体意志。当然,这是留给社会学家的问题。

一些常见的刻舟求剑思维:其实都是我过去的思维,无意影射别人。

好像 AI 没法做到 XXX,那我去卷这个吧

几乎在过去的一年里,我都处于一种“对抗”的思维中:如何和 AI 竞争?如何去做 AI 没法做到的事情?这其实是一种很典型的东亚思维,就是我要赢、我要不可取代、我要拥有“核心竞争力”,并且这是一场零和游戏:我不仅要赢,我还要踩在别人的脑袋上赢 (成为“人上人”)。其实看过这两年 AI 进展的人都会有感受,就是你没办法竞争,只能合作共赢,因为现在看来 AI 不可能完成的事情,可能做一些微调,甚至改一些提示词就可以完成。Sam 之前讲过 “不要想着去做 GPT-4 目前无法完成的事情,因为在 GPT-5 出现之后,你做的一切工作将变得毫无意义”。作为 AI 的上游,你不应该想着如何和 AI 比较,而是假设 AI 已经足够强大,你能如何利用这个接口?你将如何在这个生态系统里定义你的 business?

留在大公司听安排,反正大公司也不会倒

这确实是一种选择,公司肯定还是需要很多人去维护升级各种抽象的平台,科研方面,无论是大模型还是机器人,都需要科学家去做理论创新。但是我们要想清楚,这究竟是我们主动的选择,还是随波逐流的无奈之举?如果是后者,至少在 Google,根本不需要 18 万人去做平台的抽象工作,因为无论是哪一种抽象的系统,平台使用者都远远多于平台研发者。安卓的 Core OS 团队不到 500 个工程师,就撑起了将近 500 万的安卓应用。

说了这么多技术,用一些宏大的词藻来结尾吧。不只是工程师,其实大多数人忙忙碌碌、终其一生,回头看可能什么都没有留下。但不客气地讲,工程师又总是最傲慢、最脱不下长衫、最沉迷于雕虫小技的职业。有时候从技术中脱离出来,停止 justify 那些由社会或组织强加的意义,问问自己的内心,你解决了什么问题?

马斯克说 Twitter 是个 glorified activist organization(草台班子?),虽然难听,但深以为然。

 

Yuan @ Google MTV
05/16/2024, the last day @ Android