2015年第10本:《简约之美,软件设计之道》

《简约之美》这本书是够简约的,100页,还有不少的留白处。现在的出版商流行《xxx之美》之风,看过了《数学之美》、《架构之美》、《数据之美》……好几本这样名字的书。这本书一开始好像在从哲学的角度来分析软件设计中什么才是最重要的,想把软件设计纳入科学的领域。书中新的内容不多,但有几个观点还是给我留下了深刻的印象,更多地是强调软件维护的重要性。

“花更多的时间把程序写简单,相比一开始随意拼凑些代码再花大量的时间去理解,要快得多。”

所以需要不断地重构,否则自己都不愿看以前的代码。

“全部软件都有一个相同的目标:帮助其他人。”

看来我把软件定位于赚钱是不是有点急功尽利了?如果你的软件给人以极大的帮助,钱可能就会随之而来了吧,没赚钱,说明软件写得还是没有用。

“哪项需求能为人们提供最大的帮助,就应当赋予最高的优先级。”

这倒是一个划定需求优先级的不错的指导原则。

“软件设计科学的目标:设计程序员能尽可能简单地开发和维护的软件系统,这样的系统才能为用户提供尽可能多的帮助,而且能持续提供尽可能多的帮助。”

话有点绕来绕去,就是提供帮助、持续帮助、维护简单。

软件设计的方程式:

D是重构的可行性,Vn是当前价值,Vf是未来价值,Ei是实现成本,Em是维护成本。在判断价值时,应该考虑:多少用户会从中受益?某功能发挥价值的频率有多高?某功能在发挥价值时,它能发挥出多大的价值?

所以,软件系统都需要维护很长时间,大多数情况下,未来长期收益Vf和维护成本Em才是真正需要考虑的,与之相比,当前价值Vn和实现成本Ei变得无足轻重。

简而言之,相比降低实现成本,降低维护成本更加重要。

我们开发了太多的1.0版本的软件,那么我们只看到了方程式的左边部分D=Vn/Ei,但实际上如果你的软件要维护许多年,那么这个方程式的重点在右边,D=Vf/Em

软件设计的三大误区:(1)编写不必要的代码;(2)代码难以修改;(3)过分追求通用(过度工程overengineering)。

不要编写不是必需的代码,并且要删除没有用到的代码。否则,你会制造出额外的BUG,给他人造成困扰,真正需要这段代码时还需要做大量的工作。

避免提前优化,避免重复发明轮子。

不要去解决根本就不存在的问题。在动手解决之前,真正拿到证据,证明问题确实存在。

在增添新功能之前,花点时间去化简任何让你或你的同事觉得不够简洁的代码。

如果你无法预测未来,当前能做的事,能够降低维护成本的事情,就是把代码变简洁。

现在花一点时间去追求简洁,将来就可以节省大量的时间。

简洁到什么程度?简洁到傻子都能懂!

无论多么强调可读性都不为过:代码被阅读的次数远多于编写和修改的次数。

良好的设计是不懂代码的人看不到的,于是,软件设计师就成了一个费力不讨好的工作,解决重大缺陷为你赢得很多赞誉,但是避免缺陷的发生……没有人会注意到。

已经有许多的产品因为执着于单一用途而获得了巨大的成功。

对我产生共鸣的大概就是上面那么多,如果想看详细的笔记,有人已经在这里记得非常详细了

时间: 2024-07-29 17:31:32

2015年第10本:《简约之美,软件设计之道》的相关文章

《简约之美--软件设计之道》 之软件设计的3大误区

一.编写不必要的代码 1.不应该在真正的需求来临之前编写那些代码. 2.不要编写不必要的代码,并且要删除没有用到的代码. 二.代码难以修改 1.对未来做太多假设. 2.不仔细设计就编写代码(基本设计都不做) 3.设计程序时,应当根据你现在确切知道的需求,而不是你认为未来会出现的需求. 三.过分追求通用 1.如果你的代码很通用,它通常不能从用户的角度很好的满足规格/需求. 2.太过通用就必须要写很多不需要的代码.

《简约之美--软件设计之道》之复杂性及解决方案

