Passion, Protectiveness, Anger and Anguish
Do you remember when you were young and were about to do something potentially dangerous and your parents shouted at you, really quite loudly?
I can think of a few occasions when that happened to me. I can remember it taking me a long time to understand that anger, to understand why even though what I was about to do was foolish rather than malicious the volume and the tone seemed like that of utter rage.
I'm not going to spell the answer out just yet though, because first I want to talk about a few events going back over a number of years, that I think are representative of a class of events that are very much worth talking about.
Presented in an order chosen for dialectical aesthetics rather than by any specific criterion -
I hate to channel John Stuart Mill, but if Perl 5 stays like that for long, it won't be a language suitable for novices to write new programs. It'll be merely a great language to maintain code written in the late '90s not yet replaced with something with slightly saner defaults.
-- chromatic, in Fear.pm
What I believe chromatic was trying to achieve here was to open up perl5 core development and thereby accelerate progress on both the VM and the language.
What actually happened was that Rafael Garcia Suarez lost all motivation and resigned as pumpking, obviating six months of behind the scenes consensus building towards making those sorts of changes in a non-disruptive fashion and forcing us to start down that path again from scratch a year later.
With Ricardo's table, I'd rather see smart matching completely removed. ... I also realize it's basically too late for any changes. My fundamental goal is to not confuse people. ... It might be time for this to go the way of pseudohashes.
-- brian d foy, in Rethinking smart matching
I don't think these changes are in the interests of most users, and unless ordinary users pay attention, they'll get whatever p5p decides to give them.
-- brian d foy, in Ricardo is pushing for smart match changes
What I believe brian was trying to achieve here was to ensure that we didn't make another set of possibly hasty changes to the smart matching system that would introduce too much additional confusion to justify the gains.
What actually happened was that discussion of smartmatch rationalisation seems to have been largely dropped, leaving us continuing to ship a system that in edge cases can behave horribly unexpectedly - to the point where many of us who spend a substantial amount of time mentoring newbies via mailing lists and IRC simply suggest that people avoid using it for any but trivial cases.
THERE IS NOTHING WRONG WITH A SCRIPT WHOSE main CONTAINS BAREWORD HANDLES, LET ALONE WITH TWO ARGUMENT OPEN. If you don't like it, THEN CHANGE PERL TO FORBID YOUR MORAL OUTRAGES.
-- tchrist, in msgid 17228.1341429865@chthon on perl5-porters
What I believe Tom was trying to achieve here was to defend the accuracy of the perl documentation and to ensure that by the time any major patch was applied it was coherent, correct, and of value to people working with codebases of all dialects of perl from systems scripting through to large scale applications development.
What actually happened was that the original author of the patch, who'd been utterly excited at YAPC::NA that year to start taking tribal knowledge from the IRC and associated perl communities and bring it to the wider world of perl users had his motivation completely crushed and hasn't tried to contribute again since - and several other potential perldoc contributors have taken one look at that thread and decided they don't want to try in the first place.
This is not right; it is not even wrong ... Unless extra_testing is the default, there will be a fork. Unless the filesystem is no longer consulted, there will be a fork. This is non-negotiable.
-- Reverend Chip Salzenberg, in RT #79504
What I believe Chip was trying to achieve here was to make it clear that he wasn't merely accusing my code of being buggy, but of being fundamentally irrational from the start and as such requiring a radical rethink.
What actually happened is that every time I start thinking about it I realise I'm about to put significant effort into pleasing somebody who preferred to throw ultimatums at me than try and win the technical argument with actual data, and I go and work on something else instead.
Please DO NOT upload this to CPAN. If you have, please delete it from CPAN again. ... The big problem is that if you're going to be importing methods in order to make things a bit cleaner you have to be able to un-import them to avoid leaving the class namespace full of crap ... I'm all in favour of people writing their own extensions and submitting them to CPAN, but I'd rather they were commented on, cleaned up etc. first
-- me, in assorted dbix-class list posts in April 2006
What I remember wanting to achieve here was to ensure that we didn't end up with sugar with sharp edges that sat on CPAN and was briefly used and then abandoned by users when it bit them hard, and instead to iterate until we had something that could be considered a blessed standard.
What actually happened was that Nilson walked away from working on the project at all and it wasn't until frew started work on something very similar that I was able to go back and find my "gotcha list" and go through it against frew's code, with the result being the quite excellent DBIx::Class::Candy ... three years later than we could have had it if I'd managed to express myself better the first time around.
I don't think we can really call any of those outcomes even a qualified success.
Yet if you look at these events, it's obvious that all of the quoted protagonists are passionate about perl, and responded the way they did out of protectiveness of the future of perl and of its ecosystem and community.
Unfortunately, we all made an omnishambolic clusterfail of trying to get across that that why we were responding the way we were.
Which brings me back to being shouted at by my parents because I was about to do something dangerous. They weren't trying to upset me, they were trying to pull me up short, forcefully and quickly, before I carried on down the path to doom. They were trying to protect me, and their own anticipated anguish at the harm I could come to if they didn't do so successfully was what put the emotional force behind the words that made them angry as well as forceful.
Now this does seem to've worked out ok - it took me until six months ago to break my first bone, quite spectactularly and in a fashion where blame really can't be laid at my parents' feet - but every single time they had to shout like that I ended up bursting into tears shortly afterwards.
There's no time criticality of the same sort to community discussions. Sure, somebody might have proposed a patch that effectively adds
step_out_in_front_of($bus);
to the codebase, but there's no immediate danger of that actually happening unless the patch gets applied.
Which means we have time to stop ourselves and ask "is this genuinely anger or simply anticipated anguish?" If the latter, expressing the possible downsides and why those would upset you so much if you came to pass is likely to produce a much more useful response - because it cuts straight to the real point, and because hopefully it allows room for the person you're responding to to sympathise with your viewpoint rather than immediately setting up an adversarial situation that can easily go horribly wrong impressively quickly.
(Parenthetically: What to do if you are genuinely angry, other than "wait a day or so to see if you calm down and then decide how to respond" is a completely different matter and one I'm sure many would say I don't seem to have a particularly good answer for based on my behaviour in such situations ... but that's neither here nor there to the current article)
The other thing that we really do need to remember is that the person on the other side of the situation is almost certainly highly passionate about perl as well - if they weren't, why would they have bothered getting as far as making the proposal that you're about to shoot down?
Given that, shouldn't we assume that what they're trying to write is
cross($road);
and what we should be trying to explain to them is that they should write
unless (oncoming_buses($road)) {
cross($road);
}
Even in the case where it turns out they absolutely believe that they're immune to buses and that everybody else is too, that explanation allows somebody who doesn't share that belief to finish off the patch whereas "NOOOO! BUSES! STOPRIGHTNOWOHGODSWHATTHEFLYINGFORNICATIONAREYOUDOING" really doesn't have quite the same chances of moving the conversation forwards.
Which also means that when somebody -does- yell that it's worth stopping and considering whether it's straight up anger or assholery, or whether it's a case of protectiveness gone non-constructive. It won't make the original comment any less non-constructive, but there's generally more to be salvaged from protectiveness than from a straight out slap and the loss of accurate criticisms is still a loss even if they're not delivered very well.
Finally, I want to point out this is hard stuff, because the passion -> protectiveness -> anticipated anguish -> apparent anger sequence is wired into us at quite a base level. Presumably the people who didn't have this particular adaptation let their children step out in front of wildebeest or something and thereby didn't propagate their genes very well.
Really, this is hard stuff. Nilson commented on the ::Candy release announcement that we'd've had this years sooner if it wasn't for my attitude, and my first thought was "but I gave you a list of problems and then you disappeared instead of fixing them!" Well, sure. I did. But the way I delivered that list of problems made it stop being fun for him. The key reason ::Candy made it to release with them all fixed is that I delivered the same list to frew calmly and matter of factly. I might have been accurate on all counts the first time round, but I was still in the wrong. If you ever read this: Nilson, I'm sorry.
However, this being hard stuff doesn't mean it isn't worth the effort. Misplaced or misexplained protectiveness is I suspect one of the single biggest reason why we can't have (even more) nice things.
So here's to trying to screw it up less often.
-- mst, out.