Articles

21 Dec 2012

Robert C. Martin

By now you've almost certainly heard of functional programming. I mean, how could you miss it? Everybody's talking about it.

23 Apr 2009

Robert C. Martin

I gave the opening Keynote at ACCU 2009 on Wednesday. It was entitled: The Birth of Craftsmanship. Nicolai Josuttis finshed the day with the closing keynote:Welcome Crappy Code – The Death of Code Quality. It was like a blow to the gut. ...

25 Apr 2009

Robert C. Martin

One of the more insidious and persistent myths of agile development is that up-front architecture and design are bad; that you should never spend time up front making architectural decisions. That instead you should evolve your architecture and design from nothing, one test-case at a time.

Pardon me, but that’s Horse Shit. ...

11 May 2009

Robert C. Martin

In my keynote at the Rails Conference last Wednesday, I spoke about What Killed Smalltalk and could it Kill Ruby Too?. In this keynote, as is my wont, I spoke about the need for our industry to define itself as a profession, and for us to define ourselves as professionals. I closed the keynote with this statement: “Professionalism does not mean rigid formalism. Professionalism does not mean adhering to beaurocrasy. Professionalism is honor. Professionalism is being honest with yourself and disciplined in the way you work. Professionalism is not letting fear take over.” ...

20 May 2009

Robert C. Martin

If you go here you’ll see that I struggle to keep the CRAP out of FitNesse. Despite the whimsical name of this metric (which I take a perverse delight in), I find it to be remarkably useful....

6 Jun 2009

Robert C. Martin

There’s nothing like the feeling of achievement when you get a complex software system working. It’s the feeling of the hunter making a hard fought kill. By the sheer power of your intellect you have imposed your will upon inanimate nature, and forced it to do your bidding. You feel the rush of power, the satisfaction of victory. You are the master!

That’s the good news. ...

19 Jul 2009

Robert C. Martin

(JSPS: Just Some Poor Schmuck)

I’m trying to learn Clojure, and I’m finding the effort challenging. Perhaps you can help me. ...

31 Jul 2009

Robert C. Martin

Thanks to all who posted their solutions to the Bowling Game. Just to be contrary, I decided to implement yet another kind of solution. This one clearly shows my OO roots. ...

4 Aug 2009

Robert C. Martin

Scenario Tables are a very powerful new feature of FitNesse, allowing a whole new level of abstraction in the specification of tests. Scenario tables can be used on any page that uses the Slim test system. ...

5 Aug 2009

Robert C. Martin

The SICP book shows a cute algorithm for computing PI using infinite sequences (lazy evaluation). I have adapted it for Clojure and modified it to use Java’s BigDecimal class, so that I can generate arbitrary precision. ...

6 Aug 2009

Robert C. Martin

Coding with infinite sequences is very powerful, but also very bizarre. If you aren’t careful you can get algorithms that work fine, but are O(N^2) instead of O(N). ...

6 Aug 2009

Robert C. Martin

I tweeted this not too long ago. The basic idea is that as you add tests, the tests get more and more specific. This makes sense since tests are, after all, specifications. The more specifications you have, the more specific the whole body of specifications becomes. ...

7 Aug 2009

Robert C. Martin

While I think Clojure is an interesting language, in order for it to be of real practical use, I must be able to use it in conjunction with other systems I am working on. Specifically, I’d like to write some FitNesse tools in Clojure; but for that to work, I’ll need to call into my Clojure code from Java. ...

11 Aug 2009

Robert C. Martin

OK, all you Clojure gurus, I need your help. I need to speed this algorithm up. ...

11 Sep 2009

Robert C. Martin

For years authors and consultants (like me) have been telling us that functions should do one thing. They should do it well. They should do it only.

The question is: What the hell does “one thing” mean?

18 Sep 2009

Robert C. Martin

Scott Ambler wrote a blog, and an editorial about the dirty dealings and desperate deception of the Scrum Alliance and their slimy certification scam. He rightly points out that the certification means little more than the applicant’s check didn’t bounce.

