大家好,我卡颂。
AI的发展对软件行业产生了不小冲击。当下经常能听到程序员终将被AI取代的论调。
虽然我们不知道这是否会发生、什么时候发生,但有一点可以肯定 —— 如果他终将发生,一定不是一蹴而就的,而是以渐进的形式逐渐改变程序员的开发方式。
本文基于我的行业观察,对明年(25年)会流行的开发方式做一个预测。
欢迎围观朋友圈、加入人类高质量前端交流群,带飞
我的预测逻辑
开发方式的变化并不是一蹴而就的,而是自底向上逐级传导的。
传导的层级包括三个:
- 基建
- 应用
- 开发方式
接下来让我们看看每一层的变化是如何产生的,又是如何传导到上层的。
基建层面变化
上层应用只有在基建支持的情况下才会出现,比如短视频、直播、移动流媒体都是在4G基建成熟的前提下诞生的。
如果将LLM
(大语言模型)作为基建,25年可以预见的变化包括:
- 模型的思考能力(包括思考时长、分析能力)会提高
比如openAI表示在今年晚些时候会发布一个代号为Strawberry
(草莓)的模型,比当前的GPT4更聪明。
- 模型的上下文窗口大小会提高
去年,LLM的上下文窗口还普遍在4K~8K,今年已经涌现很多超过128k的模型,比如Claude3.5-sonnet-200k
、GPT4-Turbo-128k
,甚至有夸张的Gemini-1.5-pro-2M
。
在编程领域:
- 思考能力提高意味着AI能更快、更好理解代码含义,同时有更强意愿输出详细的代码
- 上下文提高意味着AI能理解“代码量更多的项目”,这是单靠
RAG
技术无法实现的
两者是相辅相成的,这里存在一个两种能力的临界点。
达到临界点前,模型在使用场景上并没有代差,大家的使用场景都是“辅助生成上下文无关的代码片段”。
一旦某一模型突破临界点,该模型就会与其他模型形成代差,进化出新的使用场景 —— 可以为真实项目编写代码。
我认为今年突破临界点的模型是Claude3.5-sonnet
:
- 思考能力方面:
Claude3.5
比GPT4
更聪明 - 上下文方面:最大能到200k,足够一次性输入“上万行代码的项目”
之所以最近Cursor
(一款AI驱动的IDE)能大放异彩,主要原因在于“他的默认模型是Claude3.5-sonnet
”。
只有像Claude3.5-sonnet
这样突破临界点的模型,才能支持Cursor Composer
功能良好运行。
Cursor Composer
功能可以简单理解为:AI帮你生成和修改整个项目的代码,包括配置、目录、代码文件等
有了Composer
功能,8岁女孩都能在45分钟内搭起一个聊天机器人。
应用层面变化
今年在AI辅助编程领域比较成功的案例便是Cursor Composer
功能的落地。
上一段已经聊到,这个功能的背后是Claude3.5-sonnet
在支持。
实际上,我们不应该将Composer
看作一个独立的功能,而应该是Cursor
众多功能中粒度最粗的功能。
不管是Github Copilot
还是Cursor
,在最初诞生时,首先支持的都是“预测当前光标位置处可能需要的代码,通过按Tab键补齐”。
再往后,Cursor
支持了更多粒度的“AI对代码进行操作”,比如:
- 对任意框选的代码
- 对命令行工具中会输入的代码
- 对任意文件下的所有代码
- 对任意项目下的所有代码(即
Composer
功能)
发现了么,Cursor
并没有创造新的“AI与代码交互的方式”,而是用AI增强“程序员与代码已有的交互方式”。
这种渐进增强相比一刀切的低代码工具更容易被程序员接受。
同时我们也可以发现,上述“AI对代码执行的操作”,随着粒度逐渐变粗,还包含两个上升趋势:
- 操作对应的提示词包含的内容变多
- 操作包含代码的复杂度上升
虽然Cursor
会利用RAG
技术为整个项目建立索引,但对于粒度较粗的操作,类似:
- 对任意文件下的所有代码
- 对任意项目下的所有代码
背后还是需要“突破临界点的模型”支持的。
比如,如果你在Cursor
中开启了LONG CONTEXT CHAT功能,在对文件夹提问时,Cursor
会将文件夹中所有文件包含的代码整合到提示词中。
如果你想体验这条提示词有多长多复杂,可以试试code2prompt,这个工具可以帮你将一个目录下所有代码整合到一条提示词中。用他配合Claude3.5-sonnet-200k
可以手动实现Composer
功能
开发方式层面变化
基于基建、应用层面已经发生的变化,可以预测开发方式会产生什么变化呢?
首先,在讲解应用层面变化时有一个很重要的点 —— 变化一定是基于当前程序员熟悉的方式渐进增强,而不是突然产生新的方式。
当前,AI辅助编程的优点是提高编程效率,缺点是程序员对AI生成、修改的代码可能不太信任。
基于以上信息可以推导出 —— 这种新的开发方式是对已经存在的开发方式的增强,提高编程效率的同时,也能打消程序员对“AI生成代码”的顾虑。
这种新的开发方式就是AI驱动的TDD。
TDD
(Test-Driven Development) 是一种软件开发方式,它强调在编写实际代码之前先编写测试。
可以用三个步骤的循环概括TDD
:
- 红色部分:"Write a failing test"(编写一个失败的测试)
首先,开发者编写一个测试,这个测试是针对尚未实现的功能,因此它会失败。这个步骤的目的是明确定义期望的行为。
- 绿色部分:"Make the test pass"(使测试通过)
接下来,开发者编写最少量的代码,使刚才编写的测试能够通过。这一步的重点是快速实现功能,而不是追求完美的代码。
- 蓝色部分:"Refactor"(重构)
最后,在测试通过的基础上,开发者可以安全地重构代码,改进其结构和可读性,同时保持功能不变。重构后,所有测试应该仍然通过。
TDD
的优点很明显,包括:
- 提高代码质量和可靠性
- 便于重构和维护
- 形成自动化测试套件
- 有助于设计清晰的接口和架构
但TDD
对程序员素质要求较高,所以一直无法大规模推广。
有了AI辅助后,TDD
的门槛大幅度降低。
要尝试AI驱动的TDD其实很简单,只需要修改提示词,让AI遵循TDD
原则,在实现功能前,先实现高覆盖率的单测。
通过审视每个单测的描述,其实就能大体推断“AI对需求的理解是否到位”。
接下来,AI生成、修改业务代码后,都可以跑一遍测试用例来验证代码的正确性。
甚至,当AI驱动的TDD成熟后,很多手动执行的步骤都能由AI自动完成,比如如下步骤:
- AI修改业务代码
- 修改完成后,IDE自动跑测试用例
- 用例报错后,AI根据报错信息修复代码
- 重复步骤2直到通过用例
总结
任何变化都不是一蹴而就的,经济基础决定上层建筑。
在基建层面,最近几年大模型的思考能力、上下文窗口大小不断提升。
在两种能力达到临界点之前,在应用层面AI辅助编程主要局限在粒度较细的场景,比如“预测当前光标位置处可能需要的代码,通过按Tab键补齐”。
当基建层面的模型能力突破临界点后,应用层面就诞生更多粒度的AI辅助编程。
当应用层面的AI辅助编程能够理解完整项目后,就会催生AI驱动的TDD这种开发方式的流行。
我们不知道AI多久能取代程序员,但这个过程不会是一蹴而就的。
他会是基建到应用,再到开发方式的自底向上演进。
随着新开发方式的产生,就会有一部分手动工作被AI取代,比如上面提到的“AI跑测试用例修复代码”。
上述过程循环往复,AI编程的能力就会越来越强。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。