<p>Early in the process, you should emphasize using and applying documentation.  Once the students begin to gain this skill, they can explore APIs and libraries that interest them.</p>

CC BY-SA 3.0
2017-07-19T15:50:14.053Z
Yes, although they need to have enough conceptual understanding to be able to make sense of the documentation.
nova
CC BY-SA 3.0
2017-07-19T21:05:42.080Z
When we introduce Java strings, we open the docs and start learning how to use the method descriptions. We do a similar thing in a Python or JavaScript class.
ncmathsadist
CC BY-SA 3.0
2017-07-19T15:45:52.587Z
2017-07-19T15:45:52.587Z
ncmathsadist
<p>I think there's a few different skills students need for independence, and they require quite different teaching approaches. Independence is the end result but you can't teach it directly. </p>

<ul>
<li><p>Confidence. They need to think it's possible to try out a new toolset and make something. Guiding them prescriptively through a variety of different new tools is a good way to do this, as with @BrDaHa's answer. i.e. Don't teach independence as such but show through example that different and new approaches are possible and not too difficult. Once they've achieved several different projects, even tiny ones, with different technologies they'll be more confident to explore different options rather than use the same thing every time. </p></li>
<li><p>Abstract understanding. The hard bit of programming is thinking about problems and solutions in the right way. Once you know conceptually what you want to do it's much less scary to go find a tool to implement that well, and that conceptual understanding will help guide you through using a new tool. Teaching CS generally addresses this, plus a specific focus on systems design. </p></li>
<li><p>Ability to learn something they don't already know. Reading documentation, using stack overflow, reading blog posts and books. Students need to learn each of these, they're different skills, and they're often not taught well or at all in CS courses. When you can do these things then approaching a new tech is fun rather than daunting. </p></li>
<li><p>Appreciate there's different tools for different jobs. You need to demonstrate, or better have them experience, that some technologies are great for some things and not others. So they know there's worthwhile in exploring different tech. On the one hand, when you have a hammer everything looks like a nail. Conversely though, it's often a lot faster to use a tool you know than learn a whole new one for a small job, even if that tool is 'better'. Negotiating that trade off is an important part of general software development. Part of the fun of being a developer. </p></li>
</ul>

CC BY-SA 3.0
2017-05-27T21:56:30.917Z
2017-05-27T21:56:30.917Z
Rory
<p>The best "win" I've had with this is drawing on tables. I gave challenges to my Y12s (about a dozen students). While talking through the problems I was annotating ideas, flowcharting, tracing etc on the tables beside them with a board marker.</p>

<p>Now when I give them a problem they grab a table from the centre of the room and start drawing out ideas. And because they're 'winning' with what they're doing they start going above and beyond.</p>

CC BY-SA 3.0
2017-06-06T17:20:24.050Z
So you've taught them to think in a project oriented way? Cool.
ItamarG3
CC BY-SA 3.0
2017-06-06T17:26:39.540Z
I don't see the obvious 'win' connection which you're suggesting.
Sean Houlihane
CC BY-SA 3.0
2017-06-06T18:03:14.503Z
They are planning better, and so producing better, working solutions. This is a win.

The win for me is they are making the decision to plan themselves rather than just jumping on a computer and starting coding.
Oli Howson
CC BY-SA 3.0
2017-06-06T17:07:43.403Z
2017-06-06T17:46:11.050Z
2017-06-06T17:46:11.050Z
Oli Howson
<p>I don't think there are shortcuts here—the students just need more foundational knowledge before they can be independent. It takes significant expertise to be able to transfer knowledge to new contexts [<a href="https://www.nap.edu/read/9853/chapter/6" rel="nofollow noreferrer">ref</a>]. Novices have shallow knowledge that is closely tied to shallow features. </p>

<p>As an expert, you have insight into meaningful patterns in your area of expertise. You have also seen many, many different problems and cases that you can relate to current problem-solving. Your knowledge is organized in terms of its applicability to new problems [<a href="https://www.nap.edu/read/9853/chapter/5" rel="nofollow noreferrer">ref</a>]. It seems so straightforward from your perspective!</p>

<p>But think about the challenges facing novices. To them, the problem looks different than anything they've seen because they don't recognize the generalities. Do they even know what words to Google?</p>

<p>I agree with other posters that confidence is necessary. Knowing good resources to use (e.g. user-friendly documentation) also helps. But most important is foundational knowledge. Teach your students well, with many examples, and as they learn more they will begin to seek out knowledge on their own. </p>

