# How to teach so that your student doesn't feel stupid?

I'll start by admitting I'm not a teacher. But I am a professional computer programmer with over 20 years of experience and a BS in computer science. I'm also a dad. My daughter is 9 years old and is about to finish 3rd grade.

She does very well in school, her favorite subject is math and for the last year she's participated in a computer club. She enjoys it immensely and is at the top of her class there -- but no thanks to me.

I've tried to talk to her about programming many times, but somehow it just doesn't work. I don't push it either. Recently she made her way into a programming competition final, and we tried to study the previous year's questions for practice. It was difficult. For some reason she kept getting discouraged.

I talked about this to my wife who is also a computer programmer (hey, it runs in the family!) and with whom I've also always had problems whenever I tried to explain her something programming-related. She helped me put the problem into words - at least somewhat.

The idea is that I somehow make it sound... too easy? Like it should be obvious. But when it doesn't immediately click, it makes the listener feel stupid. And that's when learning stops and inecurities kick in.

I do try to be as encouraging as I can. I'm never impatient, I don't chastise (or give any negative feedback at all) and if the first explanation doesn't click, I try to come up with another and another and another. But when you know the subject very well then it's hard to imagine what it's like for someone who doesn't, and to understand just what doesn't click -- especially if they can't explain it themselves.

Atr there any tricks or methods that can help me here? I'd love to teach the subject that we both love to my daughter, but this is an obstacle that I just don't see how to overcome.

Teaching someone you have a close relationship with can be difficult or impossible for many people. And it isn't just an issue on the "teacher" side of the relationship but is also evident in possible psychological effects on the "student" side. It is best to recognize this and may be necessary to avoid such attempts. I know that I've found similar difficulties and have given some thought to why they occur.

On the one hand, your relationship makes it difficult for you to see why your child doesn't get it - she is obviously very smart. Your kid after all and we always think our kids are best. It is hard to recognize that effect, even when it is very strong. Compounding this is that you do understand all of this stuff, but forget that there was a time when you were totally lost about how it all worked. Now that it all fits you don't remember a time when it was just a bunch of disjoint pieces. This too can be very strong. So you get frustrated. And while you are sure that you aren't expressing dissatisfaction, are you really sure you can control the small muscles in your face that others can easily interpret?

On the other hand, your "student" wants more than anything to please you, but can't and so also gets frustrated. The frustration leads to avoidance and, if you keep pushing, further frustration and avoidance. A vicious circle. Few kids like to feel that they are a "disappointment" to a parent. (The same is true for other kinds of relationships in many cases.)

A third element is that you may not completely understand that the mind of a nine year old is different (in kind) from that of an adult. In a few years this will change, and may have begun already. The studies of Piaget explain all of this. Kids learn differently than adults, with logic being much less important.

I can make a couple of suggestions that might help. I doubt that this is a complete list, of course.

The first is to just give it up and hire a tutor who is familiar with both the topic and the age group. You can tutor the tutor if you like if they are not quite as advanced as yourself.

The second idea, speculative at best, is to create a group of kids your child's age and teach them all. I'd suggest four, say, as the right size. Now you have a more formal, less fraught, relationship with the class and, if you can manage to treat them all the same, many of the psychological effects of teaching your child will be lessened (not completely relieved). I would, myself, make their learning group based, rather than individual, with lots of small group projects. At that age some non computer activities are likely appropriate. Use lots of analogies and metaphors in teaching, also. You could also, somehow, encourage student vs teacher mindset so that your kid is encouraged to separate psychologically from you and join with her "classmates." This might actually make it easier and less likely that she will feel that she is not disappointing you (a big deal for a kid) by not "getting it" immediately.

• Yay, she got 3rd place! :) Anyways, I get what you are saying. The idea of "being a disappointment" hadn't crossed my mind but it fits the bill. I've never pressured her and whenever I see that she becomes unhappy I just stop and move on to something else. So I don't think I've got a vicious circle yet -- but I'll keep this in mind for the future. As for your suggestions - as I said, she's already going to a group that has a good teacher, and I don't think that we need a private tutor, so, basically, I'll just stop trying to teach her unless she comes to me first. Thanks! :) – Vilx- May 18 at 17:21
• I'll see if something else comes up, and if it doesn't within a day or two, I'll accept your answer. – Vilx- May 18 at 17:25
• It is good to wait for a while before accepting answers. Some people who want to answer will also want to reflect a bit before actually writing. But note, also, that you can withdraw and re-assign acceptance if it comes to that. – Buffy May 18 at 19:43
• I know. But I also don't want to scare other people off, who might not answer if the question already has an accepted answer. :) – Vilx- May 18 at 21:45

