代码大全_第一部分: 打好基础

第1章: 欢迎进入软件构建的世界

   简而言之, 构建就是跟编码有关的事情, 包括编码与调试, 测试的全部和需求分析, 设计, 架构的部分.

第2章: 用隐喻来更充分地理解软件开发

    文中的隐喻一词意指建模(model), 比如地心说模型和日心说模型. 好的模型可以更生动第说明一件事情的基本要素, 更能指引人们去发现新的特性.

    历史上对软件构建提出的模型如下:

  •  写信: Writing:
    • 编程就像写信, 拿笔重头到尾写完投递.
    • 没有体现规划: 想到什么就写什么
    • 没有体现团队合作: 写信是个人行为
    • 没有体现维护: 信写完不会改
  •  种植: Growing
    • 编程像种庄稼, 每次完成一个步骤: 设计, 编码, 测试对应播种,施肥, 收获
    • 没能体现软件开发的复杂性, 例如开发/测试很可能交替进行
    • 没能体现设计的重要性
    • 种庄稼靠天吃饭, 人的作用远远小于软件开发中的
  •  积累: Accretion
    • 编程就像培养牡蛎: 养好牡蛎(架构), 然后牡蛎不断添加微量的碳酸钙, 最后形成珍珠. 意指软件开发是一个不断积累的过程
    • 为敏捷开发理论奠定了基础
    • 我认为没能体现架构设计的复杂性
  •  建造: Building
    • 编程就像建造一个工程(房子, 大楼 或 核电站), 先要做精心的设计, 再实施建造
    • 这是到目前为止最科学的建模
    • 两者在规划设计, 团队合作等都有共同特点
    • 都会利用现成的组件: 洗衣机, 冰箱 vs 数据库, 高级语言
    • 规模大的时候都需要定制一些组件
    • 设计很重要, 但并不是要事无巨细: 设计房屋时并不需要考虑以后刷什么颜色的漆
    • 后期修改都成本巨大, 人力和时间成本往往比材料本身要高
    • 开发流程随工程规模会显著变化: 建一个狗棚和建一个核电站的流程完全不同
  • 其他
    • 不同的模型往往并不排斥, 旧的模型并不是完全没用: 就像物理学中爱因斯坦的相对论比经典牛顿力学更科学, 但大部分工程问题还是通过牛顿力学求解的. 同样, 在软件开发中, 比如基于牡蛎养殖(Accretion)模型的敏捷开发方法也在大规模应用.
第3章: 三思而后行: 前期准备
原则性问题:
  • 修复缺陷的时间越接近引入缺陷的时间(越早), 修复成本越低, 所以前期工作(需求和架构)很重要
  • 前期工作的详尽程度应该取决于项目的规模和特点
  • 很难有不变的需求, 但可以尽量控制
需求:
  • 功能性需求:
    • 应该包括输入输出, 精度, 取值范围, 频率, 格式等
    • 包括对外接口和通信协议
    • 应该指定数据
  • 质量需求:
    • 响应时间, 吞吐量, 传输率等
    • 安全级别
    • 可靠性, 错误处理
    • 内存/磁盘等资源的限制
    • 如何定义项目的成功和失败?
  • 需求的质量:
    • 用用户的语言书写, 而不是计算机名词. 只提需求, 不涉及设计
    • 互不冲突
    • 足够清晰, 毫无背景的团队也能理解
    • 可测试
    • 对可能的改动有所预期
架构:
  • 尽量包含其他可选方案, 以及选择的理由
  • 主要的类
  • 数据设计
  • 界面
  • 资源管理
    •  如连接, 线程, 句柄等
  • 性能: 
    •  提供调研数据, 说明为什么可以达到预期的性能
    • 关键部分的算法和数据结构
  • 可扩展性
    • 当数据/请求增长时的处理方案
  • 技术可行性
  • 错误处理和容错
第4章: 关键的构建决策
这章很虚, 基本没啥内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值