大模型时代,程序员的技能演进——盘点那些更重要的、和不再重要的能力

点击上方蓝字关注获取更多资讯

0d701daeb8d30b1747e24f5ed8c7beb2.png

Part.1

程序员”的工作还是不是“写程序”

曾经,“程序员”的职责是非常明确的:编写和调试代码,让应用程序正常工作。在这个意义上,胜任“程序员”的工作其实并不是太难:

掌握计算机和软件的基本原理至少一门编程语言以及若干流行的框架

就可以上手了

但是专业的“程序员”并不仅止步于此。

软件的长期维护特征和与生俱来的复杂性,使得高效、高质量地编写可长期维护的软件是非常困难的。所以,专业能力例如编写高内聚低耦合的代码掌握演进式设计的能力等,是“专业程序员”,更确切地说,是“软件工程师”的一个更为重要的能力要求。

坦率地说,今天的许多程序员,未必都能达到“专业”程序员的要求,只不过,在软件行业对人才的巨量需求面前,“不那么专业”并不是一个严重的问题。

大模型时代的到来,或许将从根本上改变这一现状。在过去的几个月中,在ChatGPT的辅助下,我可以轻松上手不同的前端框架(基于typescript),“熟练”使用go语言和python语言,了解机器学习算法,了解云原始基础设施,使用各种我以前没有用过的组件,似乎它们并不比我已经使用了十几年的C语、Java语言有啥区别。语言、框架和基础设施的经验,似乎不再重要。全栈,曾经是一个非常遥远的目标,今天已经唾手可得。

大模型时代的到来,让程序员的效率也有了本质的提升。基于ChatGPT和github copliot,我可以直接要求ChatGPT编写swagger接口文件,连续按几次Tab键就可以写好大多数的服务端代码,差不多一个小时能完成过去需要几天才能完成的工作。

480fa91928940bf94ab37b369f8178ce.png

大模型时代正在催生“超级个体”这些超级个体效率极高熟练使用各种工具快速交付业务价值

Part.2

大模型时代,什么才是“软件工程师”的真正能力?

我曾经在去年出版的《软件设计:从专业到卓越》一书中,列举了“专业的软件工程师”应该掌握的一组关键技能,以及这些能力之间的关系,我称它们为“精益软件设计实践”

如下图:

04013e6acd3006098f29b8cb57a5059c.png

我把它们概括为一个根本挑战两大核心价值三大设计原则和对应的软件设计实践。其中:

一个根本挑战是软件与生俱来的复杂性

两大核心价值指的是软件开发的当前业务价值(满足业务需求)和长期资产价值(复用和演进)。

三大设计原则是分而治之持续演进内建质量

在此基础上,上图还列出了彼此互为支撑的软件设计实践,分别为高质量需求、领域模型、由外而内的开发、设计分解、接口和契约、测试先行,以及演进式设计和内建质量中包含的系列软件实践,具体包括契约式设计、防御式编程、代码评审、结对编程、简单设计、测试驱动开发、重构和持续集成

在我看来,上述这样的一个能力体系是一名“软件工程师”在“编程能力”之上的更重要的工程技能。不过,我没能在那个时刻预计到大模型时代的到来。从GPT4发布到现在,我一直在使用GPT-4和copliot在工作,通过这3个月的尝试,我觉得可以写一下自己的理解了。

让我们首先从问题出发:软件开发的复杂性问题。

Part.3

软件开发的复杂性没有消失

简单的说,一个坏消息,一个好消息。

b40c8eac77b62853c89e8aa88e044c8d.png

所有关于软件开发“复杂性”的讨论,都可以回溯到布鲁克斯在《没有银弹》一文中关于软件开发的本质困难的论证。布鲁克斯从以下四个方面论证了软件开发的本质困难:复杂性、符合性、可变更性、和不可见性。具体来说:

复杂性:业务领域本身就是复杂的,软件是服务于业务的,因此无论如何优化工程方法,软件开发都不可能比业务更简单。也正因为如此,软件开发才会有如此多的挑战。

符合性:软件系统不是孤立系统,它需要和客观世界、其他系统、人类规范等等打交道。不幸的是,这些标准和规范本质上没啥规律,就是“遵守”。