He goes on to imply that the entire agile community is guilty of keeping silent while this huge chicanery was foisted upon an innocent industry. He calls this conspiratorial silence: “integrity debt”.

Oh bollux! What an incredible load of Dingoes Kidneys!

22 Sep 2009

Robert C. Martin

The term Technical Debt was created by Ward Cunningham to describe the engineering trade-off’s that software developers and business stakeholders must often make in order to meet schedules and customer expectations. In short, you may need to use suboptimal designs in the short term, because the schedule does not allow longer term designs to be used. As a simple example, your initial website design may need to be frames based because you don’t have time to build an Ajax framework.

6 Oct 2009

Robert C. Martin

The echoes from Joel Spolsky’s Duct Tape blog continue to bounce off the blogosphere and twitterverse. Tim Bray and Peter Seibel have both written responses to Joel, me, and each other.

Here are some stray thoughts…

7 Oct 2009

Robert C. Martin

My recent blog about TDD, Design Patterns, Concurrency, and Sudoku seemed to draw the ire of a few vocal TDD detractors. Some of these people were rude, insulting, derisive, dismissive, and immature. Well, Halloween is not too far away.

In spite of their self-righteous snickering they did ask a few reasonable questions. To be fair I thought it would be appropriate for me to answer them. ...

15 Oct 2009

Robert C. Martin

Martin Fowler has written a good blog about technical debt. He suggests that there are two axes of debt: deliberate and prudent. This creates four quadrants:deliberate-prudent, deliberate-imprudent, inadvertent-prudent, and inadvertent-imprudent. I agree with just about everything in his blog except for one particular caption…

28 Oct 2009

Robert C. Martin

The twittersphere has been all abuzz today because of something I tweeted early this morning (follow @unclebobmartin). In my tweet I said that I hand-roll most of my own mock objects in Java, rather than using a mocking framework like mockito. ...

5 Nov 2009

Robert C. Martin

Update 12 hours later.

I’m not very proud of this blog (or as one commenter correctly called it “blart”). It is derisive, sneering, and petulant. It is unprofessional. I guess I was having a bad morning. I slipped. I didn’t check with my green band.

So I apologize to the audience at large, and to Cashto. You should expect better from me....

11 Nov 2009

Robert C. Martin

I was going through some old files today, and I stumbled upon some acetate slides from 1995. They were entitled: “Managing OO Projects”. Wow! What a difference fifteen years makes! (Or does it?) ...

21 Nov 2009

Robert C. Martin

There has been an increase in interest in Software Katas of late. What is all this buzz about, and why might it be important? ...

4 Dec 2009

Robert C. Martin

I saw this cartoon in a tweet today. It’s the story of how a boss corrupts the work of a professional. It’s a funny cartoon, and a sad story that happens all too often in our profession. But who, exactly, was at fault?...

17 Jan 2010

Robert C. Martin

Dependency Injection is all the rage. There are several frameworks that will help you inject dependencies into your system. Some use XML (God help us) to specify those dependencies. Others use simple statements in code. In either case, the goal of these frameworks is to help you create instances without having to resort to newor Factories. ...

23 Jan 2010

Robert C. Martin

The number of mocking frameworks has proliferated in recent years. This pleases me because it is a symptom that testing in general, and TDD in particular, have become prevalent enough to support a rich panoply of third-party products. ...

1 Feb 2010

Robert C. Martin

When it comes to software, you get what you pay for. ...

7 March 2010

Robert C. Martin

Watch the following video. It will convince you that we have to do something about the horrible state of software engineering. ...

6 Apr 2010

Robert C. Martin

People often make the argument that time to market is more important that quality. ...

15 Apr 2010

Robert C. Martin

James Bach gave a stirring keynote today at ACCU 2010. He described a vision of testing that our industry sorely needs. Towit: Testing requires sapience...

 The Mayans are Coming!

17 Apr 2010

Robert C. Martin

This one is just a quickie; too long for a tweet.

21 Apr 2010

Robert C. Martin

