- ISBN:9787121483080
- 装帧:平装-胶订
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:328
- 出版时间:2024-08-01
- 条形码:9787121483080 ; 978-7-121-48308-0
本书特色
本书提供了实在且实用的建议,帮助读者以可持续的节奏编写代码,同时控制会造成项目失控的复杂性。Mark Seemann总结了数十年间帮助软件团队取得成功的经验,以指导读者完成从零(一无所有)到部署功能的过程,并展示了如何在添加功能、解决跨领域问题、排除故障和优化系统时保持稳定的节奏。针对各种关键问题,从checklist到团队合作,从封装到分解,从API设计到单元测试,读者都可在本书中找到宝贵的思路、实践技巧、处理流程。
Mark Seemann讲解自己洞见的工具是来自完整示例项目中的代码。这些代码用C#编写,目标是对于使用各种面向对象语言(包括Java、C 、TypeScript)的读者,都做到清晰、实用。如需要进一步探索,读者可在本书英文原版的官方网站注册后下载本书的示例代码和详细的代码提交说明。
▲选择切实有效的认知模型和工作流程,避免糟糕的类比
▲使用checklist解放自己,增加使用已有技能所获得的产出
▲通过创建并部署垂直切片来应对“分析瘫痪症”
▲对抗造成代码腐化和非必要复杂性的力量
▲掌握更实用的改变代码行为的技术
▲了解更快速、更有效地解决代码问题的方法
▲更富有成效地看待性能和安全性
内容简介
软件开发既需要理论和科学,也需要经验和手艺。可惜,一直以来许多图书都只关注前一部分,而忽略了后一部分。Mark的这本书主要关注的就是经验和手艺的部分。本书既详细讲解了 API 设计、红绿重构等常用技术,也演示了如何撰写提交说明、如何修改单元测试,同时对故障定位、代码阅读、团队合作等传统上被认为“难以说清”的话题,也给出了实用而且精当的建议。难能可贵的是,与其他图书提供的示例代码库不同,本书的示例代码库包含了完整的 Git 提交记录。也就是说,读者可以按照作者的路径,一步一个脚印地重温整个开发过程。
如果你的经验还不够丰富,建议严格按照作者的讲解,认真读完全书,掌握软件工程的技巧。如果你已经有足够的开发经验,不妨在速览全书后,精读自己不熟悉但感兴趣的部分。对自己不认同的部分,也不妨花时间了解作者主张的前因后果,让自己对许多问题有更全面的认知。
全书以 C# 为示范语言,但并没有用到太多 C# 的专属特性。面对示例代码,任何熟悉现代主流面向对象语言的读者,都可以很容易地理解作者背后的思考。
目录
第1章 是艺术,还是科学
1.1 盖房子
1.1.1 项目论之误
1.1.2 阶段论之误
1.1.3 依赖
1.2 培育花园
1.2.1 花园中的植物为何会生长
1.3 工程
1.3.1 作为手工艺品的软件
1.3.2 实用性
1.3.3 软件工程的早期表述
1.3.4 与软件工程共同进步
1.4 结论
第2章 checklist
2.1 助记工具
2.2 针对新代码库的checklist
2.2.1 使用Git
2.2.2 自动化构建
2.2.3 显示所有错误消息
2.3 为已有的代码库新增检查规则
2.3.1 渐进式开发
2.3.2 在组织中“便宜行事”
2.4 结论
第3章 控制复杂性
3.1 目标
3.1.1 可持续性
3.1.2 价值
3.2 为何编程是困难的
3.2.1 人脑类比
3.2.2 读得多、写得少的代码
3.2.3 可读性
3.2.4 脑力劳动
3.3 关于软件工程
3.3.1 与计算机科学的关系
3.3.2 人性化代码
3.4 结论
第4章 垂直切片
4.1 从能使用的软件开始
4.1.1 从数据入口到数据持久化
4.1.2 *小的垂直切片
4.2 活动骨架
4.2.1 特征测试
4.2.2 预备-执行-断言
4.2.3 静态代码分析的合理尺度
4.3 由外到内
4.3.1 接收JSON
4.3.2 提交预订请求
4.3.3 单元测试
4.3.4 DTO和领域模型
4.3.5 假对象
4.3.6 Repository接口
4.3.7 Repository中的Create方法
4.3.8 配置依赖关系
4.4 完成切片
4.4.1 schema
4.4.2 SQL Repository
4.4.3 连接数据库的配置
4.4.4 冒烟测试
4.4.5 使用Fake数据库的边界测试
4.5 结论
第5章 封装
5.1 保存数据
5.1.1 代码改动优先级的原则
5.1.2 参数化测试
5.1.3 把DTO复制到领域模型中
5.2 验证
5.2.1 错误的日期
5.2.2 红绿重构
5.2.3 自然数
5.2.4 Postel定律
5.3 保护不变量
5.3.1 恒常有效
5.4 结论
第6章 三角测量
6.1 短期记忆与长期记忆
6.1.1 遗留代码和记忆
6.2 能力
6.2.1 超订
6.2.2 恶魔的辩词
6.2.3 已有的预订记录
6.2.4 恶魔的辩词 vs 红绿重构
6.2.5 多少测试才算够
6.3 结论
第7章 分解
7.1 代码腐化
7.1.1 阈值
7.1.2 圈复杂度
7.1.3 80/24规则
7.2 与思维合拍的代码
7.2.1 六角花
7.2.2 内聚
7.2.3 依恋情结
7.2.4 类型转换的代价
7.2.5 解析,而不是验证
7.2.6 分形架构
7.2.7 清点变量
7.3 结论
第8章 API设计
8.1 API设计原则
8.1.1 预设用法
8.1.2 防错设计
8.1.3 写给读者看的代码
8.1.4 比起注释,花更多精力在代码的命名上
8.1.5 蒙住名字
8.1.6 命令与查询分离
8.1.7 交流的层次
8.2 API设计实例
8.2.1 领班
8.2.2 与封装对象交互
8.2.3 实现细节
8.3 结论
第9章 团队合作
9.1 Git
9.1.1 提交说明
9.1.2 持续集成
9.1.3 小步提交
9.2 代码的集体所有权
9.2.1 结对编程
9.2.2 团伙编程
9.2.3 code review的延迟
9.2.4 拒绝某个变更集
9.2.5 code review
9.2.6 pull request
9.3 结论
第2部分 由快到稳
第10章 新增代码
10.1 功能标识
10.1.1 日历标识
10.2 绞杀榕模式
10.2.1 方法层面的绞杀榕
10.2.2 类层面的绞杀榕
10.3 版本管理
10.3.1 事先警告
10.4 结论
第11章 修改单元测试
11.1 重构单元测试
11.1.1 修改安全网
11.1.2 添加新测试代码
11.1.3 分开重构测试代码和生产代码
11.2 见证测试失败
11.3 结论
第12章 故障排除
12.1 理解
12.1.1 科学方法
12.1.2 简化
12.1.3 橡皮鸭法
12.2 缺陷
12.2.1 通过测试重现缺陷
12.2.2 慢速测试
12.2.3 非确定性缺陷
12.3 二分法
12.3.1 用Git完成二分法
12.4 结论
第13章 关注点分离
13.1 组合
13.1.1 嵌套组合
13.1.2 顺序组合
13.1.3 引用透明性
13.2 横切面关注点
13.2.1 日志
13.2.2 装饰器
13.2.3 日志写什么
13.3 结论
第14章 节奏
14.1 个人节奏
14.1.1 时间段
14.1.2 休息
14.1.3 有意识地利用时间
14.1.4 盲打
14.2 团队节奏
14.2.1 定期更新依赖项
14.2.2 安排其他事务
14.2.3 康威定律
14.3 结论
第15章 常见困惑
15.1 性能
15.1.1 历史负担
15.1.2 一厢情愿的依托
15.2 安全
15.2.1 STRIDE
15.2.2 欺骗
15.2.3 篡改
15.2.4 否认
15.2.5 信息泄露
15.2.6 拒绝服务
15.2.7 提权
15.3 其他技术
15.3.1 基于属性的测试
15.3.2 行为代码分析
15.4 结论
第16章 代码库导览
16.1 导航
16.1.1 看到全局图景
16.1.2 文件组织
16.1.3 寻找细节
16.2 架构
16.2.1 单体架构
16.2.2 循环依赖
16.3 使用方法
16.3.1 从测试中学习
16.3.2 用心聆听测试
16.4 结论
附录A 实践技巧列表
参考资料
相关资料
放心阅读这本书吧。仔细读下去,跟随Mark无懈可击的逻辑,把这些实用方法和技巧吸收到你的脑海中。在书中读到这些宝贵经验的时候,不妨停下来,认真想一想。这样,等到有一天你教自己的孙辈编程的时候,可能就不会吓到他们。
—Robert C. Martin,“整洁之道”Clean系列图书作者
Mark Seemann以能够清晰透彻地解释复杂概念而闻名。在这本书中,他浓缩了自己丰富的软件开发经验,将之凝聚为一套实用的、务实的技巧,用于编写可持续的、对人类友好的代码。这本书应当成为程序员的案头书。
——Scott Wlaschin,Domain Modeling Made Functional的作者
对于每一位工程师、每一位技术管理者,我再次郑重力荐这本《思维整洁之道》,希望每一位致力于提升软件研发效率与质量的技术人获得提高!
—“架构师之路”公众号文章作者 沈剑
阅读这本书,暗合了Mark反复提起的那句话:“未来已来,只不过是参差而来。”
—“余晟以为”公众号文章作者 余晟
在软件领域,我们站在前人的肩膀上前进。Mark 的经验丰富,涉猎广泛,上至哲学和组织的宏观思考,下至写代码的微观细节。这本书让这些经验为你所用。去读吧。”
—Adam Ralph,演讲者、导师、低代码平台开发者,供职于 Particular Software
“我阅读 Mark 的博客已有多年,他总能提供深入的技术见解,又不失趣味。这本书仍然如此。对任何希望更上一层楼的开发人员来说,这本书都是一笔宝贵的资源。”
—Adam Tornhill,CodeScene 创始人,Software Design X-Rays 和 Your Code as a Crime Scene 的作者
“这本书*合我心意的是,它只用了一个代码库作为示例。你不必再四处下载单独的示例代码,而可以一次性得到包含完整应用程序的 Git 仓库。代码库的历史保留了工作痕迹,用来展示不断演进的代码以及书中解释的概念。阅读到某个特定的原理或技术时,你会发现它直接引用了某次提交,在实践中证明了该原理或技术。当然,你也可以按照自己的喜好浏览历史记录,在任何节点驻足检查、
调试,甚至试验代码。我从没有在哪本书中看到过这样便利的交互,这让我享受到一种特别的愉悦,因为它以建设性的全新方式展示了 Git 的独到设计。”
—Enrico Campidoglio,独立顾问、演讲者、在线教育网站 Pluralsight 的课程作者
“Mark Seemann 不仅在大型系统的架构设计和软件构造方面拥有数十年的丰富经验,对于如何扩展和管理此类系统与构建团队之间的复杂关系,他也是*著名的思考者之一。”
—Mike Hadlow,独立软件顾问、博客作者
“Mark 说过‘成功的软件经久不衰’,这本书将助力你写出这样的软件。”
—Bryan Hogan,软件架构师、播客主播、博客作者
“Mark 的能力超群,能启发他人深入思考软件开发行业 / 职业。每次跟他合作完成 .NET Rocks !的访谈,我都意识到,必须把自己的节目重听一遍,才能真正理解我们所讨论的一切。”
—Richard Campbell,.NET Rocks !播客联席主播
如果你曾经经历过糟糕的项目,或被迫应对难以维护的遗留代码,这些指引会让你的下一个和之后的每一个项目都变得更好。
作者简介
Mark Seemann 是一位平庸的经济学家,于是他改行当了程序员。从 20 世纪 90 年代起,他一直在开发 Web 和企业应用。Mark 年轻的时候想成为摇滚明星,然而不幸的是他既没有音乐天赋,也没有摇滚明星的长相—不过阴差阳错,他现在成了摇滚明星级别的王牌开发者。他写的一本关于依赖注入的书获得了Jolt大奖,他还做过 100 余场国际会议演讲,并给在线教育网站 Pluralsight 和 Clean Coders 录制过视频课程。从 2006 年开始,他一直定期更新博客。现在,他和妻子以及两个孩子一起住在丹麦首都哥本哈根。
余晟,知名互联网自媒体创作人,历任抓虾网主力程序员盛大创新院高级研究员,广州某外贸公司技术总监,沪江教育科技集团技术中心高级研发总监。在互联网行业有超过十五年的开发经验,涉足传媒、电商、教育等众多行业,带领团队参与过多个国际合作项目,在跨国业务方面有一定经验。其写作的《正则指引》和独译的《精通正则表达式(第三版)》广为流传。
-
深度学习的数学
¥43.5¥69.0 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥31.9¥65.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥76.3¥109.0 -
UG NX 12.0数控编程
¥22.1¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥83.3¥119.0 -
Visual Basic 语言程序设计基础(第6版)
¥32.0¥45.0 -
贝叶斯推理与机器学习
¥139.3¥199.0