<h1>Set up a class forum for your students</h1>
<p>It's a pretty standard thing for online courses that there is some form of online many-to-many communication platform that students are required to participate in as part of their grade. I've had to do it on two or three occasions, and while I hate it, it's what takes the place of &quot;class participation&quot; in the brick-and-mortar classroom setting.</p>
<p>I suggest setting one up (they're pretty cheap and easy to manage, and you can wipe it between years pretty much at the click of a button; heck you might even want to look into <a href="https://stackoverflow.blog/2017/07/11/introducing-channels-private-qa-team/">Stack Overflow Channels</a>). You don't <em>have</em> to make participation mandatory, but you can tell your students &quot;if you need help with a problem, post on the class forums. Browse other student's questions and help them out.&quot; If it isn't mandatory, you can offer a few points of extra credit.</p>
<p>The number of times I've written up a problem and gotten ready to post it to Stack Overflow (or other online community) I've realized &quot;Dang, what an idiot I am&quot; and solved my own problem.</p>
<p>It's a variant of Rubber Duck Debugging, which <a href="https://cseducators.stackexchange.com/a/4012/1244">Ryan Nutt has already answered with</a>, but in the case that simply trying to explain the problem it isn't solved, its there for <em>anyone</em> to answer.  Just don't forget to look through the board yourself and answer a few questions. ;)</p>

CC BY-SA 3.0
2017-12-21T21:50:23.043Z
Actually, setting up a class forum in which you _don't_ wipe it between years can be even more valuable as the common questions will already be there for the current class to peruse.
Buffy
CC BY-SA 3.0
2017-12-21T21:51:52.337Z
@Buffy Certainly plausible (that is, afterall, how SO works). I just know that online colleges give classes blank forums to start with.
Draco18s no longer trusts SE
CC BY-SA 3.0
2017-12-21T21:54:27.097Z
I usually had a class wiki for each course. It lived from year to year. It was also helpful in letting me plan the next iteration as I could find typical problems the students were having. I could edit out things I didn't want to give a hint about prior to the start of the term.
Buffy
CC BY-SA 3.0
2017-12-21T21:57:12.917Z
@Buffy Neat! I'm not an educator myself, I just pop in here from time to time because I see a question that I can have some input on--usually things that I've either learned on my own *or* have struggled with in the past (e.g. something that was poorly taught to me). e.g. [this answer](https://cseducators.stackexchange.com/a/970/1244) from earlier this year.
Draco18s no longer trusts SE
CC BY-SA 4.0
2019-01-27T18:01:50.480Z
A forum is great for an online course, but doesn't curtail spurious questions when the instructor is sitting 5 feet away much of the time.
Scott Rowe
CC BY-SA 3.0
2017-12-21T21:32:57.267Z
2017-12-21T21:32:57.267Z
2020-06-18T08:36:57.023Z
Draco18s no longer trusts SE
<p>Randomly be "too busy with something" for a few minutes, but say you'll get back to them.  Then set a timer, and then check with them some number of minutes later.  Reward them (somehow, depending on age group, etc.), publicly if possible, if they figured out all or part of the solution themselves.</p>

<p>This allows you to provide help (for issues where you really are the expert "oracle") while also giving random intermittent reinforcement (the best kind) for them figuring out the problem themselves.  (Note: this works for co-workers as well as students.)</p>

CC BY-SA 3.0
2017-12-13T02:26:11.827Z
I worry that some of them, at least, will not use the time wisely and just wait for you. My _strong_ opinion is that you need to be more responsive. You won't be building better habits if they just fidget spin for five minutes.
Buffy
CC BY-SA 4.0
2019-01-27T18:18:21.310Z
There are two general cases: 1) they could figure it out if they tried 2) there is no way in the world that they will figure it out because it is some arcane, particular thing that they don't really need to learn forever but it is blocking them. It would be good if they could distinguish these and act appropriately.
Scott Rowe
CC BY-SA 3.0
2017-12-05T22:07:46.960Z
2017-12-05T22:07:46.960Z
hotpaw2
<p>I have been considering the issue of educating programmers for years, and discussed it with others. My personal experience of learning programming was that over 4 decades, I learned along with the changes in computer science and technology. So when I need to learn something new (in order to teach it) like C# and ADO.Net and the massive complexity of Visual Studio, I have a lot of context for each thing I learn. It all makes some sense to me, sooner or later.</p>

<p>But taking adults who have never programmed at all, and plopping them in front of Visual Studio, then teaching them C# via Console mode programs, then Object Oriented principles, then Windows programming, then ADO.Net, with databases design and SQL woven in, in one year... I think that probably this is a very steep road for anyone. It took me 40 years to get here (although I did other things in the meantime), and I wonder if we have grown our 'stack' of technologies so high that most ladders no longer reach the entrance? A colleague says that in the near future, only the "whiz kids" will have any hope of becoming programmers. I reply that AI will make it all obsolete anyhow, so no worries.</p>