As you are probably aware the Scrum Alliance is planning to offer a Certified Scrum Developer program. You can read about it here....

23 Apr 2010

Robert C. Martin

I once heard a story about the early days of the Concorde. A british MP was on board for a demonstration flight. As the jet went supersonic he disappointedly commented to one of the designers that it didn’t feel any different at all. The designer beamed and said: “Yes, that was the tricky bit.”...

27 Apr 2010

Robert C. Martin

As I have said before, there’s nothing particularly wrong with the current mania for certification. If you want to be certified at the cost of a 2-day course, by all means get certified. If you want to certify people for attending your 2-day course, by all means hold the course and hand out the certificates. It’s all good. Make money! Be fruitful and multiply!

But be careful not to waste your time...

28 Apr 2010

Robert C. Martin

@JoshuaKerievsky wrote a blog entitled “Sufficient Design”.

Josh makes this point:

‘Yet some programmers argue that the software design quality of every last piece of code ought to be as high as possible. “Produce clean code or you are not a software craftsman!”’

...

15 May 2010

Robert C. Martin

Can anyone create a simpler version of prime factors in Clojure?

2 June 2010

Robert C. Martin

A nice little orbit simulator in Clojure.

3 June 2010

Robert C. Martin

OO is a tell-don’t-ask paradigm. Yes, I know people don’t always use it that way, but one of Kay’s original concepts was that objects were like cells in a living creature. The cells in a living creature do not ask any questions. They simply tell each other what to do. Neurons are tellers, not askers. Hormones are tellers not askers. In biological systems, (and in Kay’s original concept for OO) communication was half-duplex.

5 July 2010

Robert C. Martin

The problem of infinity plagued mathematicians for millennia. Consider Xeno’s paradox; the one with Achilles and the tortoise. While it was intuitively clear that Achilles would pass the Tortoise quickly, the algebra and logic of the day seemed to suggest that the Tortoise would win every race given a head start. Every timeAchilles got to where the tortoise was, the tortoise would have moved on. The ancients had no way to see that an infinite sum could be finite.

12/2009

Robert C. Martin

The Brown-Bag was boring today. One of the virtual attendees gave a talk about some big framework. I didn’t get the name, but I think it rhymed with 'sore'...

08/2007

Robert C. Martin

I'm not sure why they call these meetings 'Brown bags'. Apparently it's something from the old days at Los Alamos. In any case, over 30 people filed into the conference room for this one. The speaker was someone I hadn’t met before. His name was Dave Chelimsky...

06/2007

Robert C. Martin

We had to change to a larger conference room because so many people showed up for today’s session. There were people there I had not seen since school...

04/2006

Robert C. Martin

Ships Time: 1100-4-4-2002 -- Adelaide presents a proposal to use the Abstract Factory pattern, which stirs up quite an argument amongst the Jouneymen and Aprentices. Avery goes too far, and Alphonse makes everyone reconsider the value of type safety.

03/2006

Robert C. Martin

Ship's Time: 1100-2-28-2002 -- Jasmine gives a quick talk on the benefits of using Java 5 enums for the State pattern.

02/2006

Robert C. Martin

Ship's Time: 1100-2-28-2002 -- Alphonse, Avery, Jerry, and Jasmine discuss the strange and variegated nature of Java 5 enums.

01/2006

Robert C. Martin

Ship's Time: 1100-2-27-2002 -- Jerry hijacks the brown bag with a lecture on dependency cycles and the Acyclic Visitor.

12/2005

Robert C. Martin

Ship's Time: 1100-2-22-2002 -- Avery and Alphonse explore the Visitor pattern, and the problem of dependency cycles.

11/2005

Robert C. Martin

What makes a module clean? What is the value of clean code? What does cleanliness of code have to do with professional behavior? Is it enough that a module work? Or is there more that a programmer should do? This article attempts to answer these questions by presenting the authors attempt to clean up a module that he had allowed to get dirty. In this article you will read about refactoring methods, design techniques, and general principles of good craftsmanship. And you may gain a deeper insight into what it means to be a professional programmer.

