阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

如何锻炼开发人员“简单设计”的思维力?

  • 2019-10-25
  • 本文字数:1791 字

    阅读完需:约 6 分钟

如何锻炼开发人员“简单设计”的思维力?

Story 场景树, 主要是要帮助开发人员, 锻练 “简单设计” 的思维;当经过一段时间的锻练后, 开发人员就可没有 “必要” 的再使用 Story 场景树进行简单设计。因为, 开发人员已能将软件架构浮现在脑海中, 并能自然而然的思考出简单设计。


软件开发的过程中, 不做简单设计, 软件开发就永远做不好。


但是, 简单设计假如只是写写文档, 而不能指导开发, 这样的简单设计, 就只是在瞎折腾。


简单设计能指导开发, 指的是: 代码隔离:


简单设计能使开发人员, 在开发前, 有一清晰且明确的指导地图; 开发人员沿著这指导地图, 便可开发出高质量的代码。使得代码不仅能符合各个质量属性上的要求, 更能使代码具备好的 “隔离“; 不会因后续需求上的变更, 而产生新的缺陷或失败。


测试用例定义“开发完成”的标准:


简单设计能使开发人员, 在开发前, 便设计出测试用例; 使得开发人员可明确的定义, 每日所开发的 TASK, 完成的标准是什么? 需通过那些测试用例的场景?


每日目标(风险)管理:


简单设计能使开发人员, 明确且客观的做出结论: 今天该完成的 TASK 完成了没? 假如, 没完成, 真正的问题是什么? 该寻求什么样的协助?

简单设计要如何做?

有的人是天生就会的。


而大部分的我们,简单设计的思维,是需要经过一段时间锻练的,不是天生就会的。


Matei Zaharia; Spark 开发的主导者。

Matei 当在用 Scala 开发 Spark 时, 并没有做所谓的简单设计。

Matei 在开发前, 会先在脑中清楚的浮现出软件的架构。

Matei 便照着脑中的软件架构, 开发完了一行又一行伟大的代码。

Matei 每次在开发完一段代码后, 便会根据代码的弱点, 设计所谓 “灾难测试” 的测试用例;测试自己所开发的代码,在架构上的弱点为何?


敏捷开发与软件工程实践;如:Story 场景树;对 Matei 而言,是完全没有“必要”的。因为, Matei “天生”就会简单设计了。


Story 场景树,主要是要帮助开发人员,锻练“简单设计”的思维;当经过一段时间的锻练后, 开发人员就可没有 “必要” 的再使用 Story 场景树进行简单设计。因为, 开发人员已能将软件架构浮现在脑海中, 并能自然而然的思考出简单设计。


为何 Story 场景树,可帮助开发人员,锻练“简单设计”的思维?


因为, Story 场景树够可视化,够轻量级;放在ㄧ个脑袋里,绰绰有余。



Story 场景树: 可视化、轻量级的开发人员指导地图


从图中的 Story 场景树中, 清楚的指导著开发人员在“客户租 CD” 的这个 Story 中, 总共有 3 个关注点所产生的 3 个 TASKs 需完成开发; 分别是:


1.获取客户租 CD 的数据 (历史数据)。


2.校验客户已租的 CD 片数是否已超过 3 片?


3.计算客户所租的 CD 需归还的日期。


开发人员亦可在图一的 Story 场景树中, 分析、标示每个将进行开发的 TASK 需调用的外部接口。


开发人员按照 Story 场景树中的 TASK,进行代码上的隔离;使得 Story 不会因后续某个 TASK 需求上的变更, 而使得其他的 TASKs 引入新的缺陷或失败。


例如:开发人员从图一的场景树中很清晰的就能分析出: “TASK 获取客户租 CD 的数据(历史数据)” 与 “TASK 计算客户所租的 CD 需归还的日期”, 需要进行代码上的隔离。因为, 开发人员希望当 “TASK 计算客户所租的 CD 需归还的日期” 的运算逻辑的代码改变时, 不致于会在 “TASK 获取客户租 CD 的数据(历史数据)” 中引入新的缺陷或失败。


当然, 代码隔离的实现方式可藉由不同的接口或是适当的引用设计模式 (Design Patterns) 来完成。