CC BY-SA 3.0
2017-07-19T15:43:21.477Z
2017-07-19T15:43:21.477Z
nova
<p>I think it's hugely beneficial to <strong>create projects that require use of a certain language or technology</strong>, or in other words, don't leave students to their own devices to solve a problem. As a student, I found that learning Java and then moving to "weird" languages like Ocaml really expands how you think of how to solve a problem. Knowing JavaScript is pretty much a requirement in web development. Learning Python can expose students to beautiful, concise ways of solving problems, and opens the door to a lot of machine learning libraries. </p>

<p>I can't count how many times I've read about some technology, dismissed it, then was forced to use it somewhere, and came out thinking, "Huh, that's pretty cool"</p>

CC BY-SA 3.0
2017-05-27T18:08:27.693Z
So you're saying I simply shouldn't try to teach them to be independent in what they learn?
ItamarG3
CC BY-SA 3.0
2017-05-27T19:00:38.013Z
I don't know if independence can be taught per se, but exposing students to multiple languages could encourage them to seek out more unknowns
BrDaHa
CC BY-SA 3.0
2017-05-27T19:01:28.013Z
Downvoters: at least explain why you're downvoting. It's not helpful without an explanation
BrDaHa
CC BY-SA 3.0
2017-05-27T19:03:12.460Z
@Itamar Green I don't think it's that so much as students may be averse to finding a new technology without seeing a project they can build with it. They can still be independent in a sense, but should be compelled to be independent by virtue of some motivating factor so as to not be dismissive of that which could be challenging, confusing, and/or seemingly irrelevant at first glance. For example, requiring students to use BeautifulSoup for webscraping in Python may lead to seeing its value more than having them find their own library to explore in Python. Too much freedom in the latter.
Peter
CC BY-SA 3.0
2017-05-27T19:30:18.670Z
@Peter I see what you mean. So you're saying that a measure of freedom is a good way to go about it?
ItamarG3
CC BY-SA 3.0
2017-05-27T19:35:21.167Z
Precisely. Too much freedom can be paralyzing. Especially for newer/younger programmers, freedom with helpful guidelines/boundaries/constraints is more freeing.
Peter
CC BY-SA 3.0
2017-05-27T17:53:45.590Z
2017-05-27T17:53:45.590Z
BrDaHa
<p>There is an argument for facilitated and directed learning to encourage independence. Students should be allowed to discuss problems and options with their peers in order to make judgements; evidence shows that adults tend to interfere with that process. Ensure activities are hands on and try pairing students.</p>

<p>This may be of interested to help structure a critical thinking approach - Search Kivunjas article Using Dear Bono's Six Thinking Hats Model to Teach Critical Thinking and Problem Solving Essential for Success in the 21st Century Economy.</p>

CC BY-SA 3.0
2017-05-28T07:43:22.863Z
I see what you're saying, but I'm not quite sure how pairing students would aid them in being more independent. Could you please clarify that?
ItamarG3
CC BY-SA 3.0
2017-05-28T07:54:30.643Z
Its about being able to discuss ideas with someone and obtain direction. Sometimes they may have a direction without having to discuss it (but that would assume having the knowledge in the first place). Being able to discuss affirm amongst themselves they are heading in the right direction, and being able to describe what they are doing aids learning.
Dave Russell
CC BY-SA 3.0
2017-05-28T07:41:10.260Z
2017-05-28T07:41:10.260Z
Dave Russell
<p>As is often the case, there is usually more than one way to approach a problem or task. </p>

<p>Currently, my students use what they were taught in the lessons (which is expected). When they stumble upon a problem (e.g. a project that has parts that they are unsure how to approach) they very often get stuck. This is because they haven't been taught some specific thing that is related.</p>

<p>I want the students to be more independent in their learning, and to look for that other approach on their own. How can I structure a lesson that would foster independence and give the students the ability to look for a new approach when needed?</p>

<p>The students' level is somewhat advanced high school level. </p>

