How to teach Stack Overflow more efficiently?

As evidenced by the numerous poorly asked questions by students on Stack Overflow, it is clear that many students have difficulty understanding how to ask questions there.

Even as teachers, we often seem to have difficulty asking questions on Stack Overflow and other Stack Exchange sites.

There have been flawed attempts with teachers assigning "ask a question and up vote another student's answer" which conflict the "vote on good material, not the user" (along with often asking really awful questions that get down voted and deleted). Those questions tend to invoke the ire of the Stack Overflow employees and diamond mods and leave everyone involved with a sour taste in their mouth.

As students get out into the industry, they may find that having a good understanding of how to search and ask questions on Stack Overflow to be a valuable tool. So, how do we teach how to use Stack Overflow?

Neglecting teaching how to use Stack Overflow in today's world is as bad as not teaching a student how to use a debugger and relying on the industry to teach the basics of software engineering and the tools available and expected to be used with a modicum of proficiency.

The lack of ability to teach Stack Overflow is also symptomatic of an inability to ask questions generally. Really, we need to teach students to ask the right questions, on Stack Overflow and elsewhere. How can I teach students to ask good questions, on and off Stack Overflow?

• While this is an interesting question, it doesn't seem to be about teaching. Fixing the question asking flow for new users has been the topic of many discussions on meta stack overflow, and that's where questions about stack overflow belong. – thesecretmaster Aug 26 '17 at 12:22
• @thesecretmaster Seems to be about teaching to me. This would not be on-topic on Meta Stack Overflow, because it's not about Stack Overflow policies as such, more about how a teacher can introduce the usage of a certain resource (Stack Overflow) in order to help students learn. It would seem clearly on-topic if the question was "How to more efficiently teach using Wikipedia/a book/insert other resource?", so I feel it's also on-topic if about Stack Overflow. – Aurora0001 Aug 26 '17 at 12:29
• Interesting. As a student I've never been taught how to use SO or any other community, for that matter. But I think this question is really interesting in the broader sense of "How to more efficiently teach students how to ask good questions?" which is a quite wider ability. Also considering that SO is not about computer science but only about programming. – Andrea Lazzarotto Aug 26 '17 at 19:50
• Be aware that some CS academic settings don't put any focus on specific tools (debugger, stack overflow, visual studio, etc). Those are too subject to change over time. Perhaps consider what your course is about, and if something like this should be taught. I would only imagine this being appropriate if it were a VERY general CS class, and even then the subject should be about asking technical questions, certainly not using SO. – Clay07g Aug 26 '17 at 21:14
• Please don't just teach them how to use SO effectively - teach them in general about the smart way of asking questions and how to write the perfect question. This art is applicable to any other platform as well. – Bergi Aug 27 '17 at 13:27

I don't think the core issue is that some students are bad at using Stack Overflow -- I view that more as a symptom of a deeper root problem. When somebody doesn't seem to be able to productively ask questions on Stack Overflow, I think that one or more of the following core issues are at play:

1. They don't really understand what it means to self-learn and independently research. After all, suddenly switching to independent work can be jarring after being hand-held through learning for the past N years.

2. They're not efficient communicators. Perhaps they care only about coding but not writing so ignored some of their teachers? Perhaps they were taught only to write essays or short answers where the main goal is to meet some word limit?

3. They're not familiar with online etiquette and norms. In particular, when you ask for help in person, it's often ok to ask small questions or ask for general help when stuck. However, that kind of thing is often considered disrespectful, not just on Stack Overflow but many other technical forums -- you're expected to "front-load" your question so you don't waste people's time.

4. They're unwilling or too impatient to read. After all, Stack Overflow's help center defines exactly what's ok or not. (A perhaps more charitable interpretation is that not all students have fully tuned their ability to tell what must be carefully read vs what can be ignored.)

5. They're ineffective debuggers and so can't figure out a way to distill their issue into a specific question, even if they wanted to.

6. They don't know how to gracefully accept criticism and feedback when they inevitably do make a misstep.

So, given all this, I think trying to directly teach students to use Stack Overflow is probably a waste of time. There are deeper issues you need to tackle first. I would instead recommend doing some mixture of the below:

