16

I recently had my first really bad experience on Stack Overflow. It started right after I filed a question on Passing a table expression to a table-parameterized function (regarding SQL Server). The question is since edited a bit, but not substantially.

One user spent about an hour on the question and we both got increasingly frustrated in the process. His answer got longer and longer and he remarked a number of things, some of them helpful in some regard, but he never explicitly answered my question, which was: How to pass a table expression to a table-parameterized function.

The guy got more and more irritated and finally asked me to unaccept the answer so he could delete it. I complied after which he deleted it.

I then posted an answer myself posting the gist of what I took away, namely that it's not possible to call table-parameterized function on arbitrary table expressions in SQL Server. This triggered two things: The guy I had a problem with got really angry and another person voted to delete the answer - eventually the answer got and is now deleted.

I myself eventually posted two undiplomatic comments in total at the end of it all, to each of the individuals, one of which is still on the deleted answer. I'm venturing to guess two explanations for what happened here:

Problem questions vs. specific questions

On how to asked a good question the help center uses the word problem quite a lot. It seems to imply that a question represents a problem, a good answer for which would be anything that helps the asker.

There's another kind of question though, and that's where you really just ask a specific question. For example, this one has 661 upvotes as of now and doesn't represent any problem. In fact, the asker, Jon Skeet, didn't have any: He just wanted to provide a good question answer pair to improve the content of this site. (EDIT: A better example is probably this question I posted myself. The answer will be that it's not there, even though no-one posted it yet.)

While I understand that problem questions are in practice often asked and certainly shouldn't be discouraged, I don't see why they should be encouraged at the expense of specific questions. Clearly for someone searching Stack Overflow the latter is more useful: If a user clicks on a question titled Passing a table expression to a table-parameterized function it would be better if the answer contains only the answer to that specific question first and foremost, and not an essay about how to avoid doing that.

I understand that more information can never be a bad thing (if ordered by relevance), but I don't agree that it would be more valuable than the answer to the actual, specific question, and I certainly don't agree that any actual answer to the specific question should get deleted just because the essay on how to avoid to ask it to begin with is missing.

The technology-ego-link

It's a thing that most people in the industry understand, but few ever articulate that experts identify with their technology. I have certainly seen this in myself and over the years I have come to explain a lot of what people do with how their ego is linked into this.

Let's say someone comes along and asks how to do a non-local jump across stack frames in C#. He know it's possible in C. Then people ask him why he wants to do this. Maybe they do this because they are altruists with a genuine motivation to help him, but when people dance around an answer and even get angry after I spell it out myself, I'm cynical enough to believe that often enough they feel that their technology somehow has to compete with C and the actual, correct answer (that is, "sorry, you can't") feels like a defeat. If so, such people will feel an urge to make the question look invalid or stupid in order to deflect from such perceived weakness.

It's difficult to tell these things apart, because often a programmer may indeed try something stupid - maybe jumping across stack frames has no business in his end-user application.

It's also possible, however, that the asker is just curious, doesn't really have a concrete problem at all and just wants to know. It's also possible that his curiosity was triggered by an actual problem, but now he wants to know regardless of what the solution to his problem will be in the end.

I feel very strongly that this is a perfectly legitimate way of asking questions. In fact my whole competence is based on this approach of wanting to actually understand what is and isn't possible rather than just letting other people suggest a path and then walking it.

I feel that I asked a legitimate question, provided a legitimate answer myself (albeit maybe not an excellent one, and I'm not sure if it's correct - but that's not the reason why it was closed) - and still got a lot of heat for it, as well as three close votes on the question and my answer deleted.

Since this is, as I said in the beginning, the first bad experience I ever had on Stack Overflow in the two years I been here, I wanted to put this story out for discussion, and I welcome any feedback.

Finally, some further notes about the edit history of my question. None of the edits changed the question, in particular the non-trivial part of the function's definition was marked with "-- The definition is not really important to this question!" from the start and changing that definition was one part of the changes. The other was replacing a generic placeholder literal "some-expression" (to make the question more clear) with an actual expression in response to another request by the first answerer.

  • 13
    I'm going to wait to digest most of this before commenting on most of this, but using a 5 year old question (asked when times were very very different) as the basis for why you think non-problem questions are good is not a good comparison. Rules have changed, and some older questions are preserved for historical value. – psubsee2003 Jan 18 '14 at 18:37
  • 3
    I only skimmed the question, but I noticed that you had radically changed what you asked, which may have led to others deleting their answers. I'll look at it a bit deeper in detail later. – Makoto Jan 18 '14 at 18:43
  • 5
    I don't have the rep to see all the context, and I only read the first five paragraphs of this post, but it sounds like you accepted an answer and then debated it with the answerer ad nauseam via comments. That does sound annoying. If I were you, I simply wouldn't have accepted an answer I didn't agree with rather than arguing about it. And if I were he, I would have started ignoring you after a couple of exchanges. – A. Webb Jan 18 '14 at 18:47
  • 4
    @John The Skeet "question" you linked to was a Community Wiki from inception. It is not to be taken as an example of how to ask a question for help. It was provided by Skeet as a resource to the community. – A. Webb Jan 18 '14 at 18:56
  • 2
    @John asked today, it might survive, but would never get 600+ upvotes. Part of the voting is based on who the asker is and part is the time when asked. Is it a useful question? Absolutely, but not all useful questions have a home on SO (same reason we don't accept tool recommendation questions - they can be useful but they just aren't welcome for various reasons). That being said, I was more just pointing it out. I see no problem asking a good hypothetical question as long as there is a legitimate "problem". – psubsee2003 Jan 18 '14 at 18:57
  • 20
    Your "ego" bit seems completely off to me. When people ask "Why are you trying to do that?" for that sort of question, it's because the languages involved use different idioms - what's important isn't what the idiom does in the original language, it's what bigger purpose was being served. Without that information, we can't help provide the appropriate idiom for the same bigger problem in the other language. – Jon Skeet Jan 18 '14 at 18:57
  • 8
    @John: I believe it happens occasionally, but the vast majority of the time I see the "what are you trying to achieve?" question asked, it's in order to help. – Jon Skeet Jan 18 '14 at 19:03
  • 6
    I personally see nothing wrong with the original question on SO, and actually have an answer for it. Working on getting it taken off hold. – rossipedia Jan 18 '14 at 19:30
  • 4
    I think this raises an interesting question though. When a user defaces his question by removing the contents it is usually reversed if the original content was a good question. Should the same happen for answers? The answer in question seems to be very detailed and thus a good answer. – Jeroen Vannevel Jan 18 '14 at 19:35
  • 4
    Very related: meta.stackexchange.com/questions/8891/… – Shog9 Jan 18 '14 at 19:50
  • 8
    Having been witness to the interaction, this started OK and deteriorated as the OP shifted requirements and continually pushed back. This went from a Q&A site to a customer service demand and, for all the things SO is, it's not getsatisfaction.com. – swasheck Jan 18 '14 at 21:22
  • 7
    A couple of things: (1) Be very careful about presuming who down-votes your post. These things are anonymous for a reason, and stating that you know or think you know who it was serves no purpose. (2) I asked you to delete my answer so I could "get out" of the conversation. I don't know how you could presume that I "got really angry" after you posted your answer, which happened after I deleted my answer, and after I stopped interacting, period. (3) Better? – Aaron Bertrand Jan 18 '14 at 21:28
  • 4
    @Aaron I think one of the reasons that they thought you got mad is that you basically self-vandalized your answer to "I've explained it, you don't get it, I'm frustrated." (Kind of bad paraphrasing, but still.) This is the rev I'm talking about. – hichris123 Jan 18 '14 at 22:04
  • 3
    @John: about your (deleted) answer. As it was phrased, I would expect many people to vote for its deletion as "not an answer". It may appear to be an answer ("No, you can't do that") but it's only based on hear-say from someone else and not on your knowledge, experience or other references. – ypercubeᵀᴹ Jan 19 '14 at 17:47
  • 3
    And again, even if I had down-voted, so what? Let's pretend I did down-vote (among, now, 5 total down-voters). When did I lie? Whether I down-voted or not, it is still absolutely non-constructive to accuse me of doing so. You'll notice I edited your question to remove it because it absolutely pointless conjecture and it has nothing at all to do with your beef. Now, can you please leave me alone so I can leave this conversation too, without getting pinged by more nonsense about whether voting to close is worse than down-voting, or why I should care that that's your opinion? – Aaron Bertrand Jan 25 '14 at 19:53
19

In your dissertation on "Problem questions vs. specific questions" you are missing one very key point. Specific questions are problem questions. You have a question on how to perform a specific task (and if it is even possible). That is a "problem", so let's throw that entire argument out the window. You had a question and asked an on-topic question, end of story.

And I don't see anything in particular wrong with your specific question, either. I not an SQL guy, but seems to be a legitimate question and your examples seem to fit well with the question. I think your decision to edit it from generic examples to a more specific one was also a good decision. Probably not necessary to actually answer the question, but makes it easier to understand what you are asking for a novice who finds your question and is interested in the answers.

As for the issue with the answer/answerer and the deleted answers (including your own). I think you are trying to read too much into it. Without 10K on SO, I have zero context, so I am basing this solely on your description of events, so if something might have any observational bias, not my fault for misrepresenting the facts.

First for your answer. Based on the context of your replacement answer provided by Martin Smith:

According to @ABC, with whom I had a contorted exchange, this isn't possible. Table-to-table expressions cannot be factored out in functions in SQL Server. If anyone thinks this is wrong, please provide another answer.

This is absolutely not an answer and deserved to be deleted, which it was. It does not appear to even have been deleted by the individual you had the conversation with, but actually appears to have been in response to a flag from another user and deleted by a moderator.

I think the core of it is you ended up with an hour long discussion on an answer with a specific user and you pissed him off or annoyed him enough that he wanted to be rid of the question, so deleted his answer. In the end, if the answer is "No it is not possible", then poking and prodding the user to provide more info is probably not going to amount to much more other than annoying the user. A long continuous discussion on questions and answers is generally not well received by most users and you should avoid doing it. You are usually best off waiting for another answer that might have a different thought.

If you have new questions that come from answers to your own questions, that can't be answered by a quick follow up comment, you are usually best researching the new problem and then asking a new question.

  • I did credit the guy in my answer, along with saying that I had a "contorted exchange" with him. Maybe it was the word "contorted" (even though I didn't blame any one of us), but I think I would have evoked less ire if I didn't credit him. – John Jan 18 '14 at 19:46
  • @John ok, I took that part out, but added an alternative. Ultimately, you pissed off someone and they had a problem with you. Not much else to say without those users jumping into the discussion here. – psubsee2003 Jan 18 '14 at 19:53
  • 7
    The answer was actually deleted by two votes. A trusted user and a moderator. I presume it was flagged a Not an Answer. The entire content of the deleted answer was According to @ABC, with whom I had a contorted exchange, this isn't possible. Table-to-table expressions cannot be factored out in functions in SQL Server. If anyone thinks this is wrong, please provide another answer. – Martin Smith Jan 18 '14 at 20:34
  • @MartinSmith thanks for the info. I have updated the answer to better reflect what happened. – psubsee2003 Jan 18 '14 at 22:06
13

Let me explain why I was frustrated.

The original question was (paraphrased):

I have this function. <code> I'm struggling to call it. I tried this syntax (<code> and <pseudo-code>), but SQL Server "didn't like it." Is this possible? If so, what is the syntax for it?

My answer - which you up-voted and accepted - attempted to explain the various things that were wrong with your function, as well as pointing out better ways to accomplish what I thought you were trying to accomplish (and what I still think you are trying to accomplish, and I'd be extremely surprised if you don't end up using something very much or exactly like something in my answer). You argued with me for about an hour about whether SQL Server is capable of doing what you want to do (which, looking back, I failed to comprehend.) At some point in that period you updated the question to show what you were actually trying to do - pass a query by reference. Which is not possible, and which I immediately told you so, once I realized - by virtue of you having finally included real code in your question - that's what you were trying to do. I promptly got "well, why didn't you just say that?" After an hour of going back and forth trying to figure out what you were trying to get, and discovering that all you wanted was a yes or no answer, I was absolutely frustrated - and you would have been too. As pointed out before, one of the only ways you can get out of a conversation here is to delete the post being discussed, so that's what I did, because I felt that nothing further could be accomplished going any more rounds with you about whether my answer actually answered your question.

Generally, people don't come to Stack Overflow for yes/no answers, and most of those that do see their answers swiftly closed (since a yes/no answer is arguably not very useful for future readers). Was this more acceptable at one time? Sure. But it's not anymore, as several people here have already told you. Most people come to Stack Overflow to get a solution. And in good faith that's what I thought I offered. If I knew you only wanted to know if it was possible (and had actually included enough code in the question to know immediately that it was not), I would have left a comment instead of bothering to write a more elaborate answer aimed at guiding you to a solution.

In the future, I strongly recommend that if you only want a yes/no answer, and aren't going to find any other commentary useful, you state so explicitly up front. And don't include things like <some expression> because that makes it even less clear what you're even asking about. In fact I recommend you go back and edit your question so that it only asks whether or not you can pass a query by reference to a function in SQL Server. That's a one-sentence question to which a yes/no answer would be much more appropriate than the current form of the question - which seems to be begging for alternative solutions, not just confirmation one way or the other.

  • +1 for being constructive. It wasn't a yes/no question but a no or yes and if yes, how question. The answer is trivial only in the no case. Questions of this sort should be rather typical. - I don't want to make it a one-liner because I've seen the ire those produce. (No effort!) - As for "pass a query by reference": That might be clearer to you, but I find this phrase to be nonsensical. If you said pass the table by reference or value, that would still be a weird way of putting it, but it would evoke the right kind of idea. That's why I used the term table expression in the subject. – John Jan 19 '14 at 18:04
  • @John no, that's the opposite way to think about it. You wanted to pass the query semantics (the query) into the function, not the results of the query (the table). – Aaron Bertrand Jan 19 '14 at 18:09
  • Since a query is always an abstraction and doesn't actually contain the results it can deliver, copying a query can't be much different from copying a reference to a query. If you had a struct in C# or a class with value semantics in C++ that represents a query in some potential database framework, copying that value type isn't going to copy a table unless the designer of that library had a very strange attitude. And that's about the only criteria I would know to go by to judge if the phrasing you propose makes sense in this context: SQL itself doesn't use terms such as by reference. – John Jan 19 '14 at 18:16
  • @John shrug I don't know what to tell you buddy. That the phrase I chose to use doesn't make sense to you is no more my fault than the fact that I misinterpreted the intention of your question. I'm telling you what it sounded like you were trying to do in my words. I don't really care if that's not how you would describe it - pick another phrase then. Something you didn't do originally, which is why I had to come up with my own words in the first place. I started in VB, not C++ or C#, so describing it the way I did makes absolute sense to me (and probably anyone else familiar with VB). – Aaron Bertrand Jan 19 '14 at 18:20
  • "I don't really care if that's not how you would describe it - pick another phrase then." And there we go again. Why would I have to comply with your demands this time? I'm perfectly in my rights to leave the question phrased as it is, understood by some other guy who posted the answer I since accepted. I will leave this conversation now. – John Jan 19 '14 at 18:23
  • 5
    @John you don't have to do anything, and you don't have to use the phrase I suggested. Again, it is just a suggestion. My point stands that your question seems to be asking for solutions not asking for a yes/no answer. Get it yet? – Aaron Bertrand Jan 19 '14 at 18:24
  • Yes, I get it. You keep trying to frame yourself as the big, helpful guy who didn't needlessly attack me and got offensive, but simply makes constructive suggestions that silly me refuses to hear. Everyone is free to look at stackoverflow.com/revisions/21172198/6 to see a bit of rudeness that came at the point where I was still perfectly polite to see why you shouldn't succeed in doing that. Most of your snide remarks you've since deleted. - Someone else understood the question, so maybe it's just you? How about you just answer questions you understand? That's how I go about it. – John Jan 20 '14 at 12:24
  • 1
    @John I didn't delete those comments, I suspect a moderator did. Was I rude? Absolutely! You frustrated the crap out of me, especially when - after putting significant effort into an answer - you said "why didn't you just say no?" Also, there is a pretty big difference between not understanding a question and mistaking what a question means because it is ambiguous or misleading. I'm clearly not the only one who expects - in your case specifically, and on SO in general - that a question like that is seeking solutions or workarounds, not a one-word answer. – Aaron Bertrand Jan 20 '14 at 12:34
  • I believe you and apologize for claiming that you deleted your comments yourself. – John Jan 20 '14 at 12:42
9

'That's not possible" is a completely legitimate answer to a sufficiently specific question. If a person asks a question of fact ("Does Java have a native complex number data type?"), it is completely reasonable to politely answer no, without encrusting that 'no' with a load of verbiage about libraries, or classes, or Kronecker/Brouwer rants that there are no such things as complex numbers. The idea that answers must somehow guess what problem the OP 'really' means to solve and offer an alternative is unreasonable.

If the question is phrased to request solutions to an actual functional problem and only mention some specific yes-or-no question in passing, then 'no' is indeed unresponsive. But when the question is a straight-up yes-or-no question, with no text asking for 'in the event of 'no', please offer alternative solutions to actual problem Y', then the answer if, no, is no.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .