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.

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.

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.

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.