<p>In light of that, I face a choice when I teach: answer questions about scenarios bristling with options, techniques, procedures, practices and tools, or let the student probably waste a lot of time and get very frustrated to no good end. I usually just point to the appropriate places on their screens and explain the steps (again) hoping that with repetition, they will get it. I don't know what else to do in this situation. What worked when I was a TA of an intro programming course for non-majors 30 years ago would be useless today.</p>

CC BY-SA 3.0
2017-12-12T16:09:09.797Z
I'm not sure about your ladder analogy. You don't need to understand each black box layer in order to develop good code. Learning does take time, and experience informs better choices, but most modern programmers will never need to understand (for instance) the bitwise `xor` trick for switching case in ASCII, nor the purpose of the instruction register; such low-level considerations get abstracted away by the higher-level languages.
Ben I.
CC BY-SA 3.0
2017-12-12T17:30:30.683Z
I've used the term scaffolding sort of like you're describing the ladder. It takes breaking up the end result into what pieces your students need to know to get there. Like Ben said, and especially in an intro course, skipping levels is sometime necessary to get to the end result.
Ryan Nutt
CC BY-SA 3.0
2017-12-12T15:29:11.547Z
2017-12-12T15:29:11.547Z
user3725
<p>It's very simple but it make your students hate you. Ask them to do it on their own, using the materials you provided in class. For each question that they ask you, deduct a point. If they care about their grade, they will try to ask you as few questions as possible or will seek help from each other, both beneficial outcomes.</p>

CC BY-SA 3.0
2017-12-06T11:26:33.543Z
This will cause them to ask no questions at all.  You will lose your chance to help the students who are genuinely lost this way.
Ben I.
CC BY-SA 3.0
2017-12-06T14:24:08.933Z
And maybe if they are really united they will form a delegation to go to your boss with a complaint.
Buffy
CC BY-SA 3.0
2017-12-06T10:06:04.900Z
2017-12-13T01:44:03.663Z
2017-12-13T01:44:03.663Z
user3687
<p><a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging" rel="noreferrer">Rubber Duck Debugging</a>.</p>

<p>A few years ago we bought a bunch of cheap rubber ducks. Students with questions have two options. They can either ask their neighbor or explain to the duck what they're trying to do. If the duck didn't help, then they can ask me. </p>

<p>I've moved to a different school since then and haven't bought any ducks. I really need to buy some ducks. </p>

CC BY-SA 3.0
2017-12-05T20:14:16.370Z
I have rubber ducks, too :)  And a few of my labs are rubber-duck themed as well.  I haven't had a lot of success getting kids to actually talk to them.  They laugh about it when it is explained, but don't actually talk.  Have you solved that problem?
Ben I.
CC BY-SA 3.0
2017-12-05T20:21:59.783Z
They laughed, but once a couple of kids tried it and it worked there was buy in.
Ryan Nutt
CC BY-SA 3.0
2017-12-05T22:48:54.000Z
@BenI. Did you ever talk to the ducks yourself? =) Lead by example and all that. That said, I expect that most students who don't want to talk to the duck opted to speak with their neighbor, as the answer suggests.
jpmc26
CC BY-SA 3.0
2017-12-05T23:12:45.780Z
I don't talk to it, but I do have a stuffed Angry Bird that I toss around when I'm trying to work something out. For the ducks, I think it helps get across the idea that they are working through a problem and just banging away on the keyboard without thinking is almost never the best way to attack the problem.
Ryan Nutt
CC BY-SA 3.0
2017-12-06T16:02:44.770Z
I've been collecting ducks, but usually give them away when I learn a colleague doesn't have a duck. I only have my sumo-wrestler duck left...
kirkpatt
CC BY-SA 3.0
2017-12-06T19:17:45.337Z
For this, I prefer a nodding dog (bobble-head for the Americans).  Set the head bouncing and it will nod in understanding as you go along and encourage you to keep explaining while it keeps nodding ..... :)
Dragonel
CC BY-SA 3.0
2017-12-06T23:48:57.810Z
@paxdiablo: i.e. make sure you answer interesting non-debugging or non-basic questions?  So even more like Stack Overflow.  I would love to vote-to-close some debugging questions as "off topic: explain it to your rubber duck".
Peter Cordes
CC BY-SA 3.0
2017-12-05T20:12:26.160Z
2017-12-05T20:12:26.160Z
Ryan Nutt
<p>Students will act according to the habits they have built up. The one they have isn't terrible, but you can work to improve it. This answer won't save you much time, initially, but if you can change the habit then everyone wins. </p>

<p>When asked a question you need to find a way to get them to respond first, somehow. There are various possibilities. The classic way is mentioned elsewhere here - ask them what the tried already. Their response needs to come before yours. If they have nothing to say, just tell them to think about it until they have a failed solution they can discuss, preferably along with the reason it doesn't work, as they view it. </p>

<p>But a simpler and more devious solution is just to turn it around. When asked "How can I do wxyz?", respond as follows: "If I just asked you the same question, how would you <em>begin</em> your answer?" They don't need to say much, just the beginning. It may be enough to trigger their own knowledge, but it may also help you see their block and give them a minimal hint to continue. </p>

