Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-07-19T15:50:14.053Z
Answers.Text: Yes, although they need to have enough conceptual understanding to be able to make sense of the documentation.
Answers.UserDisplayName: nova
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-07-19T21:05:42.080Z
Answers.Text: 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.
Answers.UserDisplayName: ncmathsadist
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-07-19T15:45:52.587Z
Answers.LastActivityDate: 2017-07-19T15:45:52.587Z
Answers.UserDisplayName: ncmathsadist
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T21:56:30.917Z
Answers.LastActivityDate: 2017-05-27T21:56:30.917Z
Answers.UserDisplayName: Rory
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-06-06T17:20:24.050Z
Answers.Text: So you've taught them to think in a project oriented way? Cool.
Answers.UserDisplayName: ItamarG3
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-06-06T17:26:39.540Z
Answers.Text: I don't see the obvious 'win' connection which you're suggesting.
Answers.UserDisplayName: Sean Houlihane
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-06-06T18:03:14.503Z
Answers.Text: 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.
Answers.UserDisplayName: Oli Howson
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-06-06T17:07:43.403Z
Answers.LastActivityDate: 2017-06-06T17:46:11.050Z
Answers.LastEditDate: 2017-06-06T17:46:11.050Z
Answers.UserDisplayName: Oli Howson
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-07-19T15:43:21.477Z
Answers.LastActivityDate: 2017-07-19T15:43:21.477Z
Answers.UserDisplayName: nova
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T18:08:27.693Z
Answers.Text: So you're saying I simply shouldn't try to teach them to be independent in what they learn?
Answers.UserDisplayName: ItamarG3
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T19:00:38.013Z
Answers.Text: 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
Answers.UserDisplayName: BrDaHa
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T19:01:28.013Z
Answers.Text: Downvoters: at least explain why you're downvoting. It's not helpful without an explanation
Answers.UserDisplayName: BrDaHa
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T19:03:12.460Z
Answers.Text: @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.
Answers.UserDisplayName: Peter
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T19:30:18.670Z
Answers.Text: @Peter I see what you mean. So you're saying that a measure of freedom is a good way to go about it?
Answers.UserDisplayName: ItamarG3
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T19:35:21.167Z
Answers.Text: Precisely. Too much freedom can be paralyzing. Especially for newer/younger programmers, freedom with helpful guidelines/boundaries/constraints is more freeing.
Answers.UserDisplayName: Peter
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-27T17:53:45.590Z
Answers.LastActivityDate: 2017-05-27T17:53:45.590Z
Answers.UserDisplayName: BrDaHa
Answers.Body: <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>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-28T07:43:22.863Z
Answers.Text: 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?
Answers.UserDisplayName: ItamarG3
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-28T07:54:30.643Z
Answers.Text: 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.
Answers.UserDisplayName: Dave Russell
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-05-28T07:41:10.260Z
Answers.LastActivityDate: 2017-05-28T07:41:10.260Z
Answers.UserDisplayName: Dave Russell
Body: <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>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T12:11:40.787Z
Comments.Text: 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"
Comments.UserDisplayName: thesecretmaster
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T14:46:29.607Z
Comments.Text: Newer is not always better.
Comments.UserDisplayName: beroal
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T16:22:33.087Z
Comments.Text: @beroal my mistake. I didn't make it clear what kind of `new` I'm talking about
Comments.UserDisplayName: ItamarG3
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T17:39:35.447Z
Comments.Text: @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.
Comments.UserDisplayName: ItamarG3
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T17:41:03.280Z
Comments.Text: So "How can I teach my students to teach themselves?" That's still a very broad question.
Comments.UserDisplayName: thesecretmaster
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T17:43:11.620Z
Comments.Text: @thesecretmaster Oh. That's what you mean. I'll try to make it more specific.
Comments.UserDisplayName: ItamarG3
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T17:55:57.733Z
Comments.Text: My answer might change depending on the ages and background of the students. Can you give a little more context about that?
Comments.UserDisplayName: Ben I.
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-05-27T18:07:49.033Z
Comments.Text: @Choirbean fixed the issue.
Comments.UserDisplayName: ItamarG3
Tags: <lesson-ideas><curriculum-design>
Title: Encourage students to be independent
ThreadText: # 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.  
  
  ---
  
  