<p>I am not sure if your post is a statement or a question.  However it is my opinion (after more than 25 years in the software industry) that some topics are just not for everyone, and computer science and programming is one of them.</p>

<p>I think it is an admirable goal to strive to teach every student in every class, but a more realistic goal might be to improve each student's understanding in some way in every class.</p>

<p>Due to the focus on STEM in schools and the prevalence of software/IT related jobs, I think an idea has emerged that anyone can be a software developer if they are simply taught well and if they apply themselves.  I unfortunately don't believe that this is the case.  To me it is somewhat like singing or running.  Some people can naturally sing in tune and others can comfortably run a few miles at a good pace.  You can hold singing or running classes and you can definitely improve anyone's ability to do either.  But you aren't going to teach every single person to have perfect pitch or to run a 5 minute mile.</p>

<p>Computer science / software engineering is a hard science and in my opinion requires a certain type of thinking, problem solving, patience, and fascination with things that exist only in your mind. It also tends to require long hours of concentrated effort usually working alone.  While I believe most people can learn enough about the topic to at least have an appreciation for it, this kind of activity is simply not something that everyone can do successfully.</p>

<p>I know many people that I readily admit are far more intelligent than me and have skills that I will never have who are successful in fields such as law, medicine, business, education, and music.  Some of them have tried programming or engineering and did not like it which is why they pursued other fields.</p>

CC BY-SA 3.0
2017-06-28T14:36:51.147Z
A question, definitely. _How_ to do it if it is a goal, not whether to attempt it.
Buffy
CC BY-SA 3.0
2018-03-27T03:45:50.783Z
I think nearly anyone can learn at least a bit of programming.  This question isn't asking how to turn every student into someone who could be a career programmer.  I agree that's clearly impossible.  You have to like the logic of thinking like a computer to do it successfully and for the long term.  I agree it's a mistake to think that everyone could be a coder, or even some any IT position.
Peter Cordes
CC BY-SA 3.0
2018-03-27T03:48:14.620Z
I *think* almost everyone could eventually learn something about the most simple of programming, even if it didn't really sink in or fit with how they think.  The question for me is whether that's compatible with teaching other students who "get it" an interesting amount of material in the same class.  Maybe yes if you set your "learned *something*" threshold low enough for the students who don't get it quickly or easily.
Peter Cordes
CC BY-SA 3.0
2017-06-28T13:53:29.467Z
2017-06-28T13:53:29.467Z
Uncle Long Hair
<p>Since I'm looking for techniques to advance a goal, not debate about the goal, let me give an example. It isn't definitive, but there isn't a definitive answer to the question "How do YOU do x?"</p>

<hr>

<p>One way to involve students at any level in a programming course is to use pair programming. However, for it to work you need to set parameters. If the students always get to choose their own partners they will usually choose people similar to themselves, including ability level. So, at least some of the time I need to either assign pairs or randomize (and track) pairs. I need to assure that each student takes and fulfills their current role (driver or navigator) faithfully and that they switch roles often. </p>

<p>The goal in the class room is learning, not maximizing locs/hour. So slowing down the process for a bit is an acceptable cost (to me).</p>

<p>Why do I think this works? </p>

<p>The advantages for the two students, when mismatched, are different, but symmetric. The weaker student gets to watch the superstar up close and maybe contribute a bit. Even saying "I don't understand why you did that" is a contribution, making the stronger student evaluate <em>and explain</em> his/her choices. The stronger student benefits from these small challenges both technically and socially. They will eventually, in whatever career they choose, need to interact intelligently with others. </p>

<p>I also have evidence that students working in pairs (on programming or other work) tend to be <em>much</em> more creative than when working separately. And the "weaker" student may have things to contribute that you haven't considered and are unlikely to until you put them in a situation where they can glow a bit. </p>

<p>The challenge here. </p>

