{"id":21365,"date":"2013-10-15T21:08:54","date_gmt":"2013-10-16T02:08:54","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21365"},"modified":"2013-10-18T05:56:51","modified_gmt":"2013-10-18T10:56:51","slug":"how-to-forum","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=21365","title":{"rendered":"How to Forum"},"content":{"rendered":"<p>This began as a Twitter conversation, but the limitations of the medium (and I&#8217;m not just talking about the 140 character limit) have forced me to expand on the idea here. <\/p>\n<p>It&#8217;s common knowledge that most people who use the internet to communicate are actually horrible at communication. (Which means that most people in general are bad at communication, which explains a lot about history.) What is deeply disturbing to me is that some of these bad-communicators then write guides on how to communicate well. <\/p>\n<p>It begins with this bit of snark from me:<\/p>\n<blockquote class=\"twitter-tweet\">\n<p>If someone asks a, &quot;How do I X?&quot; forum question and you answer, &quot;Why would you want to X?&quot; then YOU SHOULD NOT BE ANSWERING FORUM QUESTIONS.<\/p>\n<p>&mdash; Shamus Young (@shamusyoung) <a href=\"https:\/\/twitter.com\/shamusyoung\/statuses\/390221987521392641\">October 15, 2013<\/a><\/p><\/blockquote>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<p>Here we&#8217;re talking specifically about your typical tech forum threads, where people show up with tricky database \/ hardware \/ software \/ networking problems in the hopes that someone else can help them. <\/p>\n<p>Like most expressions of frustration over trivial but common annoyances, that one got re-tweeted a few times. And then someone sent me a link to this post: <a href=\"http:\/\/weblogs.asp.net\/alex_papadimoulis\/archive\/2005\/05\/25\/408925.aspx\" title=\"Pounding A Nail: Old Shoe or Glass Bottle?\">Pounding a Nail: Old Shoe or Glass Bottle?<\/a> Let&#8217;s talk about that post.<\/p>\n<p><!--more-->Let me quote a bit of it:<\/p>\n<blockquote>\n<blockquote><p>&#8220;A client has asked me to build and install a custom shelving system. I&#8217;m at the point where I need to nail it, but I&#8217;m not sure what to use to pound the nails in. Should I use an old shoe or a glass bottle?&#8221;<\/p><\/blockquote>\n<p>How would you answer the question?<\/p>\n<blockquote><p>a) It depends. If you are looking to pound a small (20lb) nail in something like drywall, you&#8217;ll find it much easier to use the bottle, especially if the shoe is dirty. However, if you are trying to drive a heavy nail into some wood, go with the shoe: the bottle with shatter in your hand.<\/p>\n<p>b) There is something fundamentally wrong with the way you are building; you need to use real tools. Yes, it may involve a trip to the toolbox (or even to the hardware store), but doing it the right way is going to save a lot of time, money, and aggravation through the lifecycle of your product. You need to stop building things for money until you understand the basics of construction.\n<\/p><\/blockquote>\n<p>I would hope that just about any sane person would choose something close to (b). Sure, it may seem a bit harsh, but think about it from the customer prospective: how would you feel if your carpenter asked such a question?\n<\/p><\/blockquote>\n<p>This article sets up a false dichotomy where the only two options are:<\/p>\n<p><strong>A: Give bad advice.<\/strong><\/p>\n<p>or<\/p>\n<p><strong>B: Be a dick.<\/strong><\/p>\n<p>You do not need to choose between these two. They are both wrong. Saying &#8220;use a hammer&#8221; would be less confrontational, more helpful, and more succinct. <\/p>\n<blockquote><p>but think about it from the customer prospective: how would you feel if your carpenter asked such a question?<\/p><\/blockquote>\n<p>This is another thing wrong with the contrived example offered. Most of the people asking these technology questions are not &#8220;carpenters&#8221;. They are not professionals. Or at least, they don&#8217;t identify themselves as such. Maybe it&#8217;s a really smart kid who is, in fact, way ahead of where YOU were at that age, but they&#8217;ve bit off more than they can chew.  Maybe it&#8217;s someone working on a hobby project. Maybe they work at a horrible company where they aren&#8217;t given the time, the tools, or the training to solve things properly. And since we&#8217;re making up contrived examples to make a point: Maybe the poster is a doe-eyed, emaciated college sophomore, struggling in her studies because the chemotherapy is keeping her out of class but her dream is to finish her degree before she drops dead of cancer. <\/p>\n<p>You don&#8217;t know. It doesn&#8217;t matter. They didn&#8217;t come here to be judged by you. This person is asking a question because they need help. <\/p>\n<p>This is your chance to teach someone. This is your chance to save another human being from a lot of aggravation. It&#8217;s a wonderful thing, and it pains me to see people use it as an opening to kick sand in someone&#8217;s face.<\/p>\n<blockquote><p>\nI&#8217;ve been participating in Usenet\/forums\/lists for a decade now, asking programming questions and helping out others who have questions of their own. If some one asks a question that demonstrates the complete absurdity of their design, I&#8217;ll generally reply with my (quite candid) opinion on their design. To give you an idea what I&#8217;m talking about, here&#8217;s something I remember seeing a while back (from memory).<\/p>\n<blockquote><p>Subject: Aggregates Help<br \/>\nI have a table that stores test results for milling machines. Each test consists of N-runs conducted by a measurer going M-trials each. I have this information represented in a varchar column in the following format: &#8220;44:1,5,4;23:2,4,9;14:1,4,3&#8221;.  When the column is read into the class, it is converted into a jagged array: ( (44,(1,5,4)), (23,(2,4,9)), (14,(1,4,3)) ) of runs (3 of them) and measurers(Ids of 44,23,14) and trials (1,5,4 and 2,4,9 and 1,4,3).<\/p>\n<p>One of the reports I have is a deficiency report, which predicts which machines may fail. To run this, I have a report class that loads up the appropriate tests and processes the information. However, this is taking longer and longer to run. I&#8217;m thinking that running it in a stored procedure will be quicker.<\/p>\n<p>I can figure out how to get an &#8220;array&#8221; in SQL with a table variable, but how do I make a jagged array? Any ideas?\n<\/p><\/blockquote>\n<p>Some of the folks on in the list took it as a fun challenge, going back and forth with how deficiencies are calculated, and providing some incredibly brilliant ways of solving this problem.<\/p>\n<p>Not I, though. My response was something to the effect of &#8230;<\/p>\n<blockquote><p>This is quite possibly the worst way you could store this data in a database. No, seriously. They had better ways of doing this over thirty years ago. You have created a horrible problem that is only starting to rear its ugly head. It will only continue to get horribly worse, costing your company more and more money to maintain.<\/p>\n<p>You need to drop everything your doing right now and take a trip to your bookstore to get a database book. I recommend INTRODUCTION TO DATABASE SYSTEMS by DATE, but at this point anything should do. For the sake of everyone who will maintain your future code, don&#8217;t touch a database until you understand how big of a mess you&#8217;ve created.\n<\/p><\/blockquote>\n<p>How do you think you would have responded to that post? Would you have taken the challenge to think about how to solve the problem or just take the opportunity to school the poster?<\/p>\n<p>If you say the former, then you probably think I&#8217;m a grumpy curmudgeon (more likely, less family-friendly words though). My appeal to you is to think back to the carpenter. How is this any different? How fair is this to person paying him to develop software, or, more importantly, the poor sap that will have to come in and not only understand the mess, but maintain it. That poor sap could be you one day!<\/p>\n<p>If you say you&#8217;d go with the latter, harsher reply, then I ask, why aren&#8217;t you out there participating in the newsgroups\/forums\/lists? We need more people like you out there: there are too many of the people who tell people exactly how to apply the duct tape without giving the poster a firm scolding. <\/p><\/blockquote>\n<p><em>See? We are morally bound to be jerks on the internet!<\/em><\/p>\n<p>Except, that&#8217;s not how people work. In fact, this is the opposite of how you communicate with people, particularly strangers. <\/p>\n<p>Remember that when you answer a question on the internet, you&#8217;re not just answering for the person who asked. You&#8217;re also answering for the hundreds that will come here later. They are going to enter some fragments of their problem into a search engine and find themselves reading your post, and if you answer the question by telling the original poster how stupid they are, then you will have wasted your time, the OP&#8217;s time, and the time of everyone who ever comes after. <strong>If possible, you should at least answer the question.<\/strong> Even if the answer is &#8220;This question doesn&#8217;t make sense or doesn&#8217;t matter because of reason X.&#8221; Just be specific.<\/p>\n<p>Either offer them help or keep your mouth shut, because the next hundred people don&#8217;t want to have to scroll past your alpha male bullshit to find a response from somebody who has something useful to say.<\/p>\n<p>EVERYONE thinks they are right. Even people who are very, very wrong. In any thread of this type you&#8217;ll see 4 people that misunderstand the question, 3 that give bad advice, a couple more that offer unhelpful or impractical advice (switch to Linux \/ SQL \/ Python \/ Emacs \/ Firefox!) and if you&#8217;re lucky, maybe there will be one or two good answers in there. If everyone is obligated to &#8220;scold&#8221; the idiots, then ALL of those people will answer in accusatory, condescending, insulting ways, because they all think they&#8217;re the one with the right answer. <\/p>\n<p>The other problem with answering like this is that there&#8217;s usually a pretty high correlation between hostility and noise. The more forceful your reply, the more likely the OP is going to write you off as a crank.<\/p>\n<p><table   class=\"\" cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/starship_troopers.jpg' class='insetimage'   alt='starship_troopers.jpg' title='starship_troopers.jpg'\/><\/td><\/tr><\/table><\/p>\n<p><strong>Me: Man, I hate Starship Troops. What a shallow, stupid movie.<\/strong><\/p>\n<p><em>Alan: You&#8217;re just too dumb to get the message of the movie. ST was full of symbolism, but you were too busy shoving popcorn in your fat face to get it. Stick to Adam Sandler movies.<\/em><\/p>\n<p><strong>Obviously this is a butthurt fanboy.  I insulted something Alan likes, and so he&#8217;s trying to hurt me back with words, like a child screaming &#8220;I HATE YOU&#8221; at his parents. He has nothing to offer the conversation and can be safely ignored or banned.<\/strong><\/p>\n<p><em>Bob: It sounds like you missed the message of the movie. It&#8217;s not quite the action flick you took it for, and it&#8217;s actually quite interesting if you don&#8217;t take the world at face value the way the main characters do.<\/em><\/p>\n<p><strong>Hey, here is a calm and intelligent person with a different opinion. Perhaps I was wrong? I don&#8217;t know. But it&#8217;s worth considering.<\/strong><\/p>\n<p>People post to forums with this the idea that they will be able to sway others by overpowering them with their white-hot indignation.  But there are a dozen other people trying to do the same thing. It&#8217;s all noise that starts arguments without teaching anyone anything.<\/p>\n<p>You might argue that, &#8220;People shouldn&#8217;t take it personally when you correct them.&#8221;  I agree. A corollary is that you shouldn&#8217;t make it personal when you&#8217;re correcting them. Consider the answer to the database question:<\/p>\n<blockquote><p>This is quite possibly the worst way you could store this data in a database. No, seriously. They had better ways of doing this over thirty years ago. You have created a horrible problem that is only starting to rear its ugly head. It will only continue to get horribly worse, costing your company more and more money to maintain.<\/p>\n<p>You need to drop everything your doing right now and take a trip to your bookstore to get a database book. I recommend INTRODUCTION TO DATABASE SYSTEMS by DATE, but at this point anything should do. For the sake of everyone who will maintain your future code, don&#8217;t touch a database until you understand how big of a mess you&#8217;ve created.<\/p><\/blockquote>\n<p>Here is the same answer, with the pointless hostility removed:<\/p>\n<blockquote><p>This is quite possibly the worst way you could store this data in a database. It will only continue to get horribly worse, costing your company more and more money to maintain.<\/p>\n<p>Get a database book. I recommend INTRODUCTION TO DATABASE SYSTEMS by DATE, but at this point anything should do. <\/p><\/blockquote>\n<p>It&#8217;s still an obnoxious reply because it doesn&#8217;t answer the original question AND it doesn&#8217;t tell them what specifically they are doing wrong. But at least the extraneous hostility is removed. It&#8217;s a bad answer, but at least it&#8217;s more to the point. <\/p>\n<p>&#8220;Go to the book store and buy a book&#8221; is a useless answer, because it doesn&#8217;t even tell the other person where to start.  NOBODY will listen to this advice. Nobody. If you give answers like this you aren&#8217;t trying to teach others, you&#8217;re just venting at people. <\/p>\n<p>The answer I would give:<\/p>\n<blockquote><p>The design you&#8217;re using is deeply flawed.  Storing numeric data in a string is going to be horribly inefficient and the performance problems you&#8217;re having are going to get drastically worse as the size of the data increases. While other posters might have some tricks to speed things up, it&#8217;s only delaying the inevitable re-write you&#8217;ll have to do, and the longer you wait the harder it will be.<\/p>\n<p>I suggest reading <a href=\"http:\/\/www.amazon.com\/Introduction-Database-Systems-8th-Edition\/dp\/0321197844\" title=\"An Introduction to Database Systems (8th Edition) [Paperback]\">this book<\/a>.<\/p><\/blockquote>\n<p>Notice how I gave the same &#8220;RTFM&#8221; answer as the other person, but I threw the OP a bone and told them why* their design was wrong. I kept the focus on the problem instead of the person. <\/p>\n<p><small>* I don&#8217;t actually know enough about databases to answer this question properly, so I made up my answer. <\/small><\/p>\n<p>Remember that when you criticize someone on a forum, you are a stranger ridiculing them in a public place. You&#8217;re doing this without the use of body language and facial expressions to mediate the exchange, and the other person is likely already very frustrated because of the problem they&#8217;re dealing with.  This is pretty much a worst-case scenario for human interaction, and the last thing you need is to add insults to the mix. The common response will be for people to get defensive or lash out.  By giving a harsh answer you are delaying the point at which the other person realizes just how horribly wrong they are. You might argue that people ought not be this way. I agree. But as engineers we know how rarely &#8220;ought&#8221; and &#8220;do&#8221; intersect. <\/p>\n<p>By giving a harsh answer you&#8217;re no better than the guy driving a nail with a shoe. <em>You don&#8217;t know why this nail isn&#8217;t doing what you want it to, so your solution is to HIT HARDER until the nail straightens up and does what it should.<\/em><\/p>\n<p>Be calm and polite when answering questions.  The other person may indeed be an idiot, but you can&#8217;t make them smarter by telling them how stupid they are. By answering in a reasonable tone you increase the odds that they will heed your advice, which is good for you, for them, and for everyone who reads the exchange later. <\/p>\n<p><table   class=\"\" cellpadding='0' cellspacing='0' border='0' align='center'><tr><td><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/would_you_like_to_know_more.jpg' class='insetimage'   alt='would_you_like_to_know_more.jpg' title='would_you_like_to_know_more.jpg'\/><\/td><\/tr><\/table><\/p>\n<p>EDIT:<\/p>\n<p>Below, Drew leaves <a href=\"?p=21365&#038;cpage=1#comment-353634\">a comment<\/a> so good I&#8217;m going to quote the entire thing here:<\/p>\n<blockquote><p>Another issue is that an internet forum is an asynchronous conversation and needs to be treated as such. If you&#39;re talking directly with someone and they ask you a question, a simple response which attempts to solicit further information may be the best response. &#8220;What are you trying to do?&#8221; &#8220;Is there a reason that X,Y,Z?&#8221; These are completely reasonable responses in a face-to-face (or telephone) conversation, because the person asking the original question can fill you in quickly and allow you to respond, and still get their answer in a reasonably short time frame. In fact, it can allow you to eliminate potential answers and zero in on the right one, so it can get them their correct answer more quickly.<\/p>\n<p>On an internet forum, however, responses may come hours or days later. Given that, it can make sense to try to provide as much useful information in any given communique as possible in order to help the person asking the question quickly get their answer. If your initial response isn&#39;t completely sufficient, or misses the target a bit, that&#39;s ok, because you&#39;ve helped the person asking the question to have a frame of reference for their response.<\/p>\n<p>Essentially, efficient synchronous conversation can be measured on how much time the conversation takes, while efficient asynchronous conversation should be measured on how many responses are involved from each side, so you should communicate differently in order to best help the questioner.<\/p>\n<p>And if your goal isn&#39;t to help the person, there&#39;s not really a good reason to respond to them at all.<\/p><\/blockquote>\n<p>One final note is that the OP might not be as stupid as they seem. Domain experience has a huge impact on what we perceive to be &#8220;reasonable&#8221;. Someone working on credit card transactions is going to have a very specific set of ideas about security that are unknown or irrelevant to a programmer making a videogame.  And the videogame developer is likely going to have incredibly specific performance concerns that would seem unreasonable to someone working on a web app, and the web developer will have maintainability issues that seem needless to someone working on embedded systems, and the embedded systems person will be used to rigorous error handling and fault prevention techniques that seem like a waste of time to the database programmer.<\/p>\n<p>Maybe the person asking the &#8220;shoe or glass bottle&#8221; question is indeed as clueless as they seem, but maybe they&#8217;re operating in a domain where you have no experience and frame of reference. Don&#8217;t start out assuming they&#8217;re a moron until they prove otherwise. Just answer the question as you can and ask questions as you need to. Everyone will be better off. Even you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This began as a Twitter conversation, but the limitations of the medium (and I&#8217;m not just talking about the 140 character limit) have forced me to expand on the idea here. It&#8217;s common knowledge that most people who use the internet to communicate are actually horrible at communication. (Which means that most people in general [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-21365","post","type-post","status-publish","format-standard","hentry","category-rants"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/21365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=21365"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/21365\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=21365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}