写点什么

QCon SF 闭幕主题演讲:软件设计是一种人际关系活动

作者:Shane Hastie

  • 2022-12-16
    北京
  • 本文字数:1789 字

    阅读完需:约 6 分钟

QCon SF闭幕主题演讲:软件设计是一种人际关系活动

Kent Beck敏捷软件开发宣言的最初签署人之一(按字母顺序排在第一位的签署人),他在本周的QCon旧金山大会上发表了闭幕主题演讲。他演讲的题目是“整洁第一?(Tidy First)”,这也是他即将出版的新书的名字。

 

首先,他介绍了自己的个人使命:帮助极客们在这个世界上获得安全感。关于这一点,他在一篇发表在Facebook的博文中解释过。

 

他谈到,最近重读了 Ed Yourdon 和 Larry Constantine 的著作《结构化设计》。按照他的说法,这本书里包含软件开发的牛顿定律;对于如今的编程来说,其中的概念和思想还和这本书刚出版时一样重要。书中介绍的耦合和内聚两个概念,即使在今天,也仍然是软件工程的一大挑战,就像这本书在 1975 年出版时一样。

 

他说,他花了 17 年的时间才学会如何解释软件设计中的内聚概念,以此为契机,他写了一系列三本书来探索软件设计。感兴趣的读者,可以在Substack上阅读。

 

他说:

软件设计是一种人际关系活动。


正是通过探索这些关系,软件系统才出现在了这个世界上。

 

第一个关系是希望探索的想法和将想法变成现实的行为之间的关系。这种关系是双向的,是不断发展的——想法定义了行为,行为的存在可以催生更多的想法(“现在我看到了这个,那么那个呢……”)。在思想和行为的背后是系统结构,也就是架构,它对可见行为有着深远的影响。

 

系统结构对行为有着深远的影响,对因行为改变而产生的想法也有深远的影响。结构影响行为,从而产生新的想法,催生行为更改需求,进而影响结构,不断循环。在“整洁第一”工作流中,我们得以暂停一下,问问自己是否需要更改结构,或者只需更改行为。如果更改影响了结构,那么要首先整理下结构——根据需要重构底层架构。不要试图同时更改结构和行为,因为那会导致系统陷入技术债务。

 

他说,在构建系统时,特别是在必须更改系统时,涉及两种视角,分别是等待者(waiters)和变更者(changers)。等待者有了想法,就会希望尽快更改行为,尝试新事物;变更者则必须维护代码,并整理结构,为的是可以安全地更改行为。

 

当有多个变更者负责同一产品的不同领域时,复杂性会进一步增加。等待者的动机和不同变更者的竞争性动机之间很可能出现关系紧张的情况。

 

软件设计技能就在于保持不同生产者以及变更者和等待者之间的良好关系。

 

通常,变更者在收到更改产品的请求时会面临这样的问题:“这段代码很乱——我应该先整理再更改吗?”这个问题的答案通常很教条:当然应该或者当然不应该——我们希望尽快更改,并且希望可以保证代码库不受技术债务的影响。遗憾的是,两者无法兼得。我们需要做出决策,而正确的答案只能是“视情况而定”。

 

为了说明等待者-变更者生态系统中的不同关系,他画了下面这幅图:



然后,他解释了为什么大量的前期设计在 20 世纪 90 年代是一个馊主意,而且直到今天仍然是一个馊主意。他说,瀑布式开发又回来了,有些组织再次尝试根据预先定义好的时间、成本和范围来定义软件开发的成功与否。他还解释了为什么增量迭代开发始终是构建软件系统最经济可靠的方法,而且如今更是如此。

 

他讨论了Constantine的对等概念:软件系统的实际成本是更改系统的成本。在系统的生命周期中,维护系统的成本将使初始开发成本在整体投资中的占比变得很小。然后,他展示了维护产品的成本如何与系统耦合的成本直接相关。对系统中一个元素的更改导致了对另一个元素的级联更改,进而又导致了对另一个元素的更改,诸如此类……

 

系统的总体成本可以看作是系统元素的耦合成本与解耦成本之和(他用了元素这个词,代码的实际性质和我们这里介绍的内容没有关系——那可以是函数、远程过程、微服务或任何其他相关的组件)。

 

系统的底层结构(架构、设计)是耦合/解耦问题中最重要的一个因素。

 

当考虑更改系统时,可能大多数情况下都是在没有多少级联耦合的部分进行,然而,在产品的生命周期中,可能有一些巨大的更改——其中耦合级联如此之大,以致更改成本变成了天文数字。在系统的使用周期中,这些巨大的更改很可能占了维护成本的绝大部分。



