AI对软件开发的影响——生态倾向
经常看到有人说AI会改变软件开发流程,改变人机交互范式之类的。这些概念太难证实,本文不谈这些。我只说一些具体的,显而易见会发生的事情。
首先,AI的训练数据都是有范围的。对于业界主流的库和平台,AI可以掌握得很熟。但冷门的,私有的那些库AI就不认识了。由此导致:如果你基于业界主流平台,主流的库做开发,用起AI事半功倍。否则,基于一大堆私有的,AI不认识的库、历史遗留代码做开发,则用AI事倍功半,而且AI还会不断给你挖坑。
由于AI大模型上下文的限制,私有代码不再是资产,它们毫无疑问的会成为负债。那些有沉重历史债务代码的公司,会被轻装上阵搭轻量级架构的公司拖死。重构变得尤为重要:一旦某个库取得了业界主流地位,使用私有实现的代码应该尽快重写来替换为主流的库。只有这样才能最大化AI辅助编程的效率。如果还抱着“代码能用就不要改”的心态,只会死得很惨。AI时代的开发价值观变成了“只要代码能改进就要尽快重写”——哪怕没BUG,没新需求,为了向主流架构靠拢也应该不断重构。因为AI辅助下新开发代码量已经不是主要问题了,“私有领域的上下文复杂度”才是最大的开发成本。
对于造生态的公司来说,主流的AI工具是否了解自己的生态成了影响生死存亡的问题。当开发者都在用AI生成代码时,AI优先选用哪个库,开发者就选用哪个库。如果你的库AI根本不知道,开发者很可能是没有兴趣去学的——还有谁愿意手搓每行代码?
未来甚至会有公司给GPT、Claude等使用量大的AI编程模型塞钱,就为了让它们把自己的库训练进去,且在生成代码时优先选用。这和搜索竞价排名一样会成为一门生意。
非主流的生态要成长起来会更难。AI可以又快又好的生成Android和苹果的APP,但是你要它生成“XX OS”的应用?“对不起,我的训练数据中没这个平台”……
C和C++虽然是主流语言,但由于未定义行为的存在,这两种语言的代码很难证明正确性和可靠性。相比之下Rust有很大优势,因为它仅凭“没有使用unsafe”就足以证明“没有未定义行为”。未来可能会出现一种自带形式化证明的语言(也许现在就有但我不知道),可以快速的严格证明代码在某些方面的功能正确性。这样的语言在用AI生成代码时有很大优势。因为代码写出来不是问题,“怎么证明代码是对的”才是问题。
掌握英语的开发者会更有优势。在AI的训练数据中,英文文档有着显著更高的质量,更全面的知识、更严谨的逻辑、更统一的术语体系。这样训练出来的AI在用英语时肯定也会知识更丰富、逻辑更严谨。这里讲个故事:有次我和某专家交流时,对方说“串”和“字符串”是两个不同概念,我问这两个概念对应的英文分别是什么,他支支吾吾答不上来。我多次追问才发现,他们居然在数据结构的现有英语概念体系之外自创了一套中文概念。AI学这些中文知识,逻辑能不乱?
这种事情见多了以后,我在搜索技术资料时一律只用英语。而且我发现不少人也有一样的观点:在简中互联网里学技术太容易走弯路,用英语效率最高。
总之,AI时代软件行业会更强化主流的语言、主流的平台、主流的技术、主流的生态。“不惜一切代价向主流靠拢”成为重要的生存准则。这对于正在建自主生态的国内公司来说显然不是好事。
夜雨聆风