CC BY-SA 3.0
2017-05-27T12:11:40.787Z
It's really broad as it is, but to try and narrow it you could specify what you want out of a language. You've said "Name a new language I can teach." You should make it more "What is a language that will help kids with xyz"
thesecretmaster
CC BY-SA 3.0
2017-05-27T14:46:29.607Z
Newer is not always better.
beroal
CC BY-SA 3.0
2017-05-27T16:22:33.087Z
@beroal my mistake. I didn't make it clear what kind of `new` I'm talking about
ItamarG3
CC BY-SA 3.0
2017-05-27T17:39:35.447Z
@thesecretmaster not sure I understand the issue you're referring to. I'm not looking for any specific language. I'm trying to teach students to learn things (techniques, algorithms etc.) on their own.
ItamarG3
CC BY-SA 3.0
2017-05-27T17:41:03.280Z
So "How can I teach my students to teach themselves?" That's still a very broad question.
thesecretmaster
CC BY-SA 3.0
2017-05-27T17:43:11.620Z
@thesecretmaster Oh. That's what you mean. I'll try to make it more specific.
ItamarG3
CC BY-SA 3.0
2017-05-27T17:55:57.733Z
My answer might change depending on the ages and background of the students. Can you give a little more context about that?
Ben I.
CC BY-SA 3.0
2017-05-27T18:07:49.033Z
@Choirbean fixed the issue.
ItamarG3
<lesson-ideas><curriculum-design>
Encourage students to be independent
# Encourage students to be independent

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

As is often the case, there is usually more than one way to approach a problem or task.

Currently, my students use what they were taught in the lessons (which is expected). When they stumble upon a problem (e.g. a project that has parts that they are unsure how to approach) they very often get stuck. This is because they haven't been taught some specific thing that is related.

I want the students to be more independent in their learning, and to look for that other approach on their own. How can I structure a lesson that would foster independence and give the students the ability to look for a new approach when needed?

The students' level is somewhat advanced high school level.

**Tags:** lesson-ideas, curriculum-design

> **Comments:**
> **username_1**: It's really broad as it is, but to try and narrow it you could specify what you want out of a language. You've said "Name a new language I can teach." You should make it more "What is a language that will help kids with xyz"  
> **username_2**: Newer is not always better.  
> **username_0**: @username_2 my mistake. I didn't make it clear what kind of `new` I'm talking about  
> **username_0**: @username_1 not sure I understand the issue you're referring to. I'm not looking for any specific language. I'm trying to teach students to learn things (techniques, algorithms etc.) on their own.  
> **username_1**: So "How can I teach my students to teach themselves?" That's still a very broad question.  
> **username_0**: @username_1 Oh. That's what you mean. I'll try to make it more specific.  
> **username_3**: My answer might change depending on the ages and background of the students. Can you give a little more context about that?  
> **username_0**: @Choirbean fixed the issue.  

---

## 6 answers

### Answer by username_6 on 2017-05-27. Score: 8 | Accepted answer

I think there's a few different skills students need for independence, and they require quite different teaching approaches. Independence is the end result but you can't teach it directly.

* Confidence. They need to think it's possible to try out a new toolset and make something. Guiding them prescriptively through a variety of different new tools is a good way to do this, as with @username_9's answer. i.e. Don't teach independence as such but show through example that different and new approaches are possible and not too difficult. Once they've achieved several different projects, even tiny ones, with different technologies they'll be more confident to explore different options rather than use the same thing every time.
* Abstract understanding. The hard bit of programming is thinking about problems and solutions in the right way. Once you know conceptually what you want to do it's much less scary to go find a tool to implement that well, and that conceptual understanding will help guide you through using a new tool. Teaching CS generally addresses this, plus a specific focus on systems design.
* Ability to learn something they don't already know. Reading documentation, using stack overflow, reading blog posts and books. Students need to learn each of these, they're different skills, and they're often not taught well or at all in CS courses. When you can do these things then approaching a new tech is fun rather than daunting.
* Appreciate there's different tools for different jobs. You need to demonstrate, or better have them experience, that some technologies are great for some things and not others. So they know there's worthwhile in exploring different tech. On the one hand, when you have a hammer everything looks like a nail. Conversely though, it's often a lot faster to use a tool you know than learn a whole new one for a small job, even if that tool is 'better'. Negotiating that trade off is an important part of general software development. Part of the fun of being a developer.


---

### Answer by username_7 on 2017-06-06. Score: 4

The best "win" I've had with this is drawing on tables. I gave challenges to my Y12s (about a dozen students). While talking through the problems I was annotating ideas, flowcharting, tracing etc on the tables beside them with a board marker.

Now when I give them a problem they grab a table from the centre of the room and start drawing out ideas. And because they're 'winning' with what they're doing they start going above and beyond.