The idea is that I somehow make it sound... too easy? Like it should be obvious. But when it doesn't immediately click, it makes the listener feel stupid. And that's when learning stops and inecurities kick in.

This reminds me of the first time I was teaching an intro to programming class and I was going through a live demo of how some code worked. I mistakenly had an error in my code and got a compilation error. One of my students gasped and said, "You get those too?!"

Previously, it hadn't occurred to me that students thought that people who are "good" at programming didn't get errors. They thought there was some inherent quality that I had that prevented me from making errors like they did.

I'd recommend modeling the problem-solving process. Try doing one of the problems yourself and just let her watch and ask questions. Think aloud and describe everything that goes through your head. Even try explaining different approaches you might consider in solving the problem. It helps demystify the problem solving process of programming when novices get to witness your thinking (and debugging) process.

• Actually, it is useful to intentionally make a few mistakes when programming in front of a class. Back in the day a useful student exercise was to write a program that generated every Fortran diagnostic. Another useful exercise was (and remains) giving students a program that had certain well designed errors (some syntactic, others deeper) with instructions to repair the program. Such a program is called a Fixer Upper in Pedagogical Patterns circles. – Buffy May 19 at 13:23
• @Buffy Is there, somewhere, a collection of exercises fitting this pattern? I find them maddeningly hard to design. – Ben I. May 19 at 15:53
• Hmm... interesting ideas for my metaphorical toolbox. While I doubt they alone will solve my problem, they are nonetheless very useful. – Vilx- May 19 at 17:16
• @BenI., actually they aren't that hard to create. I've used them as a first exercise to give a quick overview of a language and a program in the language. Take any program that you are proud of and that has great structure. Make it a bit longer (twice) than you would ask them to write at that stage. Throw in a couple of logic errors and a few syntax errors. In Java, make sure you have javadocced the intent of each part. Don't include basic structural errors at that point. Probably tell them how many errors it has. You want them to see a few compiler messages and you want them to get (cont) – Buffy May 19 at 18:55
• output that is not quite right. Off by one errors for example, or even run time errors if not too complex to fix. With six errors and ten minutes expected per error you have an exercise. It is fine if one of the errors is a bit tricky, but not all of them. – Buffy May 19 at 18:56

The idea is that I somehow make it sound... too easy? Like it should be obvious. But when it doesn't immediately click, it makes the listener feel stupid.

# Dismissive Language

It's common to want to put your student at-ease by saying things like this:

• "You just need to transmogrify the jabberwocky."
• "All you need to do is reverse the polarity on the tachyon emitters."
• "After you call the recursive stochastinator, the rest is easy."
• "Of course, the next step is to liquify the whatchamacallit."

Humans use this kind of language to reassure the person we're talking to. We're trying to say "don't worry, it's not as bad as you think it is!" - the problem is that this usually has the exact opposite effect.

By telling somebody that something should be easy, we're alienating them when it's not easy, which in computer science is quite often. "My teacher told me this should be easy, but I'm really confused, I guess I'm just really bad at it."

Mathematical Microaggressions discusses this language. It's from a math perspective, but it's a good primer.

To improve this, the first thing I'd do is monitor your own language. Maybe record yourself speaking and then listen back to it.

# The Process

As others have said, it's also important for you to demonstrate the process of solving a problem rather than jumping straight to the answer.

When teaching something, especially if you have more experience than the topic you're teaching, it can be tempting to lay it all out at once. "To get the total of an array of integers, you'd track the sum in a variable, then use a for loop to iterate over the array and increment the variable by the value at each index."

There are a couple problems here:

1. You haven't checked in with your student, so they're probably lost. "I stopped understanding what you were saying about 3 words in..."
2. You haven't shown them how you obtained this information in the first place. "How am I supposed to remember all of that?"
3. You haven't demonstrated what to do when things go awry, or when they encounter a slightly different problem. "Okay now I've memorized how to compute a sum, but what about an average?"