可变更性:软件天生就是为变更而存在的,因此它必须能够适应变化。但是,如果缺乏好的工程实践, 可变更其实并不容易做到。

不可见性:软件是信息,而不是物理实体,这使得它的理解和维护变得尤其困难。更糟糕的是,每一行代码都包含了信息....

0f5ea90fef241daed5fdb8543d0baa5e.png

大模型时代,上述4个根本困难改变了吗?

我的理解是:

业务的复杂性问题不减反增。大模型必然加速人工智能应用的到来,业务场景将大幅扩展。同时,由于软件开发的成本降低(大量AI助手的应用), 软件将更加无处不在,业务连接更为广泛,这些都将扩大业务的复杂性。

符合性问题更为突出。更多的连接和交互会带来更多的边界, 虽然人工智能会在边界的兼容性上有所作为,但是其实会对管控提出更高的要求。

可变更性依然存在,解法会有升级:软件天生就是“软”的,这个没法改变。不过,大模型会对“如何变更”带来全新的方法。也就是说,这个问题仍然在,但是解法有了更多的选择。

不可见性有望得到根本改变:其实真正的“不可见”并不是信息实体导致的,而是我们人脑对复杂问题理解的能力导致的。计算机的记忆力比人类强很多,现在有了人工智能的理解力的加持,或许,不可见在未来不再是一个根本问题。

总结一下的话就是1个坏消息和1个好消息

d6791cd199ce49725bd14d7e4de62318.png

一个坏消息:由于人工智能的到来,复杂性没有降低,而且还会增加。

一个好消息:由于人工智能的到来,我们的武器变强了,有了更多应对手段。

Part.4

需求分析能力将更为重要

有句话叫“好的开始是成功的一半”。需求分析其实从来就是一个极度重要的问题。需求分析从澄清业务目标、到设计需求方案,到明确业务规则,都需要非常结构化的方法。

人工智能能够在需求分析领域提供不小的帮助。类似于ChatGPT这样的大模型,已经阅读了这个世界上的大多数文字素材,知识很广博,对于通用的需求把握并不弱于人类专家。甚至已经有一些基于大模型的需求分析辅助工具,可以帮助我们编写看起来很不错的需求文档。

d580978bce2ce89fb7c0917ca328205e.png

所以,如果善用人工智能辅助需求分析的效率和质量都会有本质提升

但是人工智能没法解决的问题,是目标的定义和特定业务的问题。这也是优秀的产品经理的价值所在。本文不展开产品经理的话题,但是它是不是也是优秀的开发工程师的更好机会呢?我的看法是:是的。由于大模型的出现,软件开发的生产力将会大幅上升,全栈已经可以不仅仅是技术域的全栈了,而是可以向前延伸到需求和业务领域的全栈。所以,如果你本来就是一名优秀的开发工程师,我的看法是:绝好的机会来了。

“善用人工智能辅助”仍然是有门槛的。这时候,结构化的需求分析能力,就会变得非常重要。关于这个问题,我推荐何勉老师的“需求分析金字塔”给大家:

2ccc4fae1dbbe0e36ac0bec462d556ec.png

每个金字塔的层次下,都还包含了很多关键实践。这些实践本身很重要,我也看到了许多由于人工智能的引入带来的新的实践方法的机会,本文写不下这部分内容,我们后续专门展开。

Part.5

领域模型:非常关键!

在我看来, 在软件开发领域,再也没有一个其他问题,和领域模型一样重要但是却容易被忽略了。要不是沾了微服务和DDD的光,我相信到现在为止,很多技术人员也未必知道领域模型。


领域模型反映了一个领域中的关键概念及其之间的关系,是我们对现实世界的简化和思维映射,其实也是对布鲁克斯关于软件开发的本质复杂性的直接回应。没有好的领域模型, 软件开发势必是混乱的。只不过,由于造成软件开发效能损失的方面实在是太多了, 而由于很多人根本就不知道很多问题居然是因为缺乏好的领域模型导致的, 更加没法归因到它上面而已。

395372f7ee502ea9fa376d428a9de8ff.png