> **Comments:**
> **username_0**: So you've taught them to think in a project oriented way? Cool.  
> **username_8**: I don't see the obvious 'win' connection which you're suggesting.  
> **username_7**: They are planning better, and so producing better, working solutions. This is a win.  The win for me is they are making the decision to plan themselves rather than just jumping on a computer and starting coding.  

---

### Answer by username_5 on 2017-07-19. Score: 3

I don't think there are shortcuts here—the students just need more foundational knowledge before they can be independent. It takes significant expertise to be able to transfer knowledge to new contexts [[ref](https://www.nap.edu/read/9853/chapter/6)]. Novices have shallow knowledge that is closely tied to shallow features.

As an expert, you have insight into meaningful patterns in your area of expertise. You have also seen many, many different problems and cases that you can relate to current problem-solving. Your knowledge is organized in terms of its applicability to new problems [[ref](https://www.nap.edu/read/9853/chapter/5)]. It seems so straightforward from your perspective!

But think about the challenges facing novices. To them, the problem looks different than anything they've seen because they don't recognize the generalities. Do they even know what words to Google?

I agree with other posters that confidence is necessary. Knowing good resources to use (e.g. user-friendly documentation) also helps. But most important is foundational knowledge. Teach your students well, with many examples, and as they learn more they will begin to seek out knowledge on their own.


---

### Answer by username_9 on 2017-05-27. Score: 3

I think it's hugely beneficial to **create projects that require use of a certain language or technology**, or in other words, don't leave students to their own devices to solve a problem. As a student, I found that learning Java and then moving to "weird" languages like Ocaml really expands how you think of how to solve a problem. Knowing JavaScript is pretty much a requirement in web development. Learning Python can expose students to beautiful, concise ways of solving problems, and opens the door to a lot of machine learning libraries.

I can't count how many times I've read about some technology, dismissed it, then was forced to use it somewhere, and came out thinking, "Huh, that's pretty cool"

> **Comments:**
> **username_0**: So you're saying I simply shouldn't try to teach them to be independent in what they learn?  
> **username_9**: I don't know if independence can be taught per se, but exposing students to multiple languages could encourage them to seek out more unknowns  
> **username_9**: Downvoters: at least explain why you're downvoting. It's not helpful without an explanation  
> **username_10**: @Itamar Green I don't think it's that so much as students may be averse to finding a new technology without seeing a project they can build with it. They can still be independent in a sense, but should be compelled to be independent by virtue of some motivating factor so as to not be dismissive of that which could be challenging, confusing, and/or seemingly irrelevant at first glance. For example, requiring students to use BeautifulSoup for webscraping in Python may lead to seeing its value more than having them find their own library to explore in Python. Too much freedom in the latter.  
> **username_0**: @username_10 I see what you mean. So you're saying that a measure of freedom is a good way to go about it?  
> **username_10**: Precisely. Too much freedom can be paralyzing. Especially for newer/younger programmers, freedom with helpful guidelines/boundaries/constraints is more freeing.  

---

### Answer by username_11 on 2017-05-28. Score: 3

There is an argument for facilitated and directed learning to encourage independence. Students should be allowed to discuss problems and options with their peers in order to make judgements; evidence shows that adults tend to interfere with that process. Ensure activities are hands on and try pairing students.

This may be of interested to help structure a critical thinking approach - Search Kivunjas article Using Dear Bono's Six Thinking Hats Model to Teach Critical Thinking and Problem Solving Essential for Success in the 21st Century Economy.

> **Comments:**
> **username_0**: I see what you're saying, but I'm not quite sure how pairing students would aid them in being more independent. Could you please clarify that?  
> **username_11**: Its about being able to discuss ideas with someone and obtain direction. Sometimes they may have a direction without having to discuss it (but that would assume having the knowledge in the first place). Being able to discuss affirm amongst themselves they are heading in the right direction, and being able to describe what they are doing aids learning.  

---

### Answer by username_4 on 2017-07-19. Score: 0

Early in the process, you should emphasize using and applying documentation. Once the students begin to gain this skill, they can explore APIs and libraries that interest them.

> **Comments:**
> **username_5**: Yes, although they need to have enough conceptual understanding to be able to make sense of the documentation.  
> **username_4**: When we introduce Java strings, we open the docs and start learning how to use the method descriptions. We do a similar thing in a Python or JavaScript class.  

---