11/2005

Robert C. Martin

Ship's Time: 1100-2-22-2002 -- A painfully fun exploration of and in Java 5 generics.

10/2005

Robert C. Martin

Ship's Time: 1100-2-22-2002 -- Alphonse and Avery explore Java 5 generics.

10/2005

Robert C. Martin

Ship's Time: 1030-2-22-2002 -- Alphonse works with Jerry on writing new acceptance tests.

08/2005

Robert C. Martin

Ship's Time: 1000-2-22-2002 -- Alphonse and Jasper work together to get the next acceptance test to pass.

07/2005

Robert C. Martin

Ship's Time: 0900-2-22-2002 -- Alphonse and Jasper discuss the Single Responsibility Principle.

06/2005

Robert C. Martin

Ship's Time: 0830-2-22-2002 -- Alphonse discovers DoFixture.

05/2005

Robert C. Martin

Ship's Time: 0830-2-22-2002 -- Alphonse learns the value of keeping acceptance tests independent of each other.

04/2005

Robert C. Martin

Ship's Time: 0800-2-22-2002 -- Alphonse meets Jasper and works on a new acceptance test. He also discovers how unit tests expose aspects of code even when there are acceptance tests.

03/2005

Robert C. Martin

Ship's Time: 1630-2-21-2002 -- A deeply philosophical discussion about the speed of development and the definition of done. And a short medical emergency.

02/2005

Robert C. Martin

Ship's Time: 1630-2-21-2002 -- Alphonse and Avery refactor a module and eliminate nasty cruft.

01/2005

Robert C. Martin

Ship's Time: 1600-2-21-2002 -- The first acceptance tests begin to come together.

12/2004

Robert C. Martin

Ship's Time: 1500-2-21-2002 -- Mock Objects, and refactoring bad designs into better designs.

10/2004

Robert C. Martin

Ship's Time: 1430-2-21-2002 -- After the woodshed.

10/2004

Robert C. Martin

Ship's Time: 1330-2-21-2002 -- As Alphonse grudgingly acknowledges yet again the value of unit tests, he delves into database theory with Jerry - and Avery, eventually, emerges from the woodshed.

09/2004

Robert C. Martin

Ship's Time: 1230-2-21-2002 -- As Avery and Jean are sequestered for some serious attitude adjustment, our apprentice Alphonse proceeds with Jerry on the dosage tracker testing. Will they actually get something done before Avery and Jean emerge?

08/2004

Robert C. Martin

Ken Schwaber

This is the story of Primavera, a company who adopted agile methods and turned their entire development organization around in a most amazing way.

08/2004

Robert C. Martin

Ship's Time: 1130-2-21-2002 -- Is all this testing nonsense just make-work for morons? After working on the suit registration requirement for nearly four hours, the only production code the team's got to show for it is ...

06/2004

Robert C. Martin

Ship's Time: 1100-2-21-2002 -- In the high-G end of the gamma arm, Jasmine and Jerry lock horns on object-oriented philosophy. Alphonse and Avery look on and ask some pertinent questions.

05/2004

Robert C. Martin

Ship's Time: 1000-2-21-2002 -- Avery's obstinate resistance to acceptance tests creates a stumbling block for the DTracker team, as our intrepid apprentice Alphonse wisely decides to remain neutral.

05/2004

Robert C. Martin

Ship's Time: 0900-2-21-2002 -- Taking the plunge into a safety-critical project, Alphonse and the team wrangle out an acceptance test - but competitive currents threaten to sink their progress.

04/2004

Robert C. Martin

Ship's Time: 0800-2-21-2002 -- Alphonse and Avery explore the reqiurements of the Dosimeter Tracking System with their customer.

04/2004

Robert C. Martin

Ships Time 1800 2/20/2001 -- Alphonse and Avery start working on a new project: The Dosimeter Tracker.

04/2004

Robert C. Martin

Alphonse and Avery get a lot of good work done while developing a rapport.

04/2004

Robert C. Martin

Alphonse meets Avery, a somewhat nervous and know-it-all apprentice.

