最近,AI 在软件开发中的辅助作用发展迅猛。继 GitHub Copilot 之后,Cursor 和 Windsurf 等新型 AI 编程助手的出现,再次展示了 AI 的强大能力。即便我每天都从事 AI 相关的应用开发,我仍然对这一切如此迅速的发展感到惊叹。自从使用 Cursor 后,我已经有几个月没有打开 JetBrains 的 IDE,甚至开始怀疑是否还需要续费。也许在接下来的几个月,如果 JetBrains 无法跟上发展的步伐,我也不会再犹豫了。回想起来,我订阅 JetBrains 的 IDE 已经超过十年了。过去的十年里,JetBrains 的 IDE 一直是我开发工作的主力工具。没想到,突然间,就不再需要了。

最近网上关于 AI 时代软件工程师未来的讨论层出不穷。按照那些吸引眼球的标题,软件工程师已经被 AI 取代,码农们都要失业了。看完这些文章,再想想自己的年纪,代码是不用写了,倒是该考虑穿蓝衣还是黄衣了。

不过,玩笑归玩笑,这个问题值得认真思考。AI 工具本就是由码农开发的,从诞生之日起就影响着我们的工作。至于是否会取代码农,我认为不会。也许我们的工作范围、方式和内容会发生很大变化,但码农这个职业不会消失。 换句话说,工作内容大变样,码农还是原来的码农吗? 你可以说不是,那从这个角度看,确实是被 AI 取代了。 然而,取代的只是职业,而不是码农这个群体。 毕竟,事情总还是需要人来做的。

很久以前,我就曾想过,为什么我们的职位被称为软件工程师。小时候,我一直认为工程师是一个很高大上的职业,长大后读了些书,写了一些代码,竟然也成了工程师。我何德何能,能被称为工程师呢?

有时我会拿我们和土木工程师做比较,虽然对土木工程师了解不多,但我想,土木工程师再辛苦,也不至于亲自下工地砌墙吧?工程师的工作应该是设计,而不是最终的施工。 然而,软件工程师(包括开发、测试、运维等)却不太一样——项目设计是我们做的,最终的代码也是我们写的,甚至测试和部署也是我们负责。这两种工程师之间的差异真是巨大。 但如果软件工程师不写代码,那谁来写呢?在软件工程中,无法培养出一个只写代码而不涉及其他事务的工种。砌墙可以按照图纸标准施工,但软件开发却不行。即使有再详细的设计文档,转化为代码的过程仍然需要一些创造力。在实际工作中,可能是资深工程师负责项目设计,然后交给初级工程师来写代码。但你不能因此说初级工程师就不是工程师。工作的本质没有差异,初级工程师可能只是经验不足而已,干了几年,经验丰富了,也就成了资深工程师。但从未听说过砌墙的师傅,干了几年后能去画图纸的。

嗯……扯远了。我最近在想,新的 AI 时代,也许能让软件工程师这个职业更像传统的工程师。我们不能有一个工种,只负责写代码而不管其他事情。但也许 AI 可以?最近用 Cursor 处理一些需求时,我常常只是在聊天框里写下指令,然后 AI 就帮我写好了代码。AI 也可能出错,那我就继续让它修改。这个时候我就不是软件工程师了吗?聊天框里输入的是自然语言,但……难道只有写代码才是软件工程师的专利,用自然语言沟通就不需要软件工程的训练了吗?产品经理通过 Cursor 能不能直接实现自己的需求?我觉得不行,至少在很长一段时间内都不可能实现。简单的 demo 是一回事,真正的软件开发是一项复杂的工程。我在 Cursor 里输入的指令,并不是原始的需求描述,为了让它准确实现,我会把具体修改的意图写清楚,甚至会写上一些代码示例。用什么语言、什么库、什么框架,都是需要软件工程师来决定的。 因此,软件工程师未来的工作,可能不再是写代码,而是写指令。或者根据需求文档,编写技术方案,这也正是原本应当由软件工程师做,却常常被忽视而没有做好的工作。注意,这不是翻译需求文档,需求文档不能直接转化为技术方案,这个过程需要软件工程师的思考和判断,这是一个创造性的工作。剩下的部分,创造性可能没那么强,重复性的工作,就交给 AI 来完成吧。

所以,也许 AI 不会取代软件工程师,而是让软件工程师成为真正的工程师。