A software design pattern is a challenge encountered so commonly, especially in object-oriented computer programming, that its general solution is taught independently of any particular programming language. The term fell into widespread use in 1995 after the publication of the "Gang of Four" book Design Patterns, which identified and named nearly two dozen design patterns.