03/2004

Robert C. Martin

After our apprentice stops fidgeting about being patronized, he learns a thing or two about putting two and two together -- and cleaning up after himself.

02/2004

Robert C. Martin

The thrill of independent effort soon pales when Jerry rains on Alphonse's parade. Painfully, our apprentice realizes the bitter truth -- and pushes the delete key.

01/2004

Robert C. Martin

As our apprentice grows accustomed to his new mentor's deceptively slow pace, he learns a lesson in appreciation of both her knowledge and her knitting.

12/2003

Robert C. Martin

When his new mentor's pokey pace seems to make progress a thing of the past, Alphonse blows up and learns a lesson about the importance of taking your time.

11/2003

Robert C. Martin

Expecting the worst after his run in with jasmine, Slphonse learns a new use for the if statement and and discovers that his new mentor's mundane facade belies a rigorous mind.

10/2003

Robert C. Martin

Agile Project Management uses the best of the old PERT and CPM methods of project management.

10/2003

Robert C. Martin

An overdose of etiquette helps Alphonse, now chastened by embarrassment, complete the code -- but the New Jasmine makes him awfully uncomfortable.

09/2003

Robert C. Martin

In which our enthusiastic apprentice cleans up his file at Jasmine's request, while conducting an imaginary dialogue that gets him in way over his head -- all by himself.

08/2003

Robert C. Martin

Working with a new journeyman is a harrowing experience for Alphonse. Can he withstand Jasmine's gimlet eye-and live up to his new nickname?

06/2003

Robert C. Martin

Alphonse surprises Jerry by finding a more elegant solution to shipping a file over a socket. In the process, he meets 'Jasmine', his new tutor.

05/2003

Robert C. Martin

Here's the bottom line. Agile Methods are about managing software projects. Nothing more. Nothing less. Agile methods are about providing managers with the data they need to make management decisions.

05/2003

Robert C. Martin

Jerry and Alphonse attempt to ship a file over a socket. They discover ugliness.

04/2003

Robert C. Martin

This article begins the SMCRemote project. Alphonse learns that main() is often the last function you want to write.

03/2003

Robert C. Martin

Alphonse and Jerry learn the consequences of modifying containers in different threads.

01/2003

Robert C. Martin

This is the chapter from "UML for Java Programmers" that describes the, now famous, Coffee Maker problem. It's all about separating high level policy from low level detail.

02/2003

Robert C. Martin

Alphonse and Jerry discover the frustrating and bizzare world of concurrent threads.

01/2003

Robert C. Martin

Alphonse and Jerry work on the socket service project. Alphonse learns that unit tests are a form of design documentation.

01/2003

Robert C. Martin

Digging deeper into the SocketService framework, Jerry and Alphonse find that substituting tests into the real application code can lead to designs that meet the needs of real users-is this a job for the MockObject pattern?

12/2002

Robert C. Martin

The first time I ran the SocketServer test, it passed, but Jerry was not convinced. Sure enough, further tests failed. Was I losing it? How can a program behave like that?

11/2002

Robert C. Martin

It seemed like incremental absurdity, but Jerry's madness concealed a method: Sneaking up on a solution one test case at a time made me realize I was actually learning something.

10/2002

Robert C. Martin

The apprentice struggles with his mentor's quixotic guidance: Spend hours or days writing code, and then blithely throw it away? How pointless is that?

09/2002

Robert C. Martin

Though I hate to admit it, when Mr. C's journeyman tore my maiden effort to shreds, he taught me some important lessons in simplicity and the necessity of teamwork.

08/2002

Robert C. Martin

On day two of my apprenticeship, I learned how to cut my code down to size—by dividing a gargantuan function into logical concepts and began to understand the value of organization.

07/2002

Robert C. Martin

I was delighted to be accepted as Mr. C's apprentice. But despite high hopes, my first attempt at coding for the master developer quickly hacked my hubris down to size. Would I make it?

05/2002

Robert C. Martin