<p>The keys here are "you (i.e. student) first" and "minimal hint". </p>

<p>If they know that you won't save them a lot of thought and work that they can do themselves, maybe they will be more proactive about their own solutions, but the habit needs to be built. Work on that part. </p>

<hr>

<p>Let me note that the problem expressed in the question can arise in a variety of contexts, not just students working in a lab. The solution isn't really to help them learn how to debug, but rather, how to think. Especially, how to work through any problem as it occurs.</p>

CC BY-SA 3.0
2017-12-05T21:03:40.833Z
2017-12-07T15:54:14.003Z
2017-12-07T15:54:14.003Z
Buffy
<p><em>(You didn't say what ages your students are, so this answer is necessarily a little nonspecific.  There is also an article <a href="https://www.edsurge.com/news/2017-01-19-teaching-kids-to-debug-code-independently" rel="noreferrer">here</a> that you may find helpful.)</em></p>

<p>First and foremost: don't expect total victory in this regard.  Your students ask you because it is frustrating to be stuck, and it is perfectly natural to try to find the quickest path out of frustration.  </p>

<p>If you want them to take another approach, you may find it worth your time to invest some actual classroom time in teaching how to debug.  One way is to get "stuck" while coding in front of the class, and then go through the process of debugging it.  Very carefully model the behaviors, then stop, and ask the students to reflect.  </p>

<blockquote>
  <p>"Why didn't I just ask the teacher for help?  Oh, right, I <em>AM</em> the teacher.  So, why didn't I just give up?  What strategies did I actually use to uncover the bug?"</p>
</blockquote>

<p>A second approach could be to celebrate very visibly when a student debugs on their own.</p>

<blockquote>
  <p>"Hey everyone, so-and-so was just stuck, but he didn't let that stop him.  So-and-so, can you tell the rest of the class how you went about solving your problem?  What did you try?  How did you do it?</p>
</blockquote>

<p>If this happens semi-regularly, and you continually emphasize fix-up strategies, you may make some meaningful headway.</p>

<p>A third approach, which is more forceful, is to use a page (like <a href="http://stopwatch.online-timers.com/multiple-stopwatches" rel="noreferrer">this</a> or <a href="http://www.online-timers.com/multiple-timers" rel="noreferrer">this</a>) with multiple timers.  Students who have a question for you don't necessarily get you.  Instead, you simply set a timer.  (Having a second monitor display to a projector would help with this approach.)  Only if the timer reaches 5 minutes and the problem still isn't solved can they ask you for help.</p>

CC BY-SA 3.0
2017-12-06T00:10:53.327Z
This might not work work with everyone and might in fact backfire. I would hate to be "paraded" this way in front of the others just for being able to solbe my own problem (as everyone should be able to). Then again, I'm not the one asking the tutor/teacher for help on the first sign of trouble.
Polygnome
CC BY-SA 3.0
2017-12-06T03:02:59.100Z
@Polygnome I agree. One always needs to ask permission (or utilize clear intuition / knowledge of the student in question) before engaging in an activity like that.
Ben I.
CC BY-SA 3.0
2017-12-06T19:10:21.273Z
There are various ways to "celebrate" a student, even if they don't want public recognition. A quiet word in the hall way, expressing approval is usually well appreciated and long remembered.
Buffy
CC BY-SA 3.0
2017-12-05T19:41:44.203Z
2017-12-05T19:41:44.203Z
Ben I.
<p>It sounds like you don't want to deflect them when they need help but would like them to become more self-directed and learn to solve the &quot;easy&quot; stuff themselves.  One teaching technique that I have found useful for this, no matter the subject, is <em>questioning</em>.</p>
<p>It is relatively easy (once you become practised with it) and allows you to help the student as well as encourage them to think for themselves and become more self-driven over time. (Yes, there are always exceptions.) Essentially, as the term suggests, it involves asking the student to provide answers by asking useful questions, thereby teaching them how to work it out for themself.</p>
<p>How you apply it (in your own style, that is) is something you need to discover, but it can be from the simple:</p>
<blockquote>
<p>Student: What's a string?</p>
<p>You: Do you remember when we covered types like strings, integers, booleans...? (you've given them a context and the chance to make some connections)</p>
<p>Student: Aaahhh.... Oh yeah, never mind.</p>
</blockquote>
<p>Or maybe they have a mental blank, or missed that class:</p>
<blockquote>
<p>Student: Nope.</p>
<p>You: (Count to at least 5 before you say anything to give them time to think.) You know what an integer is? (Yes/no/maybe) So...?</p>
</blockquote>
<p>And if they genuinely don't know:</p>
<blockquote>
<p>You: A string is ...</p>
</blockquote>
<p>And you've covered more than they asked and (hopefully) they feel they've learnt something and not made fun of.</p>
<p>Or for structuring a complex If-Else:</p>
<blockquote>
<p>Student: How do I do ...?</p>
<p>You: Have we done one of these before? Yes? Do you have the example there? So, this is like a question, <em>if</em> something <em>then</em> something otherwise - that's <em>else</em> ... So, what's the <em>if</em> part in what you have there? And then...?</p>
</blockquote>
<p>It takes practice, and can work well. With this I've had student feedback that ranged from, &quot;I really like the way he teaches us how to figure stuff out&quot;, to, &quot;He never answers any questions.&quot; So YMMV. But by being positive and helpful you both get more out of it than by deflecting or just telling them the answer.</p>

CC BY-SA 4.0
2019-01-27T18:08:51.423Z
This should be the accepted answer. It refers to getting the students to be more self-directed.
Scott Rowe
CC BY-SA 3.0
2017-12-07T09:11:06.747Z
2017-12-07T09:11:06.747Z
2020-06-18T08:36:57.023Z
Mick
<p>Think through how you debug, and try to make it as explicit as possible. Make up a check-list. When students ask you for help, quiz them about what they did regarding the items on the check-list. "Did you look up the documentation?" "Did you write up your best guess and run it, even if you thought it would fail?" "Did you look for an example of code that does something similar?" "Did you check what the shape and contents of your variables are?" etc. Have them work through their problems with each other.</p>

<blockquote>
  <p>Other times, it amounts to structuring a complex If-Else or something that they could do, but they have difficulty with. The only 'help' I can give is to explain how it should function. </p>
</blockquote>

<p>If you try hard enough, in many situations you will be able to give them other help. Ask them to explain their thinking, what the code so far does, what happens with a sample input, etc.</p>

CC BY-SA 4.0
2019-01-27T18:11:17.680Z
When I was a TA in an intro programming course for non-majors lon ago, this is what I tended to do. For a much more complex situation, I think it would be like a game of "pin the tail on the donkey."
Scott Rowe
CC BY-SA 3.0
2017-12-07T00:21:22.987Z
2017-12-07T00:21:22.987Z
Acccumulation
<p>The best thing they can learn from you is not a memorized answer - it's the process by which you solve problems. Instead of giving them the answer, instead of telling them to go find the answer themselves, walk them through the process of solving the problem, step-by-step. It takes more of your time initially, but they'll be stronger coders over time. </p>

<p>For example, "How do I sort a list?" Of course, there are many possible solutions, but pick one consistent with their level of understanding and with the class. Then, walk them through it. "What if the list just had two elements?" "What if we repeatedly broke the long list into smaller lists?" Or something along those lines, depending on the way you approach the solution.</p>

CC BY-SA 4.0
2019-01-27T18:14:06.047Z
With constantly new material of ever greater complexity, like Console, OO, Windows Forms, then databases, then ADO, then ASP, there is no basis for general problem-solving and background knowledge. So the questions keep coming.
Scott Rowe
CC BY-SA 3.0
2017-12-06T18:13:58.900Z
2017-12-06T18:13:58.900Z
Don Branson
<p>I tell my students if they want to ask me more than one question a day, I am going to start asking them two questions before I answer them. 1) What have you tried. 2) Who else have you asked. If they cannot answer those two questions, then they are not ready to have their own question answered. It makes it harder for them to get away with using you as a crutch, and 90% of the time they try something and figure it out on their own.</p>

