Martin Fowler (18 December 1963) is a British
software developer
Software development is the process of designing and Implementation, implementing a software solution to Computer user satisfaction, satisfy a User (computing), user. The process is more encompassing than Computer programming, programming, wri ...
, author and international public speaker on software development, specialising in
object-oriented analysis and design
Object-oriented analysis and design (OOAD) is a technical approach for analyzing and designing an application, system, or business by applying object-oriented programming, as well as using visual modeling throughout the software development pro ...
,
UML,
patterns, and
agile software development
Agile software development is an umbrella term for approaches to software development, developing software that reflect the values and principles agreed upon by ''The Agile Alliance'', a group of 17 software practitioners, in 2001. As documented ...
methodologies, including
extreme programming
Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development,"Human Centred Technology Workshop 2006 ", 2006, ...
.
His 1999 book ''Refactoring'' popularised the practice of
code refactoring
In computer programming and software design, code refactoring is the process of restructuring existing source code—changing the '' factoring''—without changing its external behavior. Refactoring is intended to improve the design, structure, ...
. In 2004 he introduced a new
architectural pattern, called Presentation Model (PM).
Biography
Fowler was born and grew up in
Walsall
Walsall (, or ; locally ) is a market town and administrative centre of the Metropolitan Borough of Walsall, in the West Midlands (county), West Midlands, England. Historic counties of England, Historically part of Staffordshire, it is located ...
, England, where he went to
Queen Mary's Grammar School for his secondary education. He graduated at
University College London
University College London (Trade name, branded as UCL) is a Public university, public research university in London, England. It is a Member institutions of the University of London, member institution of the Federal university, federal Uni ...
in 1986. In 1994, he moved to the United States, where he lives near
Boston
Boston is the capital and most populous city in the Commonwealth (U.S. state), Commonwealth of Massachusetts in the United States. The city serves as the cultural and Financial centre, financial center of New England, a region of the Northeas ...
,
Massachusetts
Massachusetts ( ; ), officially the Commonwealth of Massachusetts, is a U.S. state, state in the New England region of the Northeastern United States. It borders the Atlantic Ocean and the Gulf of Maine to its east, Connecticut and Rhode ...
in the suburb of
Melrose.
[Martin Fowler](_blank)
at martinfowler.com. Retrieved 2012-11-15.
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,
where he was Chief Scientist.
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
A blog (a Clipping (morphology), truncation of "weblog") is an informational website consisting of discrete, often informal diary-style text entries also known as posts. Posts are typically displayed in Reverse chronology, reverse chronologic ...
and
wiki
A wiki ( ) is a form of hypertext publication on the internet which is collaboratively edited and managed by its audience directly through a web browser. A typical wiki contains multiple pages that can either be edited by the public or l ...
. He popularised the term
Dependency Injection as a form of
Inversion of Control.
[Martin Fowler (2004)]
Inversion of Control Containers and the Dependency Injection pattern
. Retrieved 2012-11-15.
Publications
* 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. .
Domain-specific languages
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
Ruby is a pinkish-red-to-blood-red-colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapph ...
and
Lisp
Lisp (historically LISP, an abbreviation of "list processing") is a family of programming languages with a long history and a distinctive, fully parenthesized Polish notation#Explanation, prefix notation.
Originally specified in the late 1950s, ...
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
Graphviz (short for ''Graph Visualization Software'') is a package of open-source software, open-source tools initiated by AT&T Labs, AT&T Labs Research for Graph drawing, drawing graph (discrete mathematics), graphs (as in Vertex (graph theory ...
, 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
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
;
XAML, a language used to specify and change
graphical user interface
A graphical user interface, or GUI, is a form of user interface that allows user (computing), users to human–computer interaction, interact with electronic devices through Graphics, graphical icon (computing), icons and visual indicators such ...
s; FIT, a language to express testing scenarios; and
make, a tool to build software
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.
References
External links
*
*
{{DEFAULTSORT:Fowler, Martin
Living people
1963 births
Alumni of University College London
British software engineers
British bloggers
British technology writers
Extreme programming
People from Walsall
Engineers from the West Midlands (county)
People educated at Queen Mary's Grammar School
British expatriates in the United States
Agile software development