2014 年图书综述
当我写下这些文字时,年末将至,我的年度图书综述也随之而来。与往年一样,在本文中,我将介绍过去 12 个月中我读到的新书,这意味着我可能会提到一些新书,或者忽略一些我没有注意到的书。我的兴趣(职业上,以及为本专栏)通常与使用开源技术从事 Web 开发的人员相关,但我承认偶尔会涉足其他主题。与过去几年的年度综述一样,我还扩展了我的书单,将博客、播客和其他可能对开源社区其他人有用的资源也包括在内。
编程语言Python 的受欢迎程度持续增长,这是有充分理由的——它是一种优雅的语言,既强大又易于学习。在过去的几年里,我一直在为各种受众讲授越来越多的 Python 课程——有抱负的 Web 开发人员、有兴趣将其自动化和测试系统迁移到开源高级语言的公司,以及有兴趣学习基本编程技术和思想的人员。
关于 Python 最著名的书,由资深讲师 Mark Lutz 撰写的《Python 编程》(Programming Python)最近由 O'Reilly 出版社发布了第 4 版(ISBN 9780596158101)。这本书在许多方面都得到了扩展和改进,最重要的是增加了关于 Python 3.x 的信息。说实话,我还没有遇到一家公司在使用 Python 3;我的所有咨询和培训客户仍然使用 Python 2.7。但是,毫无疑问,Python 3.x 是未来,Lutz 通过提供这些信息为我们所有人提供了很好的服务。
这不是一本关于学习 Python 的书,而是一本旨在深入描述语言工作原理的参考书。在这方面,它成功了。与此同时,我觉得这本书太大了(超过 1600 页),其中 400 页用于描述 TkInter,这是一个 Python 自带的 GUI 工具包,易于使用且跨平台。但是,在我的经验中,它也非常丑陋,而且不太受欢迎。如果您是 Python 程序员,那么您可能希望将这本书放在书架上。
当我在教授 Python 编程课程时,我的学生经常问我如何提高他们代码的性能。的确,我认为 Python 像许多其他高级语言一样,强调程序员的效率而不是语言的效率。当然,我们知道,在项目早期就担心性能是自找麻烦。与此同时,一旦我们的程序运行起来,我们肯定希望提高其速度。由 Gabriele Lanaro 撰写,Packt Press 出版社出版的《Python 高性能编程》(Python High-Performance Programming)(ISBN 978-1-78328-845-8)旨在解决其中一些问题。本书重点关注少数几个可用于提高性能的领域:基准测试和性能分析(以了解问题所在);NumPy 的数组(比 Python 内置列表更快,但限制更多);Cython(将 Python 代码翻译成 C);最后是多进程。本书相对较短(108 页),但它确实提供了一些最常用的提高程序速度的技术。与此同时,我认为一些更基本的技术,例如不使用 += 来迭代构建字符串,会为本书增色不少。
最热门的语言仍然是 JavaScript,这仅仅是因为有大量的人可以通过计算机或移动设备访问浏览器。JavaScript 庞大的社区一直在推进各种技术和库,使开发更容易。此外,JavaScript 现在在浏览器之外也很流行,例如 node.js,这是一个使用异步 JavaScript 的服务器端框架。
特雷弗·伯纳姆 (Trevor Burnham) 撰写,Pragmatic Programmers 出版社出版的《异步 JavaScript》(Async JavaScript)(ISBN 978-1-937785-27-7)正是解决了第一个主题。人们在使用 JavaScript 时遇到的部分困难是它的异步性质。您经常设置一个函数在稍后某个事件发生时执行,并且经常很难记住它是如何工作的。本书介绍了可以帮助您构建更易于理解和调试的异步程序的技术。
函数式编程是一种技术,多年来一直被面向对象编程所排挤,但它正在卷土重来。即使您不使用纯粹的函数式编程语言,函数式技术也变得越来越重要和有用。迈克尔·福格斯 (Michael Fogus) 撰写,O'Reilly 出版社出版的《函数式 JavaScript》(Functional JavaScript)(ISBN 9781449360726)介绍了各种各样的函数式思想和技术。我认为这本书适合两种类型的读者:那些已经了解函数式编程并想了解这些思想如何在 JavaScript 中应用的人,以及相反的情况,那些了解 JavaScript 并对学习函数式编程感兴趣的人。
如果您是 JavaScript 新手,或者您只将其用于 Web 开发,并且还没有学习它作为更通用的编程语言是如何工作的,那么您可能很想阅读《Eloquent JavaScript》。这本书由 Marijn Haverbeke 撰写,可在 https://eloquent.javascript.ac.cn 在线阅读(并且很快将由 No Starch Press 以纸质形式出版),回顾了 JavaScript 作为一种语言的基础知识,直到本书的一半才忽略与 Web 相关的方面。因此,您可以学习 JavaScript 对象、高阶函数甚至正则表达式,并附有清晰有趣的示例。
HTML5 虽然不是一种语言,但它确实代表了 API 和工具的组合——最具体地说,是 HTML、JavaScript 和 CSS——它们是创建现代 Web 应用程序的标准方法。看到 HTML5 的广度和深度,以及人们使用它创建的应用程序,真是令人惊叹。如果您正在阅读本专栏,那么您可能不是《Head First HTML5 编程》(Head First HTML5 Programming)的合适读者,该书旨在向对这些技术知之甚少或一无所知的人教授 HTML、JavaScript 和 CSS 的基础知识。但是,如果您认识有人想了解这些东西是如何工作的,那么值得推荐这本书。
另一个非语言是 Git,它已成为我最喜欢和最不可或缺的工具之一。很难相信我曾经满足于 CVS 和 SVN,考虑到 Git 带来的优势。我必须承认,多年前,我的一位朋友说,我最终会切换到分布式版本控制系统,这将使生活变得更加轻松。他是对的,尽管他推荐的系统早于 Git,称为 Arch,我相信它不再使用了。
我经常教授 Git 使用课程,我发现大多数用户的问题不是命令,而是理解 Git 做什么(以及不做什么)以及各种对象如何协同工作。特别是,理解提交是什么,以及分支、标签、blob 和树如何融入这种以提交为中心的世界观,是使用 Git 的最大障碍。
所以,我很高兴看到由 Richard E. Silverman 撰写,O'Reilly 出版社出版的《Git 袖珍指南》(Git Pocket Guide)(ISBN 9781449325862)。是的,这本书将帮助您更好地使用 Git,并且它会提醒您许多命令。但更重要的是,《Git 袖珍指南》向您介绍了 Git 使用的对象,并描述了它们如何协同工作以提供强大而高效的版本控制系统。
数据库和分析Web 的发展不仅导致对能够创建 Web 应用程序的人员的需求不断增长,而且对那些能够存储、检索和分析这些应用程序生成的数据的人员的需求也在不断增长。“大数据”一词越来越多地应用于此类程序,并且在过去几年中编写了许多书籍,试图帮助该领域的新手。
在某些情况下,您不需要自己收集或分析数据。相反,您只需使用各种系统提供的 API 即可。社交网络尤其如此,它们收集了大量关于其成员及其之间连接的信息。马修·A·罗素 (Matthew A. Russell) 撰写的《挖掘社交网络》(Mining the Social Web)发布了第二版(ISBN 9781449367619),它描述了您可以访问和分析不同社交网络的许多方法。我过去曾使用过此类 API,因此我对它们在我的应用程序中的使用并不陌生,但这本书描述了我没有想到的许多用途,并提供了许多清晰的示例代码来阐明要点。
对于那些想要更直接地分析大型数据集的人来说,由 Cathy O'Neil 和 Rachel Schutt 撰写,O'Reilly 出版社出版的《数据科学实战》(Doing Data Science)(ISBN 9781449358655)是对统称为“数据科学”的技术的密集但有趣的介绍。作者对这种分析中使用的数学和算法以及您可以从其使用中得出的结论进行了旋风式的介绍。这本书的某些部分对我的需求和兴趣来说有点深奥,但它让我更好地了解了数据科学人员正在做什么,以及它如何已经变得有用。我应该注意到,本书的合著者之一 Cathy O'Neil 是新的“Slate Money”播客的参与者。如果您想听到大数据驱动的财务分析,您可能需要收听每周的录音。
自由职业和商业自 1995 年以来,我一直是一名自由顾问,与世界各地的客户合作,我真的很喜欢我的工作。我甚至参与每周播客“自由职业者秀”(The Freelancers Show),小组成员在其中讨论自雇的方方面面。
我在节目中的两位小组成员在过去一年中出版了电子书。柯蒂斯·麦克海尔 (Curtis McHale) 撰写了 别做白痴:学习如何经营一家可行的自由职业企业(Don't Be an Idiot: Learn to Run a Viable Freelance Business),其中为创业和经营成功的自由职业企业提供了实用的建议。同样,埃里克·戴维斯 (Eric Davis) 在他的 30 天成为自由职业者(30 Days to Become a Freelancer)中为您提供了一个从自由职业轨道开始的实用、按日计划。
其他书籍当然,我不仅仅阅读技术书籍,尽管我的朋友和家人可能不太相信这种说法。在过去一年中,我读过许多我认为你们都会喜欢的优秀书籍。
蒂姆·哈福德 (Tim Harford) 是一位著名的经济学作家,并出版了许多关于该主题的书籍。他的最新著作《卧底经济学家反击》(The Undercover Economist Strikes Back)描述了宏观经济学和政府政策是如何运作的,以及经济学家用来试图理解这些政策及其影响的各种理论。长期以来,我对经济学很感兴趣,但仍然非常喜欢阅读这本书,这本书为各个经济学派之间的差异提供了新的视角。
我另一位最喜欢的作家汤姆·斯坦迪奇 (Tom Standage) 今年出版了一本新书:《墙上的文字:社交媒体——最初的 2000 年》(Writing on the Wall: Social Media—The First 2,000 Years)。斯坦迪奇的论点是,我们现在使用的几乎每种社交媒体和技术都在以前的文化中都有先例。他幽默而有趣的书肯定会让你对 Facebook 和 LinkedIn 等事物有一些看法。
今年出版的另一本伟大的书是乔丹·艾伦伯格 (Jordan Ellenberg) 的《如何避免错误思考:数学思维的力量》(How Not to Be Wrong: The Power of Mathematical Thinking)。艾伦伯格是一位数学教授,他试图在本书中展示数学思维如何帮助您做出有用的决策。他在本书的开头指出,“数学”不是您在小学和高中学到的东西,并且成功地在书中几乎没有方程式。相反,他的观点是展示它如何成为一种生活视角,可以帮助您做出决策或说服他人。值得称赞的是,作者还列举了许多数学实际上无法提供明确答案的例子,例如(最令人惊讶的是)在决定选举结果方面。
正如本专栏的读者所知,在过去的几年里,我曾多次前往中国教授 Ruby 和 Python 编程课程。而且,我已成为中国记者撰写的有关中国的书籍的爱好者。埃文·奥斯诺斯 (Evan Osnos) 曾担任《纽约客》驻华记者多年,今年出版了一本名为《野心时代:在新中国追逐财富、真理和信仰》(Age of Ambition: Chasing Fortune, Truth, and Faith in the New China)的书,试图理解中国正在发生的政治和社会变革。同样,我正在欣赏霍华德·弗伦奇 (Howard French) 的书《中国的第二个大陆:百万移民如何在非洲建立新帝国》(China's Second Continent: How a Million Migrants Are Building a New Empire in Africa),该书描述了中国侨民在非洲各国的经历和互动。
最后,作为一名最近完成博士学位的人,我可以推荐一本有趣的(如果相当愤世嫉俗的)书:亚当·鲁本 (Adam Ruben) 的《活过你那愚蠢、愚蠢的读研决定》(Surviving Your Stupid, Stupid Decision to Go to Grad School)。也许现在我已经完成了学位,更容易嘲笑他的笑话了,但我发现它不仅有趣,而且也具有治疗作用,因为我知道其他人在他们的研究生生涯中也经历了与我类似的问题和挑战。
我希望这些建议能为您提供许多小时富有洞察力和趣味性的阅读!我确信我错过了去年出版的许多好书;我总是乐于听取他们的意见,并欢迎您的建议。