Articles

Functional Programming Basics Episode 1: What's it all about?

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.

 Crap Code Inevitable? Rumblings from the ACCU

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

The Scatology of Agile Architecture

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

Why the sea is boiling hot

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.” ...

Clean Code and Battle Scarred Architecture

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

The Rush

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

Uncle Bob JSPS: Learning Clojure

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

More Clojure from Uncle Bob JSPS

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

Scenario Tables for FitNesse

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

Generating Pi in Clojure

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

Don't be Lazy about Sequences

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

As the tests get more specific, the code gets more generic.

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

Java Calling Clojure

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

Jarvis March in Clojure

11 Aug 2009

Robert C. Martin

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

One Thing: Extract till you Drop

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? 

The CSM Integrity Deficit

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! 

A Mess is not a Technical Debt

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. 


Echoes from the Stone Age

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…

TDD Derangement Syndrome

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

We must ship now and deal with consequences.

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-prudentdeliberate-imprudentinadvertent-prudent, and inadvertent-imprudent. I agree with just about everything in his blog except for one particular caption…

Manual Mocking - Resisting the invasion of Dots and Parenthesis.

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

Excuse me sir, What planet is this?

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

Archeological Dig

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

What's all this Nonsense about Katas?

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? ...

Saying No!

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?...

Dependency Injection Inversion

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

Mocking Mocking and Testing Outcomes

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

Software on the Cheap

1 Feb 2010

Robert C. Martin

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

Developer Certification WTF?

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

20% More Bugs or 20% Less Features?

6 Apr 2010

Robert C. Martin

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

Sapient Testing: The "Professionalism" Meme

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.

The R.E.A.L.I.T.Y. Principles of Agile Software Certification

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

The Tricky Bit

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.”...

Certification - Don't Waste Your Time!

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

Sufficient Design means Damned Good Design

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!”’

...

Clojure Prime Factors

15 May 2010

Robert C. Martin

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

Orbit in Clojure

2 June 2010

Robert C. Martin

A nice little orbit simulator in Clojure.

TDD 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.

Software Calculus - The Missing Abstraction

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.

The Craftsman #52: Clean Code - C1 Inappropriate Information

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'...

The Craftsman #51: Brown Bag VIII Ruby Visitor

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

The Craftsman #50: Brown Bag VII Ruby

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

The Craftsman #49: Brown Bag VI - Abstract Factory

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.

The Craftsman #48: Statenum

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.

The Craftsman #47: Jinx!

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.

The Craftsman #46: Squaring the Circle

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.

The Craftsman #45: 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.

Clean Code: Args

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.

The Craftsman #44: Java Generics 2

11/2005

Robert C. Martin

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

The Craftsman #43: Language Lawyers

10/2005

Robert C. Martin

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

The Craftsman #42: Devious Thoughts

10/2005

Robert C. Martin

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

The Craftsman #41: Yeah, Sorta

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.

The Craftsman #40: Non-trivial Trivialities

07/2005

Robert C. Martin

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

The Craftsman #39: Test Refactoring

06/2005

Robert C. Martin

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

The Craftsman #38: Test Independence

05/2005

Robert C. Martin

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

The Craftsman #37: Handling Rejection

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.

The Craftsman #36: The Color Purple

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.

The Craftsman #35: What a day

02/2005

Robert C. Martin

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

The Craftsman #34: That's Final!

01/2005

Robert C. Martin

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

The Craftsman #33: Cleanup on Aisle 10

12/2004

Robert C. Martin

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

The Craftsman #32: Indubitably!

10/2004

Robert C. Martin

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

The Craftsman #31 Turn Off This Force Field

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.

The Craftsman #30 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?

The Primavera Story. An Agile Transition.

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.

The Craftsman #29 Move the Date

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

The Craftsman #28 An Encapsulation Break

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.

The Craftsman #27 Carole's Way Or The HighWay

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.

The Craftsman #26 A Tabled Requirement

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.

The Craftsman #25 Register Suit

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.

The Craftsman #24 Oh No!

04/2004

Robert C. Martin

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

The Craftsman #23 Raggedy

04/2004

Robert C. Martin

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

The Craftsman #22 Bug Eye

04/2004

Robert C. Martin

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

The Craftsman #21 Patchwork

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.

The Craftsman #20 Backslide

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.

The Craftsman #19 Teaching Tolerance

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.

The Craftsman #18 Slow and Steady

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.

The Craftsman #17 Call in the Guards

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.

Pert, CPM, and Agile Project Management

