AI Coding 如何重塑软件架构师的工作方式
以 SkyWalking GraalVM Distro 为例,看 AI Coding 如何把一批探索性 PoC 打磨成一条可重复的迁移流水线。
这个项目给我最大的启发,不是 AI 能写多少代码,而是 AI Coding 改变了架构设计的试错成本。当一个想法可以很快做成 PoC、跑起来验证、不行就推翻重来时,架构师就更有机会逼近自己真正想要的设计,而不是过早停在“团队现在做得出来”的折中方案上。
这种变化在成熟开源系统里尤其重要。Apache SkyWalking OAP 长期以来一直是一个功能强大且经过生产验证的可观测性后端,但大型 Java 平台该有的问题它一个不少:运行时字节码生成、重反射初始化、classpath 扫描、基于 SPI 的模块装配,以及动态 DSL 执行——这些机制方便扩展,但做 GraalVM Native Image 时全是障碍。
SkyWalking GraalVM Distro 的出现,源于我们把这个挑战当成一个架构设计问题来处理,而不是一次性的移植工程。目标不仅是让 OAP 能以原生二进制运行,更是把 GraalVM 迁移本身做成一条可重复执行、能够持续跟上上游演进的自动化流水线。
如果你想看完整的技术设计、基准数据和上手方式,请阅读配套文章:SkyWalking GraalVM Distro:设计与基准测试。
从停滞的想法到可运行的系统
这件事其实很多年前就开始了。在这个仓库创建不久之后,yswdqz 曾花了数个月探索迁移方案。真正做下来才发现,这个项目远比 GraalVM 文档里列出的那些单点限制复杂得多,这项工作最终也因此搁置了很多年。
这段停滞很重要。缺少的并不是想法。成熟维护者通常从来不缺想法,真正稀缺的,是把这些想法真正做出来的时间、人力和精力。即使架构师已经看到了几条很有前景的路线,有限的开发资源也会迫使大家更早做出权衡:优先选择实现成本最低的方案,而不是那个更干净、更可复用、更经得起未来变化的方案。
这种情况非常普遍,并不特殊。在开源社区里,很多工作依赖志愿者或有限的企业赞助;在商业产品里,约束的形式不同,但本质仍然一样:路线图承诺、团队规模和交付压力都会让工程资源始终紧张。在这两种环境里,很多好想法被放弃,并不是因为它们错了,而是因为要把它们真正验证清楚、实现完整,成本太高。
还有一个同样重要的约束:架构师通常同时也是非常资深的工程师,而不是一个可以全职扑在实现细节上的人。问题在于个人编码精力有限、时间高度碎片化,同时还要在代码尚未出现之前,不断向其他资深工程师解释自己的设计意图。传统上,这种解释主要通过图、文档和沟通完成。它很慢、信息损失大,而且充满不确定性。我们都体验过“传话游戏”:哪怕是很简单的意思,也很容易被误解,而等误解真正暴露出来时,时间已经过去很多了。
到了 2025 年末,AI Coding 让”同时尝试多条路线”这件事终于变得现实。我们不必再因为实现能力稀缺而过早接受折中,而是可以在多个设计之间来回切换,用代码验证,快速淘汰弱方案,持续迭代,直到架构本身变得足够稳固、足够实用、足够高效。
这种设计自由度至关重要。GraalVM 文档对单个限制讲得很清楚,但成熟 OSS 平台遇到的是一整套彼此牵连的系统性问题。只修补一个动态机制远远不够。要让 native image 真正落地,我们必须把整类运行时行为改造成构建期产物和自动生成的元数据。
在这条路的早期历史中,还有一座非常具体的大山。那时上游 SkyWalking 仍然大量依赖 Groovy 来处理 LAL、MAL 和 Hierarchy 脚本。理论上,这只不过是另一个“不支持运行时动态行为”的例子;但在实践中,Groovy 是整条路径上最大的障碍。它不仅意味着脚本执行,还意味着一整套在 JVM 里极其便利、在 native image 里却极其不友好的动态模型。
为了跨过这道坎,我们围绕 AOT-first 模式重新设计了 OAP 的核心引擎。早期实验必须直接面对 Groovy 时代的运行时行为,并尝试不同的脚本编译方案来绕过去。最终方案走得更远:对齐上游编译器流水线,把动态生成前移到构建期,并引入自动化机制,让这条迁移路径在上游持续演进时依然保持可控。具体来说,就是把 OAL、MAL、LAL 和 Hierarchy 的生成过程变成构建期预编译器的输出,而不是继续保留为启动期的动态行为。
AI Coding 如何改写架构迭代
这次转变的关键,并不只是“写代码更快了”。AI 真正改变的,是想法、原型、验证和重设计之间来回迭代的速度。围绕同一个问题,我们可以很快做出几个可运行的 PoC,迅速淘汰不成立的方向,再把值得保留的抽象慢慢沉淀成一套连贯的迁移系统。
这并不会削弱人的架构价值,反而会放大它。哪些行为应该前移到构建期,哪些地方应该保留可配置性,哪里应该引入 same-FQCN 替换,如何让上游同步保持可控,以及哪些抽象值得不惜代价保留下来,这些判断仍然只能由人来做。不同的是,AI 的速度让我们终于有机会把这些更好的设计真正做出来,而不是过早退回到更简单、也更差的折中方案。
这才是软件架构师工作方式真正发生变化的地方。过去,架构师往往已经知道更干净的方向在哪里,但有限的工程产能会逼着那个愿景退回到一个更便宜的妥协方案。现在,架构师在某种意义上又重新变回了“能快速动手的人”:可以直接用代码把思路搭出来,把高层抽象落成接口,再用真实运行的实现去证明设计。
这不仅改变了实现,也改变了沟通方式。在开源里,我们常说:talk is cheap, show me the code。在 AI Coding 时代,“把代码拿出来”这件事变得容易多了。设计不再那么依赖一个缓慢的、自上而下的翻译过程:从想法到文档,再到解释,再到实现。代码可以更早出现,也可以更早跑起来。
这也让其他资深工程师受益。他们不必只靠图、会议或长篇解释来还原整个设计,而是可以直接审查抽象、阅读真实代码、运行它、质疑它,并在具体实现上一起打磨。这让架构协作更快、更清晰,也少了很多沟通误差。
也正因为如此,我总觉得今天很多 AI 讨论有点跑偏。很多项目确实很有趣、也很好玩,拿来体验当然没问题,但高级工程工作并不会因为“给代码库接了个 agent”就自然变好。真正重要的,不是哪个 demo 看起来最炫,而是哪些工程能力真的被放大了,同时软件开发本身的纪律有没有被保留下来。
对于架构师和资深工程师来说,这里真正重要的能力包括:
- 快速做对比式原型验证:不是只用 slides 和文档去论证某个想法,而是直接把多个方案做成可运行代码来比较。
- 大规模代码理解能力:能在大量模块之间快速阅读,同时保持对整个系统的全局认识。
- 系统性的重构能力:把基于反射、依赖运行时动态行为的路径,系统性地改造成适配 AOT 约束的设计。
- 搭建自动化的能力:当一个迁移步骤在每次上游同步时都必须重做一次,靠手工处理本身就很费时费力,而且越往后只会越累。AI 让我们真正有条件去投资生成器、清单、一致性检查和漂移检测,把重复的人力劳动变成可重复的自动化流程。
- 大范围审查能力:在很大的代码面上检查边界条件、兼容性约束,以及方案是否经得起反复执行。
这些能力也都体现在最终的设计结果里。same-FQCN 替换为 GraalVM 特定行为建立了清晰、受控的边界;反射元数据不再依赖手工维护的猜测清单,而是直接从构建产物中生成;各种清单机制和漂移检测,则把原本模糊的“上游同步风险”变成了显式的工程工作流。
对于初级工程师,我觉得这里的启发同样重要。AI 不会让架构设计、系统约束、接口设计、测试和可维护性这些基本功变得不重要。恰恰相反,这些能力只会变得更重要,因为它们决定了“被加速的实现”最终产出的是一个可持续演进的系统,还是只是更快地制造出更多代码。真正的杠杆来自工程判断力,而不是新鲜感。
Claude Code 和 Gemini AI 在整个过程中都扮演了工程加速器的角色。在 GraalVM Distro 这个项目里,它们具体帮我们做了几件事:
- 把迁移思路直接做成可运行代码:不是争论哪个方向可能行得通,而是把多个真实原型做出来、跑起来、比较掉,把不成立的方向淘汰掉。
- 重构重反射、重动态的代码路径:把不适合运行时的模式系统性替换成 AOT 友好的实现方式。
- 让上游同步真正可持续:每次 distro 从上游 SkyWalking 拉取变更后,元数据扫描、配置再生成和重新编译都必须再来一次。AI 帮助我们把这些过程做成流水线,使每次同步都变成一个可控、且大部分自动化的过程,而不是一次比一次更长的手工重复劳动。
- 在大范围内审查逻辑和边界情况:特别是在功能对等性比纯实现速度更重要的地方。
最终产出的,不只是一次大重写,而是一套可重复的系统:预编译器、manifest 驱动的加载、反射配置生成、替换边界,以及让上游迁移可审查、可自动化的漂移检测机制。
如果你想看这种开发方法背后的更广泛背景,可以读这篇文章:在成熟开源大型项目中实践 Agentic Vibe Coding:软件工程与工程控制论还在延续。这篇文章则是这个故事的下一步:不仅是在一个成熟代码库里增强功能,而是重新激活一项曾经停滞的工作,并把它真正做成可运行系统。
真正改变的到底是什么
这个项目最重要的结果,并不是一张 benchmark 表。基准数据当然属于 distro 本身,而且它们很重要,因为它们证明这套系统是真实可运行的。但对这篇文章来说,更深层的变化发生在方法论层面:AI Coding 改变了我们探索、验证和打磨架构方案的方式。
过去,架构往往更像一项以文档为主、后面拖着漫长而昂贵实现过程的活动。现在,我们可以更快地在想法、原型、比较和重设计之间切换。这让我们真正有机会去追求更高抽象层次的方案,保留更干净的边界,并建设那些让迁移过程可持续维护的自动化机制。
这项工作的技术证据,就是 SkyWalking GraalVM Distro 本身:它不仅是一个可运行的系统,更是一条由预编译器、自动生成的反射元数据、受控替换边界和漂移检查组成的迁移流水线。基准数据之所以重要,是因为它们证明这套系统在实践里是成立的;但从架构角度看,真正的结果是:这次迁移不再是一场一次性的移植,而是变成了一套可重复执行的系统工程。关于完整测试方法、原始数据和技术设计,请阅读配套文章:SkyWalking GraalVM Distro:设计与基准测试。
项目仓库位于 apache/skywalking-graalvm-distro。我们欢迎社区成员测试这个新发行版、提交 issue,并帮助它逐步走向生产可用。
对我来说,更深层的启发并不止于这个发行版。AI Coding 不会让架构变得不重要,反而会让架构更值得被认真追求。当实现速度提升到一定程度时,我们终于有机会在真实代码里验证更多想法,保留那些真正好的抽象,并把那些过去常常因为投入太大而半途妥协的系统真正做出来。
对于资深工程师来说,瓶颈正在从单纯的代码实现速度,转向品味、系统判断力,以及定义稳定边界的能力。对于初级工程师来说,真正该走的路不是追逐每一种看上去都很刺激的 AI 工作流,而是把基础能力练得更扎实,让加速真正产生复利:理解需求、阅读陌生系统、质疑假设,并识别出在系统快速变化时仍然必须保持正确的那些部分。AI Coding 降低了验证好设计的代价,但并没有降低工程判断本身的门槛。