CC BY-SA 4.0
2019-01-27T18:04:00.107Z
Often the students deflected from asking the instructor who was 5 feet away to the student next to them who was 3 feet away. This can become a bigger problem. The issue is to develop better habits and independence, not create blocks and hoops to jump through.
Scott Rowe
CC BY-SA 3.0
2017-12-21T19:39:36.767Z
2017-12-21T19:39:36.767Z
WalkerLJ
<p>When I did customer service for an application I was developing, I found that most of the time, if I did NOT answer the phone, the user would figure out their problem and learn more than if I did answer. Some people would just call up any time the slightest thing happened, if I kept answering.</p>

<p>With students, when I am in class and they are working on coding assignments, the same thing can happen: they will ask any old question that pops in to their head because I am sitting 5 feet away (usually trying to grade assignments or prepare to lecture). Sometimes the questions are quite elementary. Other times, it amounts to structuring a complex If-Else or something that they could do, but they have difficulty with. The only 'help' I can give is to explain how it should function. They learn that way, but then I become the Oracle.</p>

<p>I do often deflect questions or look at the problem they are having to know that it is something I have taught and then say I need them to work at it a bit more, but this seems to happen a lot. If I was not there, they would be forced to work it through themselves. Is there a way to encourage the students to be more independent, because I have not found it yet.</p>

