Программирование для предметной областиИздательство «Вильямс» продолжает радовать профессиональных разработчиков переводами новейших работ классиков программной инженерии — в свет вышла книга «Предметно-ориентированные языки программирования» Мартина Фаулера, признанного эксперта в области дизайна и разработки программ, одного из авторов вышедшего десять лет назад Манифеста скорой (agile) разработки.

В предисловии к книге Фаулер говорит о том, что предметно-ориентированные языки известны в компьютерном мире еще с начала 80-х годов — этими языками активно пользовались ветераны Unix и Lisp, однако парадокс в том, что, по сути, мало кто из профессионалов-разработчиков имеет четкое представление, что такое предметно-ориентированные языки программирования, для чего они предназначены и какие преимущества обеспечивают. Этот пробел и призвана ликвидировать книга Фаулера.

Автор признается, что, как и многое в области разработки, понятие «предметно-ориентированный язык программирования» достаточно размыто: «Об одних вещах можно с уверенностью сказать, что это DSL (Domain Specific Language), а о других можно говорить и так и эдак». По определению Фаулера, «предметно-ориентированный язык – это язык с ограниченными выразительными возможностями, ориентированный на некую конкретную предметную область». Этот язык значительно проще языков программирования общего назначения, таких как C++ или Java, оперирует ограниченным кругом понятий, но при этом позволяет реализовать события определенной предметной области таким образом, что полученная программа будет абсолютно понятна экспертам в этой конкретной области. Одно из основных преимуществ предметно-ориентированных языков — это возможность достичь понимания между разработчиками и постановщиками задачи, далекими от компьютерной тематики. Фаулер отвергает предположение, что DSL может позволить вообще обойтись без программистов в процессе создания системы, но подчеркивает, что для предметно-ориентированных языков чтение кода важнее его написания. Фактически DSL становится своего рода «эсперанто» между разработчиками и их клиентами —специалистами предметной области. Как истинный приверженец скорых подходов, Фаулер очень высоко ценит средства, упрощающие общение между заказчиком и разработчиком.

Предметно-ориентированный язык позволяет закодировать частные задачи в рамках большой системы наиболее эффективным и прозрачным для заказчика способом. Он повышает производительность труда разработчика, поскольку тот получает инструмент быстрого создания и простого изменения определенных частей программного комплекса. Это первое преимущество, которое, как отмечает Фаулер, делает применение DSL обоснованным. Второе — уже упомянутое достижение понимания между разработчиком и клиентом. И то и другое стоит, по мнению автора, тех усилий, которые придется затратить на изучение или создание предметно-ориентированного языка. Однако Фаулер предостерегает и от бездумного употребления DSL — в ряде случаев более эффективны готовые библиотеки. Одна из задач книги в том, чтобы научить читателя объективно оценивать положительные и отрицательные стороны DSL и принимать обоснованные решения по их применению.

Книга, по определению самого автора, представляет собой руководство по различным видам предметно-ориентированных языков и подходам к их построению. Фаулер стремится дать читателю представление о возможно более широком спектре методов, которые можно использовать при создании DSL. Однако, несмотря на внушительный объем, книга не претендует на исчерпывающую полноту изложения темы, хотя полученной информации достаточно для принятия первоначальных решений в ходе работы с предметно-ориентированными языками. Автор призывает читателя не пугаться большого объема книги, поскольку на самом деле она представляет собой две книги под одной обложкой. Первая — повествование, в котором дается общий обзор проблематики предметно-ориентированных языков, и предполагается, что его читатель может прочитать целиком. Вторая же книга представляет собой справочник, к которому можно обращаться при необходимости за подробной информацией по определенной теме, для описания которых Фаулер использует структуру шаблонов, при этом шаблон представляет собой решение определенной практической задачи.

В предисловии к книге Фаулер констатирует всплеск интереса к предметно-ориентированным языкам в последние годы, затрудняясь дать этому явлению абсолютно объективное объяснение. Но, по собственному мнению автора, к этому привели недостатки языков общего назначения, таких как Java и C#: при всем изобилии их возможностей определенную логику в них реализовать просто и изящно не удается. Не решают проблему и более гибкие динамические языки и среды разработки, такие как Ruby on Rails.

Многие разработчики сегодня оказались в ситуации, когда единственным выходом для них является предметно-ориентированный язык. Но информации о возможностях и способах создания таких языков катастрофически не хватает — профессионалам нужен хороший учебник и полный справочник по DSL. Российским разработчикам, которые задумываются или стоят перед необходимостью создания предметно-ориентированного языка, можно рекомендовать книгу Фаулера в обоих этих качествах.

Мартин Фаулер. Предметно-ориентированные языки программирования/Пер. с англ. — М.: ООО «И.Д. Вильямс», 2011. – 576 с.: ил.