Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Американский разработчик программного обеспечения, автор и публичный оратор.
American software developer, author and public speaker
Его книга 1999 года «Рефакторинг» популяризировала практику рефакторинга кода. В 2004 году он представил новый архитектурный шаблон, названный Presentation Model (PM).
His 1999 book Refactoring popularised the practice of code refactoring. In 2004 he introduced a new architectural pattern, called Presentation Model (PM).
Биография
Фаулер родился и вырос в Уолсолле, Англия, где получил среднее образование в школе королевы Марии. Он окончил Лондонский университетский колледж в 1986 году. В 1994 году он переехал в Соединенные Штаты и живёт недалеко от Бостона, штат Массачусетс, в пригороде Мелроуз. Фаулер начал работать с программным обеспечением в начале 1980-х годов. Сразу после окончания университета в 1986 году он начал работать разработчиком программного обеспечения в Coopers & Lybrand до 1991 года. В 2000 году он присоединился к ThoughtWorks, компании, специализирующейся на системной интеграции и консалтинге.
Fowler was born and grew up in Walsall, England, where he went to Queen Mary's Grammar School for his secondary education. He graduated at University College London in 1986. In 1994 he moved to the United States, where he lives near Boston, Massachusetts in the suburb of Melrose. Fowler started working with software in the early 1980s. Out of university in 1986 he started working in software development for Coopers & Lybrand until 1991. In 2000 he joined ThoughtWorks, a systems integration and consulting company,
Фаулер является автором девяти книг по разработке программного обеспечения. Он входит в состав Agile Alliance и принимал участие в создании Манифеста гибкой разработки программного обеспечения в 2001 году вместе с 16 другими подписавшими. Он ведёт блики – нечто среднее между блогом и вики. Он популяризировал термин "инъекция зависимостей" как форму инверсии управления.
Fowler has written nine books on the topic of software development. He is a member of the Agile Alliance and helped create the Manifesto for Agile Software Development in 2001, along with 16 fellow signatories. He maintains a bliki, a mix of blog and wiki. He popularised the term Dependency Injection as a form of Inversion of Control.
Публикации
1996 год. Анализ шаблонов: повторно используемые объектные модели. Эддисон Уэсли. 1997 год. UML Distilled: Краткое руководство по стандартному языку объектного моделирования. Эддисон Уэсли. 1999 год. Рефакторинг: улучшение дизайна существующего кода, с Кентом Беком, Джоном Брантом, Уильямом Опдайком и Доном Робертсом (июнь 1999). Эддисон Уэсли. 2000 год. Планирование экстремального программирования. С Кентом Беком. Эддисон Уэсли. 2002 год. Шаблоны архитектуры корпоративных приложений. С Дэвидом Райсом, Мэтью Фомелем, Эдвардом Хиаттом, Робертом Ми и Рэнди Стаффордом. Эддисон Уэсли. 2010 год. Языки, специфичные для предметной области. С Ребеккой Парсонс. Эддисон Уэсли. 2012 год. NoSQL Distilled: Краткое руководство по новому миру полиглотной постоянной памяти. С Прамодом Садалажем. Эддисон Уэсли. 2013 год. Рефакторинг: Ruby Edition. С Кентом Беком, Шейном Харви и Джеем Филдсом. Эддисон Уэсли. 2018 год. Рефакторинг: улучшение дизайна существующего кода, второе издание. Кент Бек и Мартин Фаулер. Эддисон Уэсли.
1996. Analysis Patterns: Reusable Object Models. Addison Wesley. 1997. UML Distilled: A Brief Guide to the Standard Object Modeling Language. Addison Wesley. 1999. Refactoring: Improving the Design of Existing Code, With Kent Beck, John Brant, William Opdyke, and Don Roberts (June 1999). Addison Wesley. 2000. Planning Extreme Programming. With Kent Beck. Addison Wesley. 2002. Patterns of Enterprise Application Architecture. With David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, and Randy Stafford. Addison Wesley. 2010. Domain Specific Languages. With Rebecca Parsons. Addison Wesley. 2012. NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. With Pramod Sadalage. Addison Wesley. 2013. Refactoring: Ruby Edition. With Kent Beck, Shane Harvie, and Jay Fields. Addison Wesley. 2018. Refactoring: Improving the Design of Existing Code, Second Edition. Kent Beck, and Martin Fowler. Addison Wesley. .
Языки, специфичные для конкретной области
В своей книге «Доменно-специфические языки» Фаулер обсуждает доменно-специфические языки, DSL. DSL определяются как композируемые языки программирования, ориентированные на конкретную предметную область и обладающие ограниченной выразительностью. Утверждается, что DSL могут повысить производительность, избавляя программиста от необходимости знать полноценный язык программирования, предоставляя средство коммуникации с экспертами в данной области и отделяя способ выполнения задачи от её определения. Эти преимущества сопоставляются с затратами на изучение нового языка и разработку инструментов для него, с риском изоляции, возникающей из-за использования разных языков, а также с тем, что абстракции, используемые в DSL, могут оказаться неподходящими для конкретной задачи. Фаулер вводит понятия внутренней (или встроенной) и внешней DSL, причём внутренняя DSL представляет собой подмножество другого языка и может выполняться инструментами этого внешнего языка. Ruby и Lisp приводятся в качестве примеров языков, в которых часто используются внутренние DSL. Он также вводит понятие семантической модели, определяющей выполнение DSL. В книге представлены различные примеры DSL, включая graphviz – язык для описания графов, предназначенных для визуализации; JMock – фреймворк для мокирования в Java; CSS – язык для определения стилистических элементов веб-сайта; HQL – объектно-реляционный отображатель в Java; XAML – язык для описания и изменения графических пользовательских интерфейсов; FIT – язык для описания тестовых сценариев; и make – инструмент для сборки программного обеспечения.
In his book, Domain specific languages, Fowler discusses Domain specific languages, DSL. DSLs are said to be defined by being composable programming languages, with their focus on an individual domain and having limited expressiveness. It is argued that DSLs can increase productivity by removing the requirement of the programmer to understand a full programming language, providing a means of communication with domain experts, and separate the manner of execution of a task from the definition of a task itself. These benefits are set against the cost of learning a new language and building the tools for this language, siloing that results for different languages and the abstractions used in DSLs not being suitable for a task. Fowler introduces the concept of internal (or embedded) and external DSL, an internal DSL being a DSL that is a subset of another language and can be executed by the tools for this outer language. Ruby and Lisp are given as an example of languages where internal DSLs are common. He also introduces the idea of Semantic Model which defines the execution of a DSL. Various examples of DSLs are presented including graphviz, a language for specifying graphs to be rendered; JMock, a java mocking framework; CSS, a language to specify stylistic elements of a website; HQL, an object relational mapper in Java; XAML, a language used to specify and change graphical user interfaces; FIT, a language to express testing scenarios; and make, a tool to build software
В книге обсуждается реализация внешней DSL с использованием таких инструментов, как парсеры, лексеры, абстрактные синтаксические деревья и генерация кода, что называется «синтаксически-ориентированным преобразованием». Это противопоставляется «разделительно-ориентированному преобразованию», которое считается более простым, но менее мощным. В этом случае язык достаточно прост для интерпретации путем разделения по разделителям и переключения логики на основе отдельных элементов. Обсуждаются способы реализации внутренних DSL, уделяя внимание вложенным вызовам функций, последовательностям вызовов функций или цепочкам методов и другим методам.
The book discusses implementing an external DSL using tools like parsers, lexers, abstract syntax trees and code generation referred to as "syntax driven translation" This is contrasted with "delimiter driven translation" which is said to be simpler but less powerful. Here the language is simple enough to be interpreted by splitting on delimiters and switching logic based on individual entries. Ways of implementing internal DSLs is discussed, with attention paid to nested function calls, sequences of function calls, or method chaining amongst other methods.