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.
11 May 2009
Robert C. Martin
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
4 Aug 2009
Robert C. Martin
5 Aug 2009
Robert C. Martin
6 Aug 2009
Robert C. Martin
6 Aug 2009
Robert C. Martin
7 Aug 2009
Robert C. Martin
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”.
22 Sep 2009
Robert C. Martin
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
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.
11 Nov 2009
Robert C. Martin
21 Nov 2009
Robert C. Martin
4 Dec 2009
Robert C. Martin
17 Jan 2010
Robert C. Martin
23 Jan 2010
Robert C. Martin
1 Feb 2010
Robert C. Martin
7 March 2010
Robert C. Martin
6 Apr 2010
Robert C. Martin
15 Apr 2010
Robert C. Martin
17 Apr 2010
Robert C. Martin
This one is just a quickie; too long for a tweet.
21 Apr 2010
Robert C. Martin
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
2 June 2010
Robert C. Martin
3 June 2010
Robert C. Martin
5 July 2010
Robert C. Martin
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.