推荐给菜鸟的编程书

做者:Soroush Khanlou,原文连接,原文日期:2016-6-27
译者:X140Yu;校对:Crystal Sun;定稿:CMBgit

有一些刚刚开始编程的人会问我,如何才能从写代码转变成写漂亮的代码,为此,我会推荐一些书,对于刚开始编程的菜鸟来讲,这些书很是赞。对于像我这种已经有几年编程经验的老鸟来讲,仍能从中学到东西。这些书有很大一部分都是用其余语言如 C、Ruby 或者 Java 写的,读这些书多是个不小的挑战。还好在大多数状况下,任何编程语言均可以清晰表达编程思想,何况早点培养多语言编程技能也不是一件坏事。程序员

Practical Object-Oriented Design in Ruby

做者 Sandi Metzgithub

长时间关注个人读者都了解我对 Sandi Metz 的偏心。我以为她作的最棒的事情就是给聪明人解释简单的概念,本书也不例外。数据库

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

Design Patterns

做者 Gamma、Helm、Johnson 和 Vlissidesswift

这四位做者被你们称为「四剑客」,这本书出版于 1994 年。是第一本介绍常见的设计模式的书,讲述何时应该如何使用这些设计模式,附带使用示例代码。我推荐的几本书都是这种类型的,虽然看起来很像教科书,但也能能够读普通书那样快速翻阅,当要使用某个设计模式时,就知道应该跳到哪一章来获取须要的详细知识了。设计模式

这本书创做于在桌面应用时代,其中的一些设计模式也是针对那个时代的。好比命令模式,对于菜单中没有功能,使用命令行很是有用。可是这些动做场景在 iOS 和 Web 开发中很难见到,因此命令模式可能有点过期了。可是设计模式解决问题的过程,有助于为你本身的问题想出有创造力的解决方法。框架

Patterns of Enterprise Application Architecture

做者 Martin Fowler编程语言

上一本书创造于桌面图形应用的时代,而这本书诞生于 Web 年代。书名看起来很枯燥,不过我发现此书包含了一系列有用的模式。读起来就像在实现一个相似于 Ruby on Rails 框架食谱,因此若是说 DHH 在写 Ruby on Rails 框架以前读过这本书,我也不会感到惊讶。ide

这些模式,已被用在 Web 的表单、HTML和数据库中。前两类颇有趣,数据库模式还能够用于编写现代的 iOS 应用。若是你想了解一下相似于 Core Data(或者 ActiveRecord)的 ORM 是如何实现的,那能够看看这本书。好比,Core Data 使用了标识映射、延迟加载、元数据映射和查询对象等模式。像「四剑客」写的那本书同样,在写代码时虽然咱们不会用到书中全部的模式,可是做者解决问题的这个过程,仍是很使人兴奋的。

Refactoring

做者 Martin Fowler

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

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

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

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

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

Domain-Driven Design

做者 Eric Evans

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

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

如何思考 vs 思考什么

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

本文由 SwiftGG 翻译组翻译,已经得到做者翻译受权,最新文章请访问 http://swift.gg

相关文章
相关标签/搜索