CC BY-SA 3.0
2017-12-05T17:56:47.793Z
How old are the students? What classes are you talking about? What do you mean by becoming the oracle?
Kevin Workman
CC BY-SA 3.0
2017-12-06T04:04:31.763Z
@KevinWorkman An oracle is a person (or machine) that magically answers any question you ask them/it.
Criticize SE actions means ban
CC BY-SA 3.0
2017-12-06T10:32:21.043Z
@immibis soo.. stackoverflow?
Caius Jard
CC BY-SA 3.0
2017-12-06T13:33:42.687Z
It took me a decade to realize that my teacher, who responded with pedantic questions (having me explain every little thing about my question) had the right approach. Not only does it teach you that _questioning your own assumptions_ is often the best solution, but it also incentivized the students to not bother asking questions willy nilly, as it would take time and effort to deal with the teacher's series of questions. If you're easily approachable, students will quickly involve you in the process. If there's a cost ("annoyance tax") attached, they are more likely to avoid you if possible.
Flater
CC BY-SA 3.0
2017-12-06T17:26:48.967Z
@immibis I understand what the word oracle means. I'm asking what it means to become an oracle in this environment. Is it just answering questions in general? Is it answering questions without the students really learning anything? Is it something else?
Kevin Workman
CC BY-SA 3.0
2017-12-06T19:08:00.090Z
@Flater, I don't think the point is to get them to avoid you. Rather it is to get them into the habit of seeking their own solutions, either internally or with the available materials. You won't be there for them forever. But if you make it a bit easier for them to do that than to just consult the oracle then everyone wins.
Buffy
CC BY-SA 3.0
2017-12-06T19:32:57.870Z
@CaiusJard As many questions as I've asked on stackexchange, I've probably typed even more questions half way only to discover the answer myself when having to fully articulate the problem.
Dean MacGregor
CC BY-SA 3.0
2017-12-06T20:27:42.730Z
@Buffy: Maybe I worded it too strongly. The intention isn't so much to make them want to avoid you, but rather only come to you when they have _sufficient_ reason to do so (and not e.g. ask before looking themselves)
Flater
CC BY-SA 3.0
2017-12-06T20:42:47.490Z
Point taken, but it is a skill like any other that they need to learn and practice, and that you can help them with. Being easily approachable is a _good_ thing. So foster that, but teach them to come with a harder problem and a bit of prep.
Buffy
CC BY-SA 3.0
2017-12-06T23:07:10.360Z
@DeanMacGregor SO is your cardboard analyst, nice
Caius Jard
CC BY-SA 4.0
2019-01-27T18:24:07.037Z
When I was in college, snow days were when I learned the most, because I didn't want to walk to the terminal rooms. I spent more time looking at a printout of my code.
Scott Rowe
<classroom-management><labs><active-learning>
How to stop being The Oracle
# How to stop being The Oracle

(Asked by: username_0 on 2017-12-05)

When I did customer service for an application I was developing, I found that most of the time, if I did NOT answer the phone, the user would figure out their problem and learn more than if I did answer. Some people would just call up any time the slightest thing happened, if I kept answering.

With students, when I am in class and they are working on coding assignments, the same thing can happen: they will ask any old question that pops in to their head because I am sitting 5 feet away (usually trying to grade assignments or prepare to lecture). Sometimes the questions are quite elementary. Other times, it amounts to structuring a complex If-Else or something that they could do, but they have difficulty with. The only 'help' I can give is to explain how it should function. They learn that way, but then I become the Oracle.

I do often deflect questions or look at the problem they are having to know that it is something I have taught and then say I need them to work at it a bit more, but this seems to happen a lot. If I was not there, they would be forced to work it through themselves. Is there a way to encourage the students to be more independent, because I have not found it yet.

**Tags:** classroom-management, labs, active-learning

> **Comments:**
> **username_1**: How old are the students? What classes are you talking about? What do you mean by becoming the oracle?  
> **username_2**: @KevinWorkman An oracle is a person (or machine) that magically answers any question you ask them/it.  
> **username_3**: @immibis soo.. stackoverflow?  
> **username_4**: It took me a decade to realize that my teacher, who responded with pedantic questions (having me explain every little thing about my question) had the right approach. Not only does it teach you that _questioning your own assumptions_ is often the best solution, but it also incentivized the students to not bother asking questions willy nilly, as it would take time and effort to deal with the teacher's series of questions. If you're easily approachable, students will quickly involve you in the process. If there's a cost ("annoyance tax") attached, they are more likely to avoid you if possible.  
> **username_1**: @immibis I understand what the word oracle means. I'm asking what it means to become an oracle in this environment. Is it just answering questions in general? Is it answering questions without the students really learning anything? Is it something else?  
> **username_5**: @username_4, I don't think the point is to get them to avoid you. Rather it is to get them into the habit of seeking their own solutions, either internally or with the available materials. You won't be there for them forever. But if you make it a bit easier for them to do that than to just consult the oracle then everyone wins.  
> **username_6**: @CaiusJard As many questions as I've asked on stackexchange, I've probably typed even more questions half way only to discover the answer myself when having to fully articulate the problem.  
> **username_4**: @username_5: Maybe I worded it too strongly. The intention isn't so much to make them want to avoid you, but rather only come to you when they have _sufficient_ reason to do so (and not e.g. ask before looking themselves)  
> **username_5**: Point taken, but it is a skill like any other that they need to learn and practice, and that you can help them with. Being easily approachable is a _good_ thing. So foster that, but teach them to come with a harder problem and a bit of prep.  
> **username_3**: @DeanMacGregor SO is your cardboard analyst, nice  
> **username_7**: When I was in college, snow days were when I learned the most, because I didn't want to walk to the terminal rooms. I spent more time looking at a printout of my code.  

