掘金2024年度人气创作者打榜中,快来帮我打榜吧~ activity.juejin.cn/rank/2024/w…
大家好,我是每天分享AI应用的萤火君!
最近OpenAI一连搞了十几天的新品直播,虽然热度不是特别高,但是也确实爆出了一些比较有意思的东西,比如GPT o3,据说编程能力已经超过 99.9%的程序员(某程序员竞赛的前200名:codeforces.com/ratings),我等码农是不是要哭晕在厕所了?
程序员的出路在哪里?
AI编程革命
谈到这一轮的AI革命,很多人会类比工业革命。在工业革命初期,随着机器的普及应用,很多手工业者丢了生计,但也有一批手动业者主动进化,学会了机器的操作方法,在新的时代里依然抢手。
所以最新的说法是:AI不会革所有人的命,AI革的是不会使用AI的人的命。
这种说法是站的住脚的。
就我个人而言,写代码已经离不开AI了,遇到不会写的代码就问AI已经是家常便饭,甚至有了什么思路之后,直接就让AI先写一个实现,感觉不好的话,再让AI重写,一般都能得出满意的结果。这比自己苦思冥想、到处去查资料要快上不少,甚至结果也往往更好。当然这里边还有一些前提条件,比如你要把自己的想法清晰的表达出来。
就像人们对商品的需求是广泛且持续存在的,软件的需求也是广泛且持续存在的。使用AI可以提升软件程序的生产效率,如果你花1天时间可以写出100分的程序,那么使用AI,很可能只需要几分钟的时间就能写出至少80分的程序,这里边的生产力差距是很明显的,所以AI对于编程而言,自然也是一场革命。
历史证明,不想被淘汰,只能积极的拥抱新的生产工具。学会使用AI编程,自然也成了程序员在AI时代的必备能力。
AI编程的要点
就像大家都写程序,有的人写的好,有的人写不出来。使用AI编程也是,有的人效率大幅提升,有的人生成的代码没法用,还耽误时间。
为什么会这样?
我个人的观点是:不得要领。
编写代码的要领是:掌握各种编程规则,并在各种解决方案中做好权衡。很多同学以代码能跑起来为最终目标,不管性能,也不考虑维护、扩展,这样很难写出优秀的程序,自然也成不了高手。
AI编程的要领是什么呢?
讲清楚
我们还是在编程,所以编程的要领还是要掌握,但是又增加了AI的方式,就需要结合AI的特性。
这里边最主要的问题就是讲不清楚,程序员们往往知道怎么去实现,但是很难给别人讲明白。而使用生成式AI,一个很重要的工作是编写提示词,也就是把你想要的东西通过文字清晰明白的表达出来。
举个简单的例子,你想要让AI设计一个商城的数据库,如果你只是简单的告诉它:帮我设计一个商城的数据库。
它很大概率上是很难生成直接可用的代码的,因为它不知道你要使用什么数据库,也不知道你的商品和订单是怎么管理的,更不清楚你的订单量是什么样的规模,这些都会影响数据库的设计。AI大概率会给你了一个路边摊的方案,然后被你鄙视一番。
要想让AI输出高质量的内容,我们必须把问题的上下文讲清楚,以AI能够理解的方式告诉它。在数据库的例子中,可能包括:你的商城都有哪些功能,商品品类如何组织,商品有哪些属性,每天的订单量如何,订单的流转过程如何,等等。
有时候对于一个复杂的系统,一轮对话是不够的,可能需要多轮对话,比如先讲一下你的商城功能有哪些、业务规模如何,然后让AI给你一些数据库的选型建议;然后再基于你选择的数据库,通过各个部分的描述,让AI给出具体领域的设计。
好模型
工欲善其事,必先利其器。
AI模型的性能也很重要,这里说的模型性能是AI模型生成结果的质量问题。
了解过大语言模型的同学应该都听说过OpenAI,作为大语言模型的领导者,它的ChatGPT是顶好的,对于同样的问题,ChatGPT往往能理解的更为准确,也能给出质量更高的答案。对于编程来说,就是它输出的代码能正常跑起来,而很多模型给出的答案经常跑不起来,各种报错。
根据我的测试体验,目前 GPT 4o 和 Claude 3.5 Sonnet 在编程方面的能力比较领先,国产的 通义灵码 也不错,但是有时给出的方案还是差强人意,有点路边摊的感觉,输出过多不太重要的东西,沟通效率上差一些,应该还是基础模型的能力不够强。
当下,从效率方面看,使用更好的模型确实可以节约一些时间。
程序员的未来
所有的工作都是基于需求产生的,程序员也不例外。
计算机出现以后,人们需要使用计算机来完成大量繁复的计算任务,随着计算能力的增强和计算范围的拓展,人们又需要使用计算机来运行各种各样的软件程序。但是人和机器打交道特别困难,最开始使用0和1的机器码,这不是一般人能玩的溜的,后来虽然又搞出了各种各样的先进技术和编程语言,但是计算任务的复杂度也进一步提升,对专业人士的需求不减反增,程序员就是这类专业人士。
现在大语言模型来了,AI编程革命愈演愈烈,程序员何去何从?
绝对数量的减少
我们还是从需求出发。
首先假设计算任务的需求并没有明显减少,也没有明显增多,也就是程序的需求没有减少;但是使用AI之后编写程序的效率会提升,也就是说个体生产力会提升;在总体需求不变的情况下,个体生产力的提升就会减少对个体数量的需求。在这个假设中,一些程序员不得不出局。
那么这个假设是否成立呢?
当前国内有一个现象很突出,很多厂子经历了一轮又一轮的裁员,很多同学离职后有很长时间的空窗期,整个社会对程序员的需求明显在减少。但是AI的发展必然又带来新的工作机会,比如提示工程师、模型训练工程师、AI应用开发工程师,如果我们把这些新的岗位也划到程序员的行列,但是它们足以抵消社会对传统程序员的需求减少吗?
我想不能够,因为使用AI的效率更高,则需要人贡献的力量就会更少。也许AI会创造更多的其它工种,但是对以编程为生的程序员的需求一定是减少的。
需求和技术的平衡
随着AI模型能力的持续增强,手写代码的机会越来越少,但是AI的能力长时间内始终有所欠缺,比如:理解用户的需求,在各种技术方案中做出权衡等,而且AI的伦理问题一时半会也很难解决,程序出了问题还要有人来背锅。
所以程序员的大部分工作将是:
理解用户需求,然后让AI实现用户的需求,并对生成的结果进行调整和把关。
理解用户需求:注意这里说的是理解用户需求,而不是理解产品经理给出的产品设计。当下,程序员编写程序本来也是需要理解产品设计的,但是好的程序只是理解了产品经理的输出还是不够的,产品经理的主要问题是缺乏技术的敏感度,这需要程序员来补齐,并在产品中有所体现。而且如果程序员写代码的时间少了,那老板自然不会让你闲着,直接对接用户可能是一个方向。
让AI实现用户的需求:这里关注的是程序员的语言表达能力,你得能把问题说清楚,知道如何与AI进行交互,让AI更好的完成编码工作。这是一项需要重点打造的能力。
对生成的结果进行调整和把关: AI对整体的把握能力仍然十分有限,虽然很多模型都号称支持多少K的上下文,但是真正用于实际的时候还是会丢三拉四,不够可靠。人要来把关的话,对技术的理解仍然十分钟重要,因为人要做决策,什么能做,什么不能做,什么情况适合采用什么样的方案,都要考虑清楚。
现在也有一些公司在做AI程序员,让一帮AI来扮演各种角色,来实现一个软件程序的开发。似乎程序员马上就要失业了,但是对于一个有着几年开发经验的同学来说,应该能够理解:一个包含各种复杂逻辑的业务系统,AI还是很难搞清楚的,短期内也很难代替人来做决策。
总结
AI的引入显著提高了编程效率,使得高质量代码的生成速度大大加快。面对未来,尽管传统编程岗位的需求可能减少,但新的职业机会也在不断涌现,程序员同学们要积极适应变化,充分利用AI的优势,掌握清晰表达需求的能力,了解如何有效沟通以获得最佳的AI输出,同时还要持续提升自身技术素养,以便更好地理解用户需求、指导AI工作及审核最终结果。