Martin Fowler (software engineer)

Revision as of 19:57, 4 April 2025 by imported>Stonecold415
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

Template:Short description Template:Use dmy dates Template:Use British English Template:Infobox person

Martin Fowler (18 December 1963) is a British software developer,<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> author and international public speaker on software development, specialising in object-oriented analysis and design, UML, patterns, and agile software development methodologies, including extreme programming.

His 1999 book Refactoring popularised the practice of code refactoring.<ref>Stephane Faroult; Pascal L'Hermite (2008). Refactoring SQL Applications. O'Reilly Media. p. 8. Template:ISBN.</ref> In 2004 he introduced a new architectural pattern, called Presentation Model (PM).<ref>Stephen Chin; Dean Iverson; Oswald Campesato; Paul Trani (2011). Pro Android Flash. Apress. p. 300. Template:ISBN.</ref>

BiographyEdit

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.<ref name="mfbio">Martin Fowler at martinfowler.com. Retrieved 2012-11-15.</ref>

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.<ref>James A. Highsmith (2002). Agile Software Development Ecosystems. Addison-Wesley Professional. p. 133. Template:ISBN.</ref> In 2000 he joined ThoughtWorks, a systems integration and consulting company,<ref name="mfbio"/> where he was Chief Scientist.<ref>Martin Fowler | ThoughtWorks. Retrieved 2015-03-30.</ref>

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.<ref>Manifesto for Agile Software Development. Retrieved 2012-12-10.</ref> He maintains a bliki, a mix of blog and wiki. He popularised the term Dependency Injection as a form of Inversion of Control.<ref>Kamil Piętak; Marek Kisiel-Dorohinicki (2013). "Agent-Based Framework Facilitating Component-Based Implementation of Distributed Computational Intelligence Systems". In Ngoc-Thanh Nguyen; Joanna Kołodziej; Tadeusz Burczyński et al. Transactions on Computational Collective Intelligence X. Springer. p. 38. Template:ISBN.</ref><ref>Martin Fowler (2004) "Inversion of Control Containers and the Dependency Injection pattern". Retrieved 2012-11-15.</ref>

PublicationsEdit

  • 1996. Analysis Patterns: Reusable Object Models. Addison-Wesley. Template:ISBN.
  • 1997. UML Distilled: A Brief Guide to the Standard Object Modeling Language. Addison-Wesley. Template:ISBN.
  • 1999. Refactoring: Improving the Design of Existing Code, With Kent Beck, John Brant, William Opdyke, and Don Roberts (June 1999). Addison-Wesley. Template:ISBN.
  • 2000. Planning Extreme Programming. With Kent Beck. Addison-Wesley. Template:ISBN.
  • 2002. Patterns of Enterprise Application Architecture. With David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, and Randy Stafford. Addison-Wesley. Template:ISBN.
  • 2010. Domain-Specific Languages. With Rebecca Parsons. Addison-Wesley. Template:ISBN.
  • 2012. NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. With Pramod Sadalage. Addison-Wesley. Template:ISBN.
  • 2013. Refactoring: Ruby Edition. With Kent Beck, Shane Harvie, and Jay Fields. Addison-Wesley. Template:ISBN.
  • 2018. Refactoring: Improving the Design of Existing Code, Second Edition. Kent Beck, and Martin Fowler. Addison-Wesley. Template:ISBN.

Domain-specific languagesEdit

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.<ref name=":0">Template:Cite book</ref>Template:Rp 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.<ref name=":0" />Template:Rp 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.<ref name=":0" />Template:Rp

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.<ref name=":0" />Template:Rp 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<ref name=":0" />Template:Rp

The book discusses implementing an external DSL using tools like parsers, lexers, abstract syntax trees and code generation referred to as "syntax-driven translation"<ref name=":0" />Template:Rp 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.<ref name=":0" />Template:Rp

Ways of implementing internal DSLs is discussed, with attention paid to nested function calls,<ref name=":0" />Template:Rp sequences of function calls,<ref name=":0" />Template:Rp or method chaining<ref name=":0" />Template:Rp amongst other methods.Template:Fact

ReferencesEdit

Template:Reflist

External linksEdit

Template:Sister project Template:Sister project

|CitationClass=web }}

Template:Software engineering Template:Authority control