在大模型时代,软件开发必然会加速,而且需要人类和人工智能有效协同。那么,这时候是不是能很好地利用领域模型,就会成为一个重要的效率分水岭。用一个容易理解的比方,就是工具就像放大镜一样, 会放大不同能力的人和组织的差距。

当然,大模型时代的领域模型,如何定义,如何维护,这个是一个非常值得探讨的话题.......

Part.6

模块化、接口和契约,非常重要

相信凡是试验过使用ChatGPT编写代码的伙伴们都注意到了, ChatGPT对于小规模程序手到擒来,对于大规模的程序,如果直接让它编写,基本上没法工作。背后的原因很容易理解:

6ecc69d65cb03c19e23977efdbd8b189.png

人类需要对复杂的问题分而治之其实人工智能也是如此

分而治之是我们简化复杂性的重要手段。通过将大问题分解成高内聚、低耦合的小问题,把大问题模块化,然后定义清楚它们之间的边界,逐一解决,各个击破。同时由于模块化,我们还可以复用之前已经完成的工作,提高效率,避免重复劳动。

在人工智能时代,这一点变得更加重要。其实人工智能是可以帮助我们更好地做模块化的,但是它仍然需要人类工程师的指引和协作。你现在就好比是人工智能的老板,它是你的下手。作为老板,如果你自身对好的模块化理解很到位,自然助手也很高效。如果强大的人工智能面对的是个没事品味的“老板”,结果自然可想而知....

模块化的意义还远不止如此。类似于langchain等技术方案,已经为我们展示了在大模型时代的一些更好的服务协同和服务能力组装的方式。

db8907b19fc0abeee9e3e719de7dfab2.png

高质量的模块化、接口和契约,对于如何能发挥人工智能的架构能力,是一个特别值得重要的问题

Part.7

演进式设计,问题不变,方式值得重新思考


可变更性是软件的根本特征,持续演进能力,正如自然界的进化一样,都是本质。

d6f5725411a05424e3ed6f8c5a9ecf36.png

涉及到演进式设计的实践太多,我们无法逐一论述,选我认为重要的,直接给一些结论吧。

重构:重构在过去是一个极为重要的敏捷实践。这一点看Martin Fowler的经典著作《重构》的流行度就可以知道。重构在大模型时代,在契约明确的情况下,这个实践很可能会有重大变化。换句话说,当重写的成本极低,而且可靠性极高的情况下,小步重构的手法和重要性可能不再重要。

自动化测试:自动化测试是契约的保障,重要性不会降低。

测试驱动开发:经典的测试驱动开发方法会发生变化。更可能的方向:一个是人类用测试表达契约,或者在人工智能的辅助下表达契约,然后人工智能来负责具体的实现。另外,给大家报告一下,作为测试驱动开发的积极实践者,我最近使用测试驱动开发写代码的频率其实在降低——因为测试驱动开发的一个重要作用是降低认知负担,而人工智能已经可以在这方面提供许多帮助。

结对编程:一个好消息,如果你过去就认同结对编程的理念,也熟悉结对编程的方法,现在你一定是如鱼得水,因为你有了一个知识非常渊博的编程助手。人和人的结对编程不再是唯一的模式。更好的模式,是和AI结对编程。

持续集成:仍然重要。

整洁代码:最近的体会是,人工智能帮我写出来的代码,比我看到的“专业的人类程序员”写出来的,好太多。整洁代码,作为软件开发的入门级实践,或许真的已经不再那么重要了。相比过去推广起来的困难,训练一个学习能力更强的机器助手,其实容易的多。

Part.8

语言和框架

这几天我产生了一个念头——或许,ChatGPT产生在今天,而不是10年前,真的是命中注定——今天我们有了非常丰富的适合各种场景的编程语言,有了丰富的编程框架,有了类似于k8s这样的平台,人工智能在编程领域才有用武之地啊。如果没有这些,那么,靠AI自己创造语言,自己搭建平台吗?这个难度就太大了。

31a5cc04a0a9fbc359d294a1ee18f629.png

或许,我们这一代程序员,真的只是通向未来人工智能的BootLoader....

