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)
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...
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 sizeby 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.