Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Martin Fowler (software engineer)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|American software developer, author and public speaker (born 1963)}} {{Use dmy dates|date=May 2015}} {{Use British English|date=May 2015}} {{Infobox person | name = Martin Fowler | image = Webysther 20150414193208 - Martin Fowler.jpg | caption = Fowler in 2015 | birth_name = | birth_date = {{Birth date and age|df=yes|1963|12|18}} | birth_place = [[Walsall]], England, UK | death_date = | death_place = | death_cause = | resting_place = | resting_place_coordinates = | nationality = | other_names = | known_for = | education = [[University College London]] {{nobreak|([[BSc]], 1986)}}<ref name="mfbio" /> | alma_mater = | employer = [[ThoughtWorks]] | occupation = Software developer, author, public speaker | title = | height = | term = | predecessor = | successor = | party = | boards = | spouse = | partner = | children = | parents = | relations = | signature = | website = {{URL|martinfowler.com}} }} '''Martin Fowler''' (18 December 1963) is a British [[software developer]],<ref>{{cite web |title=About Martin Fowler |url=https://martinfowler.com/aboutMe.html |website=martinfowler.com |access-date=1 May 2021}}</ref> author and international public speaker on software development, specialising in [[object-oriented analysis and design]], [[Unified Modeling Language|UML]], [[Design pattern (computer science)|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. {{ISBN|978-0-596-55177-3}}.</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. {{ISBN|978-1-4302-3232-2}}.</ref> == Biography == 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, Massachusetts|Melrose]].<ref name="mfbio">[http://martinfowler.com/aboutMe.html 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. {{ISBN|978-0-201-76043-9}}.</ref> In 2000 he joined [[ThoughtWorks]], a systems integration and consulting company,<ref name="mfbio"/> where he was Chief Scientist.<ref>[http://www.thoughtworks.com/profiles/martin-fowler 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 [[Agile software development#The Agile Manifesto|Manifesto for Agile Software Development]] in 2001, along with 16 fellow signatories.<ref>[http://agilemanifesto.org/ 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. ''[https://books.google.com/books?id=EJS6BQAAQBAJ&pg=PA38 Transactions on Computational Collective Intelligence X]''. Springer. p. 38. {{ISBN|978-3-642-38496-7}}.</ref><ref>Martin Fowler (2004) "[http://martinfowler.com/articles/injection.html Inversion of Control Containers and the Dependency Injection pattern]". Retrieved 2012-11-15.</ref> == Publications == * 1996. ''Analysis Patterns: Reusable Object Models''. Addison-Wesley. {{ISBN|0-201-89542-0}}. * 1997. ''UML Distilled: A Brief Guide to the Standard Object Modeling Language''. Addison-Wesley. {{ISBN|978-0-201-32563-8}}. * 1999. ''Refactoring: Improving the Design of Existing Code'', With [[Kent Beck]], John Brant, [[William Opdyke]], and Don Roberts (June 1999). Addison-Wesley. {{ISBN|0-201-48567-2}}. * 2000. ''Planning Extreme Programming''. With [[Kent Beck]]. Addison-Wesley. {{ISBN|0-201-71091-9}}. * 2002. ''Patterns of Enterprise Application Architecture''. With David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, and Randy Stafford. Addison-Wesley. {{ISBN|0-321-12742-0}}. * 2010. ''Domain-Specific Languages''. With Rebecca Parsons. Addison-Wesley. {{ISBN|978-0-321-71294-3}}. * 2012. ''NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence''. With Pramod Sadalage. Addison-Wesley. {{ISBN|978-0-321-82662-6}}. * 2013. ''Refactoring: Ruby Edition''. With [[Kent Beck]], Shane Harvie, and Jay Fields. Addison-Wesley. {{ISBN|978-0-321-98413-5}}. * 2018. ''Refactoring: Improving the Design of Existing Code, Second Edition''. Kent Beck, and Martin Fowler. Addison-Wesley. {{ISBN|978-0-134-75759-9}}. == Domain-specific languages == In his book, ''Domain-specific languages'', Fowler discusses [[Domain-specific language]]s, 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">{{Cite book|last=Fowler|first=Martin|url=https://www.worldcat.org/oclc/686709295|title=Domain-specific languages|date=2011|publisher=Addison-Wesley|isbn=978-0-13-210754-9|location=Upper Saddle River, N.J.|oclc=686709295}}</ref>{{Rp|27}} 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 expert]]s, and separate the manner of execution of a task from the definition of a task itself.<ref name=":0" />{{Rp|33}} 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" />{{Rp|39}} 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 (programming language)|Ruby]] and [[Lisp (programming language)|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" />{{Rp|14}} Various examples of DSLs are presented including [[graphviz]], a language for specifying [[graph (discrete mathematics)|graphs]] to be rendered; JMock, a java mocking framework; [[CSS]], a language to specify stylistic elements of a website; [[Hibernate (framework)#Hibernate Query Language (HQL)|HQL]], an [[object relational mapper]] in [[Java (programming language)|Java]]; [[XAML]], a language used to specify and change [[graphical user interface]]s; FIT, a language to express testing scenarios; and [[Make (software)|make]], a tool to build software<ref name=":0" />{{Rp|147}} The book discusses implementing an external DSL using tools like [[Parsing|parsers]], [[lexers]], [[abstract syntax tree]]s and [[Code generation (compiler)|code generation]] referred to as "syntax-driven translation"<ref name=":0" />{{Rp|219}} This is contrasted with "delimiter-driven translation" which is said to be simpler but less powerful. Here the language is simple enough to be [[Interpreter (computing)|interpreted]] by splitting on delimiters and switching logic based on individual entries.<ref name=":0" />{{Rp|201}} Ways of implementing internal DSLs is discussed, with attention paid to nested function calls,<ref name=":0" />{{Rp|357}} sequences of function calls,<ref name=":0" />{{Rp|351}} or [[method chaining]]<ref name=":0" />{{Rp|373}} amongst other methods.{{fact|date=March 2025}} == References == {{Reflist}} == External links == {{Commons category}} {{Wikiquote|Martin Fowler}} * {{Official website}} * {{cite web |url= http://www.artima.com/intv/martin.html |title= A Conversation with Martin Fowler |series= In six parts |first= Bill |last= Venners |date= 9 December 2002 |website= Artima }} {{Software engineering}} {{Authority control}} {{DEFAULTSORT:Fowler, Martin}} [[Category:Living people]] [[Category:1963 births]] [[Category:Alumni of University College London]] [[Category:British software engineers]] [[Category:British bloggers]] [[Category:British technology writers]] [[Category:Extreme programming]] [[Category:People from Walsall]] [[Category:Engineers from the West Midlands (county)]] [[Category:People educated at Queen Mary's Grammar School]] [[Category:British expatriates in the United States]] [[Category:Agile software development]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Authority control
(
edit
)
Template:Cite book
(
edit
)
Template:Cite web
(
edit
)
Template:Commons category
(
edit
)
Template:Fact
(
edit
)
Template:ISBN
(
edit
)
Template:Infobox person
(
edit
)
Template:Official website
(
edit
)
Template:Reflist
(
edit
)
Template:Rp
(
edit
)
Template:Short description
(
edit
)
Template:Software engineering
(
edit
)
Template:Use British English
(
edit
)
Template:Use dmy dates
(
edit
)
Template:Wikiquote
(
edit
)