简约之美-软件设计之道

软件设计的推动力

  • 软件设计的目标:全部软件都有⼀个共同的⽬标:帮助他⼈;让⼈更加容易的做某事;协助,减轻或分担⼯作量。⽽不是只是以赚钱为⽬的。

  • 软件设计科学的⽬标

    • 确保软件能够尽可能多的提供帮助
    • 确保软件能够持续尽可能多的提供帮助
    • 设计出能够让程序员尽可能简单地开发和维护的软件系统,才能达成以上目标。

软件设计如何面向未来

  • 软件设计的⽅程式:D=V/E

    • D:表示完成这个变化的迫切程度
    • V:表示软件的价值
    • E:表示完成软件的成本
  • 等式含义:任何⼀点的变化,其迫切程度与价值成正⽐,与付出的成本成反⽐。

  • 解读:能带来较⼤价值,花费成本越低的变化,要⽐带来较少价值, 花费成本⾼的变化“更好”。

软件设计如何应对变化

  • 程序存在的时间越久,它的某个部分需要变化的可能性就越⼤。

  • 变化必然发⽣,代码应该保证尽可能的灵活性,
    这样不管未来发⽣什么变化都能应付了。

  • 真实世界的代码变化总会发生:好的程序员要能够把代码写的其他⼈容易理解。

  • 软件设计的3⼤误区:

    • 编写不必要的代码:不要编写不是必须的代码,并且要删除没有⽤到的代码。

    • 代码难以修改

      • 原因:(1)对未来做太多的假设;(2)不仔细设计就编写代码
      • 怎么做:设计代码时,应当根据你现在确切知道的需求,
        ⽽不是你认为未来会出现的需求。
    • 过分最求通⽤性

缺陷与设计

  • 在代码中新增缺陷的可能性与代码修改量成正⽐。
  • 最好的设计,就是能够适应外界尽可能多的变化,⽽软件⾃身的变化尽可能少。
  • 永远只修复有问题的代码,不要修复没问题的代码。换句话,永远要先准确的
    定位问题,再去寻找解决办法。
  • 避免重复:理想状态下,任何系统的任务信息,都应当只存在⼀次。

如何设计出简洁的软件

  • 软件任何⼀部分的维护难度,都与该部分的简洁程度成反⽐。

  • 简洁到什么程度?

    • ⽬标:简洁到傻⼦都能看懂
    • 简洁的设计,简洁的代码,很容易让其他⼈能够看懂
  • 保持一致:

    • 若是你在某个地⽅采⽤了某种规则,就应当在其
      他地⽅都遵守这种规则。
    • ⽐如:编码⻛格,⽂档⻛格等等
  • 如何保证代码的可读性:

    • 代码阅读的次数远多于编写和修改的次数。所
      以,代码容易阅读⾮常重要。
    • 代码可读性,主要决定于字⺟和符号之间的空⽩排布。
      ⾏与⾏之间的空⽩不能太多,也不能太少。
    • 变量名应该⾜够⻓,能够完整表达其意义或描述
      其功能,但也不能太⻓,影响阅读。
    • 通常代码就可以表达意图,但若读代码不能理解
      意图,就需要注释。

复杂度

  • 复杂度是叠加的,⽽且不是线性的叠加

  • 什么会增加复杂度

    • 扩展软件的⽤途。软件的定位发⽣了变化,需求
      增加了
    • 新增程序员
    • 做⽆谓的改变
    • 困于糟糕的技术
    • 理解错误
    • 糟糕的设计或不做设计
    • 重复发明轮⼦
  • 复杂性和错误的解决⽅案

软件测试

  • 你对软件的了解程序,等于你真正测试它的程度。
  • 除⾮亲⾃测试过,否则你不知道软件是否能正常运⾏。

总结

最重要的结论
  • 相⽐降低开发成本,降低维护成本更加重要
  • 维护成本正⽐与系统的复杂程度
重要的结论
  • 软件的⽬的是帮助别⼈
  • 软件的设计⽅程式是:D=V/E
  • 变化定律:程序存在的时间越久,他的某个部分需要变化的 时间可能性越⼤
  • 缺陷定律:在程序中新增缺陷的可能性与代码修改量成正⽐
  • 简洁定律:软件任何一部分,越简洁,维护起来越容易。反之,则越难。
  • 测试定律:你对软件的了解程度,等于你真正测试它的程度

《简约之美-软件设计之道》- 笔记相关推荐

  1. 《信贷的逻辑与常识》笔记

    序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...

  2. AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟

    AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...

  3. 人工智能入门算法逻辑回归学习笔记

    逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...

  4. 【逻辑回归学习笔记】

    算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...

  5. 逻辑回归函数学习笔记

    继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...

  6. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授

    逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...

  7. LVM逻辑卷分区笔记

    磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...

  8. 适合理工直男的钟平老师逻辑英语学习笔记

    一切的一切都只是套路!             --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...

  9. 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象

    文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...

  10. 线性回归、逻辑回归学习笔记

    学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...

最新文章

  1. pythonlist特性_python 高级特性:List Comprehensions(列表生成式)
  2. php常见漏洞修复,phpstudy漏洞修复方法
  3. 判断select下拉框是否有选,并给下拉框赋值
  4. Node buffer
  5. 蓝桥杯 ALGO-63 算法训练 乘法表
  6. layui 加载中_宝骏360促销中,最高直降0.91万,新车全国4.77万起!
  7. 柱状图多维条形图vue_使用D3.js+Vue实现一个简单的柱形图
  8. flv 视频 文件 下载
  9. GB/T2659-2000《世界各国和地区名称代码》
  10. Excel常用功能(持续更新)
  11. vm使用PE安装系统(2)
  12. 【RPA自动化|提升办公效率】无需代码的傻瓜式爬虫
  13. 过滤器六:url-pattern设置过滤范围
  14. Android 应用广告过滤几种方式
  15. Opencv基于改进VGG19的表情识别系统(源码&Fer2013&教程)
  16. [转载]惯性导航专业相关书籍180多部
  17. UOS V20 SP1 升级到Update1 后WPS无法打开
  18. 这4个资源搜索网站,你可能还不知道,但非常的实用
  19. php 正态分布数据描述,正态分布-统计百科- 人大经济论坛-经管百科
  20. python爬取新闻数据

热门文章

  1. Pytorch版本YOLOv3模型转Darknet weights模型然后转caffemodel再转wk模型在nnie上面推理
  2. HTML5+CSS3原百度浏览器背景奔跑的北极熊,加了点小玩意
  3. 办公室业务杂志办公室业务杂志社办公室业务编辑部2022年第18期目录
  4. cocos内存使用相关
  5. 的确恶搞:教你调戏QQ好友
  6. 以太坊BIP39助记词到公钥地址的原理与细节
  7. CVPR 2021 论文解读I 动态区域感知卷积,进一步提升分类/检测/分割性能|Dynamic Region-Aware Convolution
  8. 类内如何声明静态变量,常量问题
  9. 2020年浙江机器人公司十大品牌排名
  10. ellipsize实现跑马灯总结