最后,他鼓励听众进行小幅增量更改,尽可能保持系统结构的整洁与解耦,并采取“整洁优先”的方法进行软件维护。

 

原文链接:

https://www.infoq.com/news/2022/10/beck-design-human-relationships/


相关阅读:

只擅长构建软件是不够的,我们必须擅长构建可测试的软件 | QCon

为下一个 Log4Shell 漏洞做好准备 | QCon

如何使用区块链构建 Web 3.0 基础设施|QCon

2022-12-16 08:004845

评论

发布
暂无评论
发现更多内容

开放原子全球开源峰会,全面升级再出发!

开放原子开源基金会

开源 软件 创新 峰会 全球

视频剪辑调色:达芬奇DaVinci Resolve Studio 18 Mac版

真大的脸盆

Mac 视频剪辑 Mac 软件 视频调色 视频剪辑调色软件

App复杂动画实现——Rive保姆级教程 | 京东云技术团队

京东科技开发者

京东云 企业号 4 月 PK 榜 rive

【Linux】iptables之防火墙的应用及案例、策略、备份与还原(2)

A-刘晨阳

Linux iptables 防火墙规则 三周年连更

eBPF的发展演进---从石器时代到成为神(一)

统信软件

Linux 内核 Linux内核

为什么说得帆的CRM是低代码PaaS赛道最好的CRM?

得帆信息

低代码 CRM 低代码平台

玩转Redis|学会这10点让你分分钟拿下Redis,满足你的一切疑问

浅羽技术

Java 数据库 redis 缓存 三周年连更

京东小程序接入ARVR的技术方案和性能调优 | 京东云技术团队

京东科技开发者

小程序 人脸识别 京东云 企业号 4 月 PK 榜 ARVR

SpringBoot之如何实现热部署|超级详细,建议收藏

bug菌

Spring Boot 热部署 三周年连更

Node工程的依赖包管理方式 | 京东云技术团队

京东科技开发者

JavaScript node.js 前端 京东云 企业号 4 月 PK 榜

全栈开发实战|​电子商务平台的设计与实现(Spring Boot + MyBatis + Thymeleaf)

TiAmo

Spring Boot mybatis thymeleaf 全栈开发 三周年连更

长连接Netty服务内存泄漏,看我如何一步步捉“虫”解决 | 京东云技术团队

京东科技开发者

内存泄露 京东云 netty 企业号 4 月 PK 榜

Image Search-这是你的图像搜索

六月的雨在InfoQ

OSS 图像搜索 三周年连更 Image Search

算法题每日一练:全排列

知心宝贝

数据结构 算法 前端 后端 三周年连更

Spring中事务嵌套使用一定得警惕这个问题了!

Java你猿哥

spring SSM框架 spring cloud

一文读懂Redis哨兵

京茶吉鹿

数据库 nosql redis哨兵

Vue 实现图片监听鼠标滑轮滚动实现图片缩小放大功能

肥晨

js 特效 三周年连更

CDP实操篇03:自检清单,您的企业适合实施CDP吗?

游读分享

Unity 之 超级实用的小技巧

陈言必行

Unity 三周年连更

Orillusion荣获SegmentFault AIGC Hackathon 2023 线上黑客马拉松赛二等奖&最佳创意奖

Orillusion

开源 元宇宙 webgpu AIGC ChatGPT

ArkCompiler开发

坚果

OpenHarmony 三周年连更

「Go框架」深入理解gin框中Context的Request和Writer对象

Go学堂

golang 开源 程序员 个人提升

跨平台应用开发进阶(五十四):Android APP调试工具:ADB

No Silver Bullet

android adb 跨平台应用开发 三周年连更 APP调试工具

MySQL 移动数据目录后启动失败

GreatSQL

申请chatGPT账号

石云升

AI ChatGPT 三周年连更

使用 buildx 构建跨平台镜像

江湖十年

Docker docker build Docker 镜像

使用MASA全家桶从零开始搭建IoT平台(一)环境准备

MASA技术团队

.net IoT MASA

太强了,全面解析缓存应用经典问题

架构精进之路

缓存 后端 Redis 核心技术与实战 三周年连更

财联社专访 | 澜舟科技周明:大模型的落地场景是关键,B端市场是应用富矿

澜舟孟子开源社区

大模型 认知智能 AIGC 澜舟科技

不同编程语言的程序,能够被 ChatGPT 自动生成的可能性的一些思考

汪子熙

人工智能 神经网络 机器学习 深度学习 三周年连更

16种国际版多语言点赞抖音分享点赞任务平台网站APP源码搭建

网站,小程序,APP开发定制

QCon SF闭幕主题演讲:软件设计是一种人际关系活动_文化 & 方法_InfoQ精选文章