---

## 11 answers

### Answer by username_12 on 2017-12-05. Score: 31

[Rubber Duck Debugging](https://en.wikipedia.org/wiki/Rubber_duck_debugging).

A few years ago we bought a bunch of cheap rubber ducks. Students with questions have two options. They can either ask their neighbor or explain to the duck what they're trying to do. If the duck didn't help, then they can ask me.

I've moved to a different school since then and haven't bought any ducks. I really need to buy some ducks.

> **Comments:**
> **username_11**: I have rubber ducks, too :)  And a few of my labs are rubber-duck themed as well.  I haven't had a lot of success getting kids to actually talk to them.  They laugh about it when it is explained, but don't actually talk.  Have you solved that problem?  
> **username_12**: They laughed, but once a couple of kids tried it and it worked there was buy in.  
> **username_14**: @BenI. Did you ever talk to the ducks yourself? =) Lead by example and all that. That said, I expect that most students who don't want to talk to the duck opted to speak with their neighbor, as the answer suggests.  
> **username_12**: I don't talk to it, but I do have a stuffed Angry Bird that I toss around when I'm trying to work something out. For the ducks, I think it helps get across the idea that they are working through a problem and just banging away on the keyboard without thinking is almost never the best way to attack the problem.  
> **username_15**: I've been collecting ducks, but usually give them away when I learn a colleague doesn't have a duck. I only have my sumo-wrestler duck left...  
> **username_16**: For this, I prefer a nodding dog (bobble-head for the Americans).  Set the head bouncing and it will nod in understanding as you go along and encourage you to keep explaining while it keeps nodding ..... :)  
> **username_17**: @paxdiablo: i.e. make sure you answer interesting non-debugging or non-basic questions?  So even more like Stack Overflow.  I would love to vote-to-close some debugging questions as "off topic: explain it to your rubber duck".  

---

### Answer by username_11 on 2017-12-05. Score: 8

