Bugs travel in groups. If you see one, look for a second. If you see two close together, look for eight more.

It's never the case that "nothing changed, really!" If you're sure that nothing changed, look again.

The solution will pop out the moment somebody looks over your shoulder. Therefore, arrange for people to look over your shoulder a lot. Better yet, pair program.

The best insurance against bugs sneaking in is a good set of unit tests, run frequently. When you fix a bug, write a new unit test that demonstrates the bug first, then fix it. That way, the bug will stay fixed.

Demos to customers attract bugs. Demo to a friendly audience first.

Remember Rudy's Rutagaba Rule (Weinberg): "Once you eliminate your number one problem, number two gets a promotion." Having another problem is a good thing. It means you still have customers.

Secondary corollary to the third case: Your wife has learned at least enough perl to nag you about your bad coding habits. ;)

Warning: Unless otherwise stated, code is untested. Do not use without understanding. Code is posted in the hopes it is useful, but without warranty. All copyrights are relinquished into the public domain unless otherwise stated. I am not an angel. I am capable of error, and err on a fairly regular basis. If I made a mistake, please let me know (such as by replying to this node).

Most common problem cpan-testers see is that the tests are written with no portability in mind. Tests that should be skipped, usually aren't, filepaths are being compared without being run through File::Spec first...

MJDsays you
can't just make shit up and expect the computer to know what you mean, retardo!
I run a Win32 PPM
repository for perl 5.6x+5.8x. I take requests.
** The Third rule of perl club is a statement of fact: pod is sexy.

Hey, if you want to make it foolproof, you better get a whole string of fools to test it. :o)

__________
"Every program has at least one bug and can be shortened by at least one instruction -- from which, by induction, one can deduce that every program can be reduced to one instruction which doesn't work." -- (Author Unknown)

There is no such thing as "fool-proof." As I once heard it (and unfortunately, I do not know whom to attribute it to) to the effect that, "Programming is the race between programmers to write programs that are fool-proof, and the Universe to create better fools... and so far, the Universe is winning."

Well, yes, "fool-resistant" would likely be a better term, but I've never heard of anyone using it. ;o)

I used it in the same context as "bulletproof", which is only accurate if standard/average bullets are used. Even armour plating isn't proof against armour piercing rounds, and whenever better armour is produced a better bullet will surely follow.

All anyone can ever hope to achieve in any given task, is their own personal best under whatever restrictions are placed upon them - such as time, money and the involvement of other (possibly less perfect) people.

This entire thread can be summed up with one of the mottos of the monastry: "All software sucks".

Not all software sucks... Some of it blows.

One huge software company, against all logic, even manages to create software that both sucks and blows at the same time. ;o)

__________
"Every program has at least one bug and can be shortened by at least one instruction -- from which, by induction, one can deduce that every program can be reduced to one instruction which doesn't work." -- (Author Unknown)

We can't even answer the fundamental question whether programming is hard or not.

Take it from one who's still struggling to tie his laces (programmatically). Programming is hard! It's coding that's easy.

It's easy to write a bit of code that does a specific "thing" ... I do it all the time.

What I still am struggling to get right is to write that same bit of code so that it is:
1.) Usable in more than just the one situation it was coded for.
2.) Stable in an unstable world.
3.) Looks good (i.e. Others can understand it.)
4.) Doesn't get me a metaphorical clout accross the skull when another programmer sees it.

When putting a smiley right before a closing parenthesis, do you:

Use two parentheses: (Like this: :) )
Use one parenthesis: (Like this: :)
Reverse direction of the smiley: (Like this: (: )
Use angle/square brackets instead of parentheses
Use C-style commenting to set the smiley off from the closing parenthesis
Make the smiley a dunce: (:>
I disapprove of emoticons
Other