欢迎关注我的公众号【令飞编程】,Go、云原生、AI 技术干货不错过。
最近跟朋友聊了 AI 时代程序员的开发模式,并基于开发模式,倒推技能准备及进阶,从而提高自己在 AI 时代的职场竞争力。通过这些聊天讨论,学到了很多,也有了一些个人想法,趁着周末,刚好分享出来。
因为目前离 AI 终态还有很长一段距离,所以其中的一些观点仅仅是基于个人粗浅认知的阶段性思考及脑暴文章,更不是结论或答案。这篇文章旨在抛砖引玉,发起一场关于程序员未来职业发展的讨论。也许未来的标准答案就出现在评论区的某条观点中。
AI 发展的 2 个阶段
脱离现状讨论终态并不明智。比较好的方式是基于现状层层进阶,最终平滑进阶到最终状态。这样既满足了现状,又能够无缝进阶,满足未来的发展需求。
为了能够基于阶段特性讨论开发模式和职业竞争力,我从开发模式及职业竞争力角度,将 AI 分为以下 2 个阶段:
- 弱人工智能阶段(ANI):当前所处的阶段,AI 能够辅助程序员进行编程,以提高编程效率,但还不能影响程序员的开发模式及职业发展模式。处在 ANI 时间的长度取决于 AI 能力的发展,也许 3 年?5 年?甚至更久;
- 通用人工智能阶段(AGI):终态阶段,这个阶段 AI 已经从根本上影响了程序员的开发模式及职业发展模式。
随着 AI 的发展,AI 可能会进入到 ASI 阶段,在 ASI 阶段,AI 的能力已经远超人类,那时候可能会存在 AI 程序员,跟人已经没太多关系了,所以这个阶段就没必要再去谈论程序员的职业发展了。开发模式及职业竞争力的提升,需要考虑不同的岗位、方向及职业发展方向,所以本文讨论的开发模式及职业竞争力提升,仅列出了我目之所及,且认为比较重要的点。
从职业发展上来看,跨过 ANI 阶段,直接准备 AGI 阶段,会让未来毁掉现在。所以,最好的方式是,既能够通过学习、成长,在 ANI 时代保持职业竞争力,又能够在 AGI 阶段保持职业竞争力。并且在 ANI 阶段的技能能够以复用方式,继续在终态阶段发挥价值,提升职业竞争力。
ANI 阶段程序员的开发模式及职业竞争力提升
为了能够更好的说明所讨论的问题,我将软件开发中程序员涉及到的功能划分为以下 3 层:
- 业务层:产品是业务层的 Owner,但一个优秀的程序员,在实现产品功能之前,应该透彻理解产品需求,并基于产品需求,设计技术方案,并实现产品功能;
- 应用层:绝大部分程序员的日常工作处在这一层,通过掌握的编程技术实现业务层的产品功能。这一层通常也被很多开发者戏称为 CURD 层;
- 基础架构层:负责应用层中各类业务应用的部署、运维等全生命周期管理,例如:Kubernetes、Promethous、ELK、网关、负载均衡等。相比应用层,基础架构层在技术难度和专业深度上要更高,伴随着更高的技术门,更低的可替代性(在我看来,这一层属于高级 CURD )。
每一层,又包含以下 2 类角色:
- 设计者:其实就是架构师,在应用层中架构师也叫应用架构师,负责应用层的架构设计,架构设计受到应用功能的影响较大;
- 实现者:其实就是开发者,负责根据架构师的设计,完成所设计的功能。
当前正处在 ANI 阶段,开发模式跟现在的开发模式没有什么本质区别,大部分情况下是:自己设计、自己开发。少数情况下,技术 Leader 或技术 Owner 会负责设计,由其他开发者按照设计,落地功能。随着 ANI 阶段的发展和成熟,程序员的角色会逐渐上移,越来越多的关注设计而非实现。但因为 ANI 阶段,AI 还不能代替开发者完成功能开发,所以,这个阶段,开发者仍然需要亲力亲为其编写代码实现功能,AI 仅仅作为一种非常好的提效工具。
因为在 ANI 阶段,开发者的角色其实有 2 个:设计者和实现者。所以,想提高职业竞争力,就需要扮演好这 2 个角色:
- 成为优秀的实现者:开发工程师,首先要成为一个优秀的实现者。毫无疑问一个对实现有很深理解的设计者,可以设计出更好、更结合实际的实现;
- 成为优秀的设计者:优秀实现者再往上进阶就是要成为一个优秀的设计者。能够从更上层视角去考虑如何设计和实现一个功能。
在 ANI 时代 Go 开发工程师保持职业竞争力的方式便是成为成为一个优秀的 Go 开发者和优秀的软件架构师。能力层级越深(业务层 -> 应用层 -> 基础架构层),难度越大,越不容易被替代,竞争力就越大。
如何成为一个优秀的 Go 开发者以及如何成为一个优秀的架构师,进阶方式很多,不再本篇的讨论之内。
如何成为一个优秀的 Go 开发者以及如何成为一个优秀的架构师,进阶方式很多,不再本篇的讨论之内。如果大家感兴趣,可以关注我的公众号【令飞编程】,会在未来分享这些内容。
AGI 阶段程序员如何保持职业竞争力?
在 AGI 时代,整个技术领域的能力需求保持不变,但是对开发者(人)的能力要求会上移。开发者的设计能力从能力要求、竞争力及工作内容上占比会越来越大,甚至达到 90%,乃至 100%。倒不是因为在 AGI 时代不需要实现者,而是在 AGI 时代,实现者已经由人替换为了 AI。实现越简单的工作,被 AI 替代的越彻底。
所以,在 AGI 时代,开发者的开发模式,越来越多的在扮演设计者的角色,但是这个设计者不仅仅是软件架构师,还包括了代码架构师。为什么会出现代码架构师?开发者将具体的编码任务交给 AI 去实现,AI 作为一线的搬砖工,其实现能力很强,但是设计能力偏弱。所以,开发者虽然将编码任务交给了 AI,但是代码架构设计、缓存的实现方案等偏设计的内容,仍然需要由开发者去把控。并且开发者作为 AI 实现者的 Review,要具备能力去辨别 AI 设计的代码是否是最优、是否由漏洞等。
所以,在 AGI 时代,开发者保持职业竞争力的方式是成为一名优秀的架构师以及代码架构师,并且具备很强的 Review AI 实现的能力。
如何学习进阶,以在当前及 AGI 时代保持职业竞争力?
先来介绍下,什么叫保持职业竞争力。所谓的职业竞争力,包含以下 2 个含义:
- 同类竞争:比其他开发者能力更强;
- 非同类竞争:比其他开发者有更好的选择,例如选择跟 AI 关系比较紧密的工作岗位(例如:算法工程师、LLMOPS、MLOPS 工程师等);
先来看下同类竞争。既然是竞争,那就是说一定要比别人做的更好,而不是跟别人做的一样。在 AGI 时代,对开发者的能力要求包括:软件架构师、代码架构师,并具备很强的对 AI 实现的纠错能力。在前文介绍过,一个优秀的实现者,更可能成为一个优秀的架构师。相较于实现能力不强的开发者来说,由基层晋升而来的架构师优势往往会更大。另外一个优秀的实现者,也具备更强的 AI 实现纠错能力。
再来看下非同类竞争。非同类竞争,其实就是做一个好的选择。在当前时代,各行各业,每个行业都有很多好的选择。对于开发者来说,除了选择一个好的业务之外,在技术上的选择的方向应该是越来越下沉(应用层 -> 基础架构层),因为越上层的东西,越简单,被取代的可能性更大。
所以,在AGI 时代保持职业竞争力的方法在我看来也许是下面这种方法:
- 在 ANI(当前):努力成为一名优秀的实现者(Go 开发者),然后再进阶为一名优秀的架构师。这一阶段也是为下一阶段打地基;
- 在 AGI 时代:努力成为一名优秀的设计者(软件架构师及代码架构师)。虽然开发者不用去具体实现某个功能,但开发者应该具备很强的实现能力。如果在 ANI 时代打好了基础,在 AGI 时代,自然就具备了这些能力。
成为优秀的实现者、优秀的设计者,其实方式有很多,目前比较通用的方式是通过学习或工作来获得能力提升。不管是通过学习,还是通过工作,要想获得能力的大幅提升,最好的方式是成为一名学习苦行僧。所谓的学习苦行僧,其实就是学习的知识深度更深、广度更广,但也意味着要付出更多的时间和精力。因为简单的东西大家都会,大家都会的东西,就谈不上竞争力。所以,想要在竞争中获胜,就需要付出更多的努力。
在 AGI 时代,不仅要同人竞争,还要同 AI 竞争;不仅要具备实现者的能力,更要成为一名优秀的设计者。所以,在 AGI 时代,对开发者的能力要求会更高。
提示:
在学习一门很深技术的时候,也需要讲究投入产出比,但一般来说,产出是要远远高于投入的。因为静下心来,认真学习,学完这些很难的技术其实并不需要花费很多的时间,但是自己的整个职业生涯可能会因此一直受益。
如果你是一名 Go 或者想成为一名 Go 开发者,可以关注我的公众号【令飞编程】,未来公众号会分享 Go、云原生、AI 相关的技术或课程,这些技术和课程的核心目标也是帮助 Go 开发者在当前及未来提升自己的职业竞争力。
程序员职业竞争力思考总结
在 AI 时代,很多人认为,包括我个人也认为程序员的能力应该上移,应该越来越向优秀的架构师、设计者靠拢,并且需要具备跨领域的能力。
也有很多技术博主建议程序员转型寻找一个好的行业、产品等。但在我看来,程序员放弃当前追求未来存在很大的不确定性。
个人更倾向于立足现在探索未来,把当前的技术深度和广度夯实,争取成为在同类职业中竞争胜出的那波人。在这个前提下,探索其他可能性,一个好的产品即使在现在也是应该优先选择的方向,问题是这个产品方向并不好选。