Author | The "Upstart Gang of Four": William Brown, Raphael Malveau, Skip McCormick, Tom Mowbray |
---|---|
Country | United States |
Subject | Design patterns, software engineering, anti-patterns |
Publisher | John Wiley & Sons, Ltd. |
Publication date | 1998 |
ISBN | 978-0-471-19713-3 |
AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis [1] is a book about anti-patterns: specific repeated practices in software architecture, software design and software project management that initially appear to be beneficial, but ultimately result in bad consequences that outweigh hoped-for advantages. This study covers several recurring problematic software-related patterns, the forces that inspire their repeated adoption, and proven-in-practice remedial actions, called refactored solutions. The authors are William Brown, Raphael Malveau, Skip McCormick, and Tom Mowbray; with Scott Thomas joining in on second and third books. Four of the five authors worked together at Mitre Corporation in the late 1990s.
Sometimes referred to as an "Upstart Gang-Of-Four" the authors were frequently (and often unfavorably) compared to the original Design Patterns by Gang of Four. This began with a favorable review and 1998 runner-up Jolt Productivity Award given by Software Development magazine. [2] [3] The controversy around this book, and the concept of an anti-pattern has been said to stem from a somewhat common misunderstanding that the authors were somehow opposed to design patterns. However the authors explained within the book itself that they are big fans of design patterns; their objective was to build on the concept by providing constructive means for dealing with the frequent "patterns of failure" they had professionally dealt with.
Kent Beck is an American software engineer and the creator of extreme programming, a software development methodology that eschews rigid formal specification for a collaborative and iterative design process. Beck was one of the 17 original signatories of the Agile Manifesto, the founding document for agile software development. Extreme and Agile methods are closely associated with Test-Driven Development (TDD), of which Beck is perhaps the leading proponent.
Martin Fowler is a naturalized American software developer, 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.
In computer programming and software design, code refactoring is the process of restructuring existing computer code—changing the factoring—without changing its external behavior. Refactoring is intended to improve the design, structure, and/or implementation of the software, while preserving its functionality. Potential advantages of refactoring may include improved code readability and reduced complexity; these can improve the source code's maintainability and create a simpler, cleaner, or more expressive internal architecture or object model to improve extensibility. Another potential goal for refactoring is improved performance; software engineers face an ongoing challenge to write programs that perform faster or use less memory.
In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly into source or machine code. Rather, it is a description or template for how to solve a problem that can be used in many different situations. Design patterns are formalized best practices that the programmer can use to solve common problems when designing an application or system.
The law of the instrument, law of the hammer, Maslow's hammer, or golden hammer is a cognitive bias that involves an over-reliance on a familiar tool. As Abraham Maslow said in 1966, "I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail."
An anti-pattern is a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. The term, coined in 1995 by Andrew Koenig, was inspired by a book, Design Patterns, which highlights a number of design patterns in software development that its authors considered to be highly reliable and effective.
In computer programming, a code smell is any characteristic in the source code of a program that possibly indicates a deeper problem. Determining what is and is not a code smell is subjective, and varies by language, developer, and development methodology.
The following outline is provided as an overview of and topical guide to software engineering:
Grady Booch is an American software engineer, best known for developing the Unified Modeling Language (UML) with Ivar Jacobson and James Rumbaugh. He is recognized internationally for his innovative work in software architecture, software engineering, and collaborative development environments.
In computer programming jargon, lava flow is a problem in which computer code written under sub-optimal conditions is put into production and added to while still in a developmental state. Often, putting the system into production results in a need to maintain backward compatibility with the original, incomplete design.
IBM Developer is a free web-based professional network and technical resource center established by IBM for software developers, IT professionals, and students worldwide. Originally known as developerWorks, the site attracts over 5 million visitors per month in 195 countries, and is designed to help users develop and master skills, solve problems, collaborate with peers, and stay ahead of the latest trends in open standards and IBM technologies. IBM Developer provides an easily operating open-source that helps developers learn via community-tested code patterns and cloud-based services.
In computer programming, a poltergeist is a short-lived, typically stateless object used to perform initialization or to invoke methods in another, more permanent class. It is considered an anti-pattern. The original definition is by Michael Akroyd 1996 - Object World West Conference:
Steve Maguire is a software engineer and author. He wrote two books on software development, Writing Solid Code and Debugging the Development Process.
IPython is a command shell for interactive computing in multiple programming languages, originally developed for the Python programming language, that offers introspection, rich media, shell syntax, tab completion, and history. IPython provides the following features:
Technical debt is a concept in software development that reflects the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer.
Scott W. Ambler is a Canadian software engineer, consultant and author. He is an author of a number of books focused on the Disciplined Agile Delivery toolkit, the Unified process, Agile software development, the Unified Modeling Language, and Capability Maturity Model (CMM) development.
Incredibuild is a suite of grid computing software developed by Incredibuild Ltd. Incredibuild is designed to help accelerate computationally-intensive tasks by distributing them over the network, with notable applications including compiling source code, building software generally, and other software development-related tasks. Jobs can be distributed to several computers over a network, giving both the possibility of accelerating the work by using more resources than were available on the initiating computer alone and potentially freeing local resources for other tasks.
Matt Stephens is an author and software process expert based in London, UK. In January 2010 he founded independent book publisher Fingerpress UK Ltd, and in November 2014 he founded the Virtual Reality book discovery site Inkflash.
TestComplete is a functional automated testing platform developed by SmartBear Software. TestComplete gives testers the ability to create automated tests for Microsoft Windows, Web, Android, and iOS applications. Tests can be recorded, scripted or manually created with keyword driven operations and used for automated playback and error logging.
The Dr. Dobb's Excellence in Programming Award was an annual prize given to individuals who, in the opinion of the editors of Dr. Dobb's Journal, "made significant contributions to the advancement of software development." The Excellence in Programming Award includes a $1,000 prize that was donated in the award winner's name to a charity of the winner's choice. The award was launched in 1995 in the print edition of Dr. Dobb's Journal and was given each year until 2009. In his March 1995 article introducing the awards, then editor-in-chief Jonathan Erickson wrote that the award was intended to recognize "achievement and excellence in the field of computer programming." Erickson explained that the winners were "selected by a special editorial committee" of the magazine. Because Dr. Dobb's serves an audience of software developers, the Excellence in Programming Award is specifically intended to recognize resources for programmers: languages, code libraries, tutorial books, and so on. Developers of shrinkwrap software intended for retail sale, custom software for corporate use, embedded software, or general-purpose applications were not considered for the award.