<p>One challenge is having an extremely arrogant student who refuses to work with anyone who is "beneath" them. That person has a lot to learn, though not in a technical sense, perhaps. </p>

CC BY-SA 3.0
2017-06-28T17:41:58.810Z
I don't disagree with the value of pair programming or your take on it, but I'm still unsure as to the question to which this is an appropriate answer. Is it merely how to get every student involved in every class meeting? I also don't see how this is _not_ differentiation...
Peter
CC BY-SA 3.0
2017-06-28T17:47:45.970Z
Perhaps I'm interpreting the tag too narrowly, in which case I apologize. I based it on the description on the Tags page only.
Buffy
CC BY-SA 3.0
2017-06-28T18:01:59.153Z
Fair enough. That tag description is inaccurate. You _are_ asking about differentiation. I will improve the tag.
Peter
CC BY-SA 3.0
2017-06-28T17:21:16.540Z
2017-06-28T17:27:05.227Z
2017-06-28T17:27:05.227Z
Buffy
<p>I take it as the <strong>Prime Directive</strong> that I must teach every student in every class session. You may disagree, but I'm not asking to debate that question, but to look for how it might be accomplished, assuming it is, at least, a goal. </p>

<p>This isn't about lecture, per se. I'm not sure I believe it is possible to teach everyone with just lecture, since we all learn differently. So this isn't about what "level" at which to pitch the course. Suppose you wanted to give <em>something</em> to <em>everyone</em> in every class period. How would you proceed?</p>

<p>Let's assume that your class contains people of different background, preparation, and ability. Let's <strong>not</strong> assume that everyone needs to get the <em>same</em> thing out of each class, but something that will advance their own learning. Let's also assume that helping those with little motivation is not the main issue. I'm also not looking for a way that <em>guarantees</em> the result, but for techniques that make it highly likely to be achieved. </p>

<p>I have some ideas about this, of course. Active Learning is my big hammer. Teamwork also. Paired learning (not just pair programming) maybe, though I'd love to hear from anyone who has experimented with that (either successfully or unsuccessfully). I've done <em>Paired Teaching</em> with a co-instructor in which each of us does different things and takes control at different times, with different students likely preferring one of us over the other.</p>

<p>I once had two students who had failed a compiler course, never having had a positive educational experience land at the very top of the class in the following term. The other students there, one of my highest performing groups ever (on technical issues anyway), were very angry, accusing me of putting "ringers" in the class to make them look bad. </p>

<hr>

<p>Note for the record that I have over 40 years of teaching experience and still can only begin to approach this, though I do believe that it is the prime directive. </p>

<p>Nothing in the Academia list seems similar to this, and I'm interested in CS specific ideas. I think it would be  different in, say, teaching Russian Language, or Poetry. </p>

<p>I'm not looking for a definitive answer, but for ideas for how to structure the whole teaching process so that you reach everyone. But I'm also not looking for debate, but for practical suggestions. </p>

