I use a coding tool called ReSharper - and I was pleasantly surprised the other day when it pointed out a copy & paste bug that was waiting to explode. You see, copy and paste programming is so very easy to do - that we all do it. Even the best of us accidentally leave in duplicate code snippets from time to time.
Why Cut & Paste is so bad
There are two big reasons why this is an anti-pattern:
- If the code you cut and pasted has a bug in it (and it invariably will), what do you think are the chances that you'll find and fix all occurrences of it?
- If you're rubber-stamping code (copy and paste, paste, paste…) so that you can make minor edits to the pasted version, it's too easy to make a mistake - and the code will compile fine. It won't fall over until a customer runs it. Rubber-stamping typically happens in a switch statement or a batch or if/else-if statements (where the cases are nearly identical).
It's this second case that ReSharper showed me a bug that wouldn't have been found until run-time. It surprised me because ReSharper doesn't look for duplicate code snippets. But one of its rules can get triggered if you copy & paste code incorrectly.
ReSharper is...
This is an add-in to Visual Studio. It does many things, but one thing it does well is point out flaws in your C# code via highlighting - so you can quickly see suspicious or questionable practices. There are other tools that do the same for C#, and there are similar tools for Java. [Disclaimer: I do not work for JetBrains. I paid for my own copy out of my own pocket. I'm just a happy user.]
This is not a tutorial on using ReSharper - I'm just showing one tiny example of how it can help you. Here is some legacy code opened in Visual Studio with ReSharper:

Notice the highlights on the right of the source window. Those give an indication of where there might be problems in the source. You can click those lines and it will jump to the place in the code with the problem. It highlights the error and offers fixes, too. The orange lines are approximately lined up with where the scroll bar would be when you view the code. Orange means warning, and red means error. Opening up legacy code often shows many many orange lines because ReSharper warns about suspicious or bad practices. These are things that the compiler is happy with, but you'll be unhappy about in the long run.
Here's what ReSharper found
So, back to how I was pleasantly surprised. Look at this code example. It's pretty obvious at first glance that this code was rubber-stamped to handle many cases - with slight edits in each version.
This code will compile, but it won't work right. Here's what it looks like in normal Visual Studio:
Do you see the problem? It's in line 41. When copying and pasting, the person forgot to modify the if statement to use htmlButtonMatch instead of htmlTextboxMatch. It's clearly wrong, but it might not show up as a bug until months after someone wrote this.
Look at what ReSharper shows (it does additional highlighting of things like method names, etc.):
With this cool tool, I'm immediately alerted to the problem. The tool tip for the grayed out variable warns me that it wasn't used. From that, I can easily spot the error in line 41. The important thing is that ReSharper alerted me that there was a problem.
This was some actual legacy code that I opened up one day - when I noticed the problem. I was fix it and find out why unit tests didn't cover this case.
You know, if I didn't tell people I used ReSharper, they'd think I was really smart.
But I am smart enough to use good tools.
See also: http://en.wikipedia.org/wiki/Copy_and_paste_programming