每日一书|领域特定语言:软件开发“教父“经典再现

Posted 《新程序员》编辑部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一书|领域特定语言:软件开发“教父“经典再现相关的知识,希望对你有一定的参考价值。

杜甫诗云:“读书破万卷,下笔如有神”。开发者多读书、读好书,能打好基础、掌握实践、答疑解惑、拓展视野。正基于此,2021年11月1日起,CSDN、《新程序员》推出“每日一书”栏目,为你推荐精选好书,助力你的开发工作如行云流水。

作为程序员,我们学习了很多通用编程语言(GPL),比如Java、Python等;但其实,我们也应该尝试掌握 "求专不求全" 的领域特定语言(DSL)。

今天异步君推荐一本大有来头的书,它甚至可以算作软件开发程序员的必备教程,这本书就是软件开发大师马丁·福勒的力作《领域特定语言》。

这本领域特定语言DSL的丰碑之作,十年后经典复现,通过Java和C语言分析具体案例,并精选部分采用Ruby编写的示例,讲解DSL的构造方式和通用原则。

这本好评不断的《领域特定语言》已经上架各大平台啦~

想要品读经典,成为《领域特定语言》中文版的首批读者,就赶快点击下方的链接,享受新书优惠,直达购买吧!

《领域特定语言》必读的四大理由

理由一:领域特定语言DSL的丰碑之作

领域特定语言(DSL)这一个概念并不是最近才发明的,早在计算机发明伊始,DSL便成为人们讨论的话题。

关于领域专用语言的定义,最得到人们广泛认可的是,马丁·福勒在他书中的诠释:"领域专用语言是针对某一特定领域,具有受限表达性的一种计算机程序设计语言。" 

这个定义也正是《领域特定语言》一书被称为DSL领域经典著作的原因之一。

十余年前,《领域特定语言》原版《Domain-Specific Languages》一经出版,便获得众人追捧,被译为中文、日语、韩语、葡萄牙语等众多语言,在世界范围内畅销不衰。

(《领域特定语言》英文原版)

"一项技术产品只有在获得了JoIt奖之后才能真正成为行业的主流,一本技术书籍只有在获得了JoIt奖之后才能真正奠定经典的地位。"

这本书便是对这句话最好的诠释,它一经问世,便获得了"软件业界的奥斯卡" JoIt Award入围奖,堪称领域特定语言DSL的丰碑之作。

《领域特定语言》原版虽然已经问世十余年,但岁月不败经典,这本书所蕴含着的精华,仍然值得我们反复咀嚼,常读常新。

这从网友们对该书豆瓣评分高达8.2分,书评不断更新,便可一窥其魅力。

▌理由二:世界软件开发"教父"的不朽经典

一本成功的书籍背后总有一名了不起的人物,这本书也不例外。

本书作者马丁·福勒(Martin Fowler),世界级软件开发大师,敏捷开发方法的创始人之一,Thoughtworks的Cheif scientist,OO的bigot,XP的zealot。

他在面向对象分析与设计、UML、模式、极限编程、重构和DSL等领域都有非常深入的研究并为软件开发行业做出了卓越贡献。

他热爱编写技术文章,著有《重构:改善既有代码的设计》、《分析模式:可复用的对象模型》、《企业应用架构模式》等经典著作。

马叔不愧是软件开发"教父",简直NB的一塌糊涂。

(马丁·福勒)

马丁·福勒在编写技术书籍上是有极高天赋的,他热爱分享,善于发现问题,并且能够在解决问题的同时,将经验转为文字传授给他人。在这方面,他就像是拥有超能力

而马丁·福勒创作这本书的原因也正是因为发现了问题,想要挑战问题,分享自己的观点。就像他在书中回答"为什么写这本书"所言:

"在我开始编程之前,DSL(Domain–Specific Language,领域特定语言)就已经成了程序世界中的一员。随便找个UNIX或者Lisp老手问问,他一定会跟你滔滔不绝地谈起DSL是怎么成为他的镇宅之宝的,直到你被烦得痛不欲生为止。但即便这样,DSL却从未成为计算领域的一大亮点。大多数人都是从别人那里学到DSL,而且只学到了有限的几种技术。

我写这本书就是为了改变这个现状。我希望通过本书介绍的大量DSL技术,让你有足够的信息来做出决策:是否在工作中使用DSL,以及选择哪一种DSL技术。"

有眼光的人向前看,聪明的人有远见。大佬果然是大佬,格局真的很大。

因为发现经验丰富的程序员对DSL的相关技术所知寥寥,没法对使用哪一项技术做出明智的判断,所以想要打破这种知识壁垒。于是,《领域特定语言》便应运而生。

感谢他的远见卓识,让我们的DSL之路不再迷茫。

(DSL问答)

理由三:经典升级,今天应该开始读

这是一本令人激动的书。书中内容的涵盖面很广,而在此基础上又有相当的深度。

根据英文原版结构,中文版全书共57章,分为6个部分。

全面介绍了DSL概念、DSL常见主题、外部DSL主题、内部DSL主题、备选计算模型以及代码生成等内容,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。

中文版的翻译沿用Fowler一贯的清晰、简洁、易懂的风格写成并沿用了该系列中其他书籍(《企业架构模式》和《企业集成模式》)的格式:关于DSL的文章,其中有例子和最佳实践,然后是关于该主题的广泛的模式库。这本书涵盖了从如何设计流畅的接口到创建和传递外部DSL的所有内容。