一旦程序里出现了“无法解决的复杂性”,就说明设计中有些深层次的基本错误.如果问题在这个层面上无法解决,应当回过头看看产生问题的真正原因是什么. 问题复杂,解法不一定会复杂.大多数麻烦的设计问题,都可以用在纸上画图或写出来的办法找到答案. 重新设计的每个步骤都应该足够小,比如给变量取个更好的名字,或是给难懂的代码加些注释.更常见的做法是在每个步骤中都把一个复杂的部分拆分成若干个简单的部分.

《简约之美--软件设计之道》 第四章 未来

4.1.1 价值:这个变化能给人多大帮助. 可能价值:这个变化有多大可能帮到用户. 潜在价值:这个变化在对用户提供帮助的时候,将为用户提供多大帮助. 4.3 不可预测的结果 程序员犯的最常见最严重的错误,就是在其实不知道未来的时候去预测未来. 如果完全不考虑未来,只根据当前已知的确切信息确定所有的设计决策,那就百分之百安全了.

简约之美Jodd-http--应用一箩筐

Jodd-http是一个微型的.简约的http client,然而简单而且方便.使用它可以轻松的实现发送请求和读取响应.它的目标就是日常应用变的非常简单,从而简化开发人员的工作. 了解Jodd-http的最好方法就是示例程序. 简单的GET方法 HttpRequest httpRequest = HttpRequest.get("http://jodd.org"); HttpResponse response = httpRequest.send(); System.out.print

Skype For Business 2015实战系列10:DNS准备

Skype For Business 2015实战系列10:DNS准备 DNS的正确配置对于Skype for Business Server 2015来说也是非常重要的,我们要让 Skype for Business Server 正常运行,就必需配置大量DNS纪录.从而使客户端知道该如何访问服务以及让服务器知道相互之间的情况. Skype for Business Server 2015 通过以下方式使用 DNS: ●发现内部服务器或服务器池以进行服务器至服务器之间的通信. ●使客户端可以发

126平温馨简约 邂逅美的家:装修公司:家庭装修:装饰公司:品牌装饰公司

126平温馨简约 邂逅美的家 设计师石吉祥   电话15127722651 业主:独立设计一直不在我们的考虑范围内,就怕不是同一公司的设计和施工在后期的沟通上会有问题.最后决定去罗澜装饰看看完全是因为设计风格和热情可爱的设计师~哈哈,当然啦~罗澜装饰的设计费也是一度让我们相当矛盾.可是约谈后,真心觉得那是一个认真贴心的设计师.当下就决定拍板罗澜装饰了!交完定金后直接量房!(之前磨磨蹭蹭犹豫来犹豫去的我们这次决定的尤其快!) 至于装修风格,其实最初想的是现代简约,后来被设计师的几个作品迷住了,想说

Skype For Business 2015实战系列10:安装管理工具

Skype For Business 2015实战系列10:安装管理工具 今天要给大家介绍的是Skype for Business Server 2015安装前的准备工作-安装管理工具.Skype for Business Server 2015 的安装介质提供了灵活的体验.用户第一次运行Setup时,唯一安装的工具是 Skype for Business Server 部署向导和 Skype for Business Server 命令行管理程序.通过使用这两个工具(即核心组件),我们可以继续

2015排行前10的编程语言学习视频+图书教程

2015排行前10的编程语言,这个榜单是依据 2015年RedMonk社区语言排名 2015年Jobs Tractor社区语言趋势 2015年编程语言社区TIOBE语言排名 这3个排名而综合产生的.不带有任何的个人偏向 - - 这榜单的结果从第一到第十依次是:Java.c.object-c.C++.javascript.php.C#.python.Ruby.Perl (java和object-c的排名归根于移动互联网的爆棚式的发展) 咋一看,可能有些语言不怎么熟悉,没关系,俺整理好了对应的10个

Python快速学习10: 循环的对象及设计 (生活的规律)

前言 系列文章:[传送门] 生活逐渐规律,按时睡觉.今天写博客,明天补时间看会书.慢慢的时间很珍惜 我很喜欢! 时钟就像个循环体,我们将它融入生活. 正文 循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x的时代,循环对象正在成为循环的标准形式. 灵活的循环方式 (我晚饭后爱上了萨克斯,因为这是生活的一部分.属于我的特殊循环对象,它的按键就像循环方式,然后出来一首美丽的歌曲) 我的萨克斯偶像 循环对象 循环对象是这样一个对象,它包含有一个next()方法(_