Martin Fowler

OK
About Martin Fowler
For all of my career I've been interested in the design and architecture of software systems, particularly those loosely classed as Enterprise Applications. I firmly believe that poor software design leads to software that is difficult to change in response to growing needs, and encourages buggy software that saps the productivity of computer users everywhere.
I'm always trying to find out what designs are effective, what approaches lead people into trouble, how we can organize our work to do better designs, and how to communicate what I've learned to more people. My books and website are all ways in which I can share what I learn and I'm glad I've found a way to make a living doing this.
Customers Also Bought Items By
Are you an author?
Author Updates
-
-
Blog postJames Shore's Art of Agile Development is my favorite single-volume book on agile software development. A reason for that is its serious emphasis on the technical practices that are essential to making it work effectively. James and I discuss the role of refactoring for software development, the nature of design changes we see, and how to break down big changes into small pieces.
more…
3 weeks ago Read more -
Blog postA couple of recent conversations about Twitter were nudging me into writing about how I use Twitter even before The Muskover developed. Twitter has become an important part of my online life, and my online life is a big part of what I do. But like any tool, Twitter can be used in many different ways, and how you use it affects how useful it can be.
more…
4 weeks ago Read more -
-
-
Blog postThe core to a successful legacy displacement is the gradual replacement of legacy with new software, as this allows benefits to delivered early and circumvents the risks of a Big Bang. During displacement the legacy and new system will have to operate simultaneously allowing behavior to be split between old and new.
Ian Cartwright, Rob Horn, and James Lewis explain how to build and evolve a Transitional Architecture that supports this c
2 months ago Read more -
Blog postTim Cochran and Roni Smith complete their article by looking at how scaleups need to invest in the hiring process to overcome the talent bottleneck. They add a case study from our experiences with talent acquisition at Thoughtworks.
more…
2 months ago Read more -
Blog postTim Cochran and Roni Smith explore how scaleups can get out of the hiring bottleneck by using technology and innovation as a hiring differentiator, hiring T-shaped and non-senior developers, and embracing remote working.
more…
2 months ago Read more -
Blog postThe second bottleneck in the series looks at talent, and how scaleups struggle to hire enough good people. Tim Cochran and Roni Smith explain how the small network and informal processes that allow early stage startups to grow begin to fail during the scaleup phase, and what signs indicate a new approach is needed.
more…
2 months ago Read more -
Blog postTim Cochran and Carl Nygard finish their examination of the tech debt bottleneck by looking at how to get out of it. This includes close collaboration betwen product and engineering, a strategy for the four phases of a startup's journey, and empowering teams to fix the tech debt problems.
more…
2 months ago Read more -
Blog postIn its early days, a startup searches for a good product-market fit. When it finds one it looks to grow rapidly, a phase known as a scaleup. At this time it's growing rapidly along many dimensions: revenues, customer, headcount. At Thoughtworks, we've worked with many such scaleups, and our work has focused on how to help them overcome various bottlenecks that impede this growth. As we've done this work, my colleagues have noticed common bottlenecks, and lea
3 months ago Read more -
Blog postPoppy Rowse and Chris Shepherd complete their article on infrastructure platforms with a warning on over-complicating a platform and a section on how to use the Four Key Metrics to assess a platform's success.
more…
3 months ago Read more -
Blog postThe next installment of Poppy Rowse and Chris Shepherd's article on infrastructure platforms looks how to communicate the technical vision of platform and how to understand the platform from the users' point of view.
more…
3 months ago Read more -
Blog postPoppy Rowse and Chris Shepherd continue their advice on building infrastructure platforms by discussing techniques to discover what platform users need and stress the importance of finding the Shortest Path to Value by onboarding them quickly.
more…
4 months ago Read more -
Blog postA lot of organizations are looking to improve the way their teams build on top of clouds by assembling their own preferred set of cloud components into an infrastructure platform. This allows product teams work with a consistent and curated set of services, rather than having to figure it out on their own. Poppy Rowse and Chris Shepherd have worked with several of these teams and put together some guidelines on how to do this successfully. They begin by
4 months ago Read more -
Blog postYesterday Ian Cartwright, Rob Horn, and James Lewis described the Critical Aggregator and how it can metastasize into an invasive form. When a legacy system has such an Invasive Critical Aggregator it's often best, if a little counter-intuitive, to Divert the Flow of data by building a new critical aggregator first. Once this is done, we have far more freedom to change or relocate the various upstream data sources.
more…
4 months ago Read more -
Blog postBusiness Leaders often need to make decisions that are influenced by a wide range of activity throughout the whole enterprise. To support this systems often have a what Ian Cartwright, Rob Horn, and James Lewis call a Critical Aggregator: a component whose job is to visit various other systems and pull this information together. A critical aggregator is important, but often metastasizes into an Invasive Critical Aggregator
more…
4 months ago Read more -
Blog postContinuing his exploration of important patterns to maintain consistency across a cluster, Unmesh Joshi now looks at Two Phase Commit. It's broadly the most familiar approach, but comes with lots of complexities to make it work in practice over unreliable networks.
more…
4 months ago Read more -
Blog postIan Cartwright, Rob Horn, and James Lewis are also back with the New Year with a couple more articles from Patterns of Legacy Displacement in the funnel for the next couple of weeks. This one describes a Legacy Mimic: a part of the new system designed to make the old system think that nothing has changed.
more…
4 months ago Read more -
Blog postOne of the core challenges in a distributed system is keeping the state synchronized across all the nodes, especially when neither the nodes, or the connections between them, are reliable. The core approach to handle with is a replicated log: using the write-ahead log pattern over the cluster. Unmesh Joshi shows how this works using its most common implementation: the Raft protocol.
more…
4 months ago Read more -
Blog postUnmesh Joshi is ready to start the New Year with a few more of his Patterns of Distributed Systems. With this one he attempts the tricky task of explaining Paxos. This is a well-known protocol developed by Leslie Lamport, for nodes to reach a reliable consensus when both they, and the network, are prone to unexpected failure. Although it's well-known, it's also notoriously difficult to understand, indeed we had considerable difficulty getting our heads aroun
5 months ago Read more -
Blog postI listen to a lot of interesting music, so picked out my six favorite new-to-me albums this year. I hope you find something interesting to groove to in there.
more…
5 months ago Read more -
Blog postAndrew finishes his article on how to scale software architecture by looking at how this technique works in practice, and also outlines how things can go wrong.
more…
5 months ago Read more -
Blog postBrandon finishes his article on how we should look at integration by arguing that it is a strategic element of an enterprise's infrastructure. You can buy the best products in the world but "none of it will make you competitive in a digital world if you continue to treat integration as a tactical nuisance to overcome so you take advantage of those new systems."
more…
5 months ago Read more -
Blog postAndrew's fourth supporting element for the Advice Process is using a tech radar to capture and map out your local version of the technology trends you see across your organization.
more…
5 months ago Read more -
Blog postHaving architectural principles is not new, but in a world of highly-autonomous-teams they become essential because they are the means by which an aligned delivery direction is achieved without the need for control. In the latest installment, Andrew talks about what makes a good principle, and how they work with the Advice Process.
more…
5 months ago Read more -
Blog postThus far, Brandon has has explained why general purpose languages are better for integration. In this latest installment he explains that there are cases when commercial integration tools make sense
more…
5 months ago Read more -
Blog postAndrew uses the Architecture Advisory Forum as a regular and recurring place and time for conversations. It's a weekly, hour-long, open invite meeting used to gather advice and share information across a broad group.
more…
5 months ago Read more -
Blog postMany commercial integration tools market their ability to own the integration landscape and call out to general purpose languages as needed. While Brandon can appreciate the marketing behind such messaging — it promotes product penetration and lock-in — as architectural guidance, it is exactly backwards. Instead, we should almost always manage the interface evolution in a general purpose language for at least two reasons: so we can better manage the complexi
5 months ago Read more -
Blog postThe Advice Process works when supported by four elements. Andrew describes the first of these, Decision Records, which act as a tool for thinking about and recording the decision process.
more…
6 months ago Read more -
Blog postBrandon points out that while we have historically drawn up our project plans and costs around the boxes—the digital products we are introducing—the lines are the hidden and often primary driver of organizational tech debt. They are the reason that things just take longer now than they used to.
more…
6 months ago Read more -
Blog post“Build versus buy” decisions are everywhere today, and rightly so. Building software is risky and expensive, and software product companies can spread that risk and expense across multiple customers. But my colleague Brandon Byars argues that the kinds of tools that are available to buy for systems integration are not products that directly solve a business problem.
more…
6 months ago Read more
Titles By Martin Fowler
Fully Revised and Updated–Includes New Refactorings and Code Examples
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”—M. Fowler (1999) For more than twenty years, experienced programmers worldwide have relied on Martin Fowler’s Refactoring to improve the design of existing code and to enhance software maintainability, as well as to make existing code easier to understand.
This eagerly awaited new edition has been fully updated to reflect crucial changes in the programming landscape. Refactoring, Second Edition, features an updated catalog of refactorings and includes JavaScript code examples, as well as new functional examples that demonstrate refactoring without classes.
Like the original, this edition explains what refactoring is; why you should refactor; how to recognize code that needs refactoring; and how to actually do it successfully, no matter what language you use.
- Understand the process and general principles of refactoring
- Quickly apply useful refactorings to make a program easier to comprehend and change
- Recognize “bad smells” in code that signal opportunities to refactor
- Explore the refactorings, each with explanations, motivation, mechanics, and simple examples
- Build solid tests for your refactorings
- Recognize tradeoffs and obstacles to refactoring
Includes free access to the canonical web edition, with even more refactoring resources. (See inside the book for details about how to access the web edition.)
The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered object-oriented platforms, such as Java and .NET, have become commonplace. These new tools and technologies are capable of building powerful applications, but they are not easily implemented. Common failures in enterprise applications often occur because their developers do not understand the architectural lessons that experienced object developers have learned.
Patterns of Enterprise Application Architecture is written in direct response to the stiff challenges that face enterprise application developers. The author, noted object-oriented designer Martin Fowler, noticed that despite changes in technology--from Smalltalk to CORBA to Java to .NET--the same basic design ideas can be adapted and applied to solve common problems. With the help of an expert group of contributors, Martin distills over forty recurring solutions into patterns. The result is an indispensable handbook of solutions that are applicable to any enterprise application platform.
This book is actually two books in one. The first section is a short tutorial on developing enterprise applications, which you can read from start to finish to understand the scope of the book's lessons. The next section, the bulk of the book, is a detailed reference to the patterns themselves. Each pattern provides usage and implementation information, as well as detailed code examples in Java or C#. The entire book is also richly illustrated with UML diagrams to further explain the concepts.
Armed with this book, you will have the knowledge necessary to make important architectural decisions about building an enterprise application and the proven patterns for use when building them.
The topics covered include
· Dividing an enterprise application into layers
· The major approaches to organizing business logic
· An in-depth treatment of mapping between objects and relational databases
· Using Model-View-Controller to organize a Web presentation
· Handling concurrency for data that spans multiple transactions
· Designing distributed object interfaces
When carefully selected and used, Domain-Specific Languages (DSLs) may simplify complex code, promote effective communication with customers, improve productivity, and unclog development bottlenecks. In Domain-Specific Languages, noted software development expert Martin Fowler first provides the information software professionals need to decide if and when to utilize DSLs. Then, where DSLs prove suitable, Fowler presents effective techniques for building them, and guides software engineers in choosing the right approaches for their applications.
This book’s techniques may be utilized with most modern object-oriented languages; the author provides numerous examples in Java and C#, as well as selected examples in Ruby. Wherever possible, chapters are organized to be self-standing, and most reference topics are presented in a familiar patterns format.
Armed with this wide-ranging book, developers will have the knowledge they need to make important decisions about DSLs—and, where appropriate, gain the significant technical and business benefits they offer.
The topics covered include:
- How DSLs compare to frameworks and libraries, and when those alternatives are sufficient
- Using parsers and parser generators, and parsing external DSLs
- Understanding, comparing, and choosing DSL language constructs
- Determining whether to use code generation, and comparing code generation strategies
- Previewing new language workbench tools for creating DSLs
The need to handle increasingly larger data volumes is one factor driving the adoption of a new class of nonrelational “NoSQL” databases. Advocates of NoSQL databases claim they can be used to build systems that are more performant, scale better, and are easier to program.
NoSQL Distilled is a concise but thorough introduction to this rapidly emerging technology. Pramod J. Sadalage and Martin Fowler explain how NoSQL databases work and the ways that they may be a superior alternative to a traditional RDBMS. The authors provide a fast-paced guide to the concepts you need to know in order to evaluate whether NoSQL databases are right for your needs and, if so, which technologies you should explore further.
The first part of the book concentrates on core concepts, including schemaless data models, aggregates, new distribution models, the CAP theorem, and map-reduce. In the second part, the authors explore architectural and design issues associated with implementing NoSQL. They also present realistic use cases that demonstrate NoSQL databases at work and feature representative examples using Riak, MongoDB, Cassandra, and Neo4j.
In addition, by drawing on Pramod Sadalage’s pioneering work, NoSQL Distilled shows how to implement evolutionary design with schema migration: an essential technique for applying NoSQL databases. The book concludes by describing how NoSQL is ushering in a new age of Polyglot Persistence, where multiple data-storage worlds coexist, and architects can choose the technology best optimized for each type of data access.
More than 300,000 developers have benefited from past editions of UML Distilled . This third edition is the best resource for quick, no-nonsense insights into understanding and using UML 2.0 and prior versions of the UML.
Some readers will want to quickly get up to speed with the UML 2.0 and learn the essentials of the UML. Others will use this book as a handy, quick reference to the most common parts of the UML. The author delivers on both of these promises in a short, concise, and focused presentation.
This book describes all the major UML diagram types, what they're used for, and the basic notation involved in creating and deciphering them. These diagrams include class, sequence, object, package, deployment, use case, state machine, activity, communication, composite structure, component, interaction overview, and timing diagrams. The examples are clear and the explanations cut to the fundamental design logic. Includes a quick reference to the most useful parts of the UML notation and a useful summary of diagram types that were added to the UML 2.0.
If you are like most developers, you don't have time to keep up with all the new innovations in software engineering. This new edition of Fowler's classic work gets you acquainted with some of the best thinking about efficient object-oriented software design using the UML--in a convenient format that will be essential to anyone who designs software professionally.
As the application of object technology--particularly the Java programming language--has become commonplace, a new problem has emerged to confront the software development community. Significant numbers of poorly designed programs have been created by less-experienced developers, resulting in applications that are inefficient and hard to maintain and extend. Increasingly, software system professionals are discovering just how difficult it is to work with these inherited, "non-optimal" applications. For several years, expert-level object programmers have employed a growing collection of techniques to improve the structural integrity and performance of such existing software programs. Referred to as "refactoring," these practices have remained in the domain of experts because no attempt has been made to transcribe the lore into a form that all developers could use. . .until now. In Refactoring: Improving the Design of Existing Code, renowned object technology mentor Martin Fowler breaks new ground, demystifying these master practices and demonstrating how software practitioners can realize the significant benefits of this new process.
With proper training a skilled system designer can take a bad design and rework it into well-designed, robust code. In this book, Martin Fowler shows you where opportunities for refactoring typically can be found, and how to go about reworking a bad design into a good one. Each refactoring step is simple--seemingly too simple to be worth doing. Refactoring may involve moving a field from one class to another, or pulling some code out of a method to turn it into its own method, or even pushing some code up or down a hierarchy. While these individual steps may seem elementary, the cumulative effect of such small changes can radically improve the design. Refactoring is a proven way to prevent software decay.
In addition to discussing the various techniques of refactoring, the author provides a detailed catalog of more than seventy proven refactorings with helpful pointers that teach you when to apply them; step-by-step instructions for applying each refactoring; and an example illustrating how the refactoring works. The illustrative examples are written in Java, but the ideas are applicable to any object-oriented programming language.
This innovative book recognizes the need within the object-oriented community for a book that goes beyond the tools and techniques of the typical methodology book. In Analysis Patterns: Reusable Object Models, Martin Fowler focuses on the end result of object-oriented analysis and design—the models themselves. He shares with you his wealth of object modeling experience and his keen eye for identifying repeating problems and transforming them into reusable models. Analysis Patterns provides a catalogue of patterns that have emerged in a wide range of domains including trading, measurement, accounting and organizational relationships.
Recognizing that conceptual patterns cannot exist in isolation, the author also presents a series of "support patterns" that discuss how to turn conceptual models into software that in turn fits into an architecture for a large information system. Included in each pattern is the reasoning behind their design, rules for when they should and should not be used, and tips for implementation. The examples presented in this book comprise a cookbook of useful models and insight into the skill of reuse that will improve analysis, modeling and implementation.
The Definitive Refactoring Guide, Fully Revamped for Ruby
With refactoring, programmers can transform even the most chaotic software into well-designed systems that are far easier to evolve and maintain. What’s more, they can do it one step at a time, through a series of simple, proven steps. Now, there’s an authoritative and extensively updated version of Martin Fowler’s classic refactoring book that utilizes Ruby examples and idioms throughout–not code adapted from Java or any other environment.
The authors introduce a detailed catalog of more than 70 proven Ruby refactorings, with specific guidance on when to apply each of them, step-by-step instructions for using them, and example code illustrating how they work. Many of the authors’ refactorings use powerful Ruby-specific features, and all code samples are available for download.
Leveraging Fowler’s original concepts, the authors show how to perform refactoring in a controlled, efficient, incremental manner, so you methodically improve your code’s structure without introducing new bugs. Whatever your role in writing or maintaining Ruby code, this book will be an indispensable resource.
This book will help you
- Understand the core principles of refactoring and the reasons for doing it
- Recognize “bad smells” in your Ruby code
- Rework bad designs into well-designed code, one step at a time
- Build tests to make sure your refactorings work properly
- Understand the challenges of refactoring and how they can be overcome
- Compose methods to package code properly
- Move features between objects to place responsibilities where they fit best
- Organize data to make it easier to work with
- Simplify conditional expressions and make more effective use of polymorphism
- Create interfaces that are easier to understand and use
- Generalize more effectively
- Perform larger refactorings that transform entire software systems and may take months or years
- Successfully refactor Ruby on Rails code
- Umfassend überarbeitete und aktualisierte Neuauflage des Standardwerks in vollständig neuer Übersetzung
- Verbesserungsmöglichkeiten von bestehender Software anhand von Code-Smells erkennen und Code effizient überarbeiten
- Umfassender Katalog von Refactoring-Methoden mit Code-Beispielen in JavaScript
Seit mehr als zwanzig Jahren greifen erfahrene Programmierer rund um den Globus auf dieses Buch zurück, um bestehenden Code zu verbessern und leichter lesbar zu machen sowie Software besser warten und erweitern zu können.
In diesem umfassenden Standardwerk zeigt Ihnen Martin Fowler, was die Vorteile von Refactoring sind, wie Sie verbesserungsbedürftigen Code erkennen und wie Sie ein Refactoring – unabhängig von der verwendeten Programmiersprache – erfolgreich durchführen. In einem umfangreichen Katalog gibt Fowler Ihnen verschiedene Refactoring-Methoden mit ausführlicher Erläuterung, Motivation, Vorgehensweise und einfachen Beispielen in JavaScript an die Hand.
Darüber hinaus behandelt er insbesondere folgende Schwerpunkte:
- Allgemeine Prinzipien und Durchführung des Refactorings
- Refactoring anwenden, um die Lesbarkeit, Wartbarkeit und Erweiterbarkeit von Programmen zu verbessern
- Code-Smells erkennen, die auf Verbesserungsmöglichkeiten durch Refactoring hinweisen
- Entwicklung zuverlässiger Tests für das Refactoring
- Erkennen von Fallstricken und notwendigen Kompromissen bei der Durchführung eines Refactorings
Diese vollständig neu übersetzte Ausgabe wurde von Grund auf überarbeitet, um den maßgeblichen Veränderungen der modernen Programmierung Rechnung zu tragen. Sie enthält einen aktualisierten Katalog von Refactoring-Methoden sowie neue Beispiele für einen funktionalen Programmieransatz.
Aus dem Inhalt:- Definition und Grund-lagen von Refactoring
- Der richtige Zeitpunkt für ein Refactoring
- Verbesserungsbedürftigen Code erkennen (Code-Smells)
- Tests und selbsttestender Code
- Umfangreicher Refactoring-Katalog:
- Kapselung
- Verschiebungen
- Daten organisieren
- Bedingungen vereinfachen
- Refactoring von APIs
- Umgang mit Vererbung
»Dieses Buch gibt einen sehr guten Einstieg in das Refactoring und hält auch eine übersichtliche, gut erklärte Sammlung von Refactoring-Patterns parat. Ein Buch, das sich jeder Programmierer unters Kopfkissen legen sollte.«
Le refactoring, ou ré-ingénierie du code, est l'opération consistant à retravailler le code source d'un programme de façon à en améliorer la lisibilité et par voie de conséquence la maintenance. Il ne s'agit pas de le compléter ou d'en corriger des bugs, mais d'en améliorer la structure sans en altérer le fonctionnement.
Ce livre, réédité fin 2018, est l'ouvrage de référence du refactoring. Il commence par un chapitre exemple pour bien faire comprendre ce qu'est (et n'est pas) le refactoring. Le chapitre suivant explique les principes et l'utilité de cette démarche. Le troisième chapitre montre comment repérer le code "douteux", et le quatrième comment construire des tests. Les chapitres suivants rassemblent un éventail de solutions à apporter en fonction des problèmes rencontrés.
Dans cette deuxième édition c'est le langage Javascript qui a été choisi pour illustrer les exemples.
Pubblicato per la prima volta nel 1999 e ora aggiornato a vent'anni di distanza per riflettere i cambiamenti nel mondo del software, questo manuale è una pietra miliare. L'autore svela i principi e le tecniche fondamentali per trasformare codice scritto male in un programma ben congegnato. Vengono mostrati oltre sessanta metodi di refactoring, corredati da istruzioni passo-passo e indicazioni su quando applicarli. Gli esempi sono basati su JavaScript ma si possono applicare alla maggior parte dei linguaggi di programmazione.
Un libro dedicato a tutti gli sviluppatori che vogliono scoprire o approfondire che cosa è il refactoring, perché dovrebbero applicarlo e come riconoscere il codice che ne ha bisogno.
- ←Previous Page
- 1
- 2
- Next Page→