不为有趣之事,何遣有涯之生
不失其所者久,死而不亡者寿

软件心学格物致知篇(6) 愿望清单(下篇)

前言

上一篇我们介绍了愿望清单的两种表现形式:企业战略与客户需求。

本篇会继续介绍愿望清单的其它表现形式并尝试剖析下愿望清单的本质是什么。

愿望清单之架构设计指标

软件工程中,在开发一个系统的时候,需要做的一件事情就是架构设计。

架构在行业内还未有一个明确的定义,通俗的讲架构就是代码的组织形式。它的分类也有很多种,可以按实现层次、技术风格、关注方向等划分。

这里关注的重点不是如何做架构,而是谈谈在很多所谓的架构设计指标中也充斥着愿望清单的味道。

根据愿望清单设计出来的架构,往往也很难符合实际要求。

一般对于系统架构方面的需求会描述在非功能性需求中,架构师会根据这些需求进行合理的架构设计,但是实际情况是很多非功能性需求也是愿望清单。

来举个例子,你或许可以在很多的PRD(产品需求规格说明书)文档的非功能性章节中看到类似的内容:

1.系统要保证高性能
2.系统要留有充分的扩展空间,以适应未来发展的需要
3.系统的并发量不少于1000
4.页面查询时间不少于1秒,接口调用时间不得少于1秒
.......

在这里插入图片描述

以上内容都摘录自真实的项目需求文档,前两点的描述非常主观。

什么是高性能?每个人都有自己的看法,什么叫充分的扩展空间?多少充分算充分?适应未来多久的发展?1年还是5年还是10年?可谓是典型的愿望清单。

后两点伪装的比较好,但也属于愿望清单型的架构指标。

这两点虽然给了具体的指标,其实也存在很大问题:

一个系统有很多的功能,有用户不太经常使用的功能和有用户经常使用的核心功能。

明显两类服务要求的并发量应该是不一样的,对于前者上面描述的并发量绰绰有余,而对于后者又明显不够。

退一步来说,假设列出的数值都能满足的话,那也是属于过度设计。

其中浪费的成本由甲方承担还是由乙方承担呢?

第四点存在的问题和上面的一样,就不再赘述了。

这里可以给一个关于系统响应时间上恰当的描述示例:

系统在95%的情况下,一般时段响应时间不超过1.5秒,高峰时段不超过4秒。
定位系统从点击到第一个界面显示出来所需要的时间不得超过300毫秒。
在网络畅通时,拨号连接GPRS网络所需时间不得超过5秒。
在网络畅通时,电子地图刷新时间不超过10秒。
在推荐配置环境下:登录响应时间在2秒内,刷新栏目响应时间在2秒内,刷新条目分页列表响应时间2秒内,打开信息条目响应时间1秒内,刷新部门、人员列表响应时间2秒内。
在非高峰时间根据编号和名称特定条件进行搜索,可以在3秒内得到搜索结果。

有经验的架构师都知道一个项目中各种资源是有限的,每一次架构的选择都是对于实际业务场景下各方面综合考虑后权衡的结果,是对具体场景的妥协。

只有经验不足的架构师才会觉得可以做到既要又要还要的面面俱到型架构。

不同的行业,系统架构往往不太一样。即使是相同的行业,只要其业务模型流程不一样,其架构也肯定是不一样的。

做架构要理解和顺应硬件天性别让硬盘抗性能,别让内存存太久,别强求网络一直稳定

做架构要顺应客观事物发展的天性损有余而补不足

需要节省存储空间时,可以采用数据压缩,用算力换IO和空间;想提升复杂计算后的数据获取速度时,可以采用对计算结果进行缓存的机制,用空间和IO换算力。

希望你下一次在非功能性需求中看到愿望清单时能够清楚的识别出来。

愿望清单之学习目标

人人都羡慕领居家的孩子,德智体美劳全面发展。

这不老李也是,老李家孩子成绩不好,老李也很是着急啊。眼看着孩子还有一年就中考了,不做点什么是不行了。

于是老李制订了两个措施。

第一,给孩子买了一大堆学霸攻略,有书有视频教程,主要是让他孩子看看那些学霸们是如何学习的,然后去模仿他们;

第二,给孩子定下目标,在本学期内进入年级前100名,以及把英语这个短板补上。

请问如果你有孩子,也面临着老李一样的困境,你认为老李给孩子定的学习目标怎么样?

如果你是老李的孩子,面对父亲制订的学习目标,你是怎么想的呢?

在这里插入图片描述

我觉得和老李一样操心的父母亲可能不在少数。

但是很抱歉,你列的不是给孩子的学习目标,而是写给你们自己的愿望清单。

而孩子们也会和老李的孩子一样,面对这样的愿望清单无所适从。

影响一个孩子学习成绩的因素有太多了,只是模仿别人的学习方法,对孩子自身可能未必有效。

本学期进入前100名,怎么进入?现在的差距是多少?每门功课分别需要提升多少分?每门功课的薄弱点在哪?短板科目问题在哪?可提升的空间有多少?需要做哪些准备?采用哪些方式手段?

作为父母如果不弄清楚以上这些问题,而只是给孩子定个达成目标,然后买一堆书报几门课,那孩子面对你制订的愿望清单,必然会无所适从。

愿望清单的本质

我们回到历史中看看,在共产党建立之初,当时指挥中国共产党的是一些共产国际干部,很多是苏联老大哥那边派遣过来的。

当时那些人指导中国革命也是凭着一份愿望清单:你看,苏联革命的经验有这些条,其中最适合我们当前局面的应该是第几条,根据苏联革命的速度来看,我们现在应该尽快夺取几个大城市......

在这里插入图片描述

我们现在都知道上面提及的革命方针都是错误的,脱离实际没有从中国国情出发,也没有找到当时主要矛盾点。

再从之前几个示例中,我们可以发现愿望清单的一些共同特点,警惕这些特点有助于我们识别出伪装成愿望清单的企业战略、客户需求、架构设计指标、学习目标......

•特点1只给目标不给实现路径/原因,像上面例子中的学习目标、企业战略就是只给出目标,没有给实现路径。而客户需求属于只给了目标而没有给原因,从而错把客户提出的伪需求当成了真实需求。

特点2一边抄作业一边定目标,像上面的企业战略、架构设计指标往往都是抄作业的结果,没有考虑到自身的实际情况,看到别的战略或系统是怎么设计的,自己抄一个过来,也不管是不是适合。

要知道不管是企业战略还是架构设计都是相当复杂的事情。

需要相当专业的人员通过对实际情况的充分调研与分析,然后一步步才能制订出来。

绝对不是拿出一本所谓的战略指南或架构指南,然后开始抄作业。

在这里插入图片描述

回顾我们现代社会中企业战略制定、客户需求挖掘、软件系统设计都充满着愿望清单的味道。

不由的要发出感叹:东施效颦的故事已经过去很久,但是在现代社会中却仍然每天都在上演。

未经允许不得转载:菡萏如佳人 » 软件心学格物致知篇(6)

评论 抢沙发

评论前必须登录!

 

欢迎加入极客江湖

进入江湖关于作者