1. Incorporate more independent work into your curriculum (partly to make them less reliant on getting help from teachers and partly so they're more likely to run into questions worth asking).
2. Explicitly make good technical writing one of the goals of your class. Assign lab reports or writeups and grade students based on how effectively they've balanced completeness, concision, and clarity. (Perhaps this can be coordinated across different departments? Science classes often require lab reports, English/writing classes are a thing...). You could also tie this in with academia: make them write research papers.
3. Have your own discussion board where you answer questions. This way, students get some practice writing questions in a friendlier and more tolerant environment -- if somebody asks a poor question, you can prompt them for details to make the question a better one. As time progresses, get more strict: flat-out refuse to answer duplicate questions and the like.
4. Teach students a variety of debugging strategies. Show them how to use a debugger (and walk through several examples). Explain how to do printf debugging in a principled way. Teach them binary debugging. When they ask for help, teach them problem-solving strategies instead of directly helping them with their problem (where applicable). Teach them how to pin down and verify preconditions/postconditions/invariants. Teach them how to write (good) tests.
5. Make your students used to receiving feedback. Don't just grade their code based on correctness or whatever: grade on style, conduct code reviews... That said, your students are probably already used to being critiqued after spending N years in school, so perhaps there's nothing extra that needs to be done here...

(Unfortunately, I don't really know how you can rewire people so they'll actually read things. As I understand it, that's an unsolved problem in the general case.)

I realize these answers are sort of a cop-out -- you were asking how to teach people to effectively use Stack Overflow, and my answer was basically "don't use Stack Overflow". But in the long term, I do think it'll be for the best. The hope is that once they've graduated, they'll have learned the meta-skills needed to effectively and professionally communicate not just on Stack Overflow, but in other technical forums or at their workplace.

• They're not familiar with online etiquette and norms. -- Or they're saddled with bad habits from participating in other online forums. – Robert Harvey Aug 26 '17 at 18:24
• Adding to issue #5 (recommendation #4) - How to debug small programs is absolutely essential. If a student (or anyone) can't explain precisely what part isn't working, then they're not ready to ask on SO. – alexanderbird Aug 26 '17 at 23:02
• The link to BInary debugging really uses some annoying ad practices, popping up random screens while you're reading the text – Ferrybig Aug 27 '17 at 8:59
• @Ferrybig -- oh, does it? (I use adblock so can't really tell). If you (or anybody else) can find an alternate link, I'm happy to replace it. – Michael0x2a Aug 27 '17 at 15:26

How to teach students, how to ask for help.

I think the question is the same as “How do I teach students, how to ask for help?”.

I would get them to practice in class, with pen and paper. Some exercises could include:

Teacher collects some good questions from SO, that are relevant to what pupils have been learning, and prints them out, without answers.

Judge questions

Teacher collects some good and bad questions from SO.

Students have go group into good and bad. Students have to explain what is wrong. etc.

Create questions

Students are given a task that they can not do, and have to produce a question so that they can learn how to complete the task.

Optionally the class can be split into 2 each half learns a different thing, then get a task that only the other half can do.

Tips for writing questions

Be clear, proof read (if you can not be bothered to read it, then how can you expect any one else to).

Remember context. People can not read minds over the internet. The person reading your question is probably not in your class. They have no idea what it is that you are trying to do.

• Include what it is that you are trying to achieve.
• Include how you are trying to achieve it.
• Show what you tried: The exact text, not what you think the typed.
• Show what went wrong: The error message, or incorrect output.

use copy and paste (or select, paste) for the last two.

• If the problem is big, then cut it down to size. But this is important, re-run the cut down code, and post this code, and its outputs. Often you will find the answer your self when doing this.

Unfortunately I need to question the very premise of your post.

Consider the following scenario (suggests Socrates). Suppose that a teacher is asking a student questions. Suppose further that the student has access to a perfect Oracle. Suppose that the Oracle will correctly answer any question to which the answer is known.

Suppose for each question asked of the student, the student consults the Oracle. Since in most situations a teacher is unlikely to ask a question for which he or she doesn't already know the answer, the Oracle itself knows and gives that correct answer to the student. The student then transmits the answer back to the teacher.

What has been gained by anybody?

The teacher learned nothing new. The student has been nothing but a courier between the Oracle and the teacher. The student needs to learn nothing in this transaction and even if he/she tries to memorize everything all they wind up with is a disjoint set of "facts" rather than any skill.

Tasks are posed to students not to get answers or to create programs, but to elicit a change in the mental state of the student. We try to prepare students to answer questions to which no one knows the answer and to create programs that have never before been done. We do this by posing tasks that are in fact known to have answers/solutions but those answers and solutions are not known to the student. We want the student to treat the problem as if it is a really hard problem so that they will work through the difficulties - increasing their mental abilities through practice.

Suppose you spend a year or two never using your left arm in any way. Never even lift your hand or flex your muscles. What will happen? Of course, the muscles will atrophy. The same is true of your brain. If you don't use it you will find that it has turned to mush.

The answers you get on Stack Overflow (SO) are the answers of experts. They are like an Oracle. If someone knows how to do it, you may well find the answer on SO. But if you haven't worked on the problem yourself you are just a scribe or a courier of information.

You will never be able to solve hard problems unless you solve problems that seem hard to you. You will never be able to advance the art if you haven't practiced on things that require hard work.

I agree that SO has its uses, but anything that makes it seem like a panacea is problematic. It is useful to experts who need to produce something external to themselves and need to get past the hard bits efficiently. It can be harmful to students who need to produce a change in their own brains, which can only come from working through the hard bits. Efficiency is not a major goal of education. Efficiency will come, but it comes only from practice.

I don't believe that looking something up on wikipedia is the same as asking SO. Wikipedia probably has the answers you want (as does your textbook) but you have to work to figure out the details. It will give you background from which you can probably tweak an answer, rather than getting an answer directly.

A discussion group can work together to figure out answers to some questions. If the members are all novices this is not the same as consulting an Oracle and you learn different skills in any case.

More valuable than SO is asking your teacher to help get you over the hard bits. He or she can evaluate what it is you really need and either answer the question or send you off on a quest. So again, not the same as an Oracle.

A personal note (no, I'm not Socrates, though it seems like we were contemporaries). I became an expert in using Calculus by graphing literally hundreds of rational functions (quotients of polynomials) by using the information from the first two or three derivatives of the function. I did this completely manually, on paper. Today there is a web site that would do it for me and graphing calculators that will do it. I could do thousands of rational functions (instead of merely hundreds) but I would learn nothing at all. I would be just an observer. I would not have been able to predict the shape of such a function as I once could do pretty effectively. I might be an expert user of a particular web site, but that wouldn't have much effect on my brain.

• It is an interesting question: when is it "good enough" to be an expert user of technology, and when is it necessary to know the underlying details? "But you already know what I am going to tell you..." - The Oracle – user737 Aug 30 '17 at 17:30

A very good question and a fair one as pretty much all of us face it when suggesting students to use StackOverflow in our class and they "bug" it out of curiosity just to post their assignments (often verbatim).

Because of restriction of gaining some points before getting a certain privilege and down-voting, students can't abuse it too much, but here are few suggestions which come to my mind for effective use of StackOverFlow in class.

1. Students must go through the Overview (earning "Informed" badge) to get some understanding of SO's mechanism.
2. Give them an assignment on something like: "Which were Top Posts in this week and why?", "Which questions were down-voted and how will you differentiate them with the rest?" or something like "Take Posts by new users (say less than 2 month old members) and check which ones had positively scored posts and what do you think made those posts stand out from other new users?" - I think these assignments will inspire them to understand what is a "Good Post" on StackExchange - I started using StackOverflow when I entered in Pedagogical career and even it took me a few months to understand how to ask a good question. I think we can use our own examples as well.
3. Show your Research - It should be the slogan of our class if we want a student to take full advantage of StackOverflow(Exchange).
4. Be Specific - Never ask two/multiple questions in same post. I remember my first post on StackOverflow was a pretty good question but I ruined it by asking a totally irrelevant question in the same post (and realized my mistake a few down-votes later)
5. IMPORTANT - Everything on StackOverflow(Exchange) is licensed under Creative Commons License and once you post a thing, even if you delete/edit it's content, its never deleted absolutely (look at revisions history of any post) - so think a lot before posting any sensitive thing.

I am new to the StackExchange network, and by far, the biggest roadblock has been the reputation problem. The entire StackExchange network is designed to keep out those who are not patient.

When I am teaching my students to use StackOverflow, boring or not, I tell them to have patience. I tell them that until they get 100 points, they may not actually be able to use stack to the fullest. So, first up is patience.

Second, I ask them to take advantage of the network bonus. My primary use of the StackExchange network is StackOverflow but I was getting bored of the restrictions on me. Then, I found this network 'CS Educators' and found that I might perform better here. Only a few days later, I crossed 200 points here, and that immediately bumped me up from a basic user on every network, especially the main StackOverflow. Now, I have all the privileges.

So, I ask my students to participate in any of the stack network sites. Some students are good, they can participate in puzzle sites. Other are good with tv, then, I ask them to participate there. I tell them to overcome the initial 'stack gate' like this.

After this, its the same guidelines as doing a proper Bing/Google search. search specific words, use the right tags, and be as specific as you can get or don't post the question (and avoid getting down voted).

• I'd be interested in hearing which formal new-user restrictions you find most constraining. Or if not a formal restriction what cultural artifact. Some thought was put into the question of "How can we protect the network without preventing new users from using it?" and your feeling seems to be that the resulting rules are failing to meet that goal. – dmckee --- ex-moderator kitten Aug 28 '17 at 0:13
• The part about upvoting and the commenting was severely restricting. I remember a year ago when I joined stack, I left because of that only to return 2 weeks ago. Even then, I was frustrated with the restrictions. Especially on stack, where earning reputation is insanely difficult, these two things can be demotivating. – Jay Aug 28 '17 at 3:20
• @dmckee some of the other SE sites are aggressive bordering on a full-on attack. Everything is ripped to pieces, denied, confronted, disavowed, downvoted, vote-to-close literally in minutes. Forget that. CSE was so soft in comparison that I thought it was some sort of new way to abuse and trip me up. I flamed someone my first day here who suggested that I self-answer my question, because that is uniformly seen as the sign of the Antichrist on other SE sites. – user737 Aug 30 '17 at 17:35
• @nocomprende Hm. Self-answers (well good self-answers to good questions—we don't care for astroturfing) are actively encouraged on Physics (my most used site) and they used to be on Stack Overflow when I was active there (admittedly it's been while). I suspect that there is some culture shock at work here. Those of us who joined Stack Overflow in the beta had both guidance from the podcasts and time to adjust to a culture still forming. – dmckee --- ex-moderator kitten Aug 30 '17 at 17:41
• Thanks for pointing out the network bonus. I'd known about it but hadn't thought of mentioning it to my students. FWIW, it's pretty easy to gain reputation in English Language Learners. – Ellen Spertus Sep 14 '17 at 21:52

When a student comes to me with a question that neither of us can answer, I ask her to post it on Stack Overflow. (An example would be if she's trying to do something in Android that I've never done and that isn't well documented.) Some students are timid about posting online, so they need a little hand-holding and encouragement, which I provide by pointing them to resources on how to write a good question, giving them feedback on their question before they post it, making any needed edits after they post it (letting them know what I've changed), and voting it up, which I can legitimately do, because I've vetted the question. Usually, they get helpful answers. If it's a particularly tricky problem that's holding them up, I offer a bounty. These experiences help build their confidence and skills.

• I have seen your questions on StackOverflow and they really look well-researched ones! Can you please expand a bit on it's "secrets" here? I would love to hear that part. – Failed Scientist Sep 10 '17 at 1:15

I'm not an SO user - but I've got a bit of experience elsewhere in the network.

The thing I've found that that the folk who get the most out of it are not the ones who ask questions - its the ones who post good answers.

Rather than encouraging folk to use it as a helpdesk it should be an analytical tool. Pick a question (with no answer?) - Use it as an example point out the problems in the user's approach to the question, and work through a solution.

The act of asking a question itself should be a tool for teaching and analysing a problem - This is my favourite question - and it solves a class of issues and tries to talk about a problem solving process. While I failed, it still is useful for others as is.

So "Ok, here's the problem, lets work it through, lets document, lets work through it" should come before a question.

So, the problem here is that "asking on SO" isn't a skill - asking the right questions, the right way at the right time is.

• I guess, asking the right questions is the right approach for life in general, but I don't know if that is what is being discussed here. Your answer is neither here nor there and it does not even touch the topic at hand :( – Jay Aug 27 '17 at 6:39
• Well, to "teach" stack overflow isn't a useful goal. To teach people to ask better questions and their steps is. That it so happens that it makes for better questions and the occasional rubber duckery is the point I'm trying to make here. Even if, god forbid, SE goes away, these are skills that carry over anywhere – Journeyman Geek Aug 27 '17 at 6:41
• I agree with your point. we are both on the same page there. Its just not relevant to this question. If there is another question (or you could create one) that says 'How to teach asking the right questions', then your answer would be right there in the sweet spot. – Jay Aug 27 '17 at 6:43
• But the way to use SE efficiently is to ask the right questions, and use answers to sharpen one's skills in solving problems. That's how I've benefited from it over time – Journeyman Geek Aug 27 '17 at 6:44
• Ha..ha...okay okay, live and let live is my policy :P your thoughts might help others because you know, opinions and views is what we want in this community. I may not agree with the answer being relevant, but I respect your contribution. – Jay Aug 27 '17 at 6:46