但是,作为技能,语言和框架的重要性未必降低,学习难度大幅下降了。基本的状态就是,对一名有一定积累的程序员——随便什么语言,在AI的帮助下都可以轻松编写和阅读!写起来也快多了,现在已经是Tab-Tab-Tab了,也许,过不了多久,就真的很少动手亲自写了,大多数工作,都是人工智能代劳。

2faa98ba72031595a31b0639e7dd6492.png

作为建议:扩大对设计能力的投资,降低对语言和框架的投资。

如果你本来就是语言和框架的专职维护者的人除外。

最后,继续推荐一下我自己的《软件设计:从专业到卓越》。

d7439672ef2ac9aff6109a0abbe3aedf.jpeg

昨天图灵出版社的武老师告诉我说,这本书第2次重印了。看起来还不错,其实我觉得还是没反映出它本来的价值,应该被更多人看到。这本书写了很久,凝结了我过去十几年对软件设计的思考,很开心的看到,大多数实践在大模型时代仍然有价值,而且很多价值更加凸显。所以如果没有读过的同学,建议看一下,应该有一定的参考价值。我尽量写的深入浅出,如果有内容上的意见和建议,也欢迎通过这个公众号吐槽。

写了很久,如果有用 还请顺手点赞转发🌹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/61522.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独家对话黄仁勋:关于生成式AI、算力能耗的一些追问

来源:与非网eefocus 作者:张慧娟 随着ChatGPT的爆火,黄仁勋最近频频强调:“我们正处于AI的iPhone时刻”。GTC上,他对媒体详解了这一观点的由来,在他看来——一个新的计算平台已经开发出来了。 过去大约每15…

被“误解”的游戏开发者

如果让我站在自己的角度用一句话概括这个游戏开发这个专业,我必须要说:游戏开发是个“坑”,而且是个“天坑”。 作者 | 开发游戏的老王 责编 | 梦依丹 出品 | CSDN(ID:CSDNnews) 各位游戏开发者大家好…

情系儿童,暖席番禺——绿日同学公益组织青少年开展同辈关怀活动

“谢谢你(们)来了!” 近日,训练营学员来到了洛浦街南浦西一村小s(化名)家,并将“东风快递”送到了小s手上。小s迫不及待的打开礼物并与“妈妈”分享着收到礼物后的快乐。 小s开心地与当“妈妈”…

第一次参加幼儿园家长开放日活动

今天,第一次参加孩子在幼儿园的家长开放日活动,能有这样一个机会近距离感受孩子在幼儿园生活情况,观看孩子在幼儿园生活的点点滴滴。 作为家长的我心情无比激动,昨晚竟然激动到睡不到觉,然后今天一大早就起床准备。 在…

白下高新区妇联、科协举办亲子活动,小朋友们走进云创大数据

为了让白下高新区员工及子女感受到高新区妇联的关怀,从而进一步增强对企业的认同感和归属感,营造和谐幸福的企业文化氛围,也为孩子们的茁长成长撑起一片天,7月31日,高新区妇联、科协联合钟晓敏爱心工作室举办了亲子活动…

GP官网上的TEE学习课程和费用介绍

★★★ 个人博客导读首页—点击此处 ★★★ 在optee的官网上,我们可以看到有TEE/SE等相关的培训课程,竟然要好几十万… 我们交不起学费,但我们可以参照其课程目录进行学习!!! TEE Technical Specification…

送给孩子的趣味通信课

谨以此文,送给天下所有的孩子 也送给我的女儿(她今天过生日) 也希望这篇PPT,能够帮到所有当父母的通信人 祝你们永远快乐! 作者:小枣君、姚士鸵 注:图片全部来自网络,侵权请联系删除…

Campus Talking 小记(6)

Let us to make our app 在前一段时间中,我有几场面试,所以耽误了一段时间,所以现在与个各位见面,今天本来是去进行底部导航栏第二部分的一个编写,也就是一个视频模块的编写,但是由于一些问题没有解决&…

情系儿童 暖席广州

