Anti-patterns are certain patterns in software development that are considered bad programming practices.
As opposed to design patterns which are common approaches to common problems which have been formalized and are generally considered a good development practice, anti-patterns are the opposite and are undesirable.
For example, in object-oriented programming, the idea is to separate the software into small pieces called objects. An anti-pattern in object-oriented programming is a God object which performs a lot of functions which would be better separated into different objects.
For example:
class GodObject { function PerformInitialization() {} function ReadFromFile() {} function WriteToFile() {} function DisplayToScreen() {} function PerformCalculation() {} function ValidateInput() {} // and so on... // }
The example above has an object that does everything. In object-oriented programming, it would be preferable to have well-defined responsibilities for different objects to keep the code less coupled and ultimately more maintainable:
class FileInputOutput { function ReadFromFile() {} function WriteToFile() {} } class UserInputOutput { function DisplayToScreen() {} function ValidateInput() {} } class Logic { function PerformInitialization() {} function PerformCalculation() {} }
The bottom line is there are good ways to develop software with commonly used patterns (design patterns), but there are also ways software is developed and implemented which can lead to problems. Patterns that are considered bad software development practices are anti-patterns.