10/2003

Robert C. Martin

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

The Craftsman #16 Excess Politesse

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.

The Craftsman #15 Ess Are Pee

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.

The Craftsman #14 Transaction Actions

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?

The Craftsman #13: Objects

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.

Agile Methods - The Bottom Line

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.


The Craftsman #12: Three Ugly Lines

05/2003

Robert C. Martin

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

The Craftsman #11: What's main() got to do with it?

04/2003

Robert C. Martin

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

The Craftsman #10: Dangling Threads (Iterations Unbound)

03/2003

Robert C. Martin

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

Object Oriented Design Heuristics and Coffee

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.

The Craftsman #9: Dangerous Threads

02/2003

Robert C. Martin

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

The Craftsman #8: Socket Service 3 (Tests are a form of documentation)

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.

The Craftsman #7: Once Is Not Enough

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?

The Craftsman #6: Once Is Not Enough

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?

The Craftsman #5: Baby Steps

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.

The Craftsman #4: A Test of Patience

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?

The Craftsman #3: Clarity and Collaboration

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.

The Craftsman #2: Crash Diet

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.

The Craftsman #1: Opening Disaster

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?

Singleton And Monostate

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.

Proxy and Stairway to Heaven

05/2002

Robert C. Martin

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

Use Cases: A chapter from 'UML for Java Programmers'

05/2002

Robert C. Martin

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

Continuous Care vs. Initial Design

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.

Inheritance vs. Delegation

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.

On Analysis

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.

The Visitor Family of Design Patterns

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.

Agile Processes

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"

The Bowling Game: An example of test-first pair programming

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.

RUP v.s. XP

01/2001

Robert C. Martin

A description of XP as a minimal instance of RUP.

sdrawkcaB gnikroW

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.

Testing Things That Seem Hard to Test

01/2001

Robert C. Martin

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

Principles and Patterns

01/2000

Robert C. Martin

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

Can XP be used with C++?

01/2000

Robert C. Martin

James W. Newkirk

Why XP?

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.

XP: Competitive Edge

01/2000

Robert C. Martin

Why XP can give a competitive edge to software teams.

C.O.D.E.

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.

Iterative and Incremental Development III

06/1999

Robert C. Martin

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

Iterative and Incremental Development II

04/1999

Robert C. Martin

This article describes the fundamentals of Iterative and Incremental Development.

Iterative and Incremental Development I

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.

ObjectView Issue4

01/1999

Robert C. Martin

XP Interview with Robert C. Martin

ObjectView Issue3

01/1999

Robert C. Martin

Use case article

UML Tutorial -- Use Cases

11/1998

Robert C. Martin

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

UML Tutorial -- Complex Transitions (Activity Diagrams)

09/1998

Robert C. Martin

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

UML Finite State Machine Diagrams

06/1998

Robert C. Martin

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

UML Sequence Diagrams

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.

Walking through a UML 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.

UML Tutorial:Collaboration Diagrams

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. 


Cross Casting: The Capsule Pattern

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.

Design Patterns for Dealing with Dual Inheritance Hierarchies in C++

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.

Java vs. C++: A Critical Comparison

03/1997

Robert C. Martin

This article compares and contrasts Java and C++.

Taskmaster: An Architecture Pattern for GUI Applications

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++.

Stability Article

02/1997

Robert C. Martin

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

UML Class Diagrams

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.

Granularity

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.

The Interface Segregation 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.

The Dependency Inversion Principle

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".

The Liskov Substitution Principle

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.

Mellor's Problem

02/1996

Robert C. Martin

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

Oh what a relief it is.

02/1996

Robert C. Martin

A review of PLoP95

Acyclic Visitor

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.

The Open Closed Principle

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.

The Single Responsibility Principle

01/1996

Robert C. Martin

A class should have only one reason to change. 

Button Button, Whose got the Button?

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.

Prudent Hiring Principle: Beware of C Hackers (A rebuttal)

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.

A Case Study of OOD and Reuse in C++

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.

Object Oriented Design Quality Metrics: An analysis

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.

The Payroll Case Study: Finding the Underlying

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.

Plop Plop Fizz Fizz

08/1994

Robert C. Martin

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

PLoP94 Submission

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

Analysis by Noun Lists and Use Cases : A Case Study

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

OO(A, D, P(C++))

08/1993

Robert C. Martin

This article is an overview of object oriented design.

Collaboration

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.

Abstract Classes and Pure Virtual Functions

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.











  
   


Subpages (39): View All
Comments