导语:新修订的《中华人民共和国未成年人保护法》于2021年6月1日正式实施,为全面贯彻新未成年人保护法(简称:未保法)的宣传工作,广泛凝聚保护未成年人合法权益的社会共识,推动未保工作的深入开展…

c语言幼儿园积木游戏,干货来袭!超详细幼儿园游戏活动教案

原标题:干货来袭!超详细幼儿园游戏活动教案 育儿 干货 幼儿园游戏详细教案 运乒乓球 1 游戏目的 练习推爬、持物走,提高身体的协调性和平衡能力。 游戏准备 1、自制车轮箱,奶箱,易拉罐梅花桩,乒乓球&#x…

定向寻宝亲子活动设计思路和实操(附2019最新教程)

亲子定向为什么一直深受家长和孩子的喜爱?总结有以下3点 1.寓教于乐,锻炼幼儿能力 作为而儿童运动的一种,定向寻宝具有智力和体力并重的特点。孩子可以在与大自然的接触中,分享活动乐趣、体会亲子温情,同时提升运动和…

Campus Talking 小记(2)

Let us to make our app 根据昨天的进度,我们已经制作了我们的启动页面,有一个启动页面是不是很有正规app的那个味儿,哈哈哈哈,反正我是这么想的。在做了一个启动页面之后,我们来到了登陆页面。(我的项目编…

真人CS、趣味拓展、空中断桥、越野车、露营 2天亲子活动方案

真人CS、趣味拓展、空中断桥、越野车、露营 2天亲子活动方案 时间安排 项目安排 第一天 08:00-09:30 集合,清点人数,乘车前往指定拓展基地 09:30-12:00 团队熔炼:破冰分组、团队建设、团队展示 挑战项目:亲子CS 12:00-13…

面对疫情 你可以这样面对—番禺区青少年儿童综合能力训练营开营

近段时间,新冠疫情在全国多点出现,部分青少年因此出现情绪困扰,日前,由区民政局指导、区慈善会主办、区社联会承办的区第七届公益慈善创投资助项目——“牵手成长”番禺区青少年儿童综合能力提升训练营(下文简称“训练…

关注流动儿童心理健康,这场亲子营游学活动很“有爱”

近日,由广州市组织管理局、中共广州市社会组织委员会、广州市社会组织联合会指导,广州市福彩公益金资助,广州市为本社会心理慈善服务中心承办,第八届广州市社会组织公益创投“爱无限心关爱”助力健康中国共筑成长路——流动儿童心…

2019美团点评笔试编程题(A~Z美团骑手)

晚了17分钟。17:17分做出来了。。。。但是我由于迟到了五十分钟才开始的,美团竟然不像腾讯一样,迟到时间不计算。唉无缘了。前面的选择题真的好几道不看就狂选,节约时间。还有那个伪代码论述题是关于 “六度空间理论”&#xff0c…

“我培训完JAVA,进了美团,美团氛围特别好,就是送餐特别累”

周末不想做饭,外面又下了点小雨,于是点了个外卖,没过多久外卖小哥就到了,门敞着,我斜躺在沙发上刷《神盾局》第七季,示意小哥放在桌子上就可以了。 小哥把餐盒放在桌子上,瞥见我桌上的一本《JAV…

学python能赚什么外卖-用python模拟美团外卖骑手推送请求

项目中接入了美团外卖配送接口,当骑手进行接单、取货等操作时,会将这些操作推送到第三方系统中,在测试环境下,并没有真正的骑手会接单,我们需要模拟正式环境推送的信息,此时就可以用python模拟请求来进行这…

美团面试经验分享

本文面试题是转载于:程序员乔戈里,因为作者只是描述面试问题的过程,我这里对面试问题做详细补充。 一面 1、自我介绍 答:自我介绍是面试中唯一的自己主动介绍自己的环节,一定要好好把握好,你数据结构学的…

三面美团测开岗,HR 现场直接发 offer,他是横着走出来的

前情提要 这是一个发生在我朋友身上的真实事情: 这里就叫他程序员 Y 吧。 程序员 Y 工作不到两年,周末在朋友圈发了个喜报,准备入职美团。 之后,我就带着祝福跟 Y 聊了许久,聊天的内容就是具体了解一下他面试的过程…