Robert C. Martin

Last updated

Robert C. Martin
Robert C. Martin surrounded by computers.jpg
Martin in 2020
Born
Robert Cecil Martin

(1952-12-05) 5 December 1952 (age 71) [1]
NationalityAmerican
Other names"Uncle Bob" Martin
Occupation(s) Software engineer [ citation needed ], instructor
Known for Agile Manifesto, SOLID principles
Children4
Website cleancoder.com

Robert Cecil Martin (born 5 December 1952), colloquially called "Uncle Bob", [2] is an American software engineer [ citation needed ], instructor, and author. He is most recognized for promoting many software design principles and for being an author and signatory of the influential Agile Manifesto. [3]

Contents

Martin has authored many books and magazine articles. He was the editor-in-chief of C++ Report magazine and served as the first chairman of the Agile Alliance. [4] [5]

Martin joined the software industry at age 17 and is self-taught. [6]

Companies

In 1991, Martin founded Object Mentor, [7] now defunct, which provided instructor-led training on the extreme programming methodology. [8] As of November 2023, he operated Uncle Bob Consulting, which provides consulting and training services. [9] He is also a "Master Craftsman / Mentor" at Clean Coders, a company which is run by his son Micah Martin, and produces training videos. [10]

Software principles and advocacy

Martin is a proponent of software craftsmanship, agile software development, and test-driven development. [11]

He is credited with coining the SOLID mnemonic, [12] a collection of software principles. The principles are as follows: "Single Responsibility Principle", "Open-Closed Principle" (invented by Bertrand Meyer. [13] [14] ), "Liskov Substitution Principle" (invented by Barbara Liskov, [15] ), "Interface Segregation Principle", and "Dependency Inversion Principle".

Publications

Related Research Articles

<span class="mw-page-title-main">Computer program</span> Instructions to be executed by a computer

A computer program is a sequence or set of instructions in a programming language for a computer to execute. It is one component of software, which also includes documentation and other intangible components.

<span class="mw-page-title-main">Kent Beck</span> American software engineer

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.

<span class="mw-page-title-main">Martin Fowler (software engineer)</span> American software developer, author and public speaker

Martin Fowler is a British 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 Demeter (LoD) or principle of least knowledge is a design guideline for developing software, particularly object-oriented programs. In its general form, the LoD is a specific case of loose coupling. The guideline was proposed by Ian Holland at Northeastern University towards the end of 1987, and the following three recommendations serve as a succinct summary:

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.

In software development, agile practices include requirements, discovery and solutions improvement through the collaborative effort of self-organizing and cross-functional teams with their customer(s)/end user(s). Popularized in the 2001 Manifesto for Agile Software Development, these values and principles were derived from, and underpin, a broad range of software development frameworks, including Scrum and Kanban.

The single responsibility principle (SRP) is a computer programming principle that states that "A module should be responsible to one, and only one, actor." The term actor refers to a group that requires a change in the module.

Object-oriented analysis and design (OOAD) is a technical approach for analyzing and designing an application, system, or business by applying object-oriented programming, as well as using visual modeling throughout the software development process to guide stakeholder communication and product quality.

Software craftsmanship is an approach to software development that emphasizes the coding skills of the software developers. It is a response by software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over developer accountability.

In object-oriented design, the dependency inversion principle is a specific methodology for loosely coupled software modules. When following this principle, the conventional dependency relationships established from high-level, policy-setting modules to low-level, dependency modules are reversed, thus rendering high-level modules independent of the low-level module implementation details. The principle states:

Stephen J. Mellor is an American computer scientist, developer of the Ward–Mellor method for real-time computing, the Shlaer–Mellor method, and Executable UML, and signatory to the Agile Manifesto.

In software engineering and programming language theory, the abstraction principle is a basic dictum that aims to reduce duplication of information in a program whenever practical by making use of abstractions provided by the programming language or software libraries. The principle is sometimes stated as a recommendation to the programmer, but sometimes stated as a requirement of the programming language, assuming it is self-understood why abstractions are desirable to use. The origins of the principle are uncertain; it has been reinvented a number of times, sometimes under a different name, with slight variations.

In software engineering, SOLID is a mnemonic acronym for five design principles intended to make object-oriented designs more understandable, flexible, and maintainable. The principles are a subset of many principles promoted by American software engineer and instructor Robert C. Martin, first introduced in his 2000 paper Design Principles and Design Patterns discussing software rot.

Object-oriented programming (OOP) is a programming paradigm based on the concept of objects, which can contain data and code: data in the form of fields, and code in the form of procedures.

<span class="mw-page-title-main">Extreme programming</span> Software development methodology

Extreme programming (XP) is a software development methodology intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development, it advocates frequent releases in short development cycles, intended to improve productivity and introduce checkpoints at which new customer requirements can be adopted.

In computer programming, a design smell is a structure in a design that indicates a violation of fundamental design principles, and which can negatively impact the project's quality. The origin of the term can be traced to the term "code smell" which was featured in the book Refactoring: Improving the Design of Existing Code by Martin Fowler.

The hexagonal architecture, or ports and adapters architecture, is an architectural pattern used in software design. It aims at creating loosely coupled application components that can be easily connected to their software environment by means of ports and adapters. This makes components exchangeable at any level and facilitates test automation.

The entity-control-boundary (ECB), or entity-boundary-control (EBC), or boundary-control-entity (BCE) is an architectural pattern used in use-case driven object-oriented programming that structures the classes composing high-level object-oriented source code according to their responsibilities in the use-case realization.

References

  1. Groupon OnAir (July 26, 2016). The Future of Programming with Uncle Bob Martin. YouTube.
  2. Heusser, Matthew (May 10, 2011). "Do Professional Programmers Need a Code of Conduct? An Interview with Robert C. "Uncle Bob" Martin". InformIT . Retrieved February 26, 2015.
  3. "Authors: The Agile Manifesto". Manifesto for Agile Software Development. 2001. Retrieved January 16, 2020.
  4. "Robert C. Martin". IEEE Xplore. Retrieved August 1, 2021.
  5. Sondra Ashmore; Kristin Runyan (2014). Introduction to Agile Methods. Addison-Wesley Professional. p. 10. ISBN   9780133435214.
  6. Martin, Robert C. (December 10, 2018). "Uncle Bob on X". X (formerly Twitter). Retrieved November 23, 2023.
  7. "Robert Martin (Uncle Bob) - Scrum Alliance". www.scrumalliance.org. Retrieved November 30, 2022.
  8. "Object Mentor: About | LinkedIn". LinkedIn. Retrieved November 23, 2023.
  9. "Robert Martin | LinkedIn". LinkedIn. Retrieved November 23, 2023.
  10. "Clean Coders : Level up your code". cleancoders.com. Retrieved November 23, 2023.
  11. "UBC". cleancoder.com. Retrieved November 23, 2023.
  12. Martin, Robert C. (2000) "Design Principles and Design Patterns"(PDF). objectmentor.com. Archived from the original on 2015-09-06
  13. Martin, Robert C. (January 1996). "The Open-Closed Principle" (PDF). C++ Report. Archived from the original on August 22, 2006.{{cite magazine}}: CS1 maint: unfit URL (link)
  14. Meyer, Bertrand (1988). Object-oriented software construction. New York: Prentice Hall. p. 23. ISBN   0136290493.
  15. Liskov, Barbara; Wing, Jeannette (November 1, 1994). "A behavioral notion of subtyping". ACM Transactions on Programming Languages and Systems. 16 (6): 1811–1841. doi: 10.1145/197320.197383 . S2CID   999172.