Alice and Bob are programmers who maintain code that was written aeons ago by the legends of old, Arthur and Merlin. Alice owns Arthur’s code and Bob owns Merlin’s code. While Alice and Bob consult each other for hard programming problems, they don’t otherwise interact or compete. One day, Bob is exploring a chunk of Merlin’s code that he hasn’t seen before—he needs to change it to sort something case-insensitively. He asks Alice for help, and she remarks, “Ew, Merlin used qsort() there. That doesn’t provide any complexity guarantees.” Bob says, “Merlin knew what he was doing—I don’t care about the sorting algorithm, I just need to change the comparison.” Alice looks a few things up and returns, dropping the science: “Here’s the C Standard—look, no complexity guarantee. Here’s our library’s source code—look, it’s a bog-standard quicksort. Here’s Wikipedia—quicksort has worst-case quadratic performance. And here’s a worst-case input—feed it to Merlin’s program and watch it take forever, case-sensitive or not. Here’s the shiny new C++ Standard—std::sort() provides a better complexity guarantee. Do you want me to recompile Merlin’s code with it, so you can see for yourself how it eliminates the pathological performance?”
Bob thinks about this (or more likely, staggers underneath the relentless assault), and says, “Oh, you’re right. qsort() really is bad news here.”
Who has received a gift and should give thanks in return?
Alice has indeed received a gift from Bob—Bob chose to be rational and concede when presented with a proper argument, instead of choosing to be an asshole. This isn’t trivial—name any political debate and it would be substantially improved if all of its participants chose not to be assholes—but it isn’t exactly world-shattering generosity either. Bob just did what he should have done anyways. “Thank you for updating” would be an LW-jargony way of saying “thank you for not being an asshole”, which isn’t an especially polite thing to say.
On the other hand, Bob has received a gift from Alice—Alice went out of her way to improve Bob’s understanding of the world. This came at some cost to Alice (time, at least) with little immediate concrete benefit to her. It has immediate concrete benefits for Bob—in this case, he gets to fix a lurking problem now instead of mysteriously suffering from it later—and potentially longer-lasting benefits, depending on whether he gets a chance to use this knowledge in the future.
I propose that this is a good way to end the exchange:
Bob: “Thanks! This would have been an enormous headache for me later.”
Alice: “You’re welcome, and thanks for listening.”
“Thanks for listening” strikes me as about right: they’re taking an effort to seriously consider what you have to say, which is worth thanking regardless of whether they eventually agree with you. Thanking them for coming to a particular conclusion seems like it could disincentivize honest truth-seeking.
(Do make a point of thanking people if they listen to you, consider your ideas seriously, and eventually decide that they still disagree.)
This only works in the case where Alice went to considerable effort to provide a well-organized argument, as in your example. I’m not sure what to do in casual conversation.
(Edit: it seems that std::sort was allowed to have O(n^2) worst case complexity up until the current draft standard.) If Alice thinks it’s a good idea, I’d prefer her to make her own patch changing qsort to std::sort, separate from Bob’s patch for case insensitive comparisons.
Imagine this scenario:
Alice and Bob are programmers who maintain code that was written aeons ago by the legends of old, Arthur and Merlin. Alice owns Arthur’s code and Bob owns Merlin’s code. While Alice and Bob consult each other for hard programming problems, they don’t otherwise interact or compete. One day, Bob is exploring a chunk of Merlin’s code that he hasn’t seen before—he needs to change it to sort something case-insensitively. He asks Alice for help, and she remarks, “Ew, Merlin used qsort() there. That doesn’t provide any complexity guarantees.” Bob says, “Merlin knew what he was doing—I don’t care about the sorting algorithm, I just need to change the comparison.” Alice looks a few things up and returns, dropping the science: “Here’s the C Standard—look, no complexity guarantee. Here’s our library’s source code—look, it’s a bog-standard quicksort. Here’s Wikipedia—quicksort has worst-case quadratic performance. And here’s a worst-case input—feed it to Merlin’s program and watch it take forever, case-sensitive or not. Here’s the shiny new C++ Standard—std::sort() provides a better complexity guarantee. Do you want me to recompile Merlin’s code with it, so you can see for yourself how it eliminates the pathological performance?”
Bob thinks about this (or more likely, staggers underneath the relentless assault), and says, “Oh, you’re right. qsort() really is bad news here.”
Who has received a gift and should give thanks in return?
Alice has indeed received a gift from Bob—Bob chose to be rational and concede when presented with a proper argument, instead of choosing to be an asshole. This isn’t trivial—name any political debate and it would be substantially improved if all of its participants chose not to be assholes—but it isn’t exactly world-shattering generosity either. Bob just did what he should have done anyways. “Thank you for updating” would be an LW-jargony way of saying “thank you for not being an asshole”, which isn’t an especially polite thing to say.
On the other hand, Bob has received a gift from Alice—Alice went out of her way to improve Bob’s understanding of the world. This came at some cost to Alice (time, at least) with little immediate concrete benefit to her. It has immediate concrete benefits for Bob—in this case, he gets to fix a lurking problem now instead of mysteriously suffering from it later—and potentially longer-lasting benefits, depending on whether he gets a chance to use this knowledge in the future.
I propose that this is a good way to end the exchange:
Bob: “Thanks! This would have been an enormous headache for me later.” Alice: “You’re welcome, and thanks for listening.”
I think this really does get right to the heart of it. Thanking for updating does sound particularly conceited in retrospect.
Thank you for updating about thanking people for updating.
“Thanks for listening” strikes me as about right: they’re taking an effort to seriously consider what you have to say, which is worth thanking regardless of whether they eventually agree with you. Thanking them for coming to a particular conclusion seems like it could disincentivize honest truth-seeking.
(Do make a point of thanking people if they listen to you, consider your ideas seriously, and eventually decide that they still disagree.)
This only works in the case where Alice went to considerable effort to provide a well-organized argument, as in your example. I’m not sure what to do in casual conversation.
Being rational doesn’t entail (publically) conceding to proper arguments or not being an asshole.
It does in many (probably most) practical contexts.
(Edit: it seems that std::sort was allowed to have O(n^2) worst case complexity up until the current draft standard.) If Alice thinks it’s a good idea, I’d prefer her to make her own patch changing qsort to std::sort, separate from Bob’s patch for case insensitive comparisons.
Python version: :p