异步君向所有对软件设计感兴趣的人推荐这本书,想要快速进阶领域特定语言,看这本书就对了

因为,毫不夸张地说,领域特定语言(DSL)几乎能适应任何可以提高效率的场景,可使用的场景非常广泛,在软件开发行业相当流行。很多人都认为DSL会是软件行业的下一个"big thing"

既然如此,为何不从今天开始读起,让它成为你的武器库中一个非常强大的武器呢?

理由四:好评不断,技术大咖鼎力推荐

一本书好不好,从它的口碑便可以看得出。

这本书不仅得到了ACM 和 IEEE 计算机协会的成员拉斐尔·马良卡尔的推荐,他曾担任研究科学家、软件工程师、金融应用应用程序员以及物理和电子学讲师,还在豆瓣和亚马逊网站上获得读者的一片好评。

"特定域的语言 (DSL) 处理重点问题,通常在较大的系统或软件工具的上下文中处理。他们通常关注软件系统的狭窄、定义明确的方面,如配置,或在定义明确的领域中对特定类别的问题进行建模。使用设计或仿真软件的其他学科的软件架构师、开发人员甚至工程师都会遇到明显需要此类 DSL 的建模或配置工具。即使大小适中、复杂程度的软件系统的架构师、设计师和开发人员也经常需要针对软件系统的某些方面发明和实施这种语言,扩展现有语言,或在系统中改进对该语言的支持。本书涉及此类 DSL 的定义、设计和开发过程中将出现的许多问题。这本书的总体结构是福勒所说的"复式书":一个相对较短的叙事文本传达的概念和基本思想,值得全文阅读。"

—— 拉斐尔·马良卡尔

(拉斐尔·马良卡尔的评论)

豆瓣和亚马逊读者好评不断:

"领域特定语言,被忽视多年的编程利器。"

"快速上手一门DSL已经成为了程序员的基本素养!"

"Martin写的书向来实用不装逼,这本书也不例外!阅读本书需要一定的实际编程经验,而且会用的语言越多越好。篇幅很大,不适合直线阅读,建议按照书中的互引来交叉阅读,效果更佳。总之,Martin Fowler本人就是本书质量的保证。"

"关于软件设计的一个有趣领域的优秀书籍。"

......

(亚马逊读者评价)
(豆瓣读者评价)

《领域特定语言》如何读?

目标读者

本书的理想读者是那些正在思考构建DSL的职业软件程序员。马丁·福勒认为这种类型的读者都应该有多年的工作经验,认同软件设计的基本思想。

当然,本书也适合想要了解各种DSL及其构造方式,理解其通用原则、模式和适用场景,以提高开发生产力和沟通能力的程序员阅读。

如果你深入研究过语言设计的话题,那这本书里大概不会有什么你没有接触过的资料。作者在书中整理并表述信息的方式也对你有所帮助。

虽然人们在语言设计方面做了大量的工作,尤其是在学术领域,可这些成果能够为专业编程领域服务的却寥寥无几。因此,这本书的重要性便显而易见了。

书籍结构

这本书旨在全面介绍各种DSL及其构造方式。

当人们尝试DSL的时候,经常就只选一种技术。你可以在本书里看到对多种技术的介绍,真正用的时候就可以做出最合适的选择。本书还提供了很多DSL技术的实现细节和例子。

当然,作者无法把所有的细节都写下来,但也足以使读者入门,在早期决策时起到辅助作用。

如果你的时间紧张,如何能够在不通读全书的情况下充分利用好它?

如果你想知道什么是DSL,DSL有什么用途,请阅读第一部分。前3章讲述什么是DSL、DSL的用途以及DSL与框架和库的区别。

如果你想要知道如何实现DSL,请阅读第3-9章。通读第一部分后,你就可以更全面地掌握DSL的不同实现技术。

如果你想要知道DSL常见主题,请阅读第二部分。第10-16章介绍了各种DSL,分别讲述了语义模型、符号表、语境变量、构造型生成器、宏和通知的工作原理和使用场景。

如果你想要知道外部DSL主题,请阅读第三部分。第17-31章讲述解析器所扮演的角色, “解析器生成器”(第23章)的作用,用解析器解析外部DSL的各种方式。

如果你想要了解内部DSL主题,请阅读第四部分。第32-46章展示了在一种DSL风格中所能使用的多种语言结构。虽然它不能告诉你怎样充分利用你钟爱的语言,却能帮助你理解一门语言中的技术在不同语言之间的对应关系。

如果你想要了解备选计算模型,请阅读第五部分。第47-51章介绍其他计算模型,有助于读者学习如何构建模型。

如果你想要了解代码生成,请阅读第六部分。第52-57章介绍了基于转换器的代码生成、模板化的生成器、嵌入助手、基于模型的代码生成、无视模型的代码生成和代沟等内容。

(声明:本文转载自人民邮电出版社IT专业图书旗舰品牌“异步图书”微信公众号。)

以上是关于每日一书|领域特定语言:软件开发“教父“经典再现的主要内容,如果未能解决你的问题,请参考以下文章

每日一书《数据挖掘,实用机器学习工具与技术》

每日一书|世界上代码量很少的经典算法是什么样的?

每日一书|JavaScript 经典「红宝书」,几代前端人的入门选择

每日一书|豆瓣评分9.3,陪伴无数程序员成长的神作,终于升级了

每日一书|数据结构的Python语言描述

每日一书|《算法设计》:算法入门之选