e.g., if I were to post some patch that used bubble sort, one could easily say "This is total crap. Don't come back until you fix your shit". If I were a noob, that wouldn't help me contribute better. If one were to rather say something like, "This is very inefficient," and then mention something about O notation or efficient sorting, and point out that this is a performance-critical section of the code, I might be more likely to actually take the time to learn enough to be able to fix it.
Consider also the effect on newer programmers. They start, they commit crap, you tell them to die in a fire. They get better, and years later decide that they're not going to bother fixing bugs in your project because "that guy's a jerk". Constructive criticism, or at the very least politeness, helps prevent poisoning the well of talent that is interested in working with you.
Is it best, in a controlled environment with both low signal and noise, to take your time and explain things in detail in a "civil" manner? Sure. That works great in (small) classrooms for example. In a public kernel dev mailing lists though? No, a fuck off should suffice. If the recipient of the fuck off wants more, they can seek it in a more appropriate place.
IRC is somewhere in the middle; usually civility or ignoring the person works best. This is particularly true since most IRC channels are fairly explicitly there for people who want to give or receive advice. I've only told someone who was seeking help from me on IRC to fuck off once, and that is when he demanded I talk with him on skype instead of IRC, and pressed the issue.
Edit: I suppose I shouldn't expect a civil response if I explain in a civil manner why I don't think civility is always necessary. Hoisted by my own petard perhaps?
Also you can still give a franker response without being blatantly derisive: "Thanks for your contributions, but I'm afraid they do not meet the quality standards of our project. I think you might need to learn a little more about X, Y and Z, before you do any more work."
I'd be interested, would you find something like this to be as patronising:
"Thanks for your submission. Could you improve X, Y, Z and resubmit?"
"You're useless. For god's sake stop contributing until you get your sht together"
rather than:
“your skills don't seem to be quite at the level where we can accept your contributions; in particular, you don't understand X, Y, and Z very well and it shows in your code. I'm short on time, but if someone else has time to explain why that would be great.”
I don't have a good explanation why that is. Maybe it's because I feel some condescension in the second while the first one is just plain raw "I don't have time to deal with your sht. You're an adult: fix it and come back later".