Answers.Body: <p>Reviving this old question - there is now a feature to do this.
  Snap! v7.0 was released in December 2021, and has &quot;block reducing&quot; as described here.</p>
  <p>A project creator can (1) create custom block palettes, or (2) filter/hide the blocks that are shown in the block palette. One of the options is to hide all blocks that are unused in the current project. This option can be changed at any time, and stays in place after saving and sharing the project.</p>
  <p>This feature is as an easy way to produce a smaller, more focused environment to code in. That could easily be used for pedagogical reasons: remove distractions for novices; create a Parsons Problem; force students to build the blocks they need to get a job done; etc.</p>
  <p>This feature is called a Snap! &quot;microworld,&quot; maybe a reference to the early computing-education idea from Seymour Papert.</p>
  <p>Release notes: <a href="https://github.com/jmoenig/Snap/releases/tag/v7.0.0" rel="nofollow noreferrer">https://github.com/jmoenig/Snap/releases/tag/v7.0.0</a></p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-22T21:12:46.167Z
Answers.Text: If OP is still around, I hope that they accept this answer.
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-23T07:58:47.537Z
Answers.Text: looks pretty promising!
Answers.UserDisplayName: Jasper
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-12-22T20:54:34.123Z
Answers.LastActivityDate: 2021-12-22T20:54:34.123Z
Answers.UserDisplayName: mdeutschmtl
Answers.Body: <p>This is a bit of a frame-challenge, but what I'm understanding from your question is that your goals here are to: 1) Not overwhelm your students and avoid them getting lost in a plethora of blocks they won't need, 2) Force students to understand how to implement more complex blocks themselves.</p>
  <p>Have you considered instead of providing a restricted version of the language (which, could be complex to install and update and ensure every student is using the same version of), simply providing a list of &quot;recommended&quot; blocks? This could help to achieve your first goal, to act to guide students as to what they'll need for an assignment and avoid them being overwhelmed. And, this still allows students who want to explore a larger set of the languages features to do so if they want, something which I think should be encouraged.</p>
  <p>As for your second goal, this depends on your class but it may be effective to simply create an assignment around implementing more complex built-in blocks and enforce the restriction specifically for that assignment.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2021-03-17T20:16:53.447Z
Answers.LastActivityDate: 2021-03-17T20:16:53.447Z
Answers.UserDisplayName: thesecretmaster
Body: <p>I'm using snap! in my high school computer science class (11th grade, ~16 years old) and I'd like to reduce the features (~blocks) that snap! provides by default. Reasons:</p>
  <ol>
  <li>Simplify the interface</li>
  <li>Many blocks are not needed (not &quot;allowed&quot;) according to the curriculum</li>
  <li>I'd like to have the students see/develop the need for some blocks that simplify tasks (&quot;index of ... in list&quot; would be a good example), and have them implement them on their own.</li>
  </ol>
  <p>I started digging through the code, but there has to be an easier way?</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-03-17T20:00:27.837Z
Comments.Text: I'm not super familiar with Snap! but it seems to me like it might be possible simply by removing elements from some of the files in the [libraries directory](https://github.com/jmoenig/Snap/tree/master/libraries)? It appears that [this file](https://github.com/jmoenig/Snap/blob/master/libraries/LIBRARIES) is a list of what functionality is in which XML file in the library folder.
Comments.UserDisplayName: thesecretmaster
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2021-03-17T20:42:36.257Z
Comments.Text: One of the creators is Brian Harvey of UCBerkeley. He has an active web page there with a visible email address. Maybe he would be willing to help. He is retired but spent his career catering to beginners.
Comments.UserDisplayName: Buffy
Tags: <secondary-education><snap>
Title: Reduce snap!'s features
ThreadText: # Reduce snap!'s features
  
  (Asked by: username_0 on 2021-03-17)
  
  I'm using snap! in my high school computer science class (11th grade, ~16 years old) and I'd like to reduce the features (~blocks) that snap! provides by default. Reasons:
  
  1. Simplify the interface
  2. Many blocks are not needed (not "allowed") according to the curriculum
  3. I'd like to have the students see/develop the need for some blocks that simplify tasks ("index of ... in list" would be a good example), and have them implement them on their own.
  
  I started digging through the code, but there has to be an easier way?
  
  **Tags:** secondary-education, snap
  
  > **Comments:**
  > **username_1**: I'm not super familiar with Snap! but it seems to me like it might be possible simply by removing elements from some of the files in the [libraries directory](https://github.com/jmoenig/Snap/tree/master/libraries)? It appears that [this file](https://github.com/jmoenig/Snap/blob/master/libraries/LIBRARIES) is a list of what functionality is in which XML file in the library folder.  
  > **username_2**: One of the creators is Brian Harvey of UCBerkeley. He has an active web page there with a visible email address. Maybe he would be willing to help. He is retired but spent his career catering to beginners.  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_3 on 2021-12-22. Score: 2 | Accepted answer
  
  Reviving this old question - there is now a feature to do this.
  Snap! v7.0 was released in December 2021, and has "block reducing" as described here.
  
  A project creator can (1) create custom block palettes, or (2) filter/hide the blocks that are shown in the block palette. One of the options is to hide all blocks that are unused in the current project. This option can be changed at any time, and stays in place after saving and sharing the project.
  
  This feature is as an easy way to produce a smaller, more focused environment to code in. That could easily be used for pedagogical reasons: remove distractions for novices; create a Parsons Problem; force students to build the blocks they need to get a job done; etc.
  
  This feature is called a Snap! "microworld," maybe a reference to the early computing-education idea from Seymour Papert.
  
  Release notes: <https://github.com/jmoenig/Snap/releases/tag/v7.0.0>
  
  > **Comments:**
  > **username_4**: If OP is still around, I hope that they accept this answer.  
  > **username_0**: looks pretty promising!  
  
  ---
  
  ### Answer by username_1 on 2021-03-17. Score: 2
  
  This is a bit of a frame-challenge, but what I'm understanding from your question is that your goals here are to: 1) Not overwhelm your students and avoid them getting lost in a plethora of blocks they won't need, 2) Force students to understand how to implement more complex blocks themselves.
  
  Have you considered instead of providing a restricted version of the language (which, could be complex to install and update and ensure every student is using the same version of), simply providing a list of "recommended" blocks? This could help to achieve your first goal, to act to guide students as to what they'll need for an assignment and avoid them being overwhelmed. And, this still allows students who want to explore a larger set of the languages features to do so if they want, something which I think should be encouraged.
  
  As for your second goal, this depends on your class but it may be effective to simply create an assignment around implementing more complex built-in blocks and enforce the restriction specifically for that assignment.
  
  
  ---
  
  