爱人在一家设计公司工作,她们公司正在为一家著名的丝绸公司做设计。有一天,我突然接到她的电话,问能否用编程绘制一个形式如下的图形。
他们需要设计一个类似的丝状logo。我虽然熟悉编程,但对于电脑绘图是一窍不通,面对这个新问题,完全是一头雾水,没有头绪。
GAI(Generative AI,生成式人工智能)是个不错的起点。我把上面的图片上传到豆包,询问这样的图形如何通过编程实现?在其回答中,我第一次知道了曲线绘图所需要的贝塞尔曲线、利萨茹曲线概念。之后,我又用Deepseek,让它用贝塞尔曲线或者利萨茹曲线输出生成类似∞形状的代码。经过简单的学习,几天后,我便能用编程绘制出有丝感形状的矢量图了。
不可否认,AI正在改变我们的生活和工作,作为软件工程师,我们是收益全体的排头兵。然而,在AI的热潮中,我不大喜欢AI威胁论,什么当前的软件工程师将是最后一代工程师,什么AI如果有自主意识将会威胁到人类,等等。这种夸夸其谈除了推高英伟达股票之外,实在是言过其实了。不要说一代,就是再过五代,AI也代替不了人。
1. 我们离通用人工智能还很遥远
据预测,要实现通用人工智能(AGI,Artificial General Intelligence)至少还要100年。即便实现了AGI,要想E2E搞定一个软件系统也并非易事。因为软件的需求没人说的清,软件工程就是手工作坊的草台班子,越是大型的软件就越复杂、混乱、腐朽、脆弱。软件不是“人干的活”,碳基人干不好,硅基人估计也很难胜任。
2. 软件涉及的东西多且非标
你知道实现一个简单的web应用需要多少知识吗?HTML、CSS、JavaScript、前端框架(Vue、React、AngularJS等)、HTTP、DNS、RESTful、后端语言(java、go、python、C#等)、面向对象、后端框架(Spring、Flask等),事务处理、数据库、索引、SQL、ORM、单元测试、集成测试、回归测试、CICD、IDE、Git、Docker、Kubenetes、Linux、windows、Android、Web Server等,像这样的知识点大概有500+。关键是其实现方式非标,哪怕只是一条记录的CRUD,其实现方式可以是无穷的。所以在现有的编程范式下,我们不可能让AI去实现一个具有商业价值的端到端软件系统。
I’ve been reluctant to try ChatGPT. Today I got over that reluctance. Now I understand why I was reluctant.
The value of 90% of my skills just dropped to $0. The leverage for the remaining 10% went up 1000x. I need to recalibrate.
长期来看,软件的本质复杂性不会改变,软件的规模还会持续变大。随着AI作为辅助工具的能力不断增强,结合AI,可以帮助我们更加高效(efficiently)和有效(effectively)处理局部问题,比如写一个生成AC文档、实现一个动态规划、补充类的单元测试等等。为此,我们需要重点关注以下能力。
结构化能力:将复杂问题进行结构化分解,从而逐步解决局部问题
表达能力:结构化的问题表达,prompt工程
抽象能力:总结提炼共性,举一反三,依赖LLM解决更多问题
判断能力:对解决方案和结果进行有效鉴别,权衡和选择的能力
与此同时,另一些能力的重要性会下降。
攒代码能力:通过CRUD,快速实现需求的能力
微重构能力:使用重构技巧修改代码能力,包括微观Clean Code能力
浅广度知识:对广度知识的快速获取和浅层整理加工的能力
下降并不意味着不重要,你还是要去学习编程知识,了解设计模式。只是AI将会成为你的得力助手,可以加速你的学习,提升你的编码效率。从而让你有更多的精力投入到更有价值的事情上去,比如建模的合理性,设计的合理性,代码的可读性,系统的可维护性、可用性、健壮性等。
关于更多内容,2025年4月份,我会在QCon会议上发表“AI实现基础能力平权,与优秀工程师共生”的分享,敬请期待。