读程序员的README笔记13_技术设计流程(上)

这篇具有很好参考价值的文章主要介绍了读程序员的README笔记13_技术设计流程(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

读程序员的README笔记13_技术设计流程(上)

1. 行为准则

读程序员的README笔记13_技术设计流程(上)

2. 设计过程的螺旋式上升

读程序员的README笔记13_技术设计流程(上)文章来源地址https://www.toymoban.com/news/detail-760140.html

2.1. 圆锥体中的箭头进一步螺旋式上升

2.2. 你现在更确定你理解了问题空间

2.3. 你的原型为你的解决方案提供了越来越多的信心

2.4. 随着每一次迭代,设计文档变得更加清晰和详细

3. 技术设计流程

3.1. 当被要求对系统进行修改时,大多数入门级工程师会直接跳入编码环节

3.2. 技术设计流程可以帮助每个人就某项大型变更的设计达成一致

3.3. 正确地完成、参与和领导技术设计工作是很有意义并且有价值的

3.4. 单独的深入思考和协作的小组讨论

3.4.1. 研究、头脑风暴和写作构成了深度工作

3.4.1.1. 外界干扰是深度工作的“杀手”

3.4.1.2. 避免所有的交流方式

3.4.1.2.1. 关闭聊天
3.4.1.2.2. 关闭电子邮件
3.4.1.2.3. 禁用电话通知
3.4.1.2.4. 换个地方坐

3.4.2. 设计讨论和对设计文件的评论构成了合作的部分

3.4.2.1. 有形产出是一份设计文档

4. 设计的思考

4.1. 设计漏斗的基础是从探索开始的

4.1.1. 在制定设计方案之前,你需要了解问题空间和需求

4.1.2. 探索既是一项个人运动,也是一项团队运动

4.2. 定义问题

4.2.1. 首要任务是定义和理解要解决的那个(或那些)问题

4.2.2. 需要了解问题的边界,以便知道如何解决它,并避免构建错误的东西

4.2.3. 用你自己的语言向利益相关者重述问题,询问你的理解是否与他们一致

4.2.3.1. 如果有一个以上的问题,询问哪些问题是最优先的

4.2.4. 完善的问题描述将导致一份与原来截然不同的解决方案,工程师可聚焦在问题上并列出优先事项

4.3. 着手调查

4.3.1. 不要从问题定义直接就过渡到“最终”设计

4.3.2. 考虑相关的研究、替代的解决方案,以及权衡各方案的利弊

4.3.3. 你提出的设计不应该是你的第一个想法,而应该是你若干想法中最好的那个

4.3.4. 网上有大量的资源,看看别人是如何解决类似问题的

4.3.5. 行业大会是另一种可供检查的资源,幻灯片或录音通常会在网络上公布

4.3.6. 不要忘记学术研究,利用论文末尾的参考文献部分来寻找更多的阅读材料

4.3.7. 与你正在探索的问题领域的专家交流

4.3.7.1. 注意与外人交流时不要泄露公司的专有信息

4.3.8. 批判性地思考

4.3.8.1. 一个特别常见的错误做法是将一个与你的问题相似但不完全相同的解决方案全盘复制

4.3.8.2. 你的问题不是谷歌的问题(即使你在为谷歌工作),尽管它们看起来很相似

4.4. 进行实验

4.4.1. 实验会让你对自己的想法增长信心、暴露出设计上的权衡,并澄清问题空间

4.4.2. 不要迷恋你的实验性代码

4.4.2.1. 你要尽可能快地学习到更多的东西

4.5. 给些时间

4.5.1. 好的设计需要创造力

4.5.2. 设计需要深入思考

4.5.3. 你不会在你锁定的整段时间内进行“设计”

4.5.3.1. 你的大脑需要时间来放松

4.5.3.2. 休息一下,给自己一个呼吸的空间

4.5.3.3. 允许你的思想放松和游荡

4.5.3.4. 去散步、泡茶、阅读、写作、画画

4.5.4. 设计是一种每天24小时都在进行的工作,所以要有耐心

4.5.4.1. 你的大脑总在酝酿着各种想法,创意想法会在一天内随机出现(甚至在你睡觉的时候)

4.5.5. 轻松的设计方法并不意味着你可以永远这样做

4.5.5.1. 设计尖峰(design spike)是管理创造性工作和可预测的交付之间的紧张关系的一个好方法

4.5.5.1.1. 尖峰是极限编程(extreme programming,XP)的术语,指有时间限制的调查

5. 使用设计文档模板

5.1. 概要

5.2. 现状与背景

5.3. 变更的目的

5.3.1. 软件团队往往拥有超过他们能同时应对的极限的项目

5.4. 需求

5.4.1. 面向用户的需求

5.4.1.1. 从用户的角度定义了变更的性质

5.4.2. 技术需求

5.4.2.1. 包括解决方案必须满足的硬性需求

5.4.2.2. 技术需求通常是由互操作性问题或严格的内部准则引起的

5.4.2.3. 服务水平目标也可以定义在这里

5.4.3. 安全性与合规性需求

5.4.3.1. 确保安全性的需求得到明确的讨论

5.4.3.2. 数据保留和访问政策通常包括在这里

5.4.4. 其他

5.5. 潜在的解决方案

5.5.1. 撰写这部分内容对你和读者来说都是一种工具

5.5.2. 目的是迫使你不仅要思考你的第一个想法,还要思考其他的想法和它们之间的利弊

5.5.3. 描述合理的替代方案,以及你为什么拒绝它们

5.5.4. 描述潜在的解决方案将预先解决“为什么不做××?”的评论

5.5.5. 如果你因为错误的原因而否定了某个解决方案,评论者就有机会发现其中的过错,甚至可以找出你没有考虑过的替代方案

5.6. 建议的解决方案

5.6.1. 描述你所确定采用的解决方案

5.6.2. 要比概要中简短的描述更加详细,并且可能包含突出变化的图示

5.6.3. 如果你的建议包括多个阶段,请解释该解决方案是如何从一个阶段发展到另一个阶段的

5.7. 设计与架构

5.7.1. 系统构成图

5.7.2. UI/UX变更点

5.7.3. 代码变更点

5.7.4. API变更点

5.7.5. 持久层变更点

5.8. 测试计划

5.8.1. 不要事先定义每项测试,而是去解释你计划如何去验证你的变更

5.9. 发布计划

5.9.1. 描述你将使用的策略,以避免复杂的部署顺序需求

5.9.2. 记录你需要设置的特性开关,以控制新版本的展开

5.9.3. 想一想你将如何发现你发布的变更是否生效

5.9.4. 在发现问题时你将如何回滚

5.10. ⑩遗留的问题

5.10.1. 明确地列出设计中尚未回答的紧迫问题

5.10.2. 征求读者意见的一种好方法,并说明你的“已知的未知”

5.11. ⑾附录

5.11.1. 加入额外的令人感兴趣的细节

5.11.2. 添加相关工作参考

5.11.3. 进一步阅读资料

到了这里,关于读程序员的README笔记13_技术设计流程(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读程序员的README笔记08_依赖管理

    2.6.1.1. 版本不应该被重复使用 2.6.1.2. 永远不要在现有版本下重新发布更改的代码 2.6.2.1. 版本应该帮助人们和工具对版本的优先顺序进行推断 2.6.3.1. 版本信息区分了预先发布的代码和已发布的代码,将构建流水号与构件相关联,并设置了稳定性和兼容性的合理预期 6.2.5.1

    2024年02月05日
    浏览(44)
  • 读程序员的README笔记09_代码评审

    4.4.1.1. walk-through 4.4.1.2. 一种面对面的会议,开发人员在会上共享他们的屏幕,并引导队友了解正在进行的修改内容 4.4.1.3. 是启发想法和让你的团队适应代码修改的好方法 5.1.2.1. 如果紧急度不明确,请询问提交者 5.4.4.1. SQL注入攻击、敏感数据泄露和跨站脚本攻击的漏洞

    2024年02月05日
    浏览(44)
  • 读程序员的README笔记07_测试(下)

    2.5.2.1. 首先应该关注代码中的高风险的区域 2.5.2.2. 那些低风险或被废弃的代码并不值得测试 3.2.1.1. 如果网络出现问题,那么测试也会失败 3.5.2.1. 使用常数种子的随机数生成器的测试将总是通过或总是失败 3.7.3.1. 注入式时间戳将让你使用模拟来精确控制测试中的时间流逝

    2024年02月05日
    浏览(39)
  • 读程序员的README笔记04_防御式编程

    1.2.1.1. 切记让你的代码安全而有弹性 1.2.1.2. 编写拥有良好防御性的代码是一种对那些运行你的代码的人(包括你自己!)富有同情心的表现 1.2.1.3. 防御性的代码较少发生故障,就算它发生故障,也更有可能恢复 1.2.1.4. 安全的代码利用编译时的校验来避免运行时的故障,使

    2024年02月05日
    浏览(49)
  • 读程序员的README笔记11_软件交付(下)

    1.3.5.1. 通过持续交付,人力被完全从部署环节中移除 1.3.5.2. 打包、测试、发布、部署,甚至展开环节都是自动化的 1.3.6.1. Puppet、Salt、Ansible和Terraform等现成的解决方案可以与现有的工具集成,并且它们是专门为了自动化部署而设计的 1.4.4.1. 只需再次指向旧的版本 1.5.1.1. 

    2024年02月04日
    浏览(52)
  • 读程序员的README笔记01_学习如何学习

    6.3.2.1. 错误是不可避免的。成为一名软件工程师的路途艰辛,我们有时会失败 6.5.4.1. 代码从不说谎。注释有时却会。 6.5.4.1.1. Code never lies. Comments sometimes do 6.5.4.1.2. 去读源代码,因为它并不总是与设计文档相吻合 6.5.4.1.3. 不要只读你自己的代码库,还要去阅读高质量的开

    2024年02月05日
    浏览(42)
  • 读程序员的README笔记10_软件交付(上)

    3.1.1.1. 打包一个构件称为发布 3.1.3.1. 部署的软件还不能被用户访问 3.1.3.1.1. 只是被安装了而已 3.1.3.2. 一旦部署,软件就会通过将用户转移到新的软件上而进行展开 3.1.4.1. 交付过程是更大的产品开发周期中的一部分 6.10.2.1. 每季度或每年发布一次

    2024年02月04日
    浏览(147)
  • 读程序员的README笔记18_职业生涯规划

    3.1.5.1. 他们的工作职责之一是管理他们的团队,而管理的一部分就是对你投入时间 3.1.5.2. 对管理者而言,反复取消一对一面谈可以是一个有价值的信号 3.3.2.1. 每个目标都附有3到5个关键结果,它们是标志着目标达成的具体指标 3.3.2.2. 不要把关键结果变成待办事项清单 3.

    2024年02月04日
    浏览(44)
  • 读程序员的README笔记05_日志、监控与配置

    6.1.1.1. 测量的是某个事件发生的次数 6.1.1.2. 通过使用计数器获得缓存命中数和请求总数,你就可以计算出缓存命中率 6.1.2.1. 一个基于时间点的测量值 6.1.2.2. 既可以上升又可以下降 6.1.3.1. 根据事件的大小幅度分成不同的范围 6.1.3.2. 每一个范围都会有一个计数器,每当某

    2024年02月05日
    浏览(42)
  • 读程序员的README笔记12_On-Call

    4.4.2.1. 回应不一定代表解决方案 4.4.3.1. 每次更新时,提供一个新的时间预估 4.5.3.1. 如果请求者没有回应,就说你将在24小时内因缺乏回应而关闭该任务票,然后真的这样做 5.3.1.1. 工程师必须找到问题,确定其严重性,并确定谁能修复它 5.3.1.2. 确认问题并了解其影响,以

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包