This article compares and constrasts the Singleton and Monostate Design patterns. It also discusses their relative advantages and disadvantages, and gives advice on when and how to use them.

05/2002

Robert C. Martin

This article examines how to use the Proxy, Stairway to Heaven, and Facade patterns to access databases.

05/2002

Robert C. Martin

This article describes how to write use cases and draw use case diagrams. It takes a "no nonsense" view.

02/2002

Robert C. Martin

Traditional software development focuses a great deal of effort on initial design. Agile software development focuses on continuous care of design.

02/2002

Robert C. Martin

This article uses two design patterns, Template Method, and Strategy, to describe the tension between inheritance and delegation. It talks about the costs and benefits of both approaches, and tries to give the reader a better understanding of when to use each.

02/2002

Robert C. Martin

This paper describes how the definition of the term "analysis" has changed in the software industry over the last four decades. It goes on to describe the definition of the term in an agile project.

02/2002

Robert C. Martin

This article describes the Visitor pattern and several related patterns such as Decorator, Acyclic Visitor, and Extension Object. Several case studies are presented to show how these patterns work, and what purposes they serve.

01/2001

Robert C. Martin

An explanation of the Manifesto of Agile Development, and a description of what Agile processes are. This is a chapter from "Agile Development: Principles, Patterns, and Process"

01/2001

Robert C. Martin

Robert S. Koss

Robert C. Martin and Robert S. Koss write a simple application together using pair programming, test first design, and refactoring. Bob K. and I found ourselves at the same hotel in late 1999. We thought we'd do a little pairing. I said, "Let's score a bowling game." The rest is history.

01/2001

Robert C. Martin

A description of XP as a minimal instance of RUP.

01/2001

Robert C. Martin

James W. Newkirk

This book chronicles the development of a small XP project at Object Mentor. It will be available at Java One.

01/2001

Robert C. Martin

PowerPoint slides for presentation to Columbus, OH. XP Users Group

01/2000

Robert C. Martin

"What goes wrong with software?" A brief explanation of the ten Principles of OOD with supporting patterns.

01/2000

Robert C. Martin

James W. Newkirk

01/2000

Robert C. Martin

James W. Newkirk

Why is Object Mentor interested in Extreme Programming? Because we are dedicated to getting software done quickly and getting it done right.

01/2000

Robert C. Martin

Why XP can give a competitive edge to software teams.

09/1999

Robert C. Martin

I wrote this article just prior to learning about XP. I knew my clients needed a good lightweight development method, so I wrote this down. It doesn't compare to the wonderful work that has since been done with XP.

06/1999

Robert C. Martin

This article discusses how to use an iterative and incremental development process in a company that expects waterfall.

04/1999

Robert C. Martin

This article describes the fundamentals of Iterative and Incremental Development.

01/1999

Robert C. Martin

This article, a forerunner to the now famous tale of Rufus and Rupert, describes the woes of a project that uses waterfall.

01/1999

Robert C. Martin

XP Interview with Robert C. Martin

01/1999

Robert C. Martin

Use case article

11/1998

Robert C. Martin

This article uses several case studies to show the reader how to use Use Cases in UML.

09/1998

Robert C. Martin

This article approaches the petri-net components of UML by using case studies.

06/1998

Robert C. Martin

This article employs case studies to demonstrate the principles and notation of UML finite state machines.

04/1998

Robert C. Martin

This article uses case studies to describe UML sequence diagrams. It also talks about principles of good object oriented design.

01/1998

Robert C. Martin

James W. Newkirk

This article walks the reader through a fairly complex UML design. Many design principles and patterns are described.

11/1997

Robert C. Martin

In this column we will explore UML collaboration diagrams. We will investigate how they are drawn, how they are used, and how they interact with UML class diagrams. 

06/1997

Robert C. Martin

In 1996 and 1997 I was very interested in how to use dynamic_cast in C++. The notion of casting a pointer or reference to an object "up" or "down" was well known. But casting "across" the hierarchy was new to me.

04/1997

Robert C. Martin

