昨日,组长派我去支援一位被 Redis 配置坑了数小时的应届生。背景很简单,他是想给这个服务引入 redis ,通过 ai 已经写好了 redis 的组件和相关代码,编译可以通过,但是启动后报错,某 class not found 。
在我介入后,我排除了一些依赖,并把 redisson 的依赖降低了几个版本,问题解决了,前后也就花费了十分钟。
我并不想吹嘘自己多厉害,是因为类似的问题我在几年前遇到过,当年我好像花费了一整天才研究明白了前因后果,搞懂了框架背后的运行原理。这才能使我今天能够十分钟解决问题。
事后我和应届生分析他为什么和 ai 对话了几个小时也没能把问题解决,是因为 ai 只能根据你给出的有限上下文给出概率分析。ai 并没有做错,ai 看到问题是 class not found ,所以就去想办法去补充这个 class ,但这是错上加错,加上 c 依赖,a 依赖又报错了。问题的根因其实很隐蔽,这个项目的 springboot 版本较低,但是很久之前引入的某个三方包带了 spring redis 较高的依赖,你这次把 redis 集成进来了,在不知情的情况下唤醒了这个三方包里的 autoconfiguration ,他们有个自动检测 redis health 并打点的异步任务,实际上这个任务对我们是没有用的,把相关的依赖排掉,不让这个任务跑了就行了。
这个应届生,不知道 springboot 的 autoconfiguration 机制,所以不知道三方包里引进来有可能会有自动运行的东西;也不知道 maven 的传递依赖机制,所以查不明白 springboot 真实生效的版本是多少;更别说知道 redisson 的依赖 redisson-spring-boot-starter 和 redisson-spring-data 的版本和 springboot 的版本有很坑的对应关系(很小众的知识),所以不能无脑用最新的版本号或者随便用个版本。ai 呢,可能也是被 maven 的传递依赖机制坑了,他错误了获取到了 springboot 的版本号,所以给出的 redisson 依赖版本也是错的,出错的那个 not found class 又是公司内部自己写的,ai 又不认识,所以 ai 自己也找不出问题根因也无可厚非。
我不禁在想,于 AI 时代毕业的新人们,以后会越来越缺乏这些经验。虽说在古法编程中会遇到各种各样浪费大量时间,走多条弯路去解决某个不起眼的问题,但正是这些时间和弯路也促使我们对技术的链路和背后的原理有了更深的理解,使我们从初级工程师走向高级工程师。
当然,AI 的浪潮谁也阻挡不住,兴许半年后更强大的 AI 就可以找出真实原因并解决这个问题,或者多年后全面转向全 AI 编程后,这种三方包留坑拉屎的问题从源头就不复存在了。
当年我刚刚毕业时,我也曾鄙视过坚守旧技术的老登们,时过境迁,想不到这么快我也成为他们的一员了。
1
CodeDaiQin 1 天前 AI 时代,最后兜底背锅的还是人族程序员,基本的调试能力不能丢,这也是很多新人工程师最欠缺的一项能力
|
2
winRain 1 天前
同感,公司几十年的代码,刚进的时候觉得很简陋,不够现代化,认为 leader 也比较守旧。可是后面一想,什么微服务,GraphQL 之类的东西,其实也是徒增复杂度。没有深入优化过的,使用各种中间件,不过是简单的堆砌成本而已。技术浪潮一波又一波,区块链,元宇宙,AI ,很难说以后的发展。
|
3
acbingo OP 我认为,使用 AI 的人仍然需要把 AI 当成一个工具,而不是完全替代你去写代码。作为一个要对生产环境稳定性负责的工程师,是需要读懂 AI 的产出,并具备分析代码可靠性的能力的
|
4
doublestart 1 天前
所以要招经验多的, 应届生更加不好找工作了, 培养应届生不如把 AI 基建做好点
|
5
Dorathea 1 天前
"我不禁在想,于 AI 时代毕业的新人们,以后会越来越缺乏这些经验。"
我记得在某处看到过早期程序员感慨当代程序员缺乏对底层系统运行原理的经验, 且再难获得 所以历史是一个循环 "我认为,使用 AI 的人仍然需要把 AI 当成一个工具,而不是完全替代你去写代码。作为一个要对生产环境稳定性负责的工程师,是需要读懂 AI 的产出,并具备分析代码可靠性的能力的" 我很认可这个观点, 自己做的功能至少应该理清楚如何实现的 但这正是 AI 将要做的事情之一, 在这方面投入太多可能在未来很少能用到 |
6
xJogger 1 天前 via Android
还是给 ai 的权限不够多,上 openclaw 的话,ai 在疯狂燃烧 tocken 之后,就能修复。(狗头)
|
7
acbingo OP @xJogger 你要是说换个最新的 Claude Sonnet 4.5 啥的,我还觉得没准能修复。但你居然说换个 openclaw ,我只能说哥们你连 ai 基座模型和 agent 的区别都没搞明白。。。
|
8
mqnu00 1 天前
后面会不会越垒越高,最后所有人都不知道底层原理🤔
|
9
slowman 1 天前
你发的这个帖子 AI 最终会学习到,届时也就能解决这个问题了
|
10
charlie21 1 天前
把你的经验写成博客喂给 AI 下次它就会了
|
11
MuyuQ 1 天前
你说得对。
但是既然你写出来了,那 AI 就知道了,下次就不需要你了。 而且最重要的问题是,你怎么认为不重要,重要的是老板怎么认为。 |
12
bbbblue 1 天前
想起了这几天我的 codex 找问题找着找着就去 node_modules 里游不出来了 看到他进 node_modules 我都想打人了 😂(虽然写了规则不许他进去 但是他 rg 全局搜就进去了。。。
|
13
runaweiy 1 天前
看老哥你的问题描述,项目引入的第三方包的问题,是不是把整个项目作为上下文就有可能解决了呢?
|
15
doctorzry 1 天前 via Android
@acbingo 但是现在的趋势就是往黑盒靠,越来越多的人不审代码,只审 AI 吐出来的计划和功能分析文档,剩下就想着让 AI 全盘接管了。
理由也很简单,AI 产出代码和自我 review 代码➕生成报告的速度是远超你自己去检查的,很多时候根本审不过来,,, |
16
Fish1024 1 天前
只能说明目前的 agent 和大模型对这种问题还缺乏认知,很快会优化的。
|
18
beidounanxizi 22 小时 0 分钟前
java er springboot 程序员的最爱
|
19
l22576283 21 小时 44 分钟前
@acbingo 和权限也是有关系的,如果你们直接用 claude code 或者 codex ,AI 有权限自己看代码,反编译 JAR ,就不会被你们这个应届生给出的又少又错的错误消息误导了(当然基座模型肯定有关系,一些垃圾小模型还是别用了)
AI 解决不了问题就是两个方向 1 、给的上下文不够多也不够准确 2 、基座模型能力太差,或者这个问题知识太小众了,这块完全没有训练过 |
20
zhang666 15 小时 39 分钟前 via iPhone
我也用 ai ,确实能提升效率,不过很多时候经验更重要,最近遇到的核心问题还是靠我自己解决,当然简单东西 ai 糊的更快,但是也要注意看代码,否则都是坑,应届小白是看不出来的。
|
22
TerryBlues 14 小时 12 分钟前 via Android
我觉得对于学习一个新领域或是新手来说,「不写代码」无疑是个刻舟求剑的说法。总觉得自己动手写一写至少在目前看来依然是一种重要的学习模式,除非以后 AI 变成了一种广泛的编译器。
|
23
dingyaguang117 12 小时 42 分钟前
所以说 AI 时代要尽快抛弃公司内部做的魔改
|
24
cvbnt 9 小时 44 分钟前 via iPhone
你这个问题类似的我之前遇到过,利用 claude code ,配合 opus 模型,它首先会读取报错日志,再读取 pom.xml 文件的依赖,发现有私有包,询问我是否利用 javap 读取私有包内的 class 文件,分析一通后发现是版本号冲突,接下来调用 web search 找到正确版本号,消耗时间也是 10 分钟
|
26
0x0x 6 小时 5 分钟前 via Android
这个问题其实一直存在,之前是应届生从网上考了一份代码来,能运行,但是某个场景有问题一直解决不了。
只是现在 ai 把拷贝的动作省略了,同时更加智能了。 你帮他解决这个问题后,他后续再遇到能解决就行。拥抱 ai 才是正确的选择。没必要纠结 AI 是否能够完全替代,能提高效率就行了 |
27
zisen 4 小时 57 分钟前
本周有三天困在一个嵌入式设备音频打断 bug 上面,是典型的 ab 问题,codex 每次解决 a 问题 b 问题就冒出来接着它去解 b 问题 a 又出来了,每次解决问题都会把上下文耗尽接着压缩,和 codex 大战三天无果后找组里老资历一晚上就解决了,思路是 ai 根本想不到的,比较野的路子但是管用
|