CC BY-SA 3.0
2017-06-28T13:50:59.813Z
This question is quite broad. You're asking for advice so general that you even mentioned it's applications in other fields. In addition, there is plenty of advice out there on this topic which you could research.
thesecretmaster
CC BY-SA 3.0
2017-06-28T14:38:29.900Z
I mentioned martial arts in the original only to suggest it is different, but possible, in other fields. But, I agree that it is broad. That is why I pose it. I think the community as a whole can suggest ways to work toward it.
Buffy
CC BY-SA 3.0
2017-06-28T14:39:29.790Z
Stack Exchange is for Q&A, not discussion. Normally discussion questions are too broad for our scope and belong in a different venue.
thesecretmaster
CC BY-SA 3.0
2017-06-28T16:27:12.540Z
This is really too broad. You may want to consider asking a new question about differentiation within (for instance) labs, or lecture, or code-alongs. I could write a book about differentiation within the CS classroom overall. (And I'm actually considering doing so!)
Ben I.
CC BY-SA 3.0
2017-06-28T16:45:45.623Z
Actually @Ellen Spertus, I'm trying to _avoid_ differentiation, not promote it. Tracking would never be my solution, though I would look at answers that suggest it. How can help everyone learn, everyone contribute?
Buffy
CC BY-SA 3.0
2017-06-28T16:59:24.803Z
I'm a little confused here. You are _avoiding_ differentiation? Differentiation != tracking. As written, I'm not sure I understand what you're asking. I thought I had a beat on it as a question about differentiation, but if it's not that, I'm not sure what you're trying to get at. What you're looking for is a more student-centered approach, which is at the heart of differentiated instruction. Please clarify otherwise this is too broad/vague.
Peter
CC BY-SA 3.0
2017-06-28T18:00:02.643Z
Too broad, I think. If you focus on some specific scenarios, you're likely to get more good answers. It also makes it easier for people to disagree with a broad-brush approach in specific subject areas.
Sean Houlihane
CC BY-SA 3.0
2017-06-28T18:22:54.673Z
@Buffy Based on the DVs and CVs, I am going to close this question. What you are asking is an important issue to address, but as worded this is too broad (and to be fair, the tag confusion did not help; this is absolutely a question about differentiation). I get the sense that the community also feels this way. I do encourage you to re-ask this with a more narrow scope and shorter background, so the focus is more on the question itself.
Peter
CC BY-SA 3.0
2017-06-28T18:43:41.290Z
No objection. I'm sorry that it didn't find acceptance, of course, but I don't know how I can "improve" it and reach the goal of collecting techniques.
Buffy
CC BY-SA 3.0
2017-06-28T18:54:47.190Z
@Buffy Be short, sweet, and to the point. "What are techniques for differentiation in a CS classroom with a wide range of student abilities?" or "How do I actively engage all students in the learning process when there are great discrepancies in student ability?" Also, try to narrow it to a particular aspect - maybe lecture or first instruction or labs. Pick one aspect to focus on.
Peter
CC BY-SA 3.0
2017-06-28T21:19:58.767Z
Please don't be discouraged. I hope to see more questions from you.
Ellen Spertus
CC BY-SA 3.0
2017-06-28T22:03:10.233Z
Hard to take a risk here. Sorry.
Buffy
CC BY-SA 3.0
2017-06-29T18:03:34.660Z
Hmmm. Been there, done that, but at 73 I think I'll pass. Thanks for the sentiment though.
Buffy
CC BY-SA 3.0
2017-06-29T21:23:47.987Z
How do you know (or how could you even prove) that this goal is scientifically realistic?  If not, your directive will fail, and that has a cost/benefit ratio.
hotpaw2
CC BY-SA 3.0
2017-06-29T21:36:46.630Z
Still important to me and my students that I try, and seek to find ways toward the goal even if, Zeno, like it is out of reach.
Buffy
<curriculum-design><best-practice><differentiation>
How do you teach EVERY student?
# How do you teach EVERY student?

(Asked by: username_0 on 2017-06-28)

I take it as the **Prime Directive** that I must teach every student in every class session. You may disagree, but I'm not asking to debate that question, but to look for how it might be accomplished, assuming it is, at least, a goal.

This isn't about lecture, per se. I'm not sure I believe it is possible to teach everyone with just lecture, since we all learn differently. So this isn't about what "level" at which to pitch the course. Suppose you wanted to give *something* to *everyone* in every class period. How would you proceed?

Let's assume that your class contains people of different background, preparation, and ability. Let's **not** assume that everyone needs to get the *same* thing out of each class, but something that will advance their own learning. Let's also assume that helping those with little motivation is not the main issue. I'm also not looking for a way that *guarantees* the result, but for techniques that make it highly likely to be achieved.

I have some ideas about this, of course. Active Learning is my big hammer. Teamwork also. Paired learning (not just pair programming) maybe, though I'd love to hear from anyone who has experimented with that (either successfully or unsuccessfully). I've done *Paired Teaching* with a co-instructor in which each of us does different things and takes control at different times, with different students likely preferring one of us over the other.

I once had two students who had failed a compiler course, never having had a positive educational experience land at the very top of the class in the following term. The other students there, one of my highest performing groups ever (on technical issues anyway), were very angry, accusing me of putting "ringers" in the class to make them look bad.

---

Note for the record that I have over 40 years of teaching experience and still can only begin to approach this, though I do believe that it is the prime directive.

Nothing in the Academia list seems similar to this, and I'm interested in CS specific ideas. I think it would be different in, say, teaching Russian Language, or Poetry.

I'm not looking for a definitive answer, but for ideas for how to structure the whole teaching process so that you reach everyone. But I'm also not looking for debate, but for practical suggestions.

**Tags:** curriculum-design, best-practice, differentiation

> **Comments:**
> **username_1**: This question is quite broad. You're asking for advice so general that you even mentioned it's applications in other fields. In addition, there is plenty of advice out there on this topic which you could research.  
> **username_0**: I mentioned martial arts in the original only to suggest it is different, but possible, in other fields. But, I agree that it is broad. That is why I pose it. I think the community as a whole can suggest ways to work toward it.  
> **username_1**: Stack Exchange is for Q&A, not discussion. Normally discussion questions are too broad for our scope and belong in a different venue.  
> **username_2**: This is really too broad. You may want to consider asking a new question about differentiation within (for instance) labs, or lecture, or code-alongs. I could write a book about differentiation within the CS classroom overall. (And I'm actually considering doing so!)  
> **username_0**: Actually @username_5, I'm trying to _avoid_ differentiation, not promote it. Tracking would never be my solution, though I would look at answers that suggest it. How can help everyone learn, everyone contribute?  
> **username_3**: I'm a little confused here. You are _avoiding_ differentiation? Differentiation != tracking. As written, I'm not sure I understand what you're asking. I thought I had a beat on it as a question about differentiation, but if it's not that, I'm not sure what you're trying to get at. What you're looking for is a more student-centered approach, which is at the heart of differentiated instruction. Please clarify otherwise this is too broad/vague.  
> **username_4**: Too broad, I think. If you focus on some specific scenarios, you're likely to get more good answers. It also makes it easier for people to disagree with a broad-brush approach in specific subject areas.  
> **username_3**: @username_0 Based on the DVs and CVs, I am going to close this question. What you are asking is an important issue to address, but as worded this is too broad (and to be fair, the tag confusion did not help; this is absolutely a question about differentiation). I get the sense that the community also feels this way. I do encourage you to re-ask this with a more narrow scope and shorter background, so the focus is more on the question itself.  
> **username_0**: No objection. I'm sorry that it didn't find acceptance, of course, but I don't know how I can "improve" it and reach the goal of collecting techniques.  
> **username_3**: @username_0 Be short, sweet, and to the point. "What are techniques for differentiation in a CS classroom with a wide range of student abilities?" or "How do I actively engage all students in the learning process when there are great discrepancies in student ability?" Also, try to narrow it to a particular aspect - maybe lecture or first instruction or labs. Pick one aspect to focus on.  
> **username_5**: Please don't be discouraged. I hope to see more questions from you.  
> **username_0**: Hard to take a risk here. Sorry.  
> **username_0**: Hmmm. Been there, done that, but at 73 I think I'll pass. Thanks for the sentiment though.  
> **username_6**: How do you know (or how could you even prove) that this goal is scientifically realistic?  If not, your directive will fail, and that has a cost/benefit ratio.  
> **username_0**: Still important to me and my students that I try, and seek to find ways toward the goal even if, Zeno, like it is out of reach.  

---

## 2 answers

### Answer by username_7 on 2017-06-28. Score: 5

I am not sure if your post is a statement or a question. However it is my opinion (after more than 25 years in the software industry) that some topics are just not for everyone, and computer science and programming is one of them.

I think it is an admirable goal to strive to teach every student in every class, but a more realistic goal might be to improve each student's understanding in some way in every class.

Due to the focus on STEM in schools and the prevalence of software/IT related jobs, I think an idea has emerged that anyone can be a software developer if they are simply taught well and if they apply themselves. I unfortunately don't believe that this is the case. To me it is somewhat like singing or running. Some people can naturally sing in tune and others can comfortably run a few miles at a good pace. You can hold singing or running classes and you can definitely improve anyone's ability to do either. But you aren't going to teach every single person to have perfect pitch or to run a 5 minute mile.

Computer science / software engineering is a hard science and in my opinion requires a certain type of thinking, problem solving, patience, and fascination with things that exist only in your mind. It also tends to require long hours of concentrated effort usually working alone. While I believe most people can learn enough about the topic to at least have an appreciation for it, this kind of activity is simply not something that everyone can do successfully.

I know many people that I readily admit are far more intelligent than me and have skills that I will never have who are successful in fields such as law, medicine, business, education, and music. Some of them have tried programming or engineering and did not like it which is why they pursued other fields.

> **Comments:**
> **username_0**: A question, definitely. _How_ to do it if it is a goal, not whether to attempt it.  
> **username_8**: I think nearly anyone can learn at least a bit of programming.  This question isn't asking how to turn every student into someone who could be a career programmer.  I agree that's clearly impossible.  You have to like the logic of thinking like a computer to do it successfully and for the long term.  I agree it's a mistake to think that everyone could be a coder, or even some any IT position.  
> **username_8**: I *think* almost everyone could eventually learn something about the most simple of programming, even if it didn't really sink in or fit with how they think.  The question for me is whether that's compatible with teaching other students who "get it" an interesting amount of material in the same class.  Maybe yes if you set your "learned *something*" threshold low enough for the students who don't get it quickly or easily.  

---

### Answer by username_0 on 2017-06-28. Score: 1

Since I'm looking for techniques to advance a goal, not debate about the goal, let me give an example. It isn't definitive, but there isn't a definitive answer to the question "How do YOU do x?"

---

One way to involve students at any level in a programming course is to use pair programming. However, for it to work you need to set parameters. If the students always get to choose their own partners they will usually choose people similar to themselves, including ability level. So, at least some of the time I need to either assign pairs or randomize (and track) pairs. I need to assure that each student takes and fulfills their current role (driver or navigator) faithfully and that they switch roles often.

The goal in the class room is learning, not maximizing locs/hour. So slowing down the process for a bit is an acceptable cost (to me).

Why do I think this works?

The advantages for the two students, when mismatched, are different, but symmetric. The weaker student gets to watch the superstar up close and maybe contribute a bit. Even saying "I don't understand why you did that" is a contribution, making the stronger student evaluate *and explain* his/her choices. The stronger student benefits from these small challenges both technically and socially. They will eventually, in whatever career they choose, need to interact intelligently with others.

I also have evidence that students working in pairs (on programming or other work) tend to be *much* more creative than when working separately. And the "weaker" student may have things to contribute that you haven't considered and are unlikely to until you put them in a situation where they can glow a bit.

The challenge here.

One challenge is having an extremely arrogant student who refuses to work with anyone who is "beneath" them. That person has a lot to learn, though not in a technical sense, perhaps.

> **Comments:**
> **username_3**: I don't disagree with the value of pair programming or your take on it, but I'm still unsure as to the question to which this is an appropriate answer. Is it merely how to get every student involved in every class meeting? I also don't see how this is _not_ differentiation...  
> **username_0**: Perhaps I'm interpreting the tag too narrowly, in which case I apologize. I based it on the description on the Tags page only.  
> **username_3**: Fair enough. That tag description is inaccurate. You _are_ asking about differentiation. I will improve the tag.  

---