Dual inheritance hierarchies are common in object oriented designs. Yet they can cause nasty downcasting problems. This article describes some design patterns that help.

03/1997

Robert C. Martin

This article compares and contrasts Java and C++.

03/1997

Robert C. Martin

James W. Newkirk

Bhama Rao

This is a description of an architecture pattern used on a major GUI development in C++.

02/1997

Robert C. Martin

An article about the interrelationships between large scale modules. Discusses the Stable Dependencies Principle and the Stable Abstractions Principle.

01/1997

Robert C. Martin

This article describes how to draw Class diagrams in UML. It presents these diagrams in the form of a case study, and discusses design principles as well.

12/1996

Robert C. Martin

(An article about large scale OO structure) Discusses the Reuse/Release Equivalency Principle, The Common Closure Principle, The Common Reuse Principle, and the Acylclic Dependencies Principle.

08/1996

Robert C. Martin

Fat class interfaces are all too common. This article describes a principle that helps designers partition fat classes into multiple interfaces.

05/1996

Robert C. Martin

I first stumbled on this principle when Jim Newkirk and I were arranging the source code directories of a C++ project. We realized that we could make the directories that contained detailed code depend upon the directories that contained abstract classes. This seemed like an inversion to me, so I coined the name "Dependency Inversion".

03/1996

Robert C. Martin

How do you know if you are using inheritance correctly? This article describes Barbara Liskov's famous 'Substitution Principles'. It shows the principle in action through several demonstrations.

02/1996

Robert C. Martin

This article describes a design competition between Steve Mellor and Robert Martin.

02/1996

Robert C. Martin

A review of PLoP95

01/1996

Robert C. Martin

(Submission to PLoPD-96) A design pattern that makes use of dynamic_cast in order to eliminate dependency cycles in Visitors.

01/1996

Robert C. Martin

Probably the most important of all the OOD principles. This article is an explanation and demonstration of Bertrand Meyer's famous principle.

01/1996

Robert C. Martin

A class should have only one reason to change. 

11/1995

Robert C. Martin

As an attempt to gain headway in our never ending arguments about OOD on comp.object, it was suggested that we try to design a simple application. We decided to design the software that read the status of a button and used it to turn on a light. The debate raged for months.

07/1995

Robert C. Martin

In Bertrand Meyer's 1995 'Object Success' book he wrote: "PRUDENT HIRING PRINCIPLE: Beware of C hackers." This article is a rebuttal to that statement.

01/1996

Robert C. Martin

James W. Newkirk

This is the case study of the, now famous, ETS project. It shows the surprising way in which C++ and OOD were used in a very large project to achieve an extremely high degree of reuse.

10/1994

Robert C. Martin

This paper describes a set of metrics that provide insight into the quality of an object oriented design. The metrics are based upon the kinds and directions of interdependencies between classes and packages.

10/1994

Robert C. Martin

This article is about abstraction. It uses a case study to show how the underlying abstraction can be found and used to improve the design of an application.

08/1994

Robert C. Martin

Journal of Object Oriented Programming, late 1994. A Review of PLoP 94

08/1994

Robert C. Martin

Several Design Patterns, Iterable Container, Member Container, Three Level Finite State Machine, Abstract Client, Write a Loop Once. PLoP-94, Pattern Languages of Program Design I

07/1994

Robert C. Martin

In the late 80's and early 90's many authors were talking about performing OOA by using lists of nouns taken from the requirements document. These nouns would become candidate objects in the preliminary object model. This article talks about the ineffectiveness of the noun list technique and recommends use cases as a better approach

08/1993

Robert C. Martin

This article is an overview of object oriented design.

10/1992

Robert C. Martin

The second article I wrote for Stan. This article discusses why OOD is about behavior and dynamics more than about static relationships.

06/1992

Robert C. Martin

This is the first article I ever wrote for a professional journal. Stan Lippman was the editor of the C++ Report at the time. I nicknamed him Stan "The Merciless". His poigniant edits did me more good than could repay. This article discusses why and when to use abstract classes. There are hints of the design principles to come.