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,给他人造成困扰,真正需要这段代码时还需要做大量的工作。
避免提前优化,避免重复发明轮子。
不要去解决根本就不存在的问题。在动手解决之前,真正拿到证据,证明问题确实存在。
在增添新功能之前,花点时间去化简任何让你或你的同事觉得不够简洁的代码。
如果你无法预测未来,当前能做的事,能够降低维护成本的事情,就是把代码变简洁。
现在花一点时间去追求简洁,将来就可以节省大量的时间。
简洁到什么程度?简洁到傻子都能懂!
无论多么强调可读性都不为过:代码被阅读的次数远多于编写和修改的次数。
良好的设计是不懂代码的人看不到的,于是,软件设计师就成了一个费力不讨好的工作,解决重大缺陷为你赢得很多赞誉,但是避免缺陷的发生……没有人会注意到。
已经有许多的产品因为执着于单一用途而获得了巨大的成功。
对我产生共鸣的大概就是上面那么多,如果想看详细的笔记,有人已经在这里记得非常详细了。
----==== Email: slofslb (GTD) qq.com 请将(GTD)换成@ ====----
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者:申龙斌的程序人生
---- 魔方、桥牌、象棋、游戏人生...
---- BASIC、C++、JAVA、C#、Haskell、Objective-C、Open Inventor、程序人生...
---- GTD伴我实现人生目标
---- 区块链生存训练
---- 用欧拉计划学Rust编程
---- 申龙斌的读书笔记(2011-2019)
----