你真的会写代码吗mobi电子书提取码

计算机与互联网 [意大利] 马尔科.法埃拉
简介: 1个示例,7次重构,助你辨别优劣代码。

在过去30年里,我写了不少编程书,所以习惯了时不时有人联系我寻求写书的建议。我总是要求他们提供一篇样章。在大多数情况下,他们就再没有下文了,我也并不觉得遗憾。很显然,如果一个人连样章也写不出,写一本书更是空谈,也就没有什么好讨论的了。

2018年1月,我收到了一封来自意大利那不勒斯大学的马尔科·法埃拉教授的电子邮件,他之前在美国加州大学圣克鲁兹分校工作时和我见过面。他向我咨询了关于写书的建议,而且已经写完好几章了!我看了之后很喜欢,就回复了一些鼓励和建议。但是最终还是没有下文了。我并没有感到惊讶。我的一个编辑曾经告诉我,在他认识的人中,开始写书的人很多……但写完一本书的人很少。

2019年4月,我又收到了马尔科的一封电子邮件,得知这本书即将由Manning出版社出版。它看起来真的很不错。8月,马尔科请我为它作序,我欣然同意了。

在写关于编程语言的书(比如经典的《Java核心技术》)时,我会把重点放在该语言特有的结构和API上,假设读者已经很好地掌握了数据结构、算法和软件工程原理(如测试、重构和设计模式等)。当然,当过教授的我也知道,大学课程并不总是能用一种实用且易于吸收的方式来很好地教授这些主题。

这本书恰恰满足了这一需求。作为读者,你应该熟悉Java编程的基础知识,而马尔科将告诉你如何编写更高质量的程序。你可能已经在算法设计、API设计、测试和并发等方面有了一定的经验,但马尔科对这些经典的主题做了新的诠释。他通过不同的方式反复实现同一个示例,从而得出了很多惊人的见解。通常,我不喜欢“演进示例”的方法,因为它迫使我按顺序阅读一本书。由于需要知道该示例的演进状态,因此就不能直接跳到最感兴趣的部分了。但马尔科给出的例子(其本质我不想在此透露)设计得非常巧妙。当你第一次看到它的时候,需要掌握几个出人意料、有趣的核心概念。之后,每一章都让此代码在不同的方向上演进。这真是一部杰作。

在主要的几章中,你会找到标题为“来点儿新鲜的”的小节。在此,你能将在该章所学的技巧应用到不同的场景中。我建议你完成这些挑战,还有小测验和章末的练习。

构建高质量的软件向来不是简单的事情,重新审视好的设计原则和技巧总是没错的。在这本书中,你会发现一个全新的视角。希望你能像我一样喜欢这本书。

前言

我本人起的书名是《Java:风格练习》。不过在Manning出版社的智者们教导我如何吸引读者之后,这个书名和它的文学范儿就仅存于此前言中了。的确,在经典的现代文学著作《风格练习》中,法国作家Raymond Queneau用99种方式写出了同一个故事。那本书的重点不在于故事本身(刻意弱化了故事),而在于异想天开地探索自然语言几乎无穷无尽的表达能力。

编程当然不是文学,尽管像高德纳这样的名人曾努力拉近两者的距离。如果初学编程的人认为每个编程任务都有最优解,就像简单的数学问题有单一解一样,还是可以理解的。实际上,现代编程更像文学,而不是更像数学。程序设计语言在发展过程中包含了越来越多的抽象结构,使得实现某一目标的方法成倍增加。一门语言即使在出现之后,也会不断演进,这往往是通过不断引入新的问题解决方法来达成的。如Java之类的流行语言一直在加速发展,以跟上试图取代其位置的新一代语言。

本书尝试介绍在执行任何编程任务中都应考虑或至少要意识到的各种问题和解决方案。我提出的任务相当普通:用一个类表示水容器,你可以用管道与之连接并注入水;而客户端不断地与容器交互,随时都可以加水、放水或放置新的管道。针对此任务,我提出并讨论了18种实现。每一种实现都力求最大限度地实现不同的目标,无论是性能、代码清晰度,还是其他软件质量。本书并不是一串串干巴巴的代码片段。每当上下文需要的时候,我都会借机讨论一些与计算机科学(各种数据结构、复杂度理论和摊销复杂度)、Java编程(线程同步和Java内存模型)以及软件工程(契约式设计方法论和测试技术)相关的专业话题。我的目的是告诉你:无论案例多简单,只要进行深入分析,就会串起一个庞大的知识网络,而所有这些知识都有助于写出更好的代码。

版权:人民邮电出版社