更重要的是 : 开发人员亦可从图一的 Story 场景树中, 设计每个将进行开发的 TASK 所需的“测试用例”; 当开发人员能设计出 TASK 相对应的测试用例时, 所代表的意义不仅是开发人员已能充分的理解了需求, 更说明了开发人员已能从 TASK 相对应的测试用例中, 明确的定义出 “TASK 完成的标准”。


当开发人员已能从 TASK 相对应的测试用例中, 明确的定义 “TASK 完成的标准” 时, 开发人员便能明确且客观的做出结论:


1.今天该完成的 TASK 完成了没?


2.假如,没完成,真正的问题是什么?该寻求什么样的协助?

结论

拥有 “简单设计思维” 的开发人员, 永远是在用 “脑” 驱动著手, 产生一行又一行伟大的代码。之所以称之为一行又一行伟大的代码, 是因为, 每一行代码永远都是能随著时间的推移, 而能持续的演进; 演进的过程中, 却依然保持著健康、强壮。伟大的代码就宛如是拥有强健生命的有机体。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/IEFsYqDd850oaGOqYl3glQ


2019-10-25 19:04599

评论

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

Spring Boot「12」自定义 starter

Samson

Java spring 学习笔记 spring-boot 10月月更

栈和队列的实现

lovevivi

c 数据结构 10月月更

举三反一,一通百通的“数学脑”是怎样炼成的?

图灵教育

数学 科普

Vue组件入门(十三)作用域插槽

Augus

Vue 10月月更

Java线程池submit阻塞获取结果实现原理

JAVA旭阳

Java 线程池 10月月更

golang中的nil接收器

六月的

golang nil

决胜AI金融新赛道!Python Quants 创始人分享宝贵 AI 算法交易经验

图灵教育

人工智能

【愚公系列】2022年10月 Go教学课程 037-面向对象综合案例-微博

愚公搬代码

10月月更

Excel 文档的写入

智趣匠

Python Monad Excel数据分析 10月月更

运维进阶训练营-W01H

赤色闪电

运维

曾国藩正面与侧面2

dfuru

3:表的基本操作-MySQL

Yeats_Liao

数据库 后端 10月月更

“程”风破浪的开发者|我的Docker学习小妙招

学习方法 “程”风破浪的开发者

直接插入排序算法,看这篇就够了

游坦之

算法 10月月更

eBPF深度探索: 高效DNS监控实现

俞凡

ebpf

1024@程序员:图灵社区福利来了,请本人签收

图灵教育

程序员节

【JavaWeb】 Mybatis-01-Mybatis的简介:用对话的方式让你明白为什么要使用Mybatis

游坦之

10月月更

嵌入式 Linux 入门(三、Linux Shell 及常用命令说明)

矜辰所致

Linux Shell 10月月更 Shell命令

二叉树的详细实现(含递归展开图)

lovevivi

c 数据结构 10月月更

1:安装、连接以及配置-MySQL

Yeats_Liao

数据库 后端 10月月更

2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集 。 比方说,如果 nums =

福大大架构师每日一题

算法 rust 福大大

“程”风破浪的开发者|我的学习方法

张立梵

学习方法 “程”风破浪的开发者

“程”风破浪的开发者|HTML知识框架整理

默默的成长

Web3.0 “程”风破浪的开发者

“程”风破浪的开发者|我的数据结构和算法学习小技巧

Albert

学习方法 算法 LeetCode “程”风破浪的开发者

【web 开发基础】PHP 快速入门(8)-PHP 运算符之逻辑运算符详解

迷彩

逻辑运算符 10月月更 web开发基础 PHP基础

【一Go到底】第二十三天---字符串函数详解

指剑

Go golang 10月月更

极客时间 - 运维进阶训练营 - 第一周作业

dog_brother

Docker 镜像 linux namespace

分享5个可能用得上的JavaScript 库

devpoint

JavaScript i18n

【资损】资损防控的系统规范-内部接口类设计

小明Java问道之路

架构 微服务 安全 10月月更 资损

Java线程池源码深度解析

JAVA旭阳

Java 线程池 10月月更

2:数据库的基本操作-MySQL

Yeats_Liao

数据库 后端 10月月更

如何锻炼开发人员“简单设计”的思维力?_文化 & 方法_方俊賢_InfoQ精选文章