软件开发正在发生重大变革

软件开发正迎来一次前所未有的范式变革。人工智能的飞速发展,特别大模型所取得的成功,无论是在软件本身的形态上,还是在软件开发的方式上,都带来了巨大的提升机会。

软件开发正在发生重大变革

从软件自身的形态上来看,目前以图形化为主的交互模式很可能会逐渐转变为以自然语言交互为主。

从业务逻辑的角度来看,目前的预定义表单结构和预定义业务逻辑主要是为了适应计算机确定性计算的结构。在智能化场景下,输入输出和业务流程必然会变得更加灵活。相应地,软件中的智能化组件也会越来越多。

从软件开发方式上来看,虽然当前的架构、开发和运维有逐步融合的趋势,但由于每个岗位都有不同的能力要求和技术背景,现实中协作起来并不容易。即使是在开发内部,前端所需的技能栈和后端所需的技能栈也有很大差异,只有很少的人能够实现全栈式开发。而LLM的出现将极大地改变当前的工作方式。

首先,编写代码将变得更快。基于LLM的应用,如ChatGPT、Github copilot等,能力越来越强,只要你给到LLM的指令足够明确,大多数代码已经能够自动生成,不再需要人工编写。

其次,不同编程语言和技术栈的细节性差异不再重要。即使你对某些语法细节或技术背景不够了解,也不会成为阻碍,不会影响高效交付高质量代码的能力。类似于缺陷定位等较为复杂的问题,只要对基本的技术原理有所了解,在LLM的帮助下,也可以很容易地完成。

最后,不同工种之间的距离开始变小。LLM的价值远不止于编码。它可以编写高质量的测试用例,可以帮助编写架构方案,可以帮助发现需求设计中的潜在问题等等。一个经验丰富的工程师完全可以在LLM的支持下独立完成过去需要多个工种配合才能完成的工作。即使仍然存在专业分工,也会更容易地进行交流和更好地协作。

在这种情况下,能否更好地利用LLM成为软件工程师生产效率的关键分水岭。利用LLM完成工作的能力是当今时代软件工程师的关键技能。

然而,这是不是说,专业能力就不再重要了呢?恰恰相反,在大语言模型时代,专业技能的重要性不仅没有降低,反而比以往更加重要。

专业技能比以往更加重要

LLM是能力放大器。它完成的任务能力,取决于你对于软件工程的认知水平。为什么有些人给LLM提出的编码需求,它总是可以高质量完成并且没有缺陷, 而另外一些人提出的需求,就会答非所问,产生的代码完全不能用?

这本质上是因为任务分解能力和专业沟通能力的差异,例如:

• 是否把大问题合理地拆解为较小规模的问题?

• 是否明确地描述了问题背景、任务的目标以及输出要求?

这种能力差异的背后是对于软件工程的认知。例如:

• 如果你对领域模型有很好的认知,就会更好地、无歧义地沟通业务背景和需求。

• 如果你对测试先行、测试驱动有很好的认知,就会写出明确的设计契约。

• 如果你对演进式设计有很好的认知,就会从简单到复杂、逐步演进设计结果,而不是一上来就试图完成非常复杂的需求。

所以,和LLM协作的人类工程师水平越高,LLM的表现就越好。是人类工程师的能力,而不是LLM的能力,决定了和LLM进行协作式开发的上限。

一本软件设计必读图书

如何提高软件设计能力,推荐一本《软件设计:从专业到卓越》。全书共 12 章,按照软件工程师技能提升的顺序,分为品味篇、专业篇和卓越篇。

这三部分分别覆盖了认知和技能提升的 3 个层次:辨别什么是好的设计,提升专业素养,以及掌握卓越开发实践。

书中列出的编程实践互为支撑,背后有着清晰的理论主线:一个根本挑战、两大核心价值、三大设计原则,也是作者提出的"精益编程实践"。

阿里巴巴资深技术专家、《精益产品开发:原则、方法与实践》作者何勉在本书的序中写道:"程序员是职业焦虑感最强的职业之一。工程师们渴望快速成长,然而得成长法门者并不多。这本书为程序员走向卓越带来了系统、实用的指导。希望你能和我一样享受阅读本书的过程,沉浸在设计之美中。更祝愿本书能陪伴你的职业上升之路。"

《软件设计:从专业到卓越》张刚 | 著

作者张刚,复旦大学软件工程博士, 前阿里巴巴P9技术专家, 贝尔实验室杰出工程师。在软件研发领域有20多年一线实践经验,本书是作者的匠心之作,目前在豆瓣评分9.9, 是非常罕见的高分图书。

这本书特别关注了软件工程师能力的全面性和系统性,可作为一线工程师和团队的能力提升路线图。许多公司已将其作为官方学习资料进行集体学习,以形成设计共识、提升研发效能。

相关推荐
java小吕布29 分钟前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
Goboy1 小时前
工欲善其事,必先利其器;小白入门Hadoop必备过程
后端·程序员
李少兄1 小时前
解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误
java·spring boot·后端
代码小鑫2 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
Json____2 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
monkey_meng2 小时前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss2 小时前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
zxg_神说要有光2 小时前
自由职业第二年,我忘记了为什么出发
前端·javascript·程序员
大鲤余3 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust
她说彩礼65万3 小时前
Asp.NET Core Mvc中一个视图怎么设置多个强数据类型
后端·asp.net·mvc