给大家推荐的这些书有很大一部分都是用其他语言如 C、Ruby 或者 Java 写的,读这些书可能是个不小的挑战。还好在大多数情况下,任何编程语言都可以清晰表达编程思想,况且早点培养多语言编程技能也不是一件坏事。

  壹

  面向对象设计实践指南:Ruby语言描述

  作者 Sandi Metz

  本书作者用修自行车来类比面向对象,从只包含一个方法的对象开始完整地实现Fowler在Refactoring一书中介绍的“用多态模式替换条件表达式”。这本书并不是一下扔给你一大堆概念,而是循序渐进由浅入深地进行讲解。

  贰

  企业应用架构模式

  作者 Martin Fowler

  书名看起来很枯燥,不过此书包含了一系列有用的模式。读起来就像在实现一个类似于 Ruby on Rails 框架食谱,所以如果说 DHH 在写 Ruby on Rails 框架之前读过这本书,我也不会感到惊讶。

  这些模式,已被用在 Web 的表单、HTML和数据库中。前两类很有趣,数据库模式还可以用于编写现代的 iOS 应用。如果你想了解一下类似于 Core Data(或者 ActiveRecord)的 ORM 是如何实现的,那可以看看这本书。比如,Core Data 使用了标识映射、延迟加载、元数据映射和查询对象等模式。

  叁

  重构:改善既有代码的设计

  作者 Martin Fowler

  这本书也是由 Martin Fowler 编写的。它给重构下了一个准确的定义:

  有人问我,“难道重构只是清理代码?”,在某种程度上,答案是肯定的,但我觉得重构更进了一步,因为它为清理代码提供了一个更加高效和更为可控的方式。

  这本书还介绍了,重构是如何融入通常的软件开发过程中的:

  使用重构来开发软件,需要把时间分为两个部分:添加功能和重构。添加的新功能时,不应该改变现有的代码;你只是添加新的功能。

  在介绍和定义了重构之后,Fowler 深入讲解了一系列重构的例子。从抽取方法这种简单的开始,然后逐渐深入到类似引入空对象的重构方式。像之前的两本书一样,这本书从头读到尾也需要花些功夫。

  肆

  领域驱动设计——软件核心复杂性应对之道

  作者 Eric Evans

  之前的书籍大多介绍模式,这本书有一条小小的叙事线。一个开发者和一个领域的专家,搭建了一个管理船行程的应用。在这个过程中,从最初的研究阶段到实际的编码过程,你将学到如何把一个领域模型化。我从这本书了解到 value types 比 Swift 发布它的 value types 早了两年。

  作者在程序员和领域专家之间编造的苏格拉底式对话也有助于我们理解。有人认为,在一个理想的世界中,一个产品经理可以在开发者和利益相关者之间传话。而在真实的世界中,你(作为开发者)对于表达软件的功能和局限也负有最终的责任,这本书展示类似的应该是什么样子。

  这四本书每一本都有各自的价值——你不仅能学到书里的知识,还能学会如何思考面临的问题。这些书都遵循着同样的结构:提出问题,然后给出解决方案。将问题和解决方法联系起来,能够看清如何解决的整个过程,最终学会如何处理其他问题。