*(You didn't say what ages your students are, so this answer is necessarily a little nonspecific. There is also an article [here](https://www.edsurge.com/news/2017-01-19-teaching-kids-to-debug-code-independently) that you may find helpful.)*

First and foremost: don't expect total victory in this regard. Your students ask you because it is frustrating to be stuck, and it is perfectly natural to try to find the quickest path out of frustration.

If you want them to take another approach, you may find it worth your time to invest some actual classroom time in teaching how to debug. One way is to get "stuck" while coding in front of the class, and then go through the process of debugging it. Very carefully model the behaviors, then stop, and ask the students to reflect.

> "Why didn't I just ask the teacher for help? Oh, right, I *AM* the teacher. So, why didn't I just give up? What strategies did I actually use to uncover the bug?"

A second approach could be to celebrate very visibly when a student debugs on their own.

> "Hey everyone, so-and-so was just stuck, but he didn't let that stop him. So-and-so, can you tell the rest of the class how you went about solving your problem? What did you try? How did you do it?

If this happens semi-regularly, and you continually emphasize fix-up strategies, you may make some meaningful headway.

A third approach, which is more forceful, is to use a page (like [this](http://stopwatch.online-timers.com/multiple-stopwatches) or [this](http://www.online-timers.com/multiple-timers)) with multiple timers. Students who have a question for you don't necessarily get you. Instead, you simply set a timer. (Having a second monitor display to a projector would help with this approach.) Only if the timer reaches 5 minutes and the problem still isn't solved can they ask you for help.

> **Comments:**
> **username_18**: This might not work work with everyone and might in fact backfire. I would hate to be "paraded" this way in front of the others just for being able to solbe my own problem (as everyone should be able to). Then again, I'm not the one asking the tutor/teacher for help on the first sign of trouble.  
> **username_11**: @username_18 I agree. One always needs to ask permission (or utilize clear intuition / knowledge of the student in question) before engaging in an activity like that.  
> **username_5**: There are various ways to "celebrate" a student, even if they don't want public recognition. A quiet word in the hall way, expressing approval is usually well appreciated and long remembered.  

---

### Answer by username_5 on 2017-12-05. Score: 5

Students will act according to the habits they have built up. The one they have isn't terrible, but you can work to improve it. This answer won't save you much time, initially, but if you can change the habit then everyone wins.

When asked a question you need to find a way to get them to respond first, somehow. There are various possibilities. The classic way is mentioned elsewhere here - ask them what the tried already. Their response needs to come before yours. If they have nothing to say, just tell them to think about it until they have a failed solution they can discuss, preferably along with the reason it doesn't work, as they view it.

But a simpler and more devious solution is just to turn it around. When asked "How can I do wxyz?", respond as follows: "If I just asked you the same question, how would you *begin* your answer?" They don't need to say much, just the beginning. It may be enough to trigger their own knowledge, but it may also help you see their block and give them a minimal hint to continue.

The keys here are "you (i.e. student) first" and "minimal hint".

If they know that you won't save them a lot of thought and work that they can do themselves, maybe they will be more proactive about their own solutions, but the habit needs to be built. Work on that part.

---

Let me note that the problem expressed in the question can arise in a variety of contexts, not just students working in a lab. The solution isn't really to help them learn how to debug, but rather, how to think. Especially, how to work through any problem as it occurs.


---

### Answer by username_19 on 2017-12-07. Score: 4

It sounds like you don't want to deflect them when they need help but would like them to become more self-directed and learn to solve the "easy" stuff themselves. One teaching technique that I have found useful for this, no matter the subject, is *questioning*.

It is relatively easy (once you become practised with it) and allows you to help the student as well as encourage them to think for themselves and become more self-driven over time. (Yes, there are always exceptions.) Essentially, as the term suggests, it involves asking the student to provide answers by asking useful questions, thereby teaching them how to work it out for themself.

How you apply it (in your own style, that is) is something you need to discover, but it can be from the simple:

> Student: What's a string?
>
> You: Do you remember when we covered types like strings, integers, booleans...? (you've given them a context and the chance to make some connections)
>
> Student: Aaahhh.... Oh yeah, never mind.

Or maybe they have a mental blank, or missed that class:

> Student: Nope.
>
> You: (Count to at least 5 before you say anything to give them time to think.) You know what an integer is? (Yes/no/maybe) So...?

And if they genuinely don't know:

> You: A string is ...

And you've covered more than they asked and (hopefully) they feel they've learnt something and not made fun of.

Or for structuring a complex If-Else:

> Student: How do I do ...?
>
> You: Have we done one of these before? Yes? Do you have the example there? So, this is like a question, *if* something *then* something otherwise - that's *else* ... So, what's the *if* part in what you have there? And then...?

It takes practice, and can work well. With this I've had student feedback that ranged from, "I really like the way he teaches us how to figure stuff out", to, "He never answers any questions." So YMMV. But by being positive and helpful you both get more out of it than by deflecting or just telling them the answer.

> **Comments:**
> **username_7**: This should be the accepted answer. It refers to getting the students to be more self-directed.  

---

### Answer by username_20 on 2017-12-07. Score: 3

Think through how you debug, and try to make it as explicit as possible. Make up a check-list. When students ask you for help, quiz them about what they did regarding the items on the check-list. "Did you look up the documentation?" "Did you write up your best guess and run it, even if you thought it would fail?" "Did you look for an example of code that does something similar?" "Did you check what the shape and contents of your variables are?" etc. Have them work through their problems with each other.

> Other times, it amounts to structuring a complex If-Else or something that they could do, but they have difficulty with. The only 'help' I can give is to explain how it should function.

If you try hard enough, in many situations you will be able to give them other help. Ask them to explain their thinking, what the code so far does, what happens with a sample input, etc.

> **Comments:**
> **username_7**: When I was a TA in an intro programming course for non-majors lon ago, this is what I tended to do. For a much more complex situation, I think it would be like a game of "pin the tail on the donkey."  

---

### Answer by username_21 on 2017-12-06. Score: 3

The best thing they can learn from you is not a memorized answer - it's the process by which you solve problems. Instead of giving them the answer, instead of telling them to go find the answer themselves, walk them through the process of solving the problem, step-by-step. It takes more of your time initially, but they'll be stronger coders over time.

For example, "How do I sort a list?" Of course, there are many possible solutions, but pick one consistent with their level of understanding and with the class. Then, walk them through it. "What if the list just had two elements?" "What if we repeatedly broke the long list into smaller lists?" Or something along those lines, depending on the way you approach the solution.

> **Comments:**
> **username_7**: With constantly new material of ever greater complexity, like Console, OO, Windows Forms, then databases, then ADO, then ASP, there is no basis for general problem-solving and background knowledge. So the questions keep coming.  

---

### Answer by username_22 on 2017-12-21. Score: 3

I tell my students if they want to ask me more than one question a day, I am going to start asking them two questions before I answer them. 1) What have you tried. 2) Who else have you asked. If they cannot answer those two questions, then they are not ready to have their own question answered. It makes it harder for them to get away with using you as a crutch, and 90% of the time they try something and figure it out on their own.

> **Comments:**
> **username_7**: Often the students deflected from asking the instructor who was 5 feet away to the student next to them who was 3 feet away. This can become a bigger problem. The issue is to develop better habits and independence, not create blocks and hoops to jump through.  

---

### Answer by username_8 on 2017-12-21. Score: 2

# Set up a class forum for your students

It's a pretty standard thing for online courses that there is some form of online many-to-many communication platform that students are required to participate in as part of their grade. I've had to do it on two or three occasions, and while I hate it, it's what takes the place of "class participation" in the brick-and-mortar classroom setting.

I suggest setting one up (they're pretty cheap and easy to manage, and you can wipe it between years pretty much at the click of a button; heck you might even want to look into [Stack Overflow Channels](https://stackoverflow.blog/2017/07/11/introducing-channels-private-qa-team/)). You don't *have* to make participation mandatory, but you can tell your students "if you need help with a problem, post on the class forums. Browse other student's questions and help them out." If it isn't mandatory, you can offer a few points of extra credit.

The number of times I've written up a problem and gotten ready to post it to Stack Overflow (or other online community) I've realized "Dang, what an idiot I am" and solved my own problem.

It's a variant of Rubber Duck Debugging, which [username_12 has already answered with](https://cseducators.stackexchange.com/a/4012/1244), but in the case that simply trying to explain the problem it isn't solved, its there for *anyone* to answer. Just don't forget to look through the board yourself and answer a few questions. ;)

> **Comments:**
> **username_5**: Actually, setting up a class forum in which you _don't_ wipe it between years can be even more valuable as the common questions will already be there for the current class to peruse.  
> **username_8**: @username_5 Certainly plausible (that is, afterall, how SO works). I just know that online colleges give classes blank forums to start with.  
> **username_5**: I usually had a class wiki for each course. It lived from year to year. It was also helpful in letting me plan the next iteration as I could find typical problems the students were having. I could edit out things I didn't want to give a hint about prior to the start of the term.  
> **username_8**: @username_5 Neat! I'm not an educator myself, I just pop in here from time to time because I see a question that I can have some input on--usually things that I've either learned on my own *or* have struggled with in the past (e.g. something that was poorly taught to me). e.g. [this answer](https://cseducators.stackexchange.com/a/970/1244) from earlier this year.  
> **username_7**: A forum is great for an online course, but doesn't curtail spurious questions when the instructor is sitting 5 feet away much of the time.  

---

### Answer by username_9 on 2017-12-05. Score: 1

Randomly be "too busy with something" for a few minutes, but say you'll get back to them. Then set a timer, and then check with them some number of minutes later. Reward them (somehow, depending on age group, etc.), publicly if possible, if they figured out all or part of the solution themselves.

This allows you to provide help (for issues where you really are the expert "oracle") while also giving random intermittent reinforcement (the best kind) for them figuring out the problem themselves. (Note: this works for co-workers as well as students.)

> **Comments:**
> **username_5**: I worry that some of them, at least, will not use the time wisely and just wait for you. My _strong_ opinion is that you need to be more responsive. You won't be building better habits if they just fidget spin for five minutes.  
> **username_7**: There are two general cases: 1) they could figure it out if they tried 2) there is no way in the world that they will figure it out because it is some arcane, particular thing that they don't really need to learn forever but it is blocking them. It would be good if they could distinguish these and act appropriately.  

---

### Answer by username_10 on 2017-12-12. Score: 0

I have been considering the issue of educating programmers for years, and discussed it with others. My personal experience of learning programming was that over 4 decades, I learned along with the changes in computer science and technology. So when I need to learn something new (in order to teach it) like C# and ADO.Net and the massive complexity of Visual Studio, I have a lot of context for each thing I learn. It all makes some sense to me, sooner or later.

But taking adults who have never programmed at all, and plopping them in front of Visual Studio, then teaching them C# via Console mode programs, then Object Oriented principles, then Windows programming, then ADO.Net, with databases design and SQL woven in, in one year... I think that probably this is a very steep road for anyone. It took me 40 years to get here (although I did other things in the meantime), and I wonder if we have grown our 'stack' of technologies so high that most ladders no longer reach the entrance? A colleague says that in the near future, only the "whiz kids" will have any hope of becoming programmers. I reply that AI will make it all obsolete anyhow, so no worries.

In light of that, I face a choice when I teach: answer questions about scenarios bristling with options, techniques, procedures, practices and tools, or let the student probably waste a lot of time and get very frustrated to no good end. I usually just point to the appropriate places on their screens and explain the steps (again) hoping that with repetition, they will get it. I don't know what else to do in this situation. What worked when I was a TA of an intro programming course for non-majors 30 years ago would be useless today.

> **Comments:**
> **username_11**: I'm not sure about your ladder analogy. You don't need to understand each black box layer in order to develop good code. Learning does take time, and experience informs better choices, but most modern programmers will never need to understand (for instance) the bitwise `xor` trick for switching case in ASCII, nor the purpose of the instruction register; such low-level considerations get abstracted away by the higher-level languages.  
> **username_12**: I've used the term scaffolding sort of like you're describing the ladder. It takes breaking up the end result into what pieces your students need to know to get there. Like Ben said, and especially in an intro course, skipping levels is sometime necessary to get to the end result.  

---

### Answer by username_13 on 2017-12-06. Score: -5

It's very simple but it make your students hate you. Ask them to do it on their own, using the materials you provided in class. For each question that they ask you, deduct a point. If they care about their grade, they will try to ask you as few questions as possible or will seek help from each other, both beneficial outcomes.

> **Comments:**
> **username_11**: This will cause them to ask no questions at all.  You will lose your chance to help the students who are genuinely lost this way.  
> **username_5**: And maybe if they are really united they will form a delegation to go to your boss with a complaint.  

---

