站在巨人的肩膀上不香吗?书籍推荐:DDD作为企业软件设计开发必读书籍 - lpalmieri


我大约在三年前加入这个行业,当时还只是一个尚未毕业的数学家,后来转为ML实践者。我又花了两年的时间才找到自己的位置,在该职位上,构建软件是我的主要职业。
第一手实战经验非常强大,但是一个人的时间有限。因此,书籍使我有机会学习其他从业者的精通技巧,这些都是经过数千个小时的工作而建立的。就是只能通过阅读吸收10%的知识,那仍然很划算。
当我发现自己在某些专业关系中从受指导者转到指导者角色时,需要越来越多地分享自己成长经历。

架构
设计数据密集型应用程序:可靠,可扩展和可维护系统背后的大构想 by Martin Kleppmann

它阐述大量基础知识,并且设法结合了第一原理方法,重点关注那些对现实世界中大规模分布式系统背后的工程选择的决策影响。
我经常推荐它作为对现实世界中的分布式系统的初级读物。

设计
领域驱动的设计:解决软件核心中的复杂性,作者: Eric Evans

关于DDD 的书,也称为“ 大蓝皮书”。它很长,但是涵盖了无数的材料:如果您要编写企业软件,这是必须阅读的内容。
在编写企业软件时,将复杂的业务领域的规则和思维模型转化为软件确实是挑战的核心。Evans引入的技术和术语将使您受益匪浅,因为您要处理的域的复杂性以及您所从事的组织的数量在增加。
其他有人向我建议了沃恩·弗农(Vaughn Vernon)的“ 领域驱动设计精炼,但是我还没有亲自阅读。

第二本是:
函数式领域驱动实现领域建模 Scott Wlaschin

我发现这本书是从他的谈话中引发的 -我喜欢这个谈话,也喜欢这本书。它本身就是DDD以及类型驱动开发的更广泛主题的很好的介绍。
简而言之,我们可以利用类型系统来表示域的约束,从而使不正确的状态难以表示或无法表示。
该书在函数式编程的上下文中介绍了该思想,但是,即使对于非严格函数式的编程语言,只要它们具有丰富的类型系统(例如Rust),它确实是可行的。

测试
测试驱动开发 肯特·贝克

在我们的测试驱动开发领域中,人们普遍赞赏。尽管如此,由于种种原因,我还没有遇到很多实际操作本书的实践者。
作者本人:肯特·贝克(Kent Beck)是XP(X treme P rogramming)的创建者,它是TDD的主要声音之一,也是敏捷宣言的权威之一。
这本书无非是与他进行了长时间的配对编程会议,因为他通过TDD来解决问题(即编写测试框架-这里有一个meta元素),以他的方式编写代码。

第二本:有效地使用遗留代码:克尔·费瑟斯

自动化测试并未涵盖其所有行为,包括旧代码。而且大多数工程师将把大部分职业用于这种旧代码(包括他们在六个月或十二个月前编写的代码)的维护上。我已经在我的短期软件职业中花了相当大的一部分。

第三本:xUnit测试模式:重构测试代码 ,作者Gerard Meszaros

Feathers汇集了一系列有用的技术来驯服野兽-使用测试记录现有行为,以使发展系统自身以满足新要求成为可能。

事实是,我们的测试已开始使我们放慢脚步-随着代码库的发展,编写和维护它们变得越来越麻烦。结果,我们编写的测试越来越少,没有得到认可。如果我们在不改变方向的情况下坚持下去,我们很可能会加入那些把测试视为障碍而不是资产的人。相反,我找到了这本书,并且对测试套件的重大重构使我们回到了以前的开发速度,而丝毫不影响我们的测试实践。

Epic
特蕾西·基德(Tracy Kidder)的新机器之魂

软件开发生命周期
Jez Humble和David Farley的 持续交付:通过构建,测试和部署自动化发布可靠的软件
这本书已有10年的历史了,但是它经受了时间的考验:技术可能已经改变,但是在设计(和自动化)当代系统的发布管道时,这里强调的原理和挑战仍然是相关的。

Nicole Fosgren,Jez Humble和Gene Kim 加速:精益软件和Devops的科学
Accelerate不一定会在软件交付中引入一套革命性的方法,但是它提供了可靠的数据点和可靠的研究,证明其中某些方法(精益,DevOps等)确实对组织的业务绩效具有可衡量的影响。 这四个关键指标对于衡量工程团队的健康状况非常有用。

HN讨论:https://news.ycombinator.com/item?id=22515743

HN评论摘录:
在处理复杂的业务领域以及如何为它们构建软件时,DDD书籍真是天赐之物。我希望他们在大学而不是所有课程的教学者中教授这些东西。

为什么没有TAOCP,没有人月神话?TAOCP是一本很棒的咖啡桌书,但是我认为我从未见过有人每天使用它。这并不是您每天使用的那种书。您可以像补充维生素那样以小剂量(在经过最初的符号表示等之后)食用。但是,这并没有减少它的用处。