My imho of course.
I can somewhat justify using a very corrosive tone if you're not in a place of power and you want to be sure that you're not ignored (I'm not a fan of it but pragmatically it sometimes gets the job done). However it's clearly not the case here, he has the power to reject any contribution he doesn't fancy. And his developer clout is huge enough that he'd still be heard if he criticized third party projects he doesn't maintain.
From a purely pragmatic point of view I don't see what his corrosive tone gets him. Actually I can easily see what it cost him, some devs have resigned from their maintainer position in the Linux kernel and probably many more who gave up contributing at all because they were worried they were going to be shot in flight.
You can do something that makes people upset without being an asshole.
It's really that simple.
"No, I won't merge this pull request because of X, Y, and Z." Somebody's probably not going to be happy. But you have not needed to stoop to insulting them. You have not been an asshole. You have done your job, you have kept whatever level of high technical quality you care about. But you have not been an asshole.
It is not hard to do both, and if you are but-forring Linus's decision to maybe be less of an asshole it's probably look-in-the-mirror time.
And what of questions about their process? I've seen LKML questions along the lines of, "This code produces many warnings when compiled; did you even compile it?" It's a valid question, if a little terse, and almost certainly insulting.
I think that you are arguing apples and apple pies.
Questions of process are made valid when it becomes clear there may be a flaw in the process which was applied. Asking them if they compiled the code is warranted, is it not?
"This code has more warnings than we accept under our process; please remedy." You aren't telling onlookers that they will be lit on fire for the temerity to contribute, you aren't causing anyone to lose face and you aren't hurting anyone. No aspersions, no chilling effects, and a positive path forward. Done and done. Everyone wins. To do otherwise is inhumane.
That fails to address the possibility that their process is broken, and so achieves the possibility of inducing technical debt when these issues will inevitably arise again.
Fixing process can be as important as fixing code.
There have been a lot of electrons perturbed dancing around that that's what we're talking about, yes?
I'm not pro-insult, not by any means.
It seems you think one approach is clearly worse.
But as a thought experiment can you imagine how each approach might have real tangible advantages?
I understand the point of view that yes, it may have advantages to abuse people for your immediate and short-term desires. The attempt to cast abuse as valid for those advantages belies the truth of a nasty participant in the body politic.
I’ve wotked with people who genuinely respond well to that kind of feedback. It seems you think one-size fits all, and fits every situation?
If you want to tell somebody in a 1:1 "this sucks" when you know--know, not assume--that that is their preferred mode of communication? Sure. Fine. I think that resorting to such modes of communication makes you a lousy leader because it's important to train your people out of high-tension and low-value communications, but fine. But y'know what? Nobody here is talking about that situation, so table it and move on.
I won't reply to your diversion again.
It is better to respond coolly to assholish behavior. But it is not better to allow it to remain unchallenged. Not challenging assholish behavior means that it becomes a community norm and is then incumbent upon everybody else to "train" themselves, as you say, to ignore the behavior of a minority of assholes. It hands the responsibility of defining what the culture is to those assholes.
Letting the assholes normalize the culture is bad. It decreases uptake. It increases, even if people "train" themselves, the likelihood of burnout and of departure. And it makes the world, even if incrementally, a worse place.
The culture and the world always evolving and changing, it can be worse or better or whatever, most importantly for me is how can I make myself adapt to the every situation and make the best of it.
"Changing yourself" and letting rot fester is of little value to anyone. Be so mildly discomforted as to push back on other people's nasty behaviors and you make the world a better place.
Do what is right.
In some cultures e.g. Japanese, being publicly accused and insulted is worse than insulting - it's a mark of shame that doesn't go away.
Unfortunately people simply can't rewire their brain, especially as adults, and that's why good manners exist.
Sure, but I can always make the effort and try
>Unfortunately people simply can't rewire their brain, especially as adults
I think It works both way. Some asshole can't simply be not asshole.
Someone's ingrained bad habits may make this harder.
Tough.
It's a choice; make it.
I don't know whether it actually, but I think Linus becomes "corrosive" to get rid of someone. Certain developers disappearing is not a side effect, it's the intended effect.
If you have a "contributor" who keeps submitting the same faulty patch over and over, who doesn't listen, but keeps making a fuss about his "contribution" not being accepted, what can you do? You tell him that his code is no good and won't be accepted, and you tell him that his making a fuss about it is not welcome. But he doesn't stop, so now what? Block him from the mailing list? He just comes back with a new address. What's next? You decide to be so unpleasant to him that he leaves.
Anecdotally, this sequence happened with certain engineers at Redhat, who kept dumping their bad code at Linus so that it may be maintained upstream. They could have cleaned it up, but that's exactly the maintenance cost Redhat wanted to outsource to the community.
Not typing insults saves time. We are not talking about psychologist-grade emotional communication, just basic manners.
It would be nice if we could find a person who was a world class 100x programmer AND project organizer AND had decades of sustained high productivity AND had absolutely perfect social skills.
But in real life people like this are hard to find, so we have to deal with imperfect people.
The question is: Which kind of imperfection do you prefer for this purpose? Someone who is technically weak? Disorganized? Can't stand the pressure of leading a massive organization? Can't sustain effort over time? Writes unnecessarily mean criticism that drives some people away? Writes too-soft criticism that fails to correct technical failings? Choose at least one.
It's not a false dichotomy, because nobody's perfect. You're gonna have flaws, they're gonna come out on bad days, and at that point you've got a few options for what kinds of flaws you prefer.
In any case, I find there is way too much focus on words instead of actions. It's the same in politics and in business. You have people who get nailed for cursing but the standard for company leadership seems to be to use nice words while at the same time stabbing people in the back. I would be more concerned if Linus physically abused people or laid off people with one day's notice "It's just business".
That seems to be what's missing from this whole SJW movement; context. These people watch from the sidelines, pick up on a few "trigger" words, and then burn your house down because they didn't understand the context of your comment.
*Actually, they do in some societies, such as for example Japan, or my own native Java. People insult each other with more esoteric means instead.
Why is it such a prevalent idea that someone has to be an asshole in order to give negative feedback, or to take an action that someone doesn't like?
Alternatively, we can spend a year debating if me using a word "suck" is appropriate or triggering because you found out based on the DNA testing of your twice removed uncle that his grandfather was lactose intolerant which caused you to develop an emotional response while your code continues to suck and create problems, causing the company to lose money or a project to lose users.
It should be pretty obvious that this thread is going nowhere good. Can we please stop wasting our time shouting past each other? If we're not receptive to learning something new we should just go elsewhere because that's what this site is for.
Here's a novel idea, how about instead of directly resorting to "Your code sucks." we instead say something like "I think there's still some work to do here. Here's the way I would have done this." It's really not that hard to give constructive criticism.
"Your code invokes undefined behavior and may fail in the following ways. These corner cases are handled incorrectly. There are a few other cases I'm not sure about, because I have trouble following the logic."
"The code is fine. I have tested it!"
"It happens to work on you current machine. That's the nature of undefined behavior. It might fail in the future without warning."
"I tested it, it works. Now merge it!"
"Sorry, man, the code is crap. Go and fix it."
Nobody resorts directly to "your code sucks". Engineers love to give constructive criticism, but they hate to give marks for effort. And where constructive arguments fall on deaf ears, they give up and either ignore you or tell you to GTFO. Both are perceived as impolite, but what else could they do?
In your scenario, the person saying this is being the bad contributor, and should be told to explain what they disagree with in the review. If anyone shuts down in a code review like that more than once, they should be finding a new place to work. And that really goes for both sides to be fair -- if I put in effort into a PR I deserve a good constructive review. If it's a public project and this stranger refuses to follow the rules, no harm done in closing the request and telling them to come back later when they're ready to discuss things.
Or you know, however you discipline them. I think we're in agreement that there's no need to resort to personal attacks and frankly someone telling me my code is crap is probably better than being told I should have been aborted in a code review.
The end. No need to call it crap, no need to burn a bridge.
Personally, I just stop responding after the technical arguments have been exchanged. There is no point in repeating what was ignored already, no point in ELI5, no point to using swear words, silence is what works best.
By the way, if you told me "I understand your passion, but...", I'd be angry beyond belief. That's the way you talk to children, and even my mother is no longer allowed to talk to me like that. I consider that a stronger insult than my code being called crap. Which probably shows that shutting up in time is the best response.
The end is “nothing more to talk about,” and then you stop replying. As to time and energy, if you’re so depleted than an extra few sentences will materially impact you, then that is a problem. Healthy humans won’t be exhausted by expressing themselves in a half paragraph rather than a muttered “crap”.
Some people are persistent and will blame you for explaining badly when they don't understand. These discussions never end; usually not even after things got labelled as crap.
So don’t call it crap, just clearly state that you’re not interested anymore and hit ignore. The rest is their problem, not yours, and you’ll gain a reputation for being forthright and firm rather than hysterical.
Personally, I just stop responding after the technical arguments have been exchanged. There is no point in repeating what was ignored already, no point in ELI5, no point to using swear words, silence is what works best.
Amen brother.
By the way, if you told me "I understand your passion, but...", I'd be angry beyond belief. That's the way you talk to children, and even my mother is no longer allowed to talk to me like that. I consider that a stronger insult than my code being called crap. Which probably shows that shutting up in time is the best response.
The person in the example was acting like a child, and deserved to be treated (politely) like one. Either way though, my particular wording was just off-the-cuff and only an example.
The code was obviously bad enough to not get accepted and should be fixed. What is so bad in saying it like it is instead of dressing things up with layers of words?
Even with that long reply everyone will understand the intent behind it.
Maybe it is a cultural thing in the end. North American culture is very different from, say, Finnish culture (from which I am from, too).
Merge my code! It’s great!
No.
Aaaand scene.
Hell, that “no” could even have been a silent stare, or a grunt and it would have worked. Sadly much of the World finds that crosses the line fopekm taciturn and direct, into either rudeness or lack of communication. Dressing things up with layers of words, while tedious, is also the basic way many cultures keep arguments from turning into murders. North America (and the UK and some other parts) probably do take it a bit far. Not as far as Japan, but still, too far.
All of which is to say, yes it’s probably cultural, but it’s also a matter of people who are invested in something missing the obvious. Sometimes you really have to drive a point home, and my general recommendation was that it’s better to do so directly and civilly, rather than rudely.
I have fired "nice and really trying" people. Because they were decent people, I have also then recommended them to my personal network for positions that are better suited to their skills (and more than once have they gone on to success at a friend's company), because hiring somebody who can't do the job is management's fault.
I also fire people who are toxic assholes. I do not recommend them to my network because I would not inflict them upon people I like. Even if they're competent.
You can, in fact, do both, and hats off to Linus for at least making a goddamned attempt to not be the latter.
You're pretty close to behaving a certain way mentioned in this comment yourself. Could you please, like we've asked before, try not to be so mean to other users?
It's important to not be a toxic asshole.
There is a real and obvious difference between the assertion I made and the assertion you are attempting to say that I made.
When people use the word "constructive", what they actually mean is "nice" and "won't hurt my ego."
reply "
No.
Saying something is 'crap' may be true, but it's definitely not constructive. 'Constructive' feedback helps you understand why it's wrong. So, 'constructive' would be: "hey that code was very problematic, and here are the reasons why: etc. etc. etc.."
"When people use the word "constructive", what they actually mean is "nice" and "won't hurt my ego.""
No. Saying something is 'crap' is generally not useful and counterproductive. It's also subjective. You can say 'It doesn't work' or 'it doesn't meet requirements' and that's more objective.
Sometimes people need to be reminded just how badly they screwed up, and to purposely avoid offending people is pretending that some work isn't crap. Of course words like crap are subjective; to the person reviewing my work, my code was crap, and that actually means something to me if they think that it's crap.
Not constructive? Nonsense. Sometimes you need language like "crap" to punctuate the issue. It got me to take the issue more seriously. If I tried to ship some really awful code, I don't need someone to tell me "Gee, Ravenstine, let's talk about this, m'kay? So this part of your code is... problematic." People the word "problematic" gets thrown around all the time, even when referring to very minor bugs in public projects. But words like "crap" actually mean something because they're reserved for times when you really need to know what you did was wrong.
I'm irrational, as are all human beings. Not everything I do can be treated as an engineering puzzle with a fixed set of inputs that yield a deterministic return value. You can tell a human being that something "doesn't meet the requirements" like they're some kind of robot, but depending on who you're talking to, you may get the result you want by not talking to them like they're robots.
This is definitely not to say that people should be uncivil, I find that sometimes a kick in the rear is very helpful.
Not sure about "This code is crap", but claiming it is less constructive than your example is a very superficial reading. A supervisor who told me "Your code is crap" would seem a lot more inviting than one who put the condescending remark you offered. It's a lot more constructive because it reminds me (a) that my supervisor expects more and (b) my supervisor expects more from me (i.e. both I know what to do to fix it and my supervisor thinks this is a lapse and I'm competent).
Saying something is 'problematic' is not remotely condescending. It's just a reasonably objective way of saying there are problems.
Saying something is 'crap' is neither more authentic nor more informative, it's absolutely not constructive and it certainly isn't polite.
I think you may have difficulty interpreting communication when you take things literally the opposite of what they are i.e. 'problematic' as some kind of 'crypto-speak' when it's not, and 'crap' - which is actually and objectively condescending and objectively not constructive.
If a piece of code needs work in a more general way, your manager's best option is to communicate that candidly in an impersonal and clear manner. Maybe with a tiny bit of sugar coating depending on the situation.
So 'the code needs a lot of work, specifically in these areas: a, b, c '. Or 'the code needs a lot of work and I see some ugly patters in there, maybe due to some habits you have developed elsewhere, let's work on these things specifically: a, b, c etc..' is appropriate.
The only time you can say code is 'crap' is when you have a very good relationship with someone, and a fair degree of mutual respect, and you also know that they'll never interpret it too negatively. As in 'heyzeus Joe that last checkin was abysmal, see: a, b and c ... and no more watching the pro-bowl while coding for you my man!' ... is what I could get away with someone I've known for quite a while.
You could use 'crap' in a public forum directed maybe at a group or company, but never publicly towards any individual.
If you're in charge of a major open source project, you can tell your staff that 'Joe from Montana's code is crap and we basically should ignore is pull requests' ... but you wouldn't say that to Joe himself.