To improve this, I think it's important to show your student how you got this information, and what steps they should follow when they're facing something similar by themselves. This should also include steps like planning, getting error messages (which is a totally normal part of programming, but is often skipped over when teaching), and debugging.

"Let's start about by coming up with a goal. What do we want to do? Okay, how can we break that down into smaller steps? Now let's focus on the first step. Where can we find more information? Oh, we got an error message, that's totally normal! Let's read through it to figure out what it's saying..."

Shameless self-promotion: I wrote up a little meta-tutorial on this process here.

# Engage

I also think it's important to make sure you're meeting students where they live. Specifically, I would make sure that your student is interested in whatever topic you're discussing, or that you at least "brand" the topic with something personal to them. If you're talking about getting the sum of an array of integers, make that the total number of <insert thing your student is interested in>.

This can all feel pretty tedious, especially if you have more experience than your students. It's tempting to jump to the "interesting stuff" without making sure your students are along for the journey.

But teaching is a different skill than writing code. And like any skill, the best way to improve is through practice.

You could also take a step back and try to find a set of tutorials that you and your daughter can enjoy together, instead of putting all of the teaching on yourself. Coding Train has a bunch of beginner-friendly videos that might be fun.

• Nice! I'll try to remember all this the next time when/if get to teaching her. :) – Vilx- Jun 11 at 7:22

You got some good specific answers already. Here are a couple of small points that could be useful when teaching in general:

• Without seeing a transcript of one of your explain-the-programming sessions, I can't say for sure, but it's possible that your word choice is also a factor.

An example: Something I run into a lot is the word just, as in "What is a for-loop?" "You're just telling the program to do something a certain number of times." Just makes some people feel relieved ("oh, that's not too complicated, I can do that"), but it makes other people (or even the same people under different circumstances) feel discouraged ("why didn't I figure that out myself?" / "if it's so simple, why do I still not get it?"), even if your tone is not condescending or pitying.

(This is one of my bad habits. I've been trying to only use just when I feel it's a good choice for the student/situation rather than all the time.)

• I also can't say for sure whether this next point applies to you in particular, but I often find that when people (including me) make something sound easy or obvious, it's because we're explaining how to do something rather than guiding the student through their work. It's like giving a kid a sheet with advice and tips on how to build a big tower ("here are all the facts I've gathered over the years that you should know" / "these are beginner mistakes" / the idea that to be good, you can't make these mistakes) versus working through why their current tower keeps falling down (also gives you the opportunity to explain that you understand whatever the erroneous line of reasoning is and that maybe anyone could make that mistake).

That might not apply to you at all. I don't know.

• I think it might. Thanks! :) – Vilx- Jun 11 at 7:16

# Encourage and model mistakes

First see what Carol Dweck has to say on mistakes https://www.ted.com/talks/carol_dweck_the_power_of_believing_that_you_can_improve

Then model mistakes, encourage you daughter to make mistakes, give her space to experiment (give a learning-goal, but give her space to do it on her own).

(this is not a full answer, I am only adding one point to what is already here)

• I've heard about these ideas before, and I agree with them. I've even had a bit of a personal experience with this problem as well in my own youth. And I am trying to impart this wisdom to my daughter as well, but I don't think it's going too well. She's still fairly afraid to make mistakes and gets discouraged by them. Are there any practical tips for making people more confident about making mistakes and putting effort into improving? I'm kind of at a loss here, besides offering a lot of "don't worry, it's no biggie, you'll do better next time" kind of encouragement. – Vilx- May 21 at 8:42
• encourage strategy and effort (not outcome), encourage mistakes (If you don't make any mistakes, then what you are doing is too easy). – ctrl-alt-delor May 21 at 18:26

Good book by father & son team: "Hello World!", 2nd edition, Warren and Carter Sande, Manning , https://www.manning.com/books/hello-world-second-edition

• That's all very well and nice, but as far as programming itself is concerned, I already have that knowledge. How can this book help me to teach my daughter in a way she feels comfortable with? – Vilx- May 25 at 16:51
• It probably won't help you, but you can give her the book as a present. – Pascal May 26 at 9:13

I just simply give you one advice just don't put the burden of work on your students just give them as much work as they can do. And try to do the task step by step in lecture and give them free hand to approach you anytime.

According to me this is the best thing to do. In this way you get attached with your students even with the low ones.

• Did you read the question, or just the title? – Vilx- May 19 at 21:52