Repository: TEALSK12/introduction-to-computer-science
Branch: master
Commit: 6a9db3c07b14
Files: 499
Total size: 1.1 MB
Directory structure:
gitextract_ikmzkwy5/
├── .gitignore
├── CSTA-content-matrix-9-12.docx
├── CSTA_standards_mapping.md
├── Changelog.md
├── Country-n-State.txt
├── Excel-Randomizer.xlsx
├── GLOSSARY.md
├── Grudgeball.md
├── Project 1 - Nursery Rhyme.docx
├── Projects/
│ └── Projects Word/
│ ├── Platform_Game_Planning_Worksheet.docx
│ ├── Project 1 Storytelling.docx
│ ├── Project 2 Pong.docx
│ ├── Project 3 Platform Game Easy.docx
│ ├── Project 3 Platform Game.docx
│ ├── Project 4 Guessmyword.docx
│ ├── Project 4 Snowman.docx
│ ├── Project 5 Space Invaders.docx
│ ├── Project 6 Final Project.docx
│ ├── Project_ 2_alternative.docx
│ ├── Project_2_Pong_Planning_Worksheet.docx
│ ├── Project_4_Guessmyword_Planning_Worksheet.docx
│ └── project_5.docx
├── README.md
├── SNAP Program Design and Planning Worksheet.docx
├── Snap Tips.docx
├── TEALS Intro CS Curriculum Guide - handout.docx
├── Unit 0/
│ ├── IntrotoCSSyllabusExample.docx
│ ├── Student Experiences Survey.docx
│ ├── lab_04.docx
│ └── lab_05.docx
├── Unit 1 Word/
│ ├── Helping Trios.docx
│ ├── Lab 1.1 Welcome To SNAP.docx
│ ├── Lab 1.2 SNAP Scavenger Hunt.docx
│ ├── Lab 1.3 Squares Triangles.docx
│ └── Lab 1.4 Sprites in Action.docx
├── Unit 2 Word/
│ ├── Lab 2.1 Triangles and Squares Redux.docx
│ ├── Lab 2.2 Another Brick in the Wall.docx
│ ├── Lab 2.2 Yellow Brick Road.docx
│ ├── Lab 2.3 What Shape Is That.docx
│ ├── Lab 2.4 Guessing Game.docx
│ └── Lab 2.5 Triangles of All Kinds.docx
├── Unit 3 Word/
│ ├── Lab 3.1 Drawing Shapes Again.docx
│ ├── Lab 3.2 What Goes Up.docx
│ ├── Lab 3.3 Let Me Check My Calendar.docx
│ ├── Lab 3.4 If My Calculations Are Correct.docx
│ └── Lab 3.4 The Technicolor Window.docx
├── Unit 4 Word/
│ ├── Lab 4.2 You Talkin To Me.docx
│ ├── Lab 4.3 Guess Who.docx
│ ├── Lab 4.4 Number Cruncher.docx
│ ├── Lab 4.5 Its Around Here Somewhere.docx
│ └── SNAP Lists Components.docx
├── Unit 5 Word/
│ ├── Lab 5.1 Connect the Dots.docx
│ ├── Lab 5.2 Lots of Balls.docx
│ └── Lab 5.3 Fewer Balls.docx
├── Unit 6 PDF/
│ └── Final Project Development Plan.docx
├── Unit 6 Word/
│ ├── Final Project Development Plan.docx
│ ├── Final Project Plan Organizer.docx
│ ├── Project Feedback Form.docx
│ └── TEALS Final Project Design Steps.docx
├── Video Resources.md
├── additional_curriculum_resources.md
├── bjc_videosuggestions.md/
│ └── bjcvideosuggestions.md
├── book.json
├── chapter1.md
├── contributing.md
├── create-book.cmd
├── culture_day_lesson_a.md
├── culture_day_lesson_b.md
├── culture_day_lesson_c.md
├── culture_day_lesson_d.md
├── curriculum_map.md
├── do_now_04.md
├── do_now_05.md
├── do_now_11.md
├── do_now_12.md
├── do_now_13.md
├── do_now_14.md
├── do_now_15.md
├── do_now_152.md
├── do_now_153.md
├── do_now_21.md
├── do_now_22.md
├── do_now_23.md
├── do_now_24.md
├── do_now_25.md
├── do_now_26.md
├── do_now_31.md
├── do_now_32.md
├── do_now_33.md
├── do_now_34.md
├── do_now_42.md
├── do_now_43.md
├── do_now_44.md
├── do_now_45.md
├── do_now_46.md
├── do_now_52.md
├── do_now_53.md
├── docs/
│ ├── .gitignore
│ ├── CSTA-content-matrix-9-12.docx
│ ├── CSTA_standards_mapping.md.html
│ ├── Changelog.md.html
│ ├── Country-n-State.txt
│ ├── Excel-Randomizer.xlsx
│ ├── Final Project Development Plan.docx
│ ├── Final Project Plan Organizer.docx
│ ├── GLOSSARY.md.html
│ ├── Grudgeball.md.html
│ ├── Project 1 - Nursery Rhyme.docx
│ ├── Projects/
│ │ └── Projects Word/
│ │ ├── Platform_Game_Planning_Worksheet.docx
│ │ ├── Project 1 Storytelling.docx
│ │ ├── Project 2 Pong.docx
│ │ ├── Project 3 Platform Game Easy.docx
│ │ ├── Project 3 Platform Game.docx
│ │ ├── Project 4 Guessmyword.docx
│ │ ├── Project 4 Hangman.docx
│ │ ├── Project 4 Snowman.docx
│ │ ├── Project 5 Space Invaders.docx
│ │ ├── Project 6 Final Project.docx
│ │ ├── Project_ 2_alternative.docx
│ │ ├── Project_2_Pong_Planning_Worksheet.docx
│ │ ├── Project_4_Guessmyword_Planning_Worksheet.docx
│ │ └── Project_4_Hangman_Planning_Worksheet.docx
│ ├── SNAP Program Design and Planning Worksheet.docx
│ ├── SUMMARY.md.html
│ ├── Snap Tips.docx
│ ├── TEALS Intro CS Curriculum Guide - handout.docx
│ ├── Unit 0/
│ │ ├── IntrotoCSSyllabusExample.docx
│ │ ├── Lab 0.4.docx
│ │ ├── Student Experiences Survey.docx
│ │ ├── lab_04.docx
│ │ └── lab_05.docx
│ ├── Unit 1 Word/
│ │ ├── Helping Trios.docx
│ │ ├── Lab 1.1 Welcome To SNAP.docx
│ │ ├── Lab 1.2 SNAP Scavenger Hunt.docx
│ │ ├── Lab 1.3 Squares Triangles.docx
│ │ └── Lab 1.4 Sprites in Action.docx
│ ├── Unit 2 Word/
│ │ ├── Lab 2.1 Triangles and Squares Redux.docx
│ │ ├── Lab 2.2 Another Brick in the Wall.docx
│ │ ├── Lab 2.2 Yellow Brick Road.docx
│ │ ├── Lab 2.3 What Shape Is That.docx
│ │ ├── Lab 2.4 Guessing Game.docx
│ │ └── Lab 2.5 Triangles of All Kinds.docx
│ ├── Unit 3 Word/
│ │ ├── Lab 3.1 Drawing Shapes Again.docx
│ │ ├── Lab 3.2 What Goes Up.docx
│ │ ├── Lab 3.3 Let Me Check My Calendar.docx
│ │ ├── Lab 3.4 If My Calculations Are Correct.docx
│ │ └── Lab 3.4 The Technicolor Window.docx
│ ├── Unit 4 Word/
│ │ ├── Lab 4.2 You Talkin To Me.docx
│ │ ├── Lab 4.3 Guess Who.docx
│ │ ├── Lab 4.4 Number Cruncher.docx
│ │ ├── Lab 4.5 Its Around Here Somewhere.docx
│ │ ├── Project 4 Guessmyword.docx
│ │ └── SNAP Lists Components.docx
│ ├── Unit 5 Word/
│ │ ├── Lab 5.1 Connect the Dots.docx
│ │ ├── Lab 5.2 Lots of Balls.docx
│ │ └── Lab 5.3 Fewer Balls.docx
│ ├── Unit 6 PDF/
│ │ └── Final Project Development Plan.docx
│ ├── Unit 6 Word/
│ │ ├── Final Project Development Plan.docx
│ │ ├── Final Project Plan Organizer.docx
│ │ ├── Project Feedback Form.docx
│ │ └── TEALS Final Project Design Steps.docx
│ ├── Video Resources.md.html
│ ├── additional_curriculum_resources.md.html
│ ├── appendix-bjc-video-lectures.md.html
│ ├── bjc_videosuggestions.md/
│ │ └── bjcvideosuggestions.md
│ ├── book.json
│ ├── chapter1.md.html
│ ├── contributing.md.html
│ ├── create-book.cmd
│ ├── culture_day_lesson_a.md.html
│ ├── culture_day_lesson_b.md.html
│ ├── culture_day_lesson_c.md.html
│ ├── culture_day_lesson_d.md.html
│ ├── curriculum_map.md.html
│ ├── custom-reference.docx
│ ├── do_now_04.md.html
│ ├── do_now_05.md.html
│ ├── do_now_11.md.html
│ ├── do_now_12.md.html
│ ├── do_now_13.md.html
│ ├── do_now_14.md.html
│ ├── do_now_15.md.html
│ ├── do_now_152.md.html
│ ├── do_now_153.md.html
│ ├── do_now_21.md.html
│ ├── do_now_22.md.html
│ ├── do_now_23.md.html
│ ├── do_now_24.md.html
│ ├── do_now_25.md.html
│ ├── do_now_26.md.html
│ ├── do_now_31.md.html
│ ├── do_now_32.md.html
│ ├── do_now_33.md.html
│ ├── do_now_34.md.html
│ ├── do_now_42.md.html
│ ├── do_now_43.md.html
│ ├── do_now_44.md.html
│ ├── do_now_45.md.html
│ ├── do_now_46.md.html
│ ├── do_now_52.md.html
│ ├── do_now_53.md.html
│ ├── helping_trios.md.html
│ ├── helping_trios_handout.md.html
│ ├── index.html
│ ├── intro-book-complete.docx
│ ├── lab_04.md.html
│ ├── lab_05.md.html
│ ├── lab_11.md.html
│ ├── lab_12.md.html
│ ├── lab_13.md.html
│ ├── lab_14.docx
│ ├── lab_14.md.html
│ ├── lab_21.md.html
│ ├── lab_22.docx
│ ├── lab_22.md.html
│ ├── lab_23.md.html
│ ├── lab_24.docx
│ ├── lab_24.md.html
│ ├── lab_25.md.html
│ ├── lab_31.md.html
│ ├── lab_32.docx
│ ├── lab_32.md.html
│ ├── lab_33.md.html
│ ├── lab_34.md.html
│ ├── lab_42.md.html
│ ├── lab_43.md.html
│ ├── lab_44.docx
│ ├── lab_44.md.html
│ ├── lab_45.md.html
│ ├── lab_51.md.html
│ ├── lab_52.md.html
│ ├── lab_53.md.html
│ ├── lab_day_lesson.md.html
│ ├── lesson_01.md.html
│ ├── lesson_02.md.html
│ ├── lesson_03.md.html
│ ├── lesson_04.md.html
│ ├── lesson_05.md.html
│ ├── lesson_11.md.html
│ ├── lesson_12.md.html
│ ├── lesson_13.md.html
│ ├── lesson_14.docx
│ ├── lesson_14.md.html
│ ├── lesson_15.md.html
│ ├── lesson_21.html
│ ├── lesson_21.md.html
│ ├── lesson_22.md.html
│ ├── lesson_23.md.html
│ ├── lesson_24.md.html
│ ├── lesson_25.md.html
│ ├── lesson_26.md.html
│ ├── lesson_31.md.html
│ ├── lesson_32.md.html
│ ├── lesson_33.md.html
│ ├── lesson_34.md.html
│ ├── lesson_35.md.html
│ ├── lesson_41.md.html
│ ├── lesson_42.md.html
│ ├── lesson_43.md.html
│ ├── lesson_44.md.html
│ ├── lesson_45.md.html
│ ├── lesson_46.md.html
│ ├── lesson_51.md.html
│ ├── lesson_52.md.html
│ ├── lesson_53.md.html
│ ├── lesson_54.md.html
│ ├── lesson_61.md.html
│ ├── lesson_62.md.html
│ ├── lesson_63.md.html
│ ├── lesson_64.md.html
│ ├── lesson_65.md.html
│ ├── lesson_66.md.html
│ ├── markdeep-footer-tocstyle-none.txt
│ ├── markdeep-footer.txt
│ ├── markdeep-header.txt
│ ├── master_vocab.md.html
│ ├── md-to-markdeep.cmd
│ ├── project_1.md.html
│ ├── project_2.md.html
│ ├── project_2_alternative.md.html
│ ├── project_3.md.html
│ ├── project_3_platform_game_easy.md.html
│ ├── project_4.md.html
│ ├── project_5.md.html
│ ├── project_6.md.html
│ ├── quiz_1.md.html
│ ├── quiz_2.md.html
│ ├── quiz_3.md.html
│ ├── quiz_4.md.html
│ ├── quiz_5.md.html
│ ├── reference.docx
│ ├── slidedecks/
│ │ ├── TEALS SNAP 0.1.pptx
│ │ ├── TEALS SNAP 0.2.pptx
│ │ ├── TEALS SNAP 0.3.pptx
│ │ ├── TEALS SNAP 0.4.pptx
│ │ ├── TEALS SNAP 0.5.pptx
│ │ ├── TEALS SNAP 1.1.pptx
│ │ ├── TEALS SNAP 1.2.pptx
│ │ ├── TEALS SNAP 1.3.pptx
│ │ ├── TEALS SNAP 1.4.pptx
│ │ ├── TEALS SNAP 1.5.pptx
│ │ ├── TEALS SNAP 2.1.pptx
│ │ ├── TEALS SNAP 2.2.pptx
│ │ ├── TEALS SNAP 2.3.pptx
│ │ ├── TEALS SNAP 2.4.pptx
│ │ ├── TEALS SNAP 2.5.pptx
│ │ ├── TEALS SNAP 3.1.pptx
│ │ ├── TEALS SNAP 3.2.pptx
│ │ ├── TEALS SNAP 3.3.pptx
│ │ ├── TEALS SNAP 3.4.pptx
│ │ ├── TEALS SNAP 4.1.pptx
│ │ ├── TEALS SNAP 4.2.pptx
│ │ ├── TEALS SNAP 4.3.pptx
│ │ ├── TEALS SNAP 4.4.pptx
│ │ ├── TEALS SNAP 4.5.pptx
│ │ ├── TEALS SNAP 5.1.pptx
│ │ ├── TEALS SNAP 5.2.pptx
│ │ ├── TEALS SNAP 5.3.pptx
│ │ └── spaceman.pptx
│ ├── startercode.md.html
│ ├── student_notes_01.md.html
│ ├── student_notes_02.md.html
│ ├── student_notes_03.md.html
│ ├── student_notes_04.md.html
│ ├── student_notes_11.md.html
│ ├── student_notes_12.md.html
│ ├── student_notes_13.md.html
│ ├── student_notes_14.md.html
│ ├── student_notes_15.md.html
│ ├── student_notes_21.md.html
│ ├── student_notes_22.md.html
│ ├── student_notes_23.md.html
│ ├── student_notes_24.md.html
│ ├── student_notes_25.md.html
│ ├── student_notes_31.md.html
│ ├── student_notes_32.md.html
│ ├── student_notes_33.md.html
│ ├── student_notes_34.md.html
│ ├── student_notes_35.md.html
│ ├── student_notes_41.md.html
│ ├── student_notes_42.md.html
│ ├── student_notes_43.md.html
│ ├── student_notes_44.md.html
│ ├── student_notes_45.md.html
│ ├── student_notes_46.md.html
│ ├── student_notes_51.md.html
│ ├── student_notes_52.md.html
│ ├── student_notes_53.md.html
│ ├── student_notes_54.md.html
│ ├── student_notes_61.md.html
│ ├── student_notes_62.md.html
│ ├── student_notes_63.md.html
│ ├── student_notes_64.md.html
│ ├── student_notes_65.md.html
│ ├── student_notes_66.md.html
│ ├── styles/
│ │ ├── curriculum.css
│ │ └── pdf.css
│ ├── tools/
│ │ ├── create-book-Pandoc.cmd
│ │ └── create-book.cmd
│ ├── unit_0.md.html
│ ├── unit_0_tips.md.html
│ ├── unit_1.md.html
│ ├── unit_1_tips.md.html
│ ├── unit_2.md.html
│ ├── unit_2_tips.md.html
│ ├── unit_3.md.html
│ ├── unit_3_tips.md.html
│ ├── unit_4.md.html
│ ├── unit_4_tips.md.html
│ ├── unit_5.md.html
│ ├── unit_5_tips.md.html
│ ├── unit_6.md.html
│ ├── unit_6_tips.md.html
│ └── wordlist.txt
├── helping_trios.md
├── helping_trios_handout.md
├── intro-book-complete.docx
├── lab_04.md
├── lab_05.md
├── lab_11.md
├── lab_12.md
├── lab_13.md
├── lab_14.md
├── lab_21.md
├── lab_22.md
├── lab_23.md
├── lab_24.md
├── lab_25.md
├── lab_31.md
├── lab_32.md
├── lab_33.md
├── lab_34.md
├── lab_42.md
├── lab_43.md
├── lab_44.md
├── lab_45.md
├── lab_51.md
├── lab_52.md
├── lab_53.md
├── lab_day_lesson.md
├── lesson_01.md
├── lesson_02.md
├── lesson_03.md
├── lesson_04.md
├── lesson_05.md
├── lesson_11.md
├── lesson_12.md
├── lesson_13.md
├── lesson_14.md
├── lesson_15.md
├── lesson_21.md
├── lesson_22.md
├── lesson_23.md
├── lesson_24.md
├── lesson_25.md
├── lesson_26.md
├── lesson_31.md
├── lesson_32.md
├── lesson_33.md
├── lesson_34.md
├── lesson_35.md
├── lesson_41.md
├── lesson_42.md
├── lesson_43.md
├── lesson_44.md
├── lesson_45.md
├── lesson_46.md
├── lesson_51.md
├── lesson_52.md
├── lesson_53.md
├── lesson_54.md
├── lesson_61.md
├── lesson_62.md
├── lesson_63.md
├── lesson_64.md
├── lesson_65.md
├── lesson_66.md
├── markdeep-footer-tocstyle-none.txt
├── markdeep-footer.txt
├── markdeep-header.txt
├── master_vocab.md
├── md-to-markdeep.cmd
├── project_1.md
├── project_2.md
├── project_2_alternative.md
├── project_3.md
├── project_3_platform_game_easy.md
├── project_4.md
├── project_5.md
├── project_6.md
├── quiz_1.md
├── quiz_2.md
├── quiz_3.md
├── quiz_4.md
├── quiz_5.md
├── reference.docx
├── slidedecks/
│ ├── TEALS SNAP 0.1.pptx
│ ├── TEALS SNAP 0.2.pptx
│ ├── TEALS SNAP 0.3.pptx
│ ├── TEALS SNAP 0.4.pptx
│ ├── TEALS SNAP 0.5.pptx
│ ├── TEALS SNAP 1.1.pptx
│ ├── TEALS SNAP 1.2.pptx
│ ├── TEALS SNAP 1.3.pptx
│ ├── TEALS SNAP 1.4.pptx
│ ├── TEALS SNAP 1.5.pptx
│ ├── TEALS SNAP 2.1.pptx
│ ├── TEALS SNAP 2.2.pptx
│ ├── TEALS SNAP 2.3.pptx
│ ├── TEALS SNAP 2.4.pptx
│ ├── TEALS SNAP 2.5.pptx
│ ├── TEALS SNAP 3.1.pptx
│ ├── TEALS SNAP 3.2.pptx
│ ├── TEALS SNAP 3.3.pptx
│ ├── TEALS SNAP 3.4.pptx
│ ├── TEALS SNAP 4.1.pptx
│ ├── TEALS SNAP 4.2.pptx
│ ├── TEALS SNAP 4.3.pptx
│ ├── TEALS SNAP 4.4.pptx
│ ├── TEALS SNAP 4.5.pptx
│ ├── TEALS SNAP 5.1.pptx
│ ├── TEALS SNAP 5.2.pptx
│ ├── TEALS SNAP 5.3.pptx
│ └── spaceman.pptx
├── startercode.md
├── student_notes_01.md
├── student_notes_02.md
├── styles/
│ ├── curriculum.css
│ └── pdf.css
├── tools/
│ ├── create-book-Pandoc.cmd
│ └── create-book.cmd
├── unit_0.md
├── unit_0_tips.md
├── unit_2.md
├── unit_3.md
├── unit_4.md
├── unit_5.md
├── unit_6.md
└── wordlist.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
/.idea/
/.vscode/
================================================
FILE: CSTA_standards_mapping.md
================================================
# TEALS Intro to Computer Science
In this document, we have put together a mapping to Computer Science Teachers Association(CSTA) curriculum standards.
## CSTA Standards Mapping
Here you can find the curriculum standards to reference: [https://www.csteachers.org/page/standards](https://www.csteachers.org/page/standards)
## Unit 0: Beginnings
| Lesson | Standards |
| ------ | ---------- |
| [0.1: The First Day of School][] | 3A- CS-01 |
| [0.2: Algorithms][] | 3B-AP-11, 3A-AP-13|
| [0.3: Programming Languages][] | 3A-CS-02 |
| [0.4: Self-Portrait][] | 3A-AP-13, 3B-AP-14|
| [0.5: Coordinate System][] | 3A-AP-13 |
## Unit 1: Basics
| Lesson | Standards |
| ------ | ---------- |
| [1.1: Welcome to Snap!][] | 3A-AP-13 |
| [1.2: Building Blocks][] | 3A-DA-11 |
| [1.3: Drawing Shapes][] | 3A-AP-13 |
| [1.4: Animation][] | 3A-AP-23 |
| [1.5: Storytelling Project][] | 3A-AP-13, 3A-AP-16, 3A-CS-03 |
| [Culture Day Lesson A: Video/Reading][] | 3A-IC-24 |
## Unit 2: Loop-de-Loop
| Lesson | Standards |
| ------ | ---------- |
| [2.1: Loops][] | 3A-AP-16 |
| [2.2: Nested Loops][] | 3A-AP-16 |
| [2.3: Inputs and Conditionals][] | 3A-AP-16 |
| [2.4: Variables][] | 3A-AP-16, 3A-AP-23 |
| [2.5: Boole in the House][] | 3A-AP-16 |
| [2.6: Pong Project][] | 3A-AP-13, 3A-AP-16, 3A-AP-17, 3A-AP-23, 3A-CS-03 |
| [Culture Day Lesson B: Student Research Project/Presentation][] | 3A-IC-27 |
## Unit 3: Abstraction and Customization
| Lesson | Standards |
| ------ | ---------- |
| [3.1: Abstraction and Generalization][] | 3A-CS-01 |
| [3.2: Combining Loops and Conditionals][] | 3A-AP-16 |
| [3.3: Customization I: Arguments][] | 3A-AP-23 |
| [3.4: Customization II: Reporters and Predicates][] | 3A-AP-16 |
| [3.5: Platform Game Project][] | 3A-AP-13, 3A-AP-15, 3A-AP-16, 3A-DA-12 |
| [Culture Day Lesson C: My Skills and Interests Journal][] | 3A-IC-24 |
## Unit 4: Lists
| Lesson | Standards |
| ------ | ---------- |
| [4.1: Intro to Lists][] | 3A-AP-14 |
| [4.2: Static Lists][] | 3A-AP-14 |
| [4.3: List Practice I][] | 3A-AP-14 |
| [4.4: List Practice II][] | 3A-AP-14 |
| [4.5: Sequential Search][] | 3A-AP-13 |
| [4.6: Guess My Word Project][] | 3B-AP-09, 3A-AP-13, 3A-AP-14, 3A-AP-18, 3A-AP-23, 3A-CS-03 |
| [Culture Day Lesson D: Interview with People in Technology][] | 3A-IC-27 |
## Unit 5: Cloning
| Lesson | Standards |
| ------ | ---------- |
| [5.1: Intro to Cloning][] | 3B-AP-14 |
| [5.2: Cloning Sprites][] | 3B-AP-16 |
| [5.3: Communicating With Clones][] | 3A-DA-12 |
| [5.4: Space Invaders Project][] | 3A-AP-13, 3A-AP-14, 3A-DA-12, 3B-AP-14, 3B-AP-15, 3A-CS-03 |
## Unit 6: Final Project
| Lesson | Standards |
| ------ | ---------- |
| [6.1: Design Basics][] | 3A-AP-13 |
| [6.2: Research and Ideate][] | 3B-AP-17 |
| [6.3: Defining Requirements][] | 3B-AP-15 |
| [6.4: Building a Plan][] | 3B-AP-15 |
| [6.5: Project Implementation][] | 3A-AP-13, 3B-AP-15, 3B-AP-08, 3B-AP-09, 3B-AP-17, 3B-AP-20, 3B-AP-21, 3B-AP-23, 3A-CS-03 |
| [6.6: Project Sharing][] | |
[0.1: The First Day of School]:lesson_01.md
[0.2: Algorithms]:lesson_02.md
[0.3: Programming Languages]:lesson_03.md
[0.4: Self-Portrait]:lesson_04.md
[0.5: Coordinate System]:lesson_05.md
[1.1: Welcome to Snap!]:lesson_11.md
[1.2: Building Blocks]:lesson_12.md
[1.3: Drawing Shapes]:lesson_13.md
[1.4: Animation]:lesson_14.md
[1.5: Storytelling Project]:lesson_15.md
[Culture Day Lesson A: Video/Reading]:culture_day_lesson_a.md
[2.1: Loops]:lesson_21.md
[2.2: Nested Loops]:lesson_22.md
[2.3: Inputs and Conditionals]:lesson_23.md
[2.4: Variables]:lesson_24.md
[2.5: Boole in the House]:lesson_25.md
[2.6: Pong Project]:lesson_26.md
[Culture Day Lesson B: Student Research Project/Presentation]:culture_day_lesson_b.md
[3.1: Abstraction and Generalization]:lesson_31.md
[3.2: Combining Loops and Conditionals]:lesson_32.md
[3.3: Customization I: Arguments]:lesson_33.md
[3.4: Customization II: Reporters and Predicates]:lesson_34.md
[3.5: Platform Game Project]:lesson_35.md
[Culture Day Lesson C: My Skills and Interests Journal]:culture_day_lesson_c.md
[4.1: Intro to Lists]:lesson_41.md
[4.2: Static Lists]:lesson_42.md
[4.3: List Practice I]:lesson_43.md
[4.4: List Practice II]:lesson_44.md
[4.5: Sequential Search]:lesson_45.md
[4.6: Guess My Word Project]:lesson_46.md
[Culture Day Lesson D: Interview with People in Technology]:culture_day_lesson_d.md
[5.1: Intro to Cloning]:lesson_51.md
[5.2: Cloning Sprites]:lesson_52.md
[5.3: Communicating with Clones]:lesson_53.md
[5.4: Space Invaders Project]:lesson_54.md
[6.1: Design Basics]:lesson_61.md
[6.2: Research and Ideate]:lesson_62.md
[6.3: Defining Requirements]:lesson_63.md
[6.4: Building a Plan]:lesson_64.md
[6.5: Project Implementation]:lesson_65.md
[6.6: Project Sharing]:lesson_66.md
================================================
FILE: Changelog.md
================================================
# Change Log
## [2.2.5] - 2022-5-12
|Unit | Change |
|---------|--------|
| 1 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 2 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 3 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 4 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 5 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 6 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
## [2.2.4] - 2022-1-25
|Unit | Change |
|---------|--------|
| All files | Added discussion link to top navigation |
| 1.5 Slide deck | Link added in lesson 1.5 and review slide updated. |
| Unit 1 tips | seperate page delete and added directly into lesson page. |
| Lesson 1.5 | Grudgeball link removed and instructions added directly to slide deck. |
| All lessons | Continued alignment to the Microsoft Style guide. |
## [2.2.3] - 2021-10-09
|Unit | Change |
|---------|--------|
| All lessons, labs, projects and do nows | Aligned to MS style guide |
| Slide decks | Added a .zip of all slide decks to be downloaded at once. |
| Unit 0 | Lab .docx and .pdf aligned to Teals branding |
| Culture day lessons | updated for clarity |
## [2.2.2] - 2021-6-10
|Unit | Change |
|---------|--------|
| All lessons| removed reference to TEALS forum |
| Images | naming convention consistency aligned |
| Curriculum Map | CSTA standards alignment added |
| Curriculum Map | Master word list added |
## [2.2.1] - 2020-11-25
|Unit | Change |
|---------|--------|
|Lesson 1.4 | Updated guidance with images to the Broadcast and Wait instructions |
|Lab 1.4 | Update Rubric, instructions and answer key to set expectations to using `Broadcast` in the solution. |
|Unit 6| Removed references to Agile |
|Unit 6| Added Project specs to each lesson for consistency |
|Lesson 6.6 | Added |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 4.4, 4.5 |
## [2.2.0] - 2020-11-13
|Unit | Change |
|---------|--------|
|Lessons 4.1 - 4.5| Wording consistency, spelling updates |
|Labs 4.2 - 4.5 | Formatting, wording consistency, Creative Common and TEALS Branding |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 4.2, 4.3 |
## [2.1.9] - 2020-10-23
|Unit | Change |
|---------|--------|
|Lessons 2.1 - 3.4| Wording consistency, spelling updates |
|Labs 2.1 - 3.4 | Formatting, wording consistency, Creative Common and TEALS Branding |
|Lab 3.4 | Distance Formula changed to Bonus problem. |
|2.4 Slide Deck | Boolean Operators introduction video added and updates instruction |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 2.1, 2.3, 2.4, 2.5, 3.1, 3.3, 3.4 |
## [2.1.8] - 2020-10-16
|Unit | Change |
|---------|--------|
|Curriculum Map | Objectives aligned to lesson plans|
|Lesson 1.4| Updated lab instructions to be more clear, added instruction on how to add a second sprite. |
|Unit 3| Updated title to Abstraction and customization |
|Lesson 1.3 | Updates to Do now and lab instructions |
|Lab 2.1 | Formatting Updates |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 1,1, 1.2, 1.3, 1.4, 2.2, 3.2 |
## [2.1.7] - 2020-10-7
|Unit | Change |
|---------|--------|
|Curriculum Map | Added Guidance on where to find answer keys|
|All Units| Snap! Spelling Consistent across HTML files|
|Unit 1 | Labs 1.1, 1.2, 3.2 Answer Keys added to additional curriculum Materials |
|Helping Trios Activity | Restructured and Remote Guidance Added |
|Lab 3.2 | Added Scoring rubric and updated wording to be more concise |
## [2.1.6] - 2020-9-16
|Unit | Change |
|---------|--------|
|Curriculum Map | Reformatted page with a days column for consolidation and consistency, moved PPTs to lesson pages|
|CSS | Updated CSS so that tables will align left and slightly more appealing to look at|
|Units 1-3| Added Video Resources and Video Quizzes |
|All Units| Spelling and Grammatic updates|
|All Lessons| consistently referenced all materials and resources in the Materials and Prep Section|
|Unit 1| fixed some formatting of images issue|
|Lesson 0.5| Added a lesson on the Snap! Coordinate system to enhance inclusivity for any high school student with built in scaffolding support|
|Unit 2|Expended scaffolding support for Exterior Angles of Polygons to increase inclusivity for any high school student|
|Unit 0 and Curriculum Map| Added Template Syllabus |
|Curriculum Map | Added link to Master Vocabulary List in accordance to UDP|
|Unit 0 and Unit 1| Added Remote Guidance for classroom instruction Activities|
## [2.1.5] - 2020-08-28
|Unit | Change |
|---------|--------|
|Unit 0 | Added Resources for Creating an account, saving and sharing in Snap!|
|Unit 0 | Added Video Resource for saving and sharing in Snap! |
|Unit 1| Adding Scaffolding Accommodations for finding the Exterior angle of a shape|
|Unit 1| Replace Do Now 1.3 Snap! Starter Code due to broken link|
|Unit 1| Added Grace Hopper Summary Video|
|Unit 1| fixed some formatting of images issue|
## [2.1.4] - 2020-08-27
|Unit | Change |
|---------|--------|
|Unit 4| Added Slide decks|
|Unit 2| Added context to 2.4 Do Now|
|Unit 4| Aligned the name of Project|
|Unit 0| Added Scaffolding Lesson 0.5 Snap! Coordinate System|
## [2.1.3] - 2020-05-20
|Unit | Change |
|---------|--------|
|Unit 0| Added Slide decks|
|Unit 1| Added Slide decks|
|Unit 2| Added Slide decks|
|Unit 3| Added Slide decks|
|Unit 5| Added Slide decks|
|Unit 2| removed 2.6|
|Unit 3| Combined 3.1/3.2 and changed name to 3.1 Abstraction and Generalization |
|Unit 3| Moved 2.6 to 3.2|
## [2.1.2] - 2018-11-28
|Unit | Change |
|---------|--------|
|Culture_day_lesson_b.md| Added Curriculum Competencies and Possible Topics|
|Culture_day_lesson_c.md| Added "My Skills and Interests Journal" culture day|
|Culture_day_lesson_d.md| Added "Interview with People in Technology" culture day|
|lab_11.md| Fixed Alignment|
|lesson_33.md| Fixed Spelling|
|lesson_61.md| Added content curriculum Competencies|
|lesson_62.md| Added content Learning Objectives; Big Ideas; Curriculum Competencies - understanding context, defining, ideating and Curriculum Competencies - understanding context|
|lesson_63.md| Added content Curriculum Competencies; Materials / Preparation|
|lesson_64.md| Added content Learning Objectives; Curriculum Competencies - Prototype, Test and Make; Curriculum Competencies - Applied Technologies; Reference|
|lesson_65.md| Added content Curriculum Competencies; Materials / Preparation|
|lesson_66.md| Added Project Sharing; Curriculum Competencies - Share, Applied skills, Applied Technologies; Materials / Preparation; Instructor's Notes; Curriculum Competencies - Applied Skills; Accommodation / Differentiation; Forum discussion|
|Project_1.md| Changed Content from Canadian perspective to US perspective; Added Content Big Ideas; Reference; Behavior; Implementation Details; Sharing, Curriculum Competencies design sharing|
|Project_2_alternative.md| Added the Whole Content and changed content to US perspective|
|Project_3.md| Added and Changed Content on Big Ideas from BC specific to US specific; Added content Curriculum Competencies - Design Sharing|
|Summary.md| Added Culture day C and D, added Project 2 alternative|
## [2.1.1] - 2018-08-21
| Unit | Change |
|---------|--------|
| lab_22.md | Change theme from brick wall to yellow brick road
| lesson_22.md |
| SUMMARY.md |
| +Lab 2.2 Yellow Brick Road.docx/.pdf |
## [2.1.0] - 2018-08-16
| Unit | Change |
|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 0.2 | Toothbrush activity option added to Do Now World Cafe protocol added for Lab |
| 0.4 | Student Experiences Survey added and updated lab files uploaded |
| 1.1 | Diverse Grouping guidance added for lab Helping Trios handout added as Accommodation/Differentiation |
| 1.2 | Options added to Do Now and Activity Cold Calling Alternative protocol added |
| 1.3 | Geometry Cheat Sheet handout added |
| 2.1 | Do Now option added Geometry Cheat Sheet handout added |
| 2.2 | Lab challenge activity edited to personalize Diverse Grouping reminder Cold Calling Alternative added in debrief |
| 2.3 | An intro to conditionals video by Flocabulary added |
| 2.4 | Variable Boxes Unplugged Activity added to Do Now as a intro to Variables |
| 2.5 | Boolean Expression Unplugged Activity added as intro to Boolean Expressions Reminder about diverse grouping Geometry Cheat Sheet handout added |
| 3.1 | Lab edited to include options for personalization |
| 3.2 | Do Now option added Reminder about diverse pairing |
| 3.3 | Lab challenge edited to include personalization of No. 4 updated lab files uploaded |
| 4.2 | Do Now option added Lists Structure Handout Grammar Cheat Sheet handout accommodation added |
| 4.3 | Lab language change & uploaded updated files Diverse Grouping reminder |
| 4.6 | Hangman project changed to Word Guessing game with edited handouts uploaded Snowman Snap! project replaces hangman example |
| 5.1 | Diverse grouping reminder |
| 5.2 | New Space Invaders links added includes Vimeo link Lab now focusing on bouncing sprites instead of balls & updated files uploaded |
| 5.3 | Lab now focusing on bouncing sprites instead of balls & updated files uploaded Helping Trios handout added |
| 6.1 | TEALS final project examples added TEALS design steps handout added |
| 6.2 | Peer Feedback Handout added Inspirational software design video from Code.org added Diverse grouping reminder |
| 6.3 | Links to Final Project Development Plan & Organizer added |
| 6.4 | Links to Final Project Development Plan & Organizer added |
| 6.5 | Wise Feedback protocol added Meerkating guidance added Links to Final Project Development Plan & Organizer |
| | |
| Overall | CRTchanges aim to provide for student choice, voice and agency in the curriculum. They include options and resources to address different learning styles and to personalize to the cultural specifics of your classroom. |
| Overall | "Unit Tips" documents have been added for each unit with helpful Snap! shortcuts and teaching tips relevant to the unit. It also includes definition of terms introduced in the unit that can be used on a classroom Word Wall. |
================================================
FILE: Country-n-State.txt
================================================
District of Columbia
United Arab Emirates
Dominican Republic
North Macedonia
Solomon Islands
North Carolina
South Carolina
United Kingdom
Faroe Islands
French Guiana
Guinea-Bissau
Hong Kong SAR
Liechtenstein
Massachusetts
New Caledonia
New Hampshire
United States
West Virginia
Bahamas, The
Burkina Faso
North Dakota
Pennsylvania
Rhode Island
Saudi Arabia
Sierra Leone
South Africa
South Dakota
Turkmenistan
Afghanistan
Congo
Connecticut
El Salvador
Mississippi
Netherlands
New Zealand
North Korea
Philippines
Puerto Rico
Saint Lucia
South Sudan
Switzerland
Antarctica
Azerbaijan
Bangladesh
Cabo Verde
California
Costa Rica
Guadeloupe
Kazakhstan
Kyrgyzstan
Luxembourg
Madagascar
Martinique
Mauritania
Micronesia
Montenegro
Montserrat
Mozambique
New Jersey
New Mexico
San Marino
Seychelles
Tajikistan
Uzbekistan
Washington
Argentina
Australia
Gibraltar
Greenland
Guatemala
Indonesia
Jan Mayen
Lithuania
Louisiana
Macao SAR
Mauritius
Minnesota
Nicaragua
Singapore
Sri Lanka
stateless
Tennessee
Venezuela
Wisconsin
Anguilla
Arkansas
Barbados
Botswana
Bulgaria
Cambodia
Cameroon
Colombia
Colorado
Delaware
Djibouti
Eswatini
Ethiopia
Guernsey
Honduras
Illinois
Kentucky
Kiribati
Malaysia
Maldives
Maryland
Michigan
Missouri
Mongolia
Nebraska
New York
Oklahoma
Pakistan
Paraguay
Portugal
Slovakia
Slovenia
Suriname
Svalbard
Tanzania
Thailand
Virginia
Zimbabwe
Alabama
Albania
Algeria
Andorra
Arizona
Armenia
Austria
Bahrain
Belarus
Belgium
Bermuda
Bolivia
Bonaire
Burundi
Comoros
Croatia
Czechia
Denmark
Ecuador
Eritrea
Estonia
Finland
Florida
Georgia
Germany
Grenada
Hungary
Iceland
Indiana
Ireland
Jamaica
Lebanon
Lesotho
Liberia
Mayotte
Melilla
Moldova
Montana
Morocco
Myanmar
Namibia
Nigeria
Reunion
Romania
Senegal
Somalia
Tokelau
Tunisia
Ukraine
Uruguay
Vanuatu
Vermont
Vietnam
Wyoming
Alaska
Angola
Belize
Bhutan
Brazil
Brunei
Canada
Cyprus
France
Greece
Guinea
Guyana
Hawaii
Israel
Jordan
Kansas
Kosovo
Kuwait
Latvia
Malawi
Mexico
Monaco
Nevada
Norway
Oregon
Panama
Poland
Rwanda
Serbia
Sweden
Taiwan
Turkey
Tuvalu
Uganda
Zambia
Aruba
Benin
Ceuta
Chile
China
Congo
Egypt
Gabon
Ghana
Haiti
Idaho
India
Italy
Japan
Kenya
Korea
LIBYA
Maine
Malta
Nauru
Nepal
Niger
Palau
Qatar
Samoa
Spain
Sudan
Syria
Texas
Tonga
Yemen
Chad
Cuba
Fiji
Guam
Iowa
Iran
Iraq
Laos
Mali
Niue
Ohio
Oman
Peru
Saba
Togo
Utah
================================================
FILE: GLOSSARY.md
================================================
# Master Vocabulary List
Introduction to Computer Science - 1st Semester
## A
### Abstraction
Removing the specifics that are not relevant in a given context.
### Argument
Any area in a block that accepts user input, or another block. It could be a Boolean Block or a value placed inside of a variable or block. The value that is "passed into" a parameter of a custom block.
## B
### Backgrounds
Pictures that fill the entire stage area.
### Block
Puzzle-piece shapes that are used to create code.
### Boolean Expression
A value (text, number, picture, etc.) that evaluate to true or false.
### Boolean Operators
Boolean expressions that can be nested.
## C
### Command Block
Puzzle-piece shaped block that executes a command (it causes an effect).
### Cloning
A feature that allows a sprite to create a clone, or semi-duplicate, of itself, while the project is running. Clones of a sprite will be the same as the original or parent sprite but as a separate instance. Clones inherit the parent's scripts, costumes, sounds, and properties, yet they can then be modified.
### Conditional
A block used to make a choice between executing two different chunks of code."If" statements.
### Contains Block
Checks an operator block for a particular variable.
### Costume
A costume is one out of possibly many "frames" or alternate appearances of a sprite.
### Custom Blocks
Allow for one to make their own programming blocks.
## D
### Detail Removal
Reducing the complexity of an algorithm or process by focusing on the important parts.
## E
`No E entries`
## F
### Functions/Methods
Other programming languages, like Python or Java, use these terms to refer to the same idea as a Custom Block in Snap! a reusable.
## G
### Generalization
Combining a group of related concepts or processes into a single category.
### Global Variable
A variable that can be used by all of your sprites.
## H
`No H entries`
## I
### Index Variable
Keeps track of where you currently are in a list.
## J
### Join Block
Links two values together and reports the result.
### Jukebox
A collection of sounds that can be applied to a sprite costume.
## K
`No K entries`
## L
### Lists Block
A block which controls a list.
### List Element
A part of a list.
### Loop
A type of block that causes other code to run multiple times in succession. A control flow statement that allows code to be executed repeatedly based on a given Boolean condition.
## M
### Modeling
Building a system to simulate the behavior of a real-life phenomenon by simplifying or ignoring certain details.
## N
### Nested Loop
A loop used inside the body of another loop.
## O
### Operator Block
A block that performs math functions and string handling.
## P
### Predicate Block
A hexagonal block that always returns a Boolean value (true or false).
### Procedural Decomposition
Breaking a problem down into smaller subtasks, usually to increase readability and/or maintainability, often by applying one of the above concepts.
### Programming List
Called an 'array' in most programming languages, this holds lots of values.
## Q
`No Q entries`
## R
### Receive Block
Code Block in Control that receives a message from another block.
### Reporter Block
Report a value, usually for use in another block's input slot.
## S
### Say Block
The block gives its sprite a speech bubble with the specified text — the speech bubble stays until an another speech or thought block is activated, or the stop sign is pressed.
### Scenario
A description of a set of interactions and/or tasks that describe a start-to-finish example of how a user might want to use the application
### Snap!
Snap! is an extended reimplementation of [Scratch](http://scratch.mit.edu) that allows you to Build Your Own Blocks. It also features first class lists, first class procedures, first class sprites, first class costumes, first class sounds, and first class continuations. These added capabilities make it suitable for a serious introduction to computer science for high school or college students.
### Scripts
Different types of blocks linked together.
### Sequential Search Algorithm
A method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched.
### Sprites
An object which performs functions controlled by scripts.
### Stage
The background of a project, performs functions through scripting.
### Super-sprite
A sprite that is composed of pieces that can move together but can also be separately articulated.
## T
### Transform
Create a new list based on the values of the old list.
### Traverse
Go through or travel across an item/list.
### Truth Tables
A tool for evaluating the possible inputs and outputs of a Boolean expression.
## U
`No U entries`
## V
### Variable
A placeholder for some value. Types of variables:Global variables - apply to all sprites Sprite variable - applies to one sprite script variable - parameter that applies to one script
## W
### Wardrobe
A collection of sprite costumes. The wardrobe is located in the Costumes tab, which is accessed through the file icon.
### Watcher Block
reporter blocks you can click the checkbox for; they will appear in the Stage and you can track them.
### Wireframe
A high-level sketch of an application's user interface intended to help visualize layout, interactions, and transitions
## X
### X Position
The position that a sprite or the mouse is at along the horizontal axis.
## Y
### Y Position
The position that a sprite or the mouse is at along the vertical axis.
## Z
`No Z entries`
================================================
FILE: Grudgeball.md
================================================
# traditional Grudgeball Instructions
1. Each team gets 10 "X's".
2. Split your class into 5 or 6 teams, depending on how fast you want the game to go.
3. Each group gets a question. If they get it right they automatically get to erase two X's from the board. They can take it from one team or split it. They can not commit suicide (take X's from themselves).
4. Before they take off these X's, though, they have a chance to increase their ability to get the other teams to hate them. They get to shoot the Nerf ball. I set up two lines with masking tape. One is a two point line while the other is a three pointer.
5. If they shoot from the two point line and get it in, they can take four X's off the board. If they go from the three point line, and make it in, they can take five off the board. If they don't make it they still get to take the original two off the board.
## Instruction
1. Prepare 3-6 teams of 5-6 students team.
2. Prepare a worksheet of 4-5 questions for each team.
* Each document should be uploaded to a cloud service in order to share the link to the file for the whole group to work on.
3. While students are coming up with their answers, prepare the game board by adding an image or graphic above each number.
1.
3. Move student teams into breakout rooms with 4-5 questions to review together as a team.
* student should be prepared to answer one of the questions when they return to play the game.
## Game Play
1. Team 1 answers the question.
1. If the question correct, they get to select from Board
================================================
FILE: README.md
================================================
# Intro to Computer Science
The **Introduction to Computer Science curriculum** is a flexible and approachable course adapted from the [UC Berkeley CS 10](https://cs10.org), and is course for a wide range of high school students from diverse backgrounds. The course has been successfully implemented in hundreds of high schools.
Introduction to Computer Science is an engaging course that explores a variety of basic computational thinking and programming concepts through a project-based learning environment. Every unit culminates in a comprehensive project and roughly 75% of student time is spent building projects and practicing the skills they are learning.
## Visual and approachable
This course uses Snap!, an approachable visual block-based programming language with a robust tool set, perfect for introducing students to coding for the first time.
## Course version control
This course uses GitHub to manage version, course updates, etc. You can access the repository here:
* GitHub: https://github.com/TEALSK12/introduction-to-computer-science/
### Curriculum Issues
TEALS will no longer be making edits to TEALS curricula. You may still open an issue if you encounter things like factual, spelling, or grammatical errors, broken links, sequencing problems (topics needed before they are taught), or incomplete/missing materials.
### Giving feedback and asking questions about the curriculum
For general curriculum-related questions and discussion not tied to a specific reported issue, we encourage everyone to actively participate in the GitHub Discussions board for the corresponding curriculum. This is a great place to share alternative lesson ideas, share pro-tips for implementation and differentiation, pacing advice, etc...
### Document structure
This curriculum uses [Markdeep] to generate the files used to display the curriculum in Github pages. HTML version of the files are located in the /docs folder. We use the script [md-to-markdeep.cmd](md-to-markdeep.cmd) to convert from Markdown to html and display on the curriculum page.
## Introduction to computer science implementation options
This Introduction to CS course can be offered as a semester-long course offered twice in a single school year or as a year-long course with an expanded curriculum. The year-long class transitions to text-based programming using the beginner-friendly Python language in the second semester. Teachers participating in the TEALS Program can use the following options:
* [TEALS Second Semester Introduction to Computer Science - Python curriculum](https://tealsk12.github.io/2nd-semester-introduction-to-computer-science/)
* [Carnegie Mellon CS Academy](https://academy.cs.cmu.edu).
## About this curriculum
### Philosophy
This curriculum has been designed by the TEALS program to support computer science teachers and/or volunteer professionals teaching an introductory computer science course in a high school classroom. The curriculum is based on, and borrows heavily from, the [Beauty and Joy of Computing Curriculum](http://bjc.berkeley.edu/) developed at the University of California, Berkeley. The TEALS curriculum has a heavier focus on the basic programming components of the course than BJC, sacrificing some of the advanced programming and conceptual topics that are less appropriate in an introductory high school classroom.
This curriculum advocates a "hands-on" learning approach in which students' primary means of learning is through discovery, experimentation, and application. To that end, each unit is built around a large, culminating, programming project that exercises the objectives of the unit. In addition, nearly all lessons in the curriculum include a guided activity of some kind to allow students to practice with and experience the concepts covered in the lesson first-hand. Taken together, the lessons provide the skills and support necessary to enable students to complete the project and demonstrate mastery of the unit's objectives. Substantial class time should be provided for the project in each unit to ensure students have the opportunity to demonstrate mastery of the skills from each unit before moving on.
Because this curriculum was designed to be used in a wide variety of classrooms, we have made as few assumptions as possible. In particular, the curriculum does not depend on any specific technologies or resources in the classroom other than computers with reliable internet access. This curriculum is also designed without any student homework assignment, as not all classes will have students who can reliably access a computer with internet access at home. For classes where home computer access is not an issue, some amount of lab work can be reassigned as homework.
### Resources
This curriculum is designed for use with the Snap! programming language designed at the University of California, Berkeley. Snap! is a visual programming language designed to allow students to focus on concepts and skills rather than syntax when learning to program. Snap! is an extension and reimplementation of Scratch, designed at MIT, and many Scratch lessons and programs can be easily adapted to Snap! The following resources are available to support use of Snap! in this curriculum:
* [The Snap! Reference Manual](https://snap.berkeley.edu/snap/help/SnapManual.pdf)
* [Snap! examples and extensions](https://snap.berkeley.edu/#help-examples) (including using hardware devices with Snap!):
* [ScratchEd online community for Scratch educators:](https://scratch.mit.edu/educators/)
* [Beauty and Joy of Computing curriculum:](https://bjc.berkeley.edu/)
### Snap! mirrors
Access to Snap! is necessary for students to complete the labs. The main Snap! site has been known to be inaccessible due to system updates or network outages. It is important to have contingency plans in the event the web site is unreachable. Here is a list of mirror sites that can be used in the event the main site is unreachable. In addition, Snap! can be downloaded to run locally on a student's computer, however the projects will not be able to be save to the cloud and will need to be exported and then imported to the cloud when Snap! becomes available.
The Berkeley Snap! is located at: http://snap.berkeley.edu/
The following are mirror sites:
* [Mirror 1](http://bjc.edc.org/snapsource/snap.html)
* [Mirror 2](http://media.mit.edu/~harveyb/snap)
* [Mirror 3](http://cs10.org/snap)
You can also download a local copy of Snap! as a backup:
1. Run Snap! from browser
2. Click on the Snap! logo in the upper-left of the app.
3. Choose “Download source” from the menu

4. Save snap.zip locally on your computer.
5. Extract snap.zip.
6. Open snap.html in a web browser.
## Using this curriculum
### Semester pacing
The TEALS Intro CS curriculum is designed for a semester-long introductory course meeting daily for 55 minute periods. A course that meets these criteria is expected to have roughly 90 class meetings in a semester. However, the TEALS curriculum in its current form includes an estimated 102 days of material. First and foremost, teachers should be reminded that the pacing in the curriculum is intended as a guideline and teaching teams are encouraged to make any adjustments they deem appropriate or necessary. However, there are certain aspects of the curriculum that are vital to maintain. In particular, the following should be considered when making pacing adjustments:
#### Lab Days
The number of lab days allotted for each project is an estimate for a typical class. Classes that are moving quickly, or classes in which most students are able to do work outside of class, can reduce the number of in-class lab days. If this route is taken, be certain that students still have enough time available to complete the projects. As the projects are the primary summative assessments in this course, it is vital that students not be rushed through completion of the project and that requirements are not cut in an attempt to shorten the time necessary.
#### Culture Days
Culture Days (see below) are included in the curriculum roughly once every two weeks. While it may be tempting to reduce the number of culture days, or remove them entirely, to gain back class days, these lessons are considered central to the student experience in this course. If an extra day or two are needed, culture days may be skipped on occasion, but teaching teams are advised to avoid making a habit of skipping culture days.
#### Pacing Considerations
##### Unit 5 (Optional)
It is expected that many teams will find it necessary to remove some or all of **Unit 5** from the curriculum. This unit covers cloning and prototyping, an interesting and worthwhile, though advanced topic. If time allows, teaching teams are encouraged to attempt to include at least part of this unit, possibly with a simplified version of the project, in their curriculum. But this unit can be removed without having too adverse an impact on the student experience, and should be the first major cut if one is necessary.
##### Unit 6 (Preserved)
The capstone experience for the course, Unit 6 enables students to apply the skills they have learned in a large-scale, individualized project setting. Cutting this unit would deprive students of the opportunity to experience a close approximation of a real-world development setting. Earlier units should be condensed or cut as necessary to ensure that Unit 6 is still included in the curriculum.
### Daily lesson plans
Most lesson plans in this curriculum are designed to represent a single 55-minute class period with average pacing. Each class will have slightly different needs, possibly including different period length, student capabilities, classroom interruptions, and more. Teachers and volunteers are encouraged to consider the lesson plans as guidance for one possible use of time to present the material, and to feel free to adapt the lesson plans as necessary to fit the needs of the particular class in which the plans are being applied.
With a few exceptions, each daily lesson plan consists of the following components:
#### Welcome/Announcements/Bell work
Five minutes are allotted at the beginning of each day for administrative tasks such as taking attendance, giving announcements, returning work, or other necessary actions. During this time, teachers are encouraged to assign "bell work" (sometimes called "do now" activities) for students to work on.
* These activities aim to engage students with the subject immediately upon entering the room, and should be short, clear, and able to be completed by all students.
* Specific "do now" activities are not given in the lesson plans, as they should be chosen by the teacher to reinforce or preview the specific topics with which students have or are expected to struggle most.
#### Instruction/discussion
Most lessons begin with a brief period of instruction on the topic of the day. These sections should be kept as brief as possible—the primary means of student learning in most lessons will be the lab activities.
* The goals of the instruction section of the lesson should be to motivate the concepts being exercised in the lab and to provide a short demonstration to help students find the necessary parts of Snap! the first time.
* Teaching teams should vary the ways in which the instruction is presented throughout the course, including class discussions, kinesthetic activities, demonstrations, Socratic seminars, occasional lectures, and other approaches.
#### Activity
The largest portion of time in each lesson is dedicated to a guided activity that allows students to explore and practice with the day's key topics. Each activity is broken down into several parts, each of which consists of several steps. In general, the steps in a single section build on each other, and each section covers a new topic or new application.
* It is intended that the labs be well enough structured for students to work through on their own, but teachers should feel free to interject at appropriate points to assess student progress and provide additional guidance as necessary.
* On occasion, steps 3 and 4 are repeated for multi-part activities.
#### Debrief
After each activity has concluded, time is allotted for teachers to review and debrief the activities with students. In general, there is not enough time, nor is there necessarily the need, to go through the lab step-by-step. Students should be able to at least partially assess their own progress by verifying that their programs function as specified in the lab.
* Rather than presenting solutions to each step of the lab, teachers are encouraged to use the debrief time to focus on particularly tricky or noteworthy parts of the lab or to discuss areas in which students struggled.
* Debrief time can also be used to compare and contrast different possible approaches to some of the problems, emphasizing that, in most cases, there is more than one valid solution.
* Whenever possible, use examples of student work rather than instructor-created solutions during the debrief—this is an excellent chance to showcase students who solve problems in elegant, creative, or canonical ways.
### Homework
This curriculum does not assign homework as part of its typical lessons. Because this curriculum is intended to be used in a wide variety of classrooms, some of which may include students that do not have regular access to an internet-enabled computer at home, all work is done during class time. In some circumstances, assigning some lab activities as homework can enable the teaching team to regain in-class time for additional lessons or activities, but this must be done with care. In particular, if homework is assigned, arrangements must be made so that any students who do not have the ability to complete the homework at home do not fall behind. Further, it should be expected that some students will not complete the assigned homework and teaching teams must have a way to both assess that homework was completed and ensure the material is reinforced briefly in class.
### Quizzes
To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes. The quizzes and answer keys can be found with protected materials for the course.
### Grading
Student work consists of class participation, daily labs, end of unit projects, and final project. Each classroom teacher is responsible for determining the grading breakdown for their classes. TEALS recommends the following as a starting point as grading guidelines for the introductory computer science course.
| Percentage | Description |
| ---------- | ------------------------------------- |
| 40 | Daily Labs |
| 40 | Projects and Large-Scale Labs |
| 20 | Participation, Notebooks, etc. |
## Printing
The Introduction to Computer Science can be printed by navigating to https://aka.ms/TEALSIntroPDF.
* click on the document to enable the pdf menu to show and clicking the down arrow or "Save as Copy"
* right click on the .pdf document and select "Save As"
### Creative Commons Attribution Non-Commercial Share-alike License
This curriculum is licensed under the [Creative Commons Attribution Non-Commercial Share-alike License](http://creativecommons.org/licenses/by-nc-sa/4.0/), which means you may share and adapt this material for non-commercial uses as long as you attribute its original source, and retain these same licensing terms.
================================================
FILE: Video Resources.md
================================================
# Video Resources
## Intro to Computer Science - Snap
| Lesson | Video | Length |
| --- | --- | -- |
| 0.1: The First Day | https://www.youtube.com/watch?v=cKhVupvyhKk | 1:15 |
| 0.2: Algorithms | https://youtu.be/ZnBF2GeAKbo | 1:57 |
| 0.3: Programming Languages | https://www.youtube.com/watch?v=6qF3HmRzg8o | 5:13 |
| 0.4: Self Portrait | https://www.youtube.com/watch?v=7fncD7NH7g8 https://youtu.be/_Mwc1gc77dc | 8:16 |
| 0.5: Getting to Know Coordinates | https://youtu.be/5ctsUsvIp8w | 2:07 |
| 1.1: Welcome to Snap!| https://www.youtube.com/watch?v=b-EWj7xN90U | 1:43 |
| 1.2: Building Blocks | https://youtu.be/u80WYSNxRjM | |
| 1.3: Drawing Shapes | https://www.youtube.com/watch?v=qLU3PtaG3ww | 8:38 |
| 1.4: Animation | https://youtu.be/3x5ZI-mKc44 | 5:00 |
| 2.1: Loops | https://youtu.be/XbZqfRGPom0 | 5:00 |
| 2.2: Nested Loops | https://youtu.be/bons028VLEU https://youtu.be/Y5lZQRawsFk | 5:00 |
| 2.3: Inputs and Conditionals | https://youtu.be/t3k3wOxO1xI | 5:00 |
| 2.4: Variables | https://youtu.be/YMVo9Wdpv5s | 5:00 |
| 2.5: Boole in the House | https://youtu.be/XXS9aDlN14s | 5:00 |
| 3.1: Abstraction and Friends | https://youtu.be/Dxw9cIbzaLk?t=681 | 25:11 |
| 3.2: Combining Loops and Conditionals | https://youtu.be/MegYWakO1yw | 9:42 |
| 3.3: Customizing I: Arguments | https://youtu.be/ZLxql1kLvCw | 5:00 |
| 3.4: Customizing II: Reporters and Predicates | https://youtu.be/6gT91ltwM1Q | 5:00 |
================================================
FILE: additional_curriculum_resources.md
================================================
# Accessing Additional Curriculum Materials
To access the "Additional Curriculum Materials", log into your TEALS Dashboard at .
1. The Additional Curriculum Materials are stored in a Microsoft Office 365 SharePoint site under the TEALS domain.
2. You will find the link, username, and password for these materials under the "Resources" heading on the dashboard.
3. If you are already logged into an Office 365 account (perhaps because you use Office 365 at school or work) you will run into an authentication conflict when you try to access this SharePoint site in step 1. In this case, you need to access the "Additional Curriculum Materials" SharePoint site using an Incognito or InPrivate browser session.
4. To open an Incognito or InPrivate browser session, right-click on the "Additional Curriculum Materials" link and select "Open link in Incognito/InPrivate window".
5. The website will ask you to log into Office 365.
6. Be sure to use the username and password listed on the TEALS Dashboard, and not the account you usually use to log in at work or school.
================================================
FILE: bjc_videosuggestions.md/bjcvideosuggestions.md
================================================
# BJC Lecture Suggestions
Dan Garcia of UC Berkeley presents the Beauty and Joy of Computing
## About the Lectures
### Use
The TEALS’ Introduction to CS Course is based on the The Beauty and Joy of Computing by Dan Garcia at UC Berkeley. However, the TEALS' curriculum varies greatly in content and scale, as it is aimed at High School students. This page outlines a series of video lectures from Dan Garcia’s version of this course--however the videos are not applicable in their entirety. The lectures are mapped out below by lecture, subject and time in their entirety.
Some of the lectures (or sections of the lectures) will be useful background for teachers learning the course materials. Some sections of the lectures are useful as instructional tools for classroom instruction. It is notated if the lecture is useful for background knowledge for teachers/volunteers and/or for classroom instruction. The lectures that are directly relevant to lessons or labs are directly referenced *below* the "Instructor's Notes". The lecture videos are licensed under a Creative Commons License by UC Berkeley.
- [BJC Lecture 1: Abstraction](https://www.youtube.com/watch?v=Dxw9cIbzaLk)
- Basic concepts of the course: 0:00-7:00
- Introduction of Piazza: 7:00-8:25
- Abstraction: 11:40-15:40
- Generalization: 15:50-20:00
- Summary: 20:05-25:10
- [BJC Lecture 2: 3D Graphics](https://www.youtube.com/watch?v=q2UMQaoW30U)
- SOPA & PIPA: 0:00-1:00
- 3D Computer Graphics Explanation: 1:00-5:24
- 3D Graphics steps outlined: 5:25-5:50
- Modelling (Useful for Lab 2.5): 5:50-11:40
- Animation (Uncanny Valley Explanation): 11:40-16:55
- Procedural Based Motion (Lab 1.1): 16:56-20:00
- Genetic Algorithms: 20:05-25:25
- Lighting and Shading: 25:25-27:10
- Rendering: 27:10- 30:55
- Global Illumination: 30:55-34:21
* [ BJC Lecture 3: Video Games](https://www.youtube.com/watch?v=hdSFuhyGTIg)
- Demystification Lecture-Novel Interaction techniques(emotive systems) 00:00-2:30
- [History of Video Games Overview](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=2m30s) (Platform Game Prep) 2:30-7:55 **Good for Classroom Instruction**
- [Casual Video Game World ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=8m0s)(light weight) 8:00-10:40 **Good for Classroom Instruction**
- [Core Video Game](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=10m45s) (heavy weight) 10:45-13:05 **Good for Classroom Instruction**
- 3D Computer Graphics 13:10-15:20
- [Motion Capture ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=15m25s)(Hero Movement for Platform Game Lab 2.6) 15:25-17:30 **Good for Classroom Instruction**
- Artificial Intelligence (Enemy Logic for Lab 2.6) 17:30-19:40
- [Video Games w/purpose](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=19m40s) (social benefits) 19:40-24:36 **Good for Classroom Instruction**
- [Negative Aspects of Video Games ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=19m40s)(RSI, addition, violence) 24:40-28:00 **Good for Classroom Instruction**
- [Glenn Sugden-Game Developer ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=28m03s)(History of VG Development & Industry) 28:03-40:53 **Good for Classroom Instruction**
* [BJC Lecture 4: Functions](https://www.youtube.com/watch?v=_uKCBmQEf5w)
* SIRI-EVI 0:00-1:00
* Functions & Generalizations (Function Basics) 1:00-3:45
* More Terminology (Boolean etc) 3:47-6:10
* Types of Input (Sentences, words, characters, digits) 6:12-8:00
* Functions (Explanations of Use-can be tied in to loops, and inputs) 8:00-9:55
* MIT Scratch --> BYOB Snap! ( Development of SNAP, DEMO) 10:00-11:30
* Functions-1 (BYOB-Custom Blocks) & Generalization 11:30-14:50
* Functions-2 (Join Block) Domain and Range 14:52-17:50
* Types of Blocks 18:15-19:45
* Recursion Preview 19:50-27:40
* Functional Programming Summary (Big concepts narrow down to functions) 27:40- End
* [BJC Lecture 5: Programming Paradigms](https://www.youtube.com/watch?v=_4ScHcLvQnw)
- Dilemma of Being a Cyborg 0:00-2:30
- Programming Paradigms 2:30-3:50
- Snap! BYOB (Hybrid) 3:55-4:45
- Functional Programming (Cascading Values) 4:50-5:35
- Imperative/Sequential 5:41-8:35
- Object Oriented Programming (OOP Basic Explanation) 8:40-15:45
- [OOP Ex: Sketch Pad Dr. Ivan Sutherland](http://www.youtube.com/watch?v=_4ScHcLvQnw&t=15m45s) "Father of Computer Graphics 15:45-22:10 **Good for Classroom Instruction**
- OOP in BYOB (Demo of Functions in BYOB) 22:35-29:20
- Declarative Programming 29-22-31:20
- Declarative Programming Examples in BYOB 31:25-35:20
- Review of Paradigms 35:25-end
* [BJC Lecture 6: Algorithms](https://www.youtube.com/watch?v=3tvbqdLjjSU) (With Luke Segars)
- Computer Worms 0:00-1:30
- Algorithm Concept Intro: Rubic Cube Competition 1:40-2:40
- [Algorithm Definition](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=3m20s) 3:20-4:20 **Good for Classroom Instruction**
- [Early Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=4m25s) 4:25-5:55 **Good for Classroom Instruction**
- [Familiar Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=6m00s) 6:00-7:30 **Good for Classroom Instruction**
- Commonly Used Algorithms (Page Rank, etc.) 8:00-10:45
- Choosing an Algorithm Technique 10:50-12:15
- Ways to Tackle Problems (Brute Force, Top Down, Bottom Up) 12:20-15:30
- Algorithms vs Functions and Procedures 15:30-16:00
- Turing Completeness (Computer Theory-BYOB is Turing Complete) 16:05-21:15
- Algorithm Correctness 21:25-26:00
- Algorithm Summary 26:00-end
* [BJC Lecture 7: Algorithm Complexity](https://www.youtube.com/watch?v=_fgtTE2bhMg)
- Yahoo predicts America’s Political Winner 0:00-1:25
- Function Abstraction (Explanation of Functions and Algorithms) 1:28-2:45
- What is IN a Spec 2:45-3:30
- What is NOT in a Spec 3:30-5:15
- Reference Text “Introduction to Algorithms” 5:18
- [Algorithm Analysis: The Basics](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=6m0s) 6:00-7:40 ** Good for Classroom Instruction**
- [Algorithm Analysis: Running Time](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=7m41s) 7:41-8:25 **Good for Classroom Instruction**
- Algorithm Analysis: Runtime Analysis Problem and Solution 8:25-9:55
- Runtime Analysis: Input Size and Efficiency 9:58-11:25
- Runtime Analysis: Worst of Avg Case 11:25-13:20
- Run Time: Final Assessment 13:20-16:46
- Example:Finding a student by ID (detailed explanation of input/output)
17:00-31:20
- Ex: Finding a shared birthday 31:21-33:30
- Ex: Finding Subsets 33:40 to End
* [BJC Lecture 8: Concurrency (Yaniv Assaf)](https://www.youtube.com/watch?v=LlLLcGJPvwU)
- Friendship Paradox: Facebook 00-1:30
- Concurrency & Parallelism (Inter-Intra Computer, Cloud Computing) 1:31-4:10
- [Anatomy of a Computer ( John von Neumann Architecture) 4:15-5:20 ](http://www.youtube.com/watch?v=LlLLcGJPvwU&t=4m15s)**Good for Classroom Instruction**
- But what is INSIDE of a Processor 5:20-6:30
- Moore’s Law Prediction (2x Transistors/chip every 2 years) 6:35-7:45
- Moore’s Law & Related Curves 7:50-10:00
- Power Density Prediction circa 2000 (Heat as an issue) 10:00-11:40
- Multiple Core and Energy Efficiency 11:45-14:40
- Energy & Power Considerations 14:45-15:40
- Parallelism Again (What’s different this time?) 15:41-16:40
- Speedup Issues: Amdahl’s Law 16:42-19:50
- Background:Threads (Threads of Execution” is a single stream of instruction) 19:55-21:15
- Speedup Issues:Overhead 21:15-23:50
- Parallel Programing Example in Snap! BYOB (Race Condition) 23:53-26:50
- Another Concurrency Problem (Deadlock and Livelock) 26:55-29:30
- Summary “Sea Change” of Computing 29:30 to End
* [BJC Lecture 9: Recusion](https://www.youtube.com/watch?v=JKn3nsfzBdA)
- Movie “Inception” as an example of recursion 0:00-0:50
- Recursion 0:50-1:40
- Recursion Demo in Snap! 1:40-17:00
- Overview 17:00-21:00
- Definition of Recursion 21:00-24:30
- Examples of Recursion (You Already Know It!) 24:30-26:20
- Trust the Recursion 26:22-29:40
- Summary of Recursion 29:40-End
* [BJC Lecture 10: Social Implications of Computing](https://www.youtube.com/watch?v=Rng91dxdsuM)
- META: Computers in Education (Implications of Multiple Choice Tests) 0:00-4:30
- Computers in Education (Open?) Judah Schwartz 4:31 --
- Tools 4:50-5:30
- Microworld 5:30-6:30
- Microworld Example Physics Simulation 6:30-10:30
- Courseware 10:38-11:30
- RSA Animate: Changing Educational Paradigms 11:35
- Animation Begins (Sir Ken Robinson: Changing Paradigms) 12:30-24:25
* [BJC Lecture 11: Recursion II Alijia Yan](https://www.youtube.com/watch?v=w2d_snYBLeY&index=11&list=PLA4F0F0CA4A3EE7F4)
- Mobile World Congress 0:00-2:15
- Recursion:Factorials (Factorial (n)+ n! 2:30-7:40
- [Fibonacci and Fibonacci Series Video 7:45-11:45](http://www.youtube.com/watch?v=w2d_snYBLeY&t=7m45s) **Good for Classroom Instruction**
- Fibonacci Ex: fin(n) Math and Snap! blocks 11:50-13:15
- Example of Recursion: Counting Change 13:20-17:30
- Call Tree for “Counting Change” with Snap! example 17:35-22:50
- Summary of Recursion 25:40-26:21
* [BJC Lecture 12: Social Implications II Dr. Gerald Friedland](https://www.youtube.com/watch?v=RNN19b61oRg)
**Good for Classroom Instruction-Suggest Previewing due to Social Media Examples.**
(This would be a good suppport for Social Media Safety/Awareness lesson)
- Dr. Gerald Friedland Sr. Research Scientist at International Computer Science Institute (ICSI) on Sharing Multimedia and the Impact on Online Privacy) 0:00-1:45
- Introduction to Social Media: The Price of Social Media Use-Stephen Colbert 1:50-6:25
- Observations on Sharing Data and Ineffective Privacy Protection 6:30-7:50
- Social Cause: Collection of Data Across Sites 7:50-10:30
- Multimedia in Internet is Growing 10:35-12:05
- CS Problem: Higher Demand for Retrieval and Organization of Data 12:07-13:05
- Manual Tagging & Geo Tagging 13:05-17:30
- Issue of Tracking & Dangers of Oversharing 17:30-18:31
- Berkeley Multimedia Location Estimation Project 18:31-28:14
- ICSI’s Evaluation Results 19:49
- YouTube Cybercasing 20:47
- Privacy Implication of Internet and Data 22: 30
- Person Linking Using Internet Videos 25:45-26:45
- Solutions for Privacy that Don’t Work: Think Before You Post! 26:45-28:14
* BJC Lecture 13 is Not Available
* [BJC Lecture 14: Human-Computer Interaction Bjorn Hartman ](https://www.youtube.com/watch?v=3VZ7D01T2Yc)
- Bjorn Hartman Background 0:00-3:30
- Human Computer Interface(HCI) 3:45-6:00
- HCI: Design, Computer Science, Applied Psychology 6:00-8:00
- Iterative Design Cycle 8:00-10:30
- Understanding Users 10:35-11:35
- Prototype Interface Examples 11:40-14:00
- Evaluation (Formative, Summative) 14:50
- [Why Study User Interfaces ](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=15m0s)**Good for Classroom Instruction**
Ex:Mouse Xy axis, Sketchpad, PC, Tablets 15:00-25:00
- What had changed? Research: Mainframe to Ubiquitous Computing 25:00-29:30
- [Example Project: Using Dexterity for Computer Interface Video](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=28m30s) 28:30-29:30 **Good for Classroom Instruction**
- Zipf/Power Law Distribution 30:00-32:00
- HCI Research at Berkeley 32:10-46:25
- [Multi Touch Apps and Toolkits](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=32m0s) **Useful for Classroom Instruction**
* [BJC Lecture 15:) Artificial Intelligence- Anna Rafferty](https://www.youtube.com/watch?v=_xcGWx3eDnw)
-Anna Rafferty 0:00-1:00
- Definition of AI 1:00-1:48
- John McCarthy AI definition 1:50-2:30
- AI History and Explanation 2:35-6:40
- Revival of AI: Rules & Concepts 6:45-10:20
- AI and Intelligence (What intelligent things do people do?) 10:25-11:52
- Tour of AI applications 11:55-12:30
- AI Planning 12:30-14:50
- Machine Learning 14:50-18:58
- Robot Learning to Walk (Video) 18:58-20:25
- Natural Language Processing 20:30-23:15
- Unsupervised Learning Ex. 23:20-25:00
- Robotics 25:00-30:05
- Automatic Towel Folding Robot (video) 27:40-29:45
- Recap of AI 30:10-31:15
- Turing Test of Intell 31:15-34:15
- Summary 34:20-35:53
* [BJC Lecture 16:) Computational Game Theory](https://www.youtube.com/watch?v=iATKQQaTKKY)
- Checkers (Weakly) Solved 0:00-1:17
- Computer Science Game Theory 1:20-1:35
- CS- A USV View 1:36-2:16
- The Turk (1770) 2:20-4:00
- Claude Shannon 1950 “Father of Informational Technology) 4:05-5:10
- Deep Blue vs Gary Kasparov 1997
- What is “Game Theory” 11:41-12:40
- What “Board Game” do you mean? 12:41-13:25
- What is a “Strong” Soluntion 13:28-15:00
- Game Crafters (Strongly Solve) 15:11-20:15
- Strongly Solve Ex. Video “War Games”(1983)16:26-19:41
- Weakly Solving a Game (Checkers) 20:20-22:12
- Strongly Solving Ex:1,2:...12) 22:20-35:00
- Ex: Tic Tac Toe 27:25
- Demo 29:20-33:15
- Games Crafters Revisited 35:00-35:50
- Future Application 35:51-36:47
* [BJC Lecture 17:) Higher Order Functions ](https://www.youtube.com/watch?v=Xr9dYPH3fw4)
- Coding is Cool Again 0:00-0:45
- High Order Function Introduction 0:47-8:50
- Higher Order Function Demo in Snap! BYOB (Functions and Blocks are commented out) 8:51-37:35
* [BJC Lecture 18:) Distributed Computing](https://www.youtube.com/watch?v=LkkQy6ivbe4)
- 0:00-2:25 Super Computers Faster than 50M Laptops
- Lecture Overview 2:25-3:00
- Memory Hierarchy 3:00-6:00
- Memory Hierarchy Details 6:00-10:40
- Networking Basics 10:45-12:45
- Networking Facts & Benefits 12:45-13:30
- Performance Needed for Big Problems 13:30-16:40
- What can we do? Use many CPUs 16:41-18:05
- Distributed Computing Themes 18:05-21:20
- Distributed Computing Challenges 21:25-25:40
- Review: Map Reduce 25:41-26:30
- Google’s Map Reduce Simplified 26:30-40:52
* [BJC Lecture 19: Higher Order Functions II](https://www.youtube.com/watch?v=QsiK8pB7KdQ)
- Busting the King’s Gambit (Strongly Solve-Chess) 0:00-2:30
- Higher Order Function Review (Filter, Map, Reduce) 2:30-6:30
- Snap! BYOB Demo (Commented Out) 6:31-28:19
================================================
FILE: book.json
================================================
{
"plugins": [
"mathjax"
],
"pluginsConfig": {}
}
================================================
FILE: chapter1.md
================================================
# First Chapter
GitBook allows you to organize your book into chapters, each chapter is stored in a separate file like this one.
================================================
FILE: contributing.md
================================================
# Contributing
## Repository Location
The curriculum's source code is hosted on GitHub at: https://github.com/TEALSK12/introduction-to-computer-science
You can open issues, fork the curriculum, or submit pull requests to suggest changes.
## Markdown style
To keep the curriculum's underlying markdown consistent, we use [this markdown style guide](http://www.cirosantilli.com/markdown-style-guide). Since markdown is not a strict specification, there are a few options we choose to take from the style guide
* [space-sentence:1]( http://www.cirosantilli.com/markdown-style-guide/#option-space-sentence-1)
* [wrap:inner-sentence](http://www.cirosantilli.com/markdown-style-guide/#option-wrap-inner-sentence)
* [header:atx](http://www.cirosantilli.com/markdown-style-guide/#option-header-atx)
* [list-space:mixed](http://www.cirosantilli.com/markdown-style-guide/#option-list-space-mixed)
* [code:fenced](http://www.cirosantilli.com/markdown-style-guide/#option-code-fenced)
### Updating GitBook with changes
If you make changes to file names and links, make sure to update the GitBook references in summary.md accordingly.
### Lint tool
We use [mdast-lint](https://github.com/wooorm/mdast-lint) to enforce the above style. All submissions will be run through [mdast-lint](https://github.com/wooorm/mdast-lint) and free of any errors and warnings.
## Curriculum style
### How to write *Snap!*
```snap
*Snap!*
```
### *Snap!* Code
Blocks and scripts should always be presented as they would be in *Snap!* as an image.
Good
> Use the  block to move your sprite.
Bad
> Use the move block to move your sprite.
If it is absolutely necessary that a block not have a picture, wrap the name in blockquotes (e.g. ```move 10 steps``` block).
#### Creating new script images
Use the "script pic..." feature to create new images. If you need the result of a reporter block, use shift-right-click to get the "script pic with result..." option.
If you are adding a block, the file name should follow the text of the block with lower camel case.
Good
>  -> ```move10Steps.png```
Bad
>  -> ```move.png```
#### Reusing existing script images
Before you create new blocks images, check to see of blocks are stored in the curriculum in ```/blocks```.
All script images should be stored in ```/scripts```.
### Vocabulary words
### Labs
### Lesson plans
## Creating a pull request
Each pull request should have it's own branch. Here are a few examples of a proper pull request workflow
* http://codeinthehole.com/writing/pull-requests-and-other-good-practices-for-teams-using-github/
* https://github.com/skyscreamer/yoga/wiki/GitHub-Best-Practices
* https://www.thinkful.com/learn/github-pull-request-tutorial/
================================================
FILE: create-book.cmd
================================================
@echo off
setlocal
REM -- Create output directory and set up target output file name
mkdir 2>nul build
set targetBook=intro-book-complete.md
@REM set chrome="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
set edge="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk"
REM -- We need the `sed.exe` tool; grab it from the user's Git install.
if not exist "%ProgramFiles%\Git\usr\bin" (
echo ERROR: Unable to find Git install for `sed.exe` tool.
exit /b 1
)
path %ProgramFiles%\Git\usr\bin;%path%
type >%targetBook% SUMMARY.md
REM -- For each file referenced in SUMMARY.md, add it to the target output Markdown file.
REM -- The following sed command extracts the file name from inside parentheses, and reverses path
REM -- slashes.
for /f "delims=" %%t in ('findstr -c:"(" SUMMARY.md ^| sed -e "s/^ *\* *\[.*\](\(.*\))$/\1/"
-e "s/\//\\\/g"') do (
echo %%t
echo.>>%targetBook%
type >>%targetBook% %%t
)
REM -- Normalize line endings to newlines.
move /y >nul %targetBook% %targetBook%.tmp
eol "\n" <%targetBook%.tmp >%targetBook%
del %targetBook%.tmp
@REM -- Create .pdf version of markdown files with no toc
type >"%targetBook%.html" .\markdeep-header.txt
type >>"%targetBook%.html" .\"%targetBook%
type >>"%targetBook%".html .\markdeep-footer-tocstyle-none.txt
@REM --no-margins does not work, had to edit the javascript
@REM %chrome% --headless --print-to-pdf="%%~pf%%~nf.pdf" --no-margins "%%f-pdf.html"
echo %edge% --headless --print-to-pdf="%targetBook%.pdf" --no-margins "%targetBook%.html"
%edge% --headless --print-to-pdf="%CD%\intro-book-complete.pdf" --no-margins "%CD%\%targetBook%.html"
del "%targetBook%.html"
del "%targetBook%"
echo.
echo Finished. You can find the resulting unified book in `intro-book-complete.pdf`.
================================================
FILE: culture_day_lesson_a.md
================================================
# Culture day: Real world video or selected reading
In this lesson, students will have the opportunity to learn about concepts not currently covered in this course and relates to the societal impacts of computing. Take this opportunity to allow students to explore outside of their course work and learn where computer science intersects other industries. Have them dive deep into a concept and challenge them to explore their interests.
## Learning objectives
Students will be able to...
* Describe how computer science intersects with other industries.
* Explore new topics in computer science that interests them.
* Connect their learning to some aspect of their culture, society, or life.
## Materials/preparation
* Select a video or reading excerpt about a real world topic.
* Prepare leading questions directly relevant to the video or reading.
* [TEALS Volunteer show and tell example video](https://youtu.be/TeUgIXgds5o)
* [Computer Science Education Week daily video playlist](https://youtube.com/playlist?list=PL-YUPixQ92JF67xXTcYkUI1Fnk6lcwGuj)
* Created by the Computer Science Teacher Association
## Pacing guide
| Duration | Description |
| :--- | :--- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introduction to topic and video or reading |
| 15 minutes | Watch video or Read material |
| 20 minutes | Class discussion or activity |
| 5 minutes | Debrief and wrap-up |
Feel free to adjust the pacing guide liberally to meet the needs of your chosen material. If a video or reading will require more than 20-25 minutes, consider splitting the lesson across two days.
* Day one should include introduction of the topic, the video/reading, and a brief reflection, with the discussion or activity pushed to day two.
## Instructor's notes
### Introduction to topic
Show video or have students read to begin class. Students may take notes if desired, but should give their full attention to the material.
Example discussion questions:
* Was there anything that suprised you about the video?
* How does this video relate to what we are currently studing in class.
Reinforce how the video or reading relates to the current topic in class.
* Your goal is to provide context and background, not to preview the material itself.
Provide students with some leading questions about the topic to push them into exploration.
* You will want to elaborate on the questions to get students all on the same page.
* In some cases, you will want to be deliberately vague to encourage students to form their own ideas or interpretations.
### Discussion/activity
Lead a class discussion or activity about the topics covered in the video/reading and guiding by the questions presented before the material. This can take one of several forms, including, but not limited to:
#### Full-class discussion
When using the approach, be sure that all students have a chance to contribute and that the conversation is not dominated by a few voices.
#### Small group discussions
This can either be open-ended, allowing each group to discuss whatever they choose, or a ["jigsaw"](https://www.jigsaw.org/)-style activity where each group is given one question to focus on.
* [Video explanation](https://youtu.be/-9AWNl-A-34) of a think-pair-share activity.
* Have students share out about their discussions with the class.
#### Think-pair-share
["think-pair-share"](http://www.readingrockets.org/strategies/think-pair-share) - a structured activity to simulate or recreate something discussed in the material to allow students to gain a deeper appreciation of the topic.
* As an example, after a reading or video on computer security, students could play (or at least read about and consider) the game [Control-Alt-Hack](http://www.controlalthack.com/)
### Debrief
Ask one or more students to summarize the topics covered in the lesson and their thought or opinions.
Consider collecting some evidence of the activity, such as students' responses to the guiding questions or notes from small-group discussions, to evaluate engagement with the lesson.
## Accommodation/differentiation
For example, if showing ["Smartest Machine on Earth"](http://www.pbs.org/wgbh/nova/tech/smartest-machine-on-earth.html), be aware that some students may not be familiar with _Jeopardy!_.
Try to vary the topics of culture days throughout the semester to engage a broad range of students' interests and experiences. Not all students will connect with every lesson, but you should strive to have every student connect with at least one or two culture days each semester.
================================================
FILE: culture_day_lesson_b.md
================================================
# Culture day: Student research project and presentation
In this lesson, students will have the opportunity to research a topic related to computer science, describe an impact it had on the world, and present it to the class. This allows students to explore topics that interest them and present to the class. Presenting is a great way for students share what they know and give them practice in a crucial skill to have in the workplace. It also allows students to learn about other topics from each other. Finally, analyzing topics in Computer Science put the lessons of the class into context.
## Learning objectives
Students will be able to...
* Describe their assigned or chosen computer science related topic in detail.
* Facilitate and answer questions about their topic.
* Explore and analyze the interactions between technology and the rest of society.
## Materials/preparation
* A list of example topics for research projects.
* Prepare guidelines for projects and/or presentations.
* Encourage students to research from online and other resources, and keep track of sources.
* [Citation generator](http://www.easybib.com/) this is a handy way to generate citations (even for websites) that can be included as a Bibliography or References for the project.
* [Presentation tips](https://www.thinkoutsidetheslide.com/top-5-powerpoint-tips-for-student-presentations-in-school/)
* [Ideas for giving interesting presentations](https://www.powtoon.com/blog/17-killer-presentations-tips-students-stand/)
## Pacing guide
|Duration | Description|
|--|--|
|5 minutes | Welcome, attendance, bell work, announcements |
|15 minutes | Presentation #1 |
|15 minutes | Presentation #2 |
|15 minutes | Presentation #3 |
|5 minutes | Debrief and wrap-up |
## Explain to students
Coding is a technical skill, but the larger process of software development, product creation, and deployment involves
* Technical innovations
* A community of people
* Cultural beliefs and values.
This process is impacted by the society in which it occurs, and those developlments and products in turn impact that society and possibly many others. These impacts can occur at many levels incuding personal, communal, global, and environmental. The impacts are often positive, but frequently include negative consequences. People in all fields make choices about how they interact with technology and how technology interacts with the rest of the world. These choices -- choices the students will make -- can affect millions or billions of people. Understanding how technologies have affected us and continue to affect us will help us make better decisions in the future.
## Example topics
* Famous figures in computer science that are role models in the community you are serving.
* Important technologies or algorithms (RSA, Dijstra's Algorithm, RAID, integrated circuits).
* New and emerging technologies (AI, Machine Learning, robotics, cryptocurrencies).
* The tech industry (social media, smart phones, video games, health and lifestyle).
* Ethical computing (privacy, cyberbullying, security).
## Instructor notes
### Prior to culture day
* Assign each student one or more topics to research and present to the class on a future day. Topics can be assigned, chosen by students from a pre-defined list, or suggested by students and approved by instructors.
* Create a schedule of when culture days will occur and which students will present on each day.
* Depending on how many students are in the class, and how many days you wish to allot for presentations, your pacing guide can be adjusted.
### Student presentations
* Each student should give a 5-7 minute presentation on their assigned topic, followed by 8-10 minutes for questions from the class.
* Students should have a visual aspect to their project (poster, slide deck, props) as well as giving a verbal presentation.
* Use your judgement regarding the level of technical detail expected in the presentation. It is probably not realistic to expect students to become experts in advanced technologies but they should be able to give an overview of their topic and explain at least one way in which this person or technology has impacted some aspect or segment of society.
* Do not allow students to simply read a textbook or online definition of the topic. Ensure they can at least explain the subject in their own words and are begining to analyze its effects on the world.
* Allow classmates to ask questions, but beware of students trying to stump each other.
* Have a few questions for each assigned topic prepared ahead of time for instructors to ask in case classmates do not have questions.
### Accommodation/differentiation
* In smaller classes, each student may be able to present twice in a single semester.
* For classes where students are less experienced with presentations, consider a "science fair"-style event where students produce a display that can be viewed by others to present their topic.
* For students with high levels of anxiety, consider allowing them to submit a video to share with the class or any method that they are comfortable with.
* Students new to presenting can have success presenting with one or two of their peers. Each student should make an attempt to speak during the presentation.
================================================
FILE: culture_day_lesson_c.md
================================================
# Culture day: My skills and interests journal
In this lesson, students will use a learning journal to record the learning throughout the course in order to gain confidents in using and creatiing with technology.
## Learning objectives
Students will be able to...
* Document their technology learning journey.
* Self-reflect on the joys and challenges of technology learning.
* Appreciate software development as a process.
## Pacing guide
Have students do self-evaluation journaling at different stages during the course, for example:
1. first week of course
2. after unit 2
3. after unit 4
4. and last week of course.
On Journal Writing days, teachers can omit bell work, and provide students with 10 minutes to do their writing.
| Duration | Description |
| :--- | :--- |
| 2 minutes | Welcome, attendance, (omit bell work), announcements |
| 10 minutes | Journal Writing Time |
| 38 minutes | A shortened regular class |
| 5 minutes | Debrief and wrap-up |
## Materials/Preparation
* Students should have individual notebooks, a registered blog space, or worksheet handout to journal with.
* Teachers can provide a list of guidance questions (see below), or a survey that contains these questions.
## Instructor's Notes
### Explain to students
You may come to this course with stereotypes and myths about your abilities with computer science. By keeping a learning journal we will be using self-evaluation and self-reflection to help build your confidence. We will be reflecting on:
* what skills you currently have.
* what skills you gained over time.
* what you are capable of learning.
* what your interests might be.
* and what you would like to learn in the future
It's ok not to know everything. There is always something new to learn. Just take one step at a time.
### Beginning of the course
* Introduce students to the idea of a learning journal.
* Create a schedule of when, or how frequently, students are to write in their Journal.
### Self-evaluation and reflection example questions
Teacher should writes their own response to the prompts and share them with students.
Peer feedback is a powerful tool to use for this entries. When doing this make sure to go over how to give feedback with the students.
Here are some sentence starters to help guide through giving feedback to guide students.
* One thing I liked was…
* One thing I would change was…
* I’d like to know about ….
#### Beginning of the course entry
* What tools and technologies have you used before?
* On a scale of 1-5, how confident are you with them (5 being super-confident)
* What do you look forward to learning in this course?
* What are your worries and concerns about this course?
* other thoughts or comments.
#### Intermediate entries
* List the technical skills have you gained since the last time you wrote in your journal.
* What other skills have you gained? For example: creating a plan, drawing a graphic design, giving a presentation.
* What would you like more time working on to learn more?
* Looking at the new skills you have gained, or practiced, how do you feel about it?
* What did you like best about the course so far?
* What other skills would you really like to learn?
* What do you think we can do to improve the course?
* other thoughts or comments.
#### End of the course entry
* If you were to give advice to a new student who will start the course, what would it be?
* Was learning new skills easier, or harder than you thought? Explain.
* What are your project or design interests?
* Would skills would you like to learn next?
* What future jobs might use these skills?
* other thoughts or comments.
### Continue explaining to students
Like learning any new skill, or language, it takes time to learn. In computer programming, it's normal for a section of code to not work the first time.
Here are some things to think about during your journey through computer science:
1. If something doesn't work, don't be discouraged! It's part of the process. In fact, even experienced programmers spend a lot of time finding errors in their design and code. It's like detective work. This is when you can practice critical thinking steps of breaking down the problem, isolating the error, analyzing the values of variables. It can be frustrating but it's fun and rewarding when you resolve the error.
2. Don't be afraid to ask for help. Professional developers consult focus groups online to ask questions, and share solutions. One popular developer community is [Stack overflow](https://stackoverflow.com/)
#### Share learning journey with peers
* At the end of the course, ask each students to share a few key points with the class. They can refer to their final entry page in their Journal.
* This is an excellent oppotunity to share these stories to build community in your school and help to encourage more students to join the class.
### Continue to emphasize with students
Let's celebrate your learning journey! Don't let stereotypes, myths, or negative messages affect your motivation to learn technology. Whether it's coding, creative user-centered design, project management and everything in between. Don't just be technology consumers, be equipped to create and build your own uses for technology. The essentials skills you learn in this course will empower you to use technology in meaningful ways for a better future.
## Accommodation/differentiation
* This exercise could also be conducted in the form of a series of online surveys. The survey should allow for written responses, so that students are free to enter their own thoughts. Though remember that it's important that they reflect on this at the end of the course in order to build their confidence.
================================================
FILE: culture_day_lesson_d.md
================================================
# Culture day: Interview people in technology fields
## Learning Objectives
Students will be able to...
* Identify the people in their family, or community, who have technology-related jobs.
* Create interview questions to find out about their jobs.
* Conduct an interview.
* Identify the different types of roles and skills needed in the technology industry.
* Identify technology skills needed in non-technology organizations.
* Reflect on how technology could be part of their future careers.
## Resources and project ideas
[Computer science hero classroom resources](https://www.csedweek.org/teach)
## Pacing Guide
This lesson can be done over two class periods.
### Day 1
Students prepare for the interviews. This class could be combined with a [journal writing day](culture_day_lesson_c.md).
| Duration | Description |
| :--- | :--- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introduce lesson and warmup activity|
| 15 minutes | Prepare interview questions |
| 10 minutes | Other activity (suggestion: Journal Writing)|
| 5 minutes | Debrief and wrap-up |
### Day 2
Students share and report on the interviews.
| Duration | Description |
| :--- | :--- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 45 minutes | Each group presents their interview highlights and key reflections|
| 5 minutes | Debrief and wrap-up |
## Instructor's Notes
### Explain to students
You may come with stereotypes and myths about technology jobs. There are many different types of roles and skills needed in the technology industry. There are many roles that don't require you to sit at your computer all day long and write code.
Here are a few examples:
* Artistic designers
* Music creators
* Script writers
* Project managers
* Marketing specialists
* Web designer
As you get to know people in your community, you can discover individuals who are willing to be mentors for your classroom in the days ahead.
### Introduction to the lesson, and warmup activity
#### Identifying local industries
* Before students start thinking about who to interview, find out how much your students know about technology companies in your city or town. Spend some time to search online. Write on the board some examples of technology companies, or companies that have technology departments.
#### Identify people in their lives
* Ask each student alone, or with partner, to brainstorm on a piece of paper 3-4 people who have technology-related jobs. Encourage students to think of a different variety of jobs.
* Encourage students to think of people that they know personally.
* Encourage students to think about the different people around them:
* those who work in technology organizations.
* those who have technical positions in other types of organizations.
* could be friend, relative, or even someone that you can approach
#### Share and decide
* Find a partner, and share your list with each other.
* Agree on 2 people from your combined list to interview together.
### Preparing for the interview
* In pairs, have students prepare a list of interview questions for each person.
* Encourage students to create a variety of questions, for example:
* What does your typical work day look like?
* What do you like, or not like, about your job?
* What inspires you?
* What are some challenges?
* What educational background is needed to do your job?
* What kind of technical skills are needed in your job?
* What advice do you have for students?
### Conducting the interview
* Each pair should make a plan of how to conduct the interview in the coming week.
* This should be done outside of class time.
#### Professional and respectful
* Contact the person first to arrange a time and place to meet
* Be punctual; if working with a partner, remember to introduce all parties involved.
* Tell interviewee the purpose of the interview is for you (students) to learn more about technology related careers.
* Ask politely for permission to share some of their answers (within the classroom).
* Avoid questions that may be awkward or too personal (like salary), and always thank the person for their time.
* Take some notes, while still listening and being attentive.
#### After the interview
* Students should talk with each other about key points, and personal take-aways.
* Here are some reflection prompts for students:
* What surprised you?
* What was interesting?
* What did you learn?
* Did you feel inspired or get ideas about possibilities jobs you could do in the future?
* Write 1-2 paragraphs of reflection
* As a team, prepare a few PowerPoint slides (or photos, brochures, or grab bag items) to capture your interview findings and reflections, which to use for sharing with peers.
### Share with peers
* Ask each pair to share highlights, and key reflections, with the class.
* This can be done in one class period. The presentation time per group should be adjusted so to accommodate all students, so that no one feels left out.
* As a guideline for a 5-6 minute presentation, they can prepare 2-3 slides for each person interviewed.
* Students can also play short video clips from their interview as well.
## Accommodation and differentiation
* Students who have little experience with interviews may practice interviewing one another in the class with a few simple questions.
* Some students may struggle to think of others to interview. They may be encouraged to consider asking a teacher or staff in the school as potential interviewees.
* Be sensitive to assist students who are new to the community, those not living with family, those who don't speak English at home, or have other situations that they may feel embarrassed about.
* Working with a partner can alleviate awkwardness for students who can't think of anyone to interview and anxiety related to a face-to-face interview.
* Motivated students could video the interview as well, and show clips during peer sharing time, with permission from the interviewee. The final sharing could be done in the format of a prepared video.
================================================
FILE: curriculum_map.md
================================================
# Intro to Computer Science teaching resource (curriculum map)
Materials and preparation resources can be found in each of the lesson pages.
**Pacing guidance:** 1 Day is a 55 minute class period.
**Protected content** such as unit quizzes, quiz answer keys, project sample solutions can be accessed from the TEALS Dashboard in Additional Curriculum Materials.
## Support documents
* [Template Syllabus](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/IntrotoCSSyllabusExample.docx): Feel free to use this template to build a syllabus for your class.
* [Master Vocabulary List](master_vocab.md)
* [Computer Science Teachers Association Standards Mapping](CSTA_standards_mapping.md)
* [Slide decks](slidedecks.zip): Download all the slide decks in one zip file.
* [CSTA content matrix](CSTA-content-matrix-9-12.docx) - this resource has some culture day activities aligned to the CSTA standards.
## Unit 0: Beginnings
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | -- |
| [0.1: The first day of school][] | Identify the class they are taking. List the high-level goals of the course. Describe classroom procedures, rules, and norms. | Syllabus | 1 |
| [0.2: Algorithms][] | Define **algorithm.** Construct algorithms for performing simple tasks. | Peanut Butter Jelly | 1 |
| [0.3: Programming languages][] | Complete small scripting tasks (Hour of Code). Explain why computer programs are written in specialized languages. | Hour of Code | 1 |
| [0.4: Self-portrait][] | Create a simple script in to describe themselves | Getting to Know You | 1 |
| [0.5: Coordinate system][] | Recall the Cartesian coordinate system. Implement the coordinate system to position a sprite using Coordinates. | Getting to Know Coordinates | 1 |
## Unit 1: basics
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [1.1: Welcome to Snap!][] | Define and identify **blocks**, **scripts**, **sprites**, and **the stage**. Write simple scripts. Describe what simple scripts do without executing the script.| Welcome to Snap! | 2 |
| [1.2: Building blocks][] | Identify the pallettes of blocks in . Describe the function of several common blocks. Be able to use common blocks to build simple scripts. | Scavenger Hunt | 1 |
| [1.3: Drawing shapes][] | Construct simple algorithms to draw shapes. Convert algorithms into scripts. | Squares, triangles and Stars | 1 |
| [1.4: Animation][] | Animate sprites using costume changes and movement.Trigger action in other sprites using broadcasts. Implement scripts for multiple sprites. | Sprites in Action | 1 |
| [1.5: Storytelling project][] | Apply programming skills to create an animated movie, play, nursery rhyme, or other scene. Practice good debugging skills to correct issues as they arise while scripting. | Project 1: Animated Storytelling | 2 |
| [Culture day lesson A: Video/reading][] | Connect CS Unit topics with current events | | 1 or more |
## Unit 2: Loop-de-loop
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [2.1: Loops][] | Define **loop** in a programming context. Explain why loops are useful. Implement simple repeat and forever loops. Apply loops to reduce redundancy in a program. | Squares and Triangles Redux | 1 |
| [2.2: Nested loops][] | Apply nested loops to solve programming problems. | Yellow Brick Road | 1 |
| [2.3: Inputs and conditionals][] | Apply **Ask** and **Receive**. Apply simple conditional, **if** and **if-else** blocks, to alter control flow in a script. | What Shape Is That? | 1 |
| [2.4: Variables][] | Apply variables to track values throughout a program or script. | Guessing Game | 1 |
| [2.5: Boole in the house][] | Define and identify Boolean expressions and operators. Evaluate Boolean expressions. Utilize Boolean operators, `and`, `or`, `not`, to create compound conditions. | Triangles of All Kinds | 1 |
| [2.6: Pong project][] | Implement a well-written version of Pong. Practice good style and conventions to create readable and maintainable program. | Project 2: Pong | 4 |
| [Culture Day Lesson B: Student research project/presentation][] | Connect CS Unit topics with current events | | 1 or more |
## Unit 3: Abstraction and Customization
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [3.1: Abstraction and generalization][] | Define the terms **Abstraction** and **Generalization**. Recognize opportunities to improve algorithms by abstracting or generalizing parts into sub-procedures. | Drawing Shapes Again | 1 |
| [3.2: Combining Loops and conditionals][] | Combine loops with conditionals to create models with repeated but conditional behavior. | What Goes Up... | 1 |
| [3.3: Customization I: Arguments][] | Build custom blocks that take arguments. | Let Me Check My Calendar | 1 |
| [3.4: Customization II: Reporters and predicates][] | Build custom reporter and predicate blocks. | If My Calculations Are Correct... | 1 |
| [3.5: Platform game project][] | Apply loops, variables, and Boolean expressions to implement a Super Mario Bros. style platform game. Practice good debugging skills to correct issues as they arise while scripting. | Project 3: Platform Game | 8 |
| [Culture Day Lesson C: My skills and interests journal][] | Connect CS Unit topics with current events. | | 1 or more |
## Unit 4: Lists
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [4.1: Intro to lists][] | Explain the concept of a `list` in a programming context. Identify scenarios in which lists are useful. | | 1 |
| [4.2: Static lists][] | Create static lists. Access elements of a list. Add and remove elements from a list. | You Talkin' to Me? | 1 |
| [4.3: List practice I][] | Traverse a list, accessing each element one at a time.Perform operations combining all elements in a list. Select defined subsets of elements in a list. | Guess Who | 1 |
| [4.4: List practice II][] | Traverse a list, accessing each element one at a time. Perform operations combining all elements in a list. Select defined subsets of elements in a list. | Number Cruncher | 1 |
| [4.5: Sequential search][] | Explain the sequential search algorithm. Implement several variations of sequential search.. | It's Around Here Somewhere | 1 |
| [4.6: Guess my word project][] | Apply lists to implement a complete version of _Guess My Word_. Exercise good programing practices to produce a program that is not only functional but also elegant and well-written. | Project 4: Guess My Word | 5 |
| [Culture day lesson D: Interview with people in technology][] | | | 1 or more |
## Unit 5: Cloning
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [5.1: Intro to cloning][] | Explain why prototyping and clones can be useful. Describe how complex goals can be accomplished using cloning. | Connect the Dots | 1 |
| [5.2: Cloning sprites][] | Demonstrate the difference between sprite and global variables. Explain how cloning and prototyping simplify similar sprites in the same program. Create prototype sprites and clones of the prototype sprite. Explain the difference between a "master" sprite and a "clone" sprite. | Lots of Balls | 1 |
| [5.3: Communicating With clones][] | Pass information from the master to individual clones. Delete clones when they are no longer needed. | Fewer Balls | 1 |
| [5.4: Space Invaders project][] | Use cloning to implement a complete version of "Space Invaders". Exercise good programing practices to produce a program that is not only functional but also elegant and well-written. | Project 5: Space Invaders | 10 |
## Unit 6: Final project
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [6.1: Design basics][] | Identify the key considerations when designing a piece of software. Describe methods for prioritizing features, use cases, and/or scenarios. Explain why design and planning are necessary steps in the software engineering process. | Final Project | 1 |
| [6.2: Research and ideate][] | Identify potential users, intended impact, and possible unintended negative consequences. Generate ideas to create range of possibilities using a brainstorm technique. Conduct user-centered research to understand design opportunities and barriers. Critically analyze factors when choosing between project ideas. Prioritize proposed project ideas using the identified factors. | Final Project | 1 |
| [6.3: Defining requirements][] | Define key **user-scenarios** for a project and the features required to implement each scenario. Explain the importance of wire framing when designing an application. Capture key scenarios using **sketches** - (hand drawn, or with drawing tool). Refine design based on user-centered research. | Final Project | 1 |
| [6.4: Building a plan][] | Break down, and identify the main technical components needed for the functional project specifications (scenarios). Explain the purpose of each technical component. Develop the project idea into a full, detailed specification. Create a plan that includes specific steps or a list of bite-sized tasks. Estimate time required for tasks. | Final Project | 1 |
| [6.5: Project implementation][] | Apply the skills developed throughout the course to implement a medium* to large-scale software project. Realistically evaluate progress during software development and identify when cuts are necessary. Prioritize features and scenarios and choose which should be eliminated or modified if/when resources and/or time become limited. Record time taken for tasks, and lessons learned in the process, to help refine estimates. Record iterations of prototyping. | Final Project | 10 |
| [6.6: Project sharing][] | Share their progress, invite feedback, collaboration, and if applicable, prepare a marketing pitch. Decide on how and with whom to promote and share their project. Critically evaluate the design process, their ability to work effectively, including the ability to implement project management processes. Identify new design issues, including how they or others might build on their concept. Identify and evaluate their skills, and things to learn in the future. Analyze the role and impact of their project idea, and similar technologies, in societal change. Consider how cultural beliefs, values, and ethical positions affect the development and use of technologies. | Final Project | 1 |
[0.1: The First Day of School]:lesson_01.md
[0.2: Algorithms]:lesson_02.md
[0.3: Programming Languages]:lesson_03.md
[0.4: Self-Portrait]:lesson_04.md
[0.5: Coordinate System]:lesson_05.md
[1.1: Welcome to Snap!]:lesson_11.md
[1.2: Building Blocks]:lesson_12.md
[1.3: Drawing Shapes]:lesson_13.md
[1.4: Animation]:lesson_14.md
[1.5: Storytelling Project]:lesson_15.md
[Culture Day Lesson A: Video/Reading]:culture_day_lesson_a.md
[2.1: Loops]:lesson_21.md
[2.2: Nested Loops]:lesson_22.md
[2.3: Inputs and Conditionals]:lesson_23.md
[2.4: Variables]:lesson_24.md
[2.5: Boole in the House]:lesson_25.md
[2.6: Pong Project]:lesson_26.md
[Culture Day Lesson B: Student Research Project/Presentation]:culture_day_lesson_b.md
[3.1: Abstraction and Generalization]:lesson_31.md
[3.2: Combining Loops and Conditionals]:lesson_32.md
[3.3: Customization I: Arguments]:lesson_33.md
[3.4: Customization II: Reporters and Predicates]:lesson_34.md
[3.5: Platform Game Project]:lesson_35.md
[Culture Day Lesson C: My Skills and Interests Journal]:culture_day_lesson_c.md
[4.1: Intro to Lists]:lesson_41.md
[4.2: Static Lists]:lesson_42.md
[4.3: List Practice I]:lesson_43.md
[4.4: List Practice II]:lesson_44.md
[4.5: Sequential Search]:lesson_45.md
[4.6: Guess My Word Project]:lesson_46.md
[Culture Day Lesson D: Interview with People in Technology]:culture_day_lesson_d.md
[5.1: Intro to Cloning]:lesson_51.md
[5.2: Cloning Sprites]:lesson_52.md
[5.3: Communicating with Clones]:lesson_53.md
[5.4: Space Invaders Project]:lesson_54.md
[6.1: Design Basics]:lesson_61.md
[6.2: Research and Ideate]:lesson_62.md
[6.3: Defining Requirements]:lesson_63.md
[6.4: Building a Plan]:lesson_64.md
[6.5: Project Implementation]:lesson_65.md
[6.6: Project Sharing]:lesson_66.md
================================================
FILE: do_now_04.md
================================================
# Identity
How would you fill in the following: I am ______?
This could be answered in many ways:
1. What you enjoy doing: I am a musician.
2. Physically: I am tall.
3. Personal characteristic: I am funny.
4. Career aspirations: I am an engineer.
5. Self reflective: I am a deep thinker.
6. As an athlete: I am a runner.
## In your notebook
After taking few minutes to think who you are, write down your thoughts in your notebook. We will be using who you are to write a self expression script.
================================================
FILE: do_now_05.md
================================================
# Draw the coordinate system
## In your notebook
Draw this image to the best of your ability and then answer the questions below the image.

1. Can you label the _x_ and _y_ axes?
2. Can you label the tick marks on the axes from -5 to 5?
3. Draw a point at the origin (0, 0).
Note: It's ok you don't know the answers to these questions. We will go over them in this lesson.
================================================
FILE: do_now_11.md
================================================
# Review the coordinate System

## Answer the following in your notebook
1. What are the coordinates of the red sprite?
2. What are the coordinates of the green sprite?
In your window, take a look at the blocks under the motion pallette. The majority of the blocks there will help you position your sprite on the stage. Try them and see what they do! Change the input values to see what happens.
3. List at least 4 blocks from the motion pallette that will change the position of a sprite.
## Make sure you know how to use the **say** block
1. Open the development environment and start a new project.
2. Using the **say** block have your sprite say "Hello World".
3. Save your with the file name _DoNow1.1_.
================================================
FILE: do_now_12.md
================================================
# Tracing and debugging
## In your notebook
1. Define **Code tracing**.
2. Define **Debugging**.
## Putting blocks together to build a script
All of the following blocks, you have been introduced too. Let's put them together to create a script.
1. Open the development environment and Start a new project.
2. Select the check box next to the `x position` and `position` pointer block to display their values on the stage.
3. Have your sprite move 100 units to left.
4. Turn 90 degrees clockwise.
5. Move 100 units.
6. Write down the coordinates in your notebook.
7. Save your project as _DoNow1.2_
================================================
FILE: do_now_13.md
================================================
# Drawing a triangle
## Setup
1. Open this [starter script](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Equalteral%20Triangle)
2. exit full screen
3. Save your project as _DoNow1.3_.
4. You can use this as a starting point for today's lab.
> Try enabling `visible steps` near the middle of the top toolbar. Adjust the slider so you can see what happens as you step through your script.

## Instructions
Using only the blocks already added on screen (not every block is needed), create a script that draws an equilateral triangle, like:

[starter project]: https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%201.3_Starter
Save your project as _Donow12_.
================================================
FILE: do_now_14.md
================================================
# Example animation
## Follow these steps on your own
1. Open this [starter script](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%201.4_Starter).
2. Log into your account and save the starter project.
3. Save your project as _DoNow1.4_.
4. Press the space bar on your keyboard several times in a row. Notice what happens to the two bats on the screen.
>Hint: If a sprite moves completely off the Stage, you can bring the sprite back on the Stage by right-clicking its icon in the sprite corral and choosing `show`.
5. Use your mouse to point the cursor at one of the bats. Then, click the mouse button several times. Notice what happens to the two bats on the screen.
6. Take a look at all of the parts of the window. Read the comments in the script. Be sure to explore the tabs at the top of the scripting area and the icons in the sprite corral.
> Hint: It may be helpful to activate "visual steps" with the footprint icon near the middle of the top tool bar.
## Respond to the following in your notebook
1. Write down the name of all of the blocks that you have never seen before.
2. Write down every object has a script that executes.
================================================
FILE: do_now_15.md
================================================
# Knock knock joke
1. Write a program where one sprite is telling another a "knock, knock" joke. Internet search for one if you need ideas.
Use these blocks:


2. Save your project as _DoNow1.2_.
================================================
FILE: do_now_152.md
================================================
# Click event interaction
1. Write a script where one sprite acts as a button and when pressed, it increases the size of another sprite. Use these blocks:




2. Save your project as _DoNow1.5.2_.
================================================
FILE: do_now_153.md
================================================
# Movement interaction
1. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160201%20Do%20Now%20Bat%20and%20Dragon).
2. Save your project as _DoNow1.5.3_.
3. Look at the bat's program and how events are triggered by two different keys. Trace through the scripts to understand how the it works.
4. Modify the script so that the bat flies to the Dragon when the space key is pressed once.
5. Add to the script to have the bat to say "BOO!" when it stops.
6. Add to the script to have the dragon turn around and say, "You scared me!".
7. Add to the script to have the Bat to then turn around and fly away.
================================================
FILE: do_now_21.md
================================================
# Introduction to loops
Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160205%20Do%20Now%20User%20Input), run the scrpt and test it, then answer these in your notebook.
1. What is the **forever** block, and why is it important for this program?
2. What happens if you take it out temporarily, reattach the rest of the script to the **When Green Flag clicked** block, and run the program?
3. What does the **point direction 90** do to the sprite?
4. What would happen if you decrease or increase the number of steps?
5. Add scripting so that if the user presses the left arrow key, the sprite faces the left direction and moves a few steps in that direction. Test to make sure that this works and also that right arrow key still works.
6. Save your project as _DoNow2.1_.
================================================
FILE: do_now_22.md
================================================
# Building a staircase
1. Open this [starter project](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%202.2_Starter) puzzle.
2. Reassemble the blocks so Alonzo asks how many stairs to draw.
3. Have Alonzo draw stairs from the center of the stage to the upper right the number of times specified.
4. Save your project as _DoNow2.2_.

================================================
FILE: do_now_23.md
================================================
# Stairs
1. Use the following **Repeat** block to draw a square (note: you will have to put a number in place of the blank).

2. How would you use an additional **repeat** block to draw 12 squares in a line one next to each other. Each square will be to the right of the last square drawn.
3. How would you modify the script so the squares form a set of stairs going up?
4. Save your project as _DoNow2.3_.
================================================
FILE: do_now_24.md
================================================
# Debugging
1. Open this [starter project](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%202.4_Starter) game.
2. Save your project as _DoNow2.4_
3. In this two-player game, Alonzo is trying to catch the blue dog. Both Alonzo and the blue dog are controlled using keys on the keyboard.
4. There are at least six bugs in this program. Four of them affect the game play and two of them are cosmetic.
5. Fix all of the bugs to get the program working correctly.
## Respond to the following in your notebook
1. What keys were used to control Alonzo?
2. What keys were used to control the dog?
3. List at least six bugs in the program and explain what the bugs are and how to fix them.
__Bonus:__ Once you get the game working, can you think of some changes to make it more fun?
================================================
FILE: do_now_25.md
================================================
# Variables practice
## In your notebook
1. Write an algorithm, in English, for how you would swap the values in two variables. For example, suppose we have two variables that have different values:
* set `playerOneValue` to "Torch"
* set `playerTwoValue` to "Gold"
2. How would you swap the values so `playerOneValue` is set to "Gold" and `playerTwoValue` is set to "Torch"?
* Here, "Torch" and "Gold" are just examples. Suppose the algorithm doesn't know what values the variables have before it begins.
3. Swap your algorithm with a partner and test it to determine if it works or not.
================================================
FILE: do_now_26.md
================================================
# Bouncing ball
1. Open a new project and change the sprite's costume to a ball.
2. Save your project as _DoNow2.6_
3. Using the following blocks, write a script that continuously moves the ball across the screen and bounces the ball when it hits the edge of the screen.




4. Add a second sprite. Add the same script from step 2 above for the new sprite.
5. What happens when you run? Explain what you observe.
================================================
FILE: do_now_31.md
================================================
# Guided Tour
## In your notebook
Plan a route, starting at the hotel, so that tourists can visit every tourist attraction just once and be back to the hotel.

Credit: Queen Mary University of London
================================================
FILE: do_now_32.md
================================================
# Sprite control
1. Open this [starter program](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%203.2_Starter).
2. Save your project as _DoNow3.2_.
3. Add to the program to do the following:
* Move Dino up 1 unit at a time when you press the **arrow up** key. You must use the **change y by** block.
* Move Dino down 1 unit at a time when you press the **arrow down** key. You must use the **change y by** block.
* Don't let Dino leave the screen.
* Don't let Dino go through the platform.
* Don't let Dino go underground.
================================================
FILE: do_now_33.md
================================================
# Jumping
Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160223%20Do%20Now%20dog%20walking%20and%20jumping) that can move left and right in response to arrow keys. Make the following modifications to the program:
1. A walking animation for the dog. Hint: it has 2 costumes.
2. Add the script below to the **forever** block to make the dog jump.

* What is the problem with this jump script when you test it?
* How should jump work when the player presses the spacebar?
3. Add gravity by making a custom **motion** block called "gravity" and adding it inside the forever loop. In the **gravity** custom block use an if statement to implement gravity. Hint: If not touching ground or platform color, go down by a small amount.
4. Save your project as _DoNow3.3_.
================================================
FILE: do_now_34.md
================================================
# Practice using arguments
Open your _DoNow3.3_ program. In this program, you created a **gravity** block where a sprite would fall to the ground and stop when it touched a color. The sprite always falls at the same rate.
How would we get the sprite to fall at different rates?
We will solve this problem by adding an argument to the **gravity** block. We can then pass the rate we want the sprite to move.
1. Add an argument named "rate" to the **gravity** block by clicking the "+" next to the block name.
2. Change the **move** block to move "rate" spaces by dragging the rate variable to the **move** block.
3. You can now pass different rates in your **gravity** block call located in the sprite's forever loop.
4. Save your project as _DoNow3.4_.
================================================
FILE: do_now_42.md
================================================
# Letters of a word
1. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=Starter%20project%20for%20text%20operators%20practice) and run the script.
2. Once you understand how it works, modify the program so that the sprite says every letter in the word.
3. Save your project as _DoNow4.2_.
================================================
FILE: do_now_43.md
================================================
# Quote of the day
1. Create a list with 10 inspirational quotes. You may use the internet for ideas.
2. Use the item block below to pick a random quote of the day.

3. Save your project as _DoNow4.3_.
================================================
FILE: do_now_44.md
================================================
# Traversing lists
## In your notebook
1. Describe what it means to _traverse a list_.
2. List 2 different blocks you can use to traverse list and how you would use them.
================================================
FILE: do_now_45.md
================================================
# List tracing
For each script below, describe what the sprite does when that script is triggered. Number your answers. If you have time, check your answers by assembling these scripts.
You will need to add the "words, sentences" library to your project to use the **list->sentence** block.
1. Click the File Icon in the upper left corner next to the image.
2. Click "Libraries..."
3. Select "Words, sentences"
4. Click "Import"
* The "list->sentence" block will be one of the blocks added to the operators palette.

5. Save your project as _DoNow4.5_.
================================================
FILE: do_now_46.md
================================================
# Spaceman
Participate in a couple of rounds of the game Spaceman with your teacher.
## In your notebook, answer the following questions
1. How could you use lists from this unit to help implement a version of this game?
2. What other creative ideas can you come up with to visualize the number of chances a player has to guess the letters? (come up with at least 2)
================================================
FILE: do_now_52.md
================================================
# Star Wars troopers
1. In Star Wars, what are "clone troopers"? Do an internet search to find out and write a sentence to answer the question.
2. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160425%20Do%20Now%20cloning). Duplicate the sprite (and scripts) so that there are 5 clone troopers that move from the right side of the screen to the left side in a straight line when green flag is clicked. The starting and ending positions of the sprites are shown below.
3. Save your project as _DoNow5.2_.
Start:

End:

================================================
FILE: do_now_53.md
================================================
# Star Wars troopers using cloning
1. In yesterday's do now, we used a script to duplicate 5 Star Wars troopers to march across the stage. Today we will use the clone feature to do the same thing.
2. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160425%20Do%20Now%20cloning). Using the **create a clone of** block, create a script so there are 5 clone troopers that move from the right side of the screen to the left side in a straight line when green flag is clicked. The starting and ending positions of the sprites are shown below.
3. Save your project as _DoNow5.3_.

## Start

## End

================================================
FILE: docs/.gitignore
================================================
/.idea/
/.vscode/
================================================
FILE: docs/CSTA_standards_mapping.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Intro to Computer Science
In this document, we have put together a mapping to Computer Science Teachers Association(CSTA) curriculum standards.
## CSTA Standards Mapping
Here you can find the curriculum standards to reference: [https://www.csteachers.org/page/standards](https://www.csteachers.org/page/standards)
## Unit 0: Beginnings
| Lesson | Standards |
| ------ | ---------- |
| [0.1: The First Day of School][] | 3A- CS-01 |
| [0.2: Algorithms][] | 3B-AP-11, 3A-AP-13|
| [0.3: Programming Languages][] | 3A-CS-02 |
| [0.4: Self-Portrait][] | 3A-AP-13, 3B-AP-14|
| [0.5: Coordinate System][] | 3A-AP-13 |
## Unit 1: Basics
| Lesson | Standards |
| ------ | ---------- |
| [1.1: Welcome to Snap!][] | 3A-AP-13 |
| [1.2: Building Blocks][] | 3A-DA-11 |
| [1.3: Drawing Shapes][] | 3A-AP-13 |
| [1.4: Animation][] | 3A-AP-23 |
| [1.5: Storytelling Project][] | 3A-AP-13, 3A-AP-16, 3A-CS-03 |
| [Culture Day Lesson A: Video/Reading][] | 3A-IC-24 |
## Unit 2: Loop-de-Loop
| Lesson | Standards |
| ------ | ---------- |
| [2.1: Loops][] | 3A-AP-16 |
| [2.2: Nested Loops][] | 3A-AP-16 |
| [2.3: Inputs and Conditionals][] | 3A-AP-16 |
| [2.4: Variables][] | 3A-AP-16, 3A-AP-23 |
| [2.5: Boole in the House][] | 3A-AP-16 |
| [2.6: Pong Project][] | 3A-AP-13, 3A-AP-16, 3A-AP-17, 3A-AP-23, 3A-CS-03 |
| [Culture Day Lesson B: Student Research Project/Presentation][] | 3A-IC-27 |
## Unit 3: Abstraction and Customization
| Lesson | Standards |
| ------ | ---------- |
| [3.1: Abstraction and Generalization][] | 3A-CS-01 |
| [3.2: Combining Loops and Conditionals][] | 3A-AP-16 |
| [3.3: Customization I: Arguments][] | 3A-AP-23 |
| [3.4: Customization II: Reporters and Predicates][] | 3A-AP-16 |
| [3.5: Platform Game Project][] | 3A-AP-13, 3A-AP-15, 3A-AP-16, 3A-DA-12 |
| [Culture Day Lesson C: My Skills and Interests Journal][] | 3A-IC-24 |
## Unit 4: Lists
| Lesson | Standards |
| ------ | ---------- |
| [4.1: Intro to Lists][] | 3A-AP-14 |
| [4.2: Static Lists][] | 3A-AP-14 |
| [4.3: List Practice I][] | 3A-AP-14 |
| [4.4: List Practice II][] | 3A-AP-14 |
| [4.5: Sequential Search][] | 3A-AP-13 |
| [4.6: Guess My Word Project][] | 3B-AP-09, 3A-AP-13, 3A-AP-14, 3A-AP-18, 3A-AP-23, 3A-CS-03 |
| [Culture Day Lesson D: Interview with People in Technology][] | 3A-IC-27 |
## Unit 5: Cloning
| Lesson | Standards |
| ------ | ---------- |
| [5.1: Intro to Cloning][] | 3B-AP-14 |
| [5.2: Cloning Sprites][] | 3B-AP-16 |
| [5.3: Communicating With Clones][] | 3A-DA-12 |
| [5.4: Space Invaders Project][] | 3A-AP-13, 3A-AP-14, 3A-DA-12, 3B-AP-14, 3B-AP-15, 3A-CS-03 |
## Unit 6: Final Project
| Lesson | Standards |
| ------ | ---------- |
| [6.1: Design Basics][] | 3A-AP-13 |
| [6.2: Research and Ideate][] | 3B-AP-17 |
| [6.3: Defining Requirements][] | 3B-AP-15 |
| [6.4: Building a Plan][] | 3B-AP-15 |
| [6.5: Project Implementation][] | 3A-AP-13, 3B-AP-15, 3B-AP-08, 3B-AP-09, 3B-AP-17, 3B-AP-20, 3B-AP-21, 3B-AP-23, 3A-CS-03 |
| [6.6: Project Sharing][] | |
[0.1: The First Day of School]:lesson_01.md.html
[0.2: Algorithms]:lesson_02.md.html
[0.3: Programming Languages]:lesson_03.md.html
[0.4: Self-Portrait]:lesson_04.md.html
[0.5: Coordinate System]:lesson_05.md.html
[1.1: Welcome to Snap!]:lesson_11.md.html
[1.2: Building Blocks]:lesson_12.md.html
[1.3: Drawing Shapes]:lesson_13.md.html
[1.4: Animation]:lesson_14.md.html
[1.5: Storytelling Project]:lesson_15.md.html
[Culture Day Lesson A: Video/Reading]:culture_day_lesson_a.md.html
[2.1: Loops]:lesson_21.md.html
[2.2: Nested Loops]:lesson_22.md.html
[2.3: Inputs and Conditionals]:lesson_23.md.html
[2.4: Variables]:lesson_24.md.html
[2.5: Boole in the House]:lesson_25.md.html
[2.6: Pong Project]:lesson_26.md.html
[Culture Day Lesson B: Student Research Project/Presentation]:culture_day_lesson_b.md.html
[3.1: Abstraction and Generalization]:lesson_31.md.html
[3.2: Combining Loops and Conditionals]:lesson_32.md.html
[3.3: Customization I: Arguments]:lesson_33.md.html
[3.4: Customization II: Reporters and Predicates]:lesson_34.md.html
[3.5: Platform Game Project]:lesson_35.md.html
[Culture Day Lesson C: My Skills and Interests Journal]:culture_day_lesson_c.md.html
[4.1: Intro to Lists]:lesson_41.md.html
[4.2: Static Lists]:lesson_42.md.html
[4.3: List Practice I]:lesson_43.md.html
[4.4: List Practice II]:lesson_44.md.html
[4.5: Sequential Search]:lesson_45.md.html
[4.6: Guess My Word Project]:lesson_46.md.html
[Culture Day Lesson D: Interview with People in Technology]:culture_day_lesson_d.md.html
[5.1: Intro to Cloning]:lesson_51.md.html
[5.2: Cloning Sprites]:lesson_52.md.html
[5.3: Communicating with Clones]:lesson_53.md.html
[5.4: Space Invaders Project]:lesson_54.md.html
[6.1: Design Basics]:lesson_61.md.html
[6.2: Research and Ideate]:lesson_62.md.html
[6.3: Defining Requirements]:lesson_63.md.html
[6.4: Building a Plan]:lesson_64.md.html
[6.5: Project Implementation]:lesson_65.md.html
[6.6: Project Sharing]:lesson_66.md.html
================================================
FILE: docs/Changelog.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Change Log
## [2.2.5] - 2022-5-12
|Unit | Change |
|---------|--------|
| 1 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 2 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 3 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 4 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 5 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
| 6 | Lesson spelling and grammar, lab document updates, slide deck alignment, project document updates, issues closed |
## [2.2.4] - 2022-1-25
|Unit | Change |
|---------|--------|
| All files | Added discussion link to top navigation |
| 1.5 Slide deck | Link added in lesson 1.5 and review slide updated. |
| Unit 1 tips | seperate page delete and added directly into lesson page. |
| Lesson 1.5 | Grudgeball link removed and instructions added directly to slide deck. |
| All lessons | Continued alignment to the Microsoft Style guide. |
## [2.2.3] - 2021-10-09
|Unit | Change |
|---------|--------|
| All lessons, labs, projects and do nows | Aligned to MS style guide |
| Slide decks | Added a .zip of all slide decks to be downloaded at once. |
| Unit 0 | Lab .docx and .pdf aligned to Teals branding |
| Culture day lessons | updated for clarity |
## [2.2.2] - 2021-6-10
|Unit | Change |
|---------|--------|
| All lessons| removed reference to TEALS forum |
| Images | naming convention consistency aligned |
| Curriculum Map | CSTA standards alignment added |
| Curriculum Map | Master word list added |
## [2.2.1] - 2020-11-25
|Unit | Change |
|---------|--------|
|Lesson 1.4 | Updated guidance with images to the Broadcast and Wait instructions |
|Lab 1.4 | Update Rubric, instructions and answer key to set expectations to using `Broadcast` in the solution. |
|Unit 6| Removed references to Agile |
|Unit 6| Added Project specs to each lesson for consistency |
|Lesson 6.6 | Added |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 4.4, 4.5 |
## [2.2.0] - 2020-11-13
|Unit | Change |
|---------|--------|
|Lessons 4.1 - 4.5| Wording consistency, spelling updates |
|Labs 4.2 - 4.5 | Formatting, wording consistency, Creative Common and TEALS Branding |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 4.2, 4.3 |
## [2.1.9] - 2020-10-23
|Unit | Change |
|---------|--------|
|Lessons 2.1 - 3.4| Wording consistency, spelling updates |
|Labs 2.1 - 3.4 | Formatting, wording consistency, Creative Common and TEALS Branding |
|Lab 3.4 | Distance Formula changed to Bonus problem. |
|2.4 Slide Deck | Boolean Operators introduction video added and updates instruction |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 2.1, 2.3, 2.4, 2.5, 3.1, 3.3, 3.4 |
## [2.1.8] - 2020-10-16
|Unit | Change |
|---------|--------|
|Curriculum Map | Objectives aligned to lesson plans|
|Lesson 1.4| Updated lab instructions to be more clear, added instruction on how to add a second sprite. |
|Unit 3| Updated title to Abstraction and customization |
|Lesson 1.3 | Updates to Do now and lab instructions |
|Lab 2.1 | Formatting Updates |
|Additional Curriculum Materials | Lab Answer Keys created for Labs: 1,1, 1.2, 1.3, 1.4, 2.2, 3.2 |
## [2.1.7] - 2020-10-7
|Unit | Change |
|---------|--------|
|Curriculum Map | Added Guidance on where to find answer keys|
|All Units| Snap! Spelling Consistent across HTML files|
|Unit 1 | Labs 1.1, 1.2, 3.2 Answer Keys added to additional curriculum Materials |
|Helping Trios Activity | Restructured and Remote Guidance Added |
|Lab 3.2 | Added Scoring rubric and updated wording to be more concise |
## [2.1.6] - 2020-9-16
|Unit | Change |
|---------|--------|
|Curriculum Map | Reformatted page with a days column for consolidation and consistency, moved PPTs to lesson pages|
|CSS | Updated CSS so that tables will align left and slightly more appealing to look at|
|Units 1-3| Added Video Resources and Video Quizzes |
|All Units| Spelling and Grammatic updates|
|All Lessons| consistently referenced all materials and resources in the Materials and Prep Section|
|Unit 1| fixed some formatting of images issue|
|Lesson 0.5| Added a lesson on the Snap! Coordinate system to enhance inclusivity for any high school student with built in scaffolding support|
|Unit 2|Expended scaffolding support for Exterior Angles of Polygons to increase inclusivity for any high school student|
|Unit 0 and Curriculum Map| Added Template Syllabus |
|Curriculum Map | Added link to Master Vocabulary List in accordance to UDP|
|Unit 0 and Unit 1| Added Remote Guidance for classroom instruction Activities|
## [2.1.5] - 2020-08-28
|Unit | Change |
|---------|--------|
|Unit 0 | Added Resources for Creating an account, saving and sharing in Snap!|
|Unit 0 | Added Video Resource for saving and sharing in Snap! |
|Unit 1| Adding Scaffolding Accommodations for finding the Exterior angle of a shape|
|Unit 1| Replace Do Now 1.3 Snap! Starter Code due to broken link|
|Unit 1| Added Grace Hopper Summary Video|
|Unit 1| fixed some formatting of images issue|
## [2.1.4] - 2020-08-27
|Unit | Change |
|---------|--------|
|Unit 4| Added Slide decks|
|Unit 2| Added context to 2.4 Do Now|
|Unit 4| Aligned the name of Project|
|Unit 0| Added Scaffolding Lesson 0.5 Snap! Coordinate System|
## [2.1.3] - 2020-05-20
|Unit | Change |
|---------|--------|
|Unit 0| Added Slide decks|
|Unit 1| Added Slide decks|
|Unit 2| Added Slide decks|
|Unit 3| Added Slide decks|
|Unit 5| Added Slide decks|
|Unit 2| removed 2.6|
|Unit 3| Combined 3.1/3.2 and changed name to 3.1 Abstraction and Generalization |
|Unit 3| Moved 2.6 to 3.2|
## [2.1.2] - 2018-11-28
|Unit | Change |
|---------|--------|
|Culture_day_lesson_b.md.html| Added Curriculum Competencies and Possible Topics|
|Culture_day_lesson_c.md.html| Added "My Skills and Interests Journal" culture day|
|Culture_day_lesson_d.md.html| Added "Interview with People in Technology" culture day|
|lab_11.md.html| Fixed Alignment|
|lesson_33.md.html| Fixed Spelling|
|lesson_61.md.html| Added content curriculum Competencies|
|lesson_62.md.html| Added content Learning Objectives; Big Ideas; Curriculum Competencies - understanding context, defining, ideating and Curriculum Competencies - understanding context|
|lesson_63.md.html| Added content Curriculum Competencies; Materials / Preparation|
|lesson_64.md.html| Added content Learning Objectives; Curriculum Competencies - Prototype, Test and Make; Curriculum Competencies - Applied Technologies; Reference|
|lesson_65.md.html| Added content Curriculum Competencies; Materials / Preparation|
|lesson_66.md.html| Added Project Sharing; Curriculum Competencies - Share, Applied skills, Applied Technologies; Materials / Preparation; Instructor's Notes; Curriculum Competencies - Applied Skills; Accommodation / Differentiation; Forum discussion|
|Project_1.md.html| Changed Content from Canadian perspective to US perspective; Added Content Big Ideas; Reference; Behavior; Implementation Details; Sharing, Curriculum Competencies design sharing|
|Project_2_alternative.md.html| Added the Whole Content and changed content to US perspective|
|Project_3.md.html| Added and Changed Content on Big Ideas from BC specific to US specific; Added content Curriculum Competencies - Design Sharing|
|Summary.md.html| Added Culture day C and D, added Project 2 alternative|
## [2.1.1] - 2018-08-21
| Unit | Change |
|---------|--------|
| lab_22.md.html | Change theme from brick wall to yellow brick road
| lesson_22.md.html |
| SUMMARY.md.html |
| +Lab 2.2 Yellow Brick Road.docx/.pdf |
## [2.1.0] - 2018-08-16
| Unit | Change |
|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 0.2 | Toothbrush activity option added to Do Now World Cafe protocol added for Lab |
| 0.4 | Student Experiences Survey added and updated lab files uploaded |
| 1.1 | Diverse Grouping guidance added for lab Helping Trios handout added as Accommodation/Differentiation |
| 1.2 | Options added to Do Now and Activity Cold Calling Alternative protocol added |
| 1.3 | Geometry Cheat Sheet handout added |
| 2.1 | Do Now option added Geometry Cheat Sheet handout added |
| 2.2 | Lab challenge activity edited to personalize Diverse Grouping reminder Cold Calling Alternative added in debrief |
| 2.3 | An intro to conditionals video by Flocabulary added |
| 2.4 | Variable Boxes Unplugged Activity added to Do Now as a intro to Variables |
| 2.5 | Boolean Expression Unplugged Activity added as intro to Boolean Expressions Reminder about diverse grouping Geometry Cheat Sheet handout added |
| 3.1 | Lab edited to include options for personalization |
| 3.2 | Do Now option added Reminder about diverse pairing |
| 3.3 | Lab challenge edited to include personalization of No. 4 updated lab files uploaded |
| 4.2 | Do Now option added Lists Structure Handout Grammar Cheat Sheet handout accommodation added |
| 4.3 | Lab language change & uploaded updated files Diverse Grouping reminder |
| 4.6 | Hangman project changed to Word Guessing game with edited handouts uploaded Snowman Snap! project replaces hangman example |
| 5.1 | Diverse grouping reminder |
| 5.2 | New Space Invaders links added includes Vimeo link Lab now focusing on bouncing sprites instead of balls & updated files uploaded |
| 5.3 | Lab now focusing on bouncing sprites instead of balls & updated files uploaded Helping Trios handout added |
| 6.1 | TEALS final project examples added TEALS design steps handout added |
| 6.2 | Peer Feedback Handout added Inspirational software design video from Code.org added Diverse grouping reminder |
| 6.3 | Links to Final Project Development Plan & Organizer added |
| 6.4 | Links to Final Project Development Plan & Organizer added |
| 6.5 | Wise Feedback protocol added Meerkating guidance added Links to Final Project Development Plan & Organizer |
| | |
| Overall | CRTchanges aim to provide for student choice, voice and agency in the curriculum. They include options and resources to address different learning styles and to personalize to the cultural specifics of your classroom. |
| Overall | "Unit Tips" documents have been added for each unit with helpful Snap! shortcuts and teaching tips relevant to the unit. It also includes definition of terms introduced in the unit that can be used on a classroom Word Wall. |
================================================
FILE: docs/Country-n-State.txt
================================================
District of Columbia
United Arab Emirates
Dominican Republic
North Macedonia
Solomon Islands
North Carolina
South Carolina
United Kingdom
Faroe Islands
French Guiana
Guinea-Bissau
Hong Kong SAR
Liechtenstein
Massachusetts
New Caledonia
New Hampshire
United States
West Virginia
Bahamas, The
Burkina Faso
North Dakota
Pennsylvania
Rhode Island
Saudi Arabia
Sierra Leone
South Africa
South Dakota
Turkmenistan
Afghanistan
Congo
Connecticut
El Salvador
Mississippi
Netherlands
New Zealand
North Korea
Philippines
Puerto Rico
Saint Lucia
South Sudan
Switzerland
Antarctica
Azerbaijan
Bangladesh
Cabo Verde
California
Costa Rica
Guadeloupe
Kazakhstan
Kyrgyzstan
Luxembourg
Madagascar
Martinique
Mauritania
Micronesia
Montenegro
Montserrat
Mozambique
New Jersey
New Mexico
San Marino
Seychelles
Tajikistan
Uzbekistan
Washington
Argentina
Australia
Gibraltar
Greenland
Guatemala
Indonesia
Jan Mayen
Lithuania
Louisiana
Macao SAR
Mauritius
Minnesota
Nicaragua
Singapore
Sri Lanka
stateless
Tennessee
Venezuela
Wisconsin
Anguilla
Arkansas
Barbados
Botswana
Bulgaria
Cambodia
Cameroon
Colombia
Colorado
Delaware
Djibouti
Eswatini
Ethiopia
Guernsey
Honduras
Illinois
Kentucky
Kiribati
Malaysia
Maldives
Maryland
Michigan
Missouri
Mongolia
Nebraska
New York
Oklahoma
Pakistan
Paraguay
Portugal
Slovakia
Slovenia
Suriname
Svalbard
Tanzania
Thailand
Virginia
Zimbabwe
Alabama
Albania
Algeria
Andorra
Arizona
Armenia
Austria
Bahrain
Belarus
Belgium
Bermuda
Bolivia
Bonaire
Burundi
Comoros
Croatia
Czechia
Denmark
Ecuador
Eritrea
Estonia
Finland
Florida
Georgia
Germany
Grenada
Hungary
Iceland
Indiana
Ireland
Jamaica
Lebanon
Lesotho
Liberia
Mayotte
Melilla
Moldova
Montana
Morocco
Myanmar
Namibia
Nigeria
Reunion
Romania
Senegal
Somalia
Tokelau
Tunisia
Ukraine
Uruguay
Vanuatu
Vermont
Vietnam
Wyoming
Alaska
Angola
Belize
Bhutan
Brazil
Brunei
Canada
Cyprus
France
Greece
Guinea
Guyana
Hawaii
Israel
Jordan
Kansas
Kosovo
Kuwait
Latvia
Malawi
Mexico
Monaco
Nevada
Norway
Oregon
Panama
Poland
Rwanda
Serbia
Sweden
Taiwan
Turkey
Tuvalu
Uganda
Zambia
Aruba
Benin
Ceuta
Chile
China
Congo
Egypt
Gabon
Ghana
Haiti
Idaho
India
Italy
Japan
Kenya
Korea
LIBYA
Maine
Malta
Nauru
Nepal
Niger
Palau
Qatar
Samoa
Spain
Sudan
Syria
Texas
Tonga
Yemen
Chad
Cuba
Fiji
Guam
Iowa
Iran
Iraq
Laos
Mali
Niue
Ohio
Oman
Peru
Saba
Togo
Utah
================================================
FILE: docs/GLOSSARY.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Master Vocabulary List
Introduction to Computer Science - 1st Semester
## A
### Abstraction
Removing the specifics that are not relevant in a given context.
### Argument
Any area in a block that accepts user input, or another block. It could be a Boolean Block or a value placed inside of a variable or block. The value that is "passed into" a parameter of a custom block.
## B
### Backgrounds
Pictures that fill the entire stage area.
### Block
Puzzle-piece shapes that are used to create code.
### Boolean Expression
A value (text, number, picture, etc.) that evaluate to true or false.
### Boolean Operators
Boolean expressions that can be nested.
## C
### Command Block
Puzzle-piece shaped block that executes a command (it causes an effect).
### Cloning
A feature that allows a sprite to create a clone, or semi-duplicate, of itself, while the project is running. Clones of a sprite will be the same as the original or parent sprite but as a separate instance. Clones inherit the parent's scripts, costumes, sounds, and properties, yet they can then be modified.
### Conditional
A block used to make a choice between executing two different chunks of code."If" statements.
### Contains Block
Checks an operator block for a particular variable.
### Costume
A costume is one out of possibly many "frames" or alternate appearances of a sprite.
### Custom Blocks
Allow for one to make their own programming blocks.
## D
### Detail Removal
Reducing the complexity of an algorithm or process by focusing on the important parts.
## E
`No E entries`
## F
### Functions/Methods
Other programming languages, like Python or Java, use these terms to refer to the same idea as a Custom Block in Snap! a reusable.
## G
### Generalization
Combining a group of related concepts or processes into a single category.
### Global Variable
A variable that can be used by all of your sprites.
## H
`No H entries`
## I
### Index Variable
Keeps track of where you currently are in a list.
## J
### Join Block
Links two values together and reports the result.
### Jukebox
A collection of sounds that can be applied to a sprite costume.
## K
`No K entries`
## L
### Lists Block
A block which controls a list.
### List Element
A part of a list.
### Loop
A type of block that causes other code to run multiple times in succession. A control flow statement that allows code to be executed repeatedly based on a given Boolean condition.
## M
### Modeling
Building a system to simulate the behavior of a real-life phenomenon by simplifying or ignoring certain details.
## N
### Nested Loop
A loop used inside the body of another loop.
## O
### Operator Block
A block that performs math functions and string handling.
## P
### Predicate Block
A hexagonal block that always returns a Boolean value (true or false).
### Procedural Decomposition
Breaking a problem down into smaller subtasks, usually to increase readability and/or maintainability, often by applying one of the above concepts.
### Programming List
Called an 'array' in most programming languages, this holds lots of values.
## Q
`No Q entries`
## R
### Receive Block
Code Block in Control that receives a message from another block.
### Reporter Block
Report a value, usually for use in another block's input slot.
## S
### Say Block
The block gives its sprite a speech bubble with the specified text — the speech bubble stays until an another speech or thought block is activated, or the stop sign is pressed.
### Scenario
A description of a set of interactions and/or tasks that describe a start-to-finish example of how a user might want to use the application
### Snap!
Snap! is an extended reimplementation of [Scratch](http://scratch.mit.edu) that allows you to Build Your Own Blocks. It also features first class lists, first class procedures, first class sprites, first class costumes, first class sounds, and first class continuations. These added capabilities make it suitable for a serious introduction to computer science for high school or college students.
### Scripts
Different types of blocks linked together.
### Sequential Search Algorithm
A method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched.
### Sprites
An object which performs functions controlled by scripts.
### Stage
The background of a project, performs functions through scripting.
### Super-sprite
A sprite that is composed of pieces that can move together but can also be separately articulated.
## T
### Transform
Create a new list based on the values of the old list.
### Traverse
Go through or travel across an item/list.
### Truth Tables
A tool for evaluating the possible inputs and outputs of a Boolean expression.
## U
`No U entries`
## V
### Variable
A placeholder for some value. Types of variables:Global variables - apply to all sprites Sprite variable - applies to one sprite script variable - parameter that applies to one script
## W
### Wardrobe
A collection of sprite costumes. The wardrobe is located in the Costumes tab, which is accessed through the file icon.
### Watcher Block
reporter blocks you can click the checkbox for; they will appear in the Stage and you can track them.
### Wireframe
A high-level sketch of an application's user interface intended to help visualize layout, interactions, and transitions
## X
### X Position
The position that a sprite or the mouse is at along the horizontal axis.
## Y
### Y Position
The position that a sprite or the mouse is at along the vertical axis.
## Z
`No Z entries`
================================================
FILE: docs/Grudgeball.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# traditional Grudgeball Instructions
1. Each team gets 10 "X's".
2. Split your class into 5 or 6 teams, depending on how fast you want the game to go.
3. Each group gets a question. If they get it right they automatically get to erase two X's from the board. They can take it from one team or split it. They can not commit suicide (take X's from themselves).
4. Before they take off these X's, though, they have a chance to increase their ability to get the other teams to hate them. They get to shoot the Nerf ball. I set up two lines with masking tape. One is a two point line while the other is a three pointer.
5. If they shoot from the two point line and get it in, they can take four X's off the board. If they go from the three point line, and make it in, they can take five off the board. If they don't make it they still get to take the original two off the board.
## Instruction
1. Prepare 3-6 teams of 5-6 students team.
2. Prepare a worksheet of 4-5 questions for each team.
* Each document should be uploaded to a cloud service in order to share the link to the file for the whole group to work on.
3. While students are coming up with their answers, prepare the game board by adding an image or graphic above each number.
1.
3. Move student teams into breakout rooms with 4-5 questions to review together as a team.
* student should be prepared to answer one of the questions when they return to play the game.
## Game Play
1. Team 1 answers the question.
1. If the question correct, they get to select from Board
================================================
FILE: docs/SUMMARY.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
# Summary
* [Introduction](README.md.html)
* [Curriculum Map](curriculum_map.md.html)
* [Unit 0: Beginnings](unit_0.md.html)
* [Lesson 0.1: The First Day](lesson_01.md.html)
* [Unit 0 Tips](unit_0_tips.md.html)
* [Lesson 0.2: Algorithms](lesson_02.md.html)
* [Unit 0 Tips](unit_0_tips.md.html)
* [Lesson 0.3: Programming Languages](lesson_03.md.html)
* [Unit 0 Tips](unit_0_tips.md.html)
* [Lesson 0.4: Snap! Self-Portrait](lesson_04.md.html)
* [Unit 0 Tips](unit_0_tips.md.html)
* [Do Now 0.4: I Am ...](do_now_04.md.html)
* [Lab 0.4: Getting to Know You](lab_04.md.html)
* [Unit 1: Snap! Basics](unit_1.md.html)
* [Lesson 1.1.1: Welcome to SNAP](lesson_11.md.html)
* [Unit 1 Tips](unit_1_tips.md.html)
* [Do Now 1.1: Coordinate Review](do_now_11.md.html)
* [Lab 1.1: Welcome to SNAP!](lab_11.md.html)
* [Lesson 1.1.2: Welcome to Snap! (Continued lab)](lesson_11.md.html)
* [Unit 1 Tips](unit_1_tips.md.html)
* [Lesson 1.2: Building Blocks](lesson_12.md.html)
* [Unit 1 Tips](unit_1_tips.md.html)
* [Do Now 1.2: Tracing and Debugging](do_now_12.md.html)
* [Lab 1.2: Snap! Scavenger Hunt](lab_12.md.html)
* [Lesson 1.3: Drawing Shapes](lesson_13.md.html)
* [Unit 1 Tips](unit_1_tips.md.html)
* [Do Now 1.3: Drawing a Triangle](do_now_13.md.html)
* [Lab 1.3: Squares, Triangles, and Stars, Oh My!](lab_13.md.html)
* [Lesson 1.4: Animation](lesson_14.md.html)
* [Unit 1 Tips](unit_1_tips.md.html)
* [Do Now 1.4: Sprite Communication](do_now_14.md.html)
* [Lab 1.4: Sprites in Action](lab_14.md.html)
* [Unit 1 Quiz: Snap! Basics](quiz_1.md.html)
* [Lesson 1.5: Storytelling Project](lesson_15.md.html)
* [Unit 1 Tips](unit_1_tips.md.html)
* [Do Now 1.5 Day 1: Knock Knock](do_now_15.md.html)
* [Do Now 1.5 Day 2: Click Event Interaction](do_now_152.md.html)
* [Do Now 1.5 Day 3: Movement Interaction](do_now_153.md.html)
* [Project 1: Animated Storytelling](project_1.md.html)
* [Unit 2: Loops](unit_2.md.html)
* [Lesson 2.1: Loops](lesson_21.md.html)
* [Unit 2 Tips](unit_2_tips.md.html)
* [Do Now 2.1: Intro Loops](do_now_21.md.html)
* [Lab 2.1: Squares and Triangles Redux](lab_21.md.html)
* [Lesson 2.2: Nested Loops](lesson_22.md.html)
* [Unit 2 Tips](unit_2_tips.md.html)
* [Do Now 2.2: Debugging Loops](do_now_22.md.html)
* [Lab 2.2: Yellow Brick Road](lab_22.md.html)
* [Lesson 2.3: Inputs and Conditionals](lesson_23.md.html)
* [Unit 2 Tips](unit_2_tips.md.html)
* [Do Now 2.3: Stairs](do_now_23.md.html)
* [Lab 2.3: What Shape is That?](lab_23.md.html)
* [Lesson 2.4: Variables](lesson_24.md.html)
* [Unit 2 Tips](unit_2_tips.md.html)
* [Do Now 2.4: Debugging](do_now_24.md.html)
* [Lab 2.4: Guessing Game](lab_24.md.html)
* [Lesson 2.5: Boole in the House](lesson_25.md.html)
* [Unit 2 Tips](unit_2_tips.md.html)
* [Do Now 2.5: Variables Practice](do_now_25.md.html)
* [Lab 2.5: Triangles of All Kinds](lab_25.md.html)
* [Unit 2 Quiz: Loops](quiz_2.md.html)
* [Lesson 2.6: Pong Project](lesson_26.md.html)
* [Unit 2 Tips](unit_2_tips.md.html)
* [Do Now 2.6: Bouncing Ball](do_now_26.md.html)
* [Project 2: Pong](project_2.md.html)
* [Project 2 Alternative: Pong](project_2_alternative.md.html)
* [Unit 3: Customization](unit_3.md.html)
* [Lesson 3.1: Abstraction and Generalization](lesson_31.md.html)
* [Unit 3 Tips](unit_3_tips.md.html)
* [Lesson 3.2: Combining Loops and Conditionals](lesson_32.md.html)
* [Unit 3 Tips](unit_3_tips.md.html)
* [Do Now 3.2: Drawing Squares](do_now_32.md.html)
* [Lab 3.2: What Goes Up...](lab_32.md.html)
* [Lesson 3.3: Customization 1](lesson_33.md.html)
* [Unit 3 Tips](unit_3_tips.md.html)
* [Do Now 3.3: Jumping](do_now_33.md.html)
* [Lab 3.3: Let Me Check My Calendar](lab_33.md.html)
* [Lesson 3.4: Customization II](lesson_34.md.html)
* [Unit 3 Tips](unit_3_tips.md.html)
* [Do Now 3.4: Practice using Arguments](do_now_34.md.html)
* [Lab 3.4: If My Calculations Are Correct...](lab_34.md.html)
* [Unit 3 Quiz: Customization](quiz_3.md.html)
* [Lesson 3.5: Platform Game Project](lesson_35.md.html)
* [Unit 3 Tips](unit_3_tips.md.html)
* [Project 3: Platform Game](project_3.md.html)
* [Project 3: Platform Game (Easy)](project_3_platform_game_easy.md.html)
* [Unit 4: Lists](unit_4.md.html)
* [Lesson 4.1: Intro to Lists](lesson_41.md.html)
* [Unit 4 Tips](unit_4_tips.md.html)
* [Lesson 4.2: Static Lists](lesson_42.md.html)
* [Unit 4 Tips](unit_4_tips.md.html)
* [Do Now 4.2: Letters of a Word](do_now_42.md.html)
* [Lab 4.2: You Talkin' to Me?](lab_42.md.html)
* [Lesson 4.3: List Practice I](lesson_43.md.html)
* [Unit 4 Tips](unit_4_tips.md.html)
* [Do Now 4.3: Quote of the Day](do_now_43.md.html)
* [Lab 4.3: Guess Who](lab_43.md.html)
* [Lesson 4.4: List Practice II](lesson_44.md.html)
* [Unit 4 Tips](unit_4_tips.md.html)
* [Do Now 4.4: Traversing List](do_now_44.md.html)
* [Lab 4.4: Number Cruncher](lab_44.md.html)
* [Lesson 4.5: Sequential Search](lesson_45.md.html)
* [Unit 4 Tips](unit_4_tips.md.html)
* [Do Now 4.5: List Tracing](do_now_45.md.html)
* [Lab 4.5: It's Around Here Somewhere](lab_45.md.html)
* [Unit 4 Quiz: Lists](quiz_4.md.html)
* [Lesson 4.6: Guess My Word Project](lesson_46.md.html)
* [Unit 4 Tips](unit_4_tips.md.html)
* [Do Now 4.6: Gentle Guess My Word](do_now_46.md.html)
* [Project 4: Guess My Word](project_4.md.html)
* [Unit 5: Cloning](unit_5.md.html)
* [Lesson 5.1: Intro to Cloning](lesson_51.md.html)
* [Unit 5 Tips](unit_5_tips.md.html)
* [Lab 5.1: Connect the Dots](lab_51.md.html)
* [Lesson 5.2: Cloning Sprites](lesson_52.md.html)
* [Unit 5 Tips](unit_5_tips.md.html)
* [Do Now 5.2: Star Wars Troopers](do_now_52.md.html)
* [Lab 5.2: Lots of Balls](lab_52.md.html)
* [Lesson 5.3: Communicating with Clones](lesson_53.md.html)
* [Unit 5 Tips](unit_5_tips.md.html)
* [Do Now 5.3: Star Wars Troopers using Cloning](do_now_53.md.html)
* [Lab 5.3: Fewer Balls](lab_53.md.html)
* [Unit 5 Quiz: Cloning](quiz_5.md.html)
* [Lesson 5.4: Space Invaders Project](lesson_54.md.html)
* [Unit 5 Tips](unit_5_tips.md.html)
* [Project 5: Space Invaders](project_5.md.html)
* [Unit 6: Final Project](unit_6.md.html)
* [Lesson 6.1: Design Basics](lesson_61.md.html)
* [Unit 6 Tips](unit_6_tips.md.html)
* [Lesson 6.2: Research and Ideate](lesson_62.md.html)
* [Lesson 6.3: Defining Requirements](lesson_63.md.html)
* [Lesson 6.4: Building a Plan](lesson_64.md.html)
* [Lesson 6.5: Project Implementation](lesson_65.md.html)
* [Project 6: Final Project](project_6.md.html)
* [Lesson 6.6: Project Sharing](lesson_66.md.html)
* [Additional Curriculum Resources](additional_curriculum_resources.md.html)
* [Contributing](contributing.md.html)
* [Changelog](Changelog.md.html)
* [Appendix: BJC Lecture Videos](bjc_videosuggestions.md.html/bjcvideosuggestions.md.html)
* [Lab Day Lesson](lab_day_lesson.md.html)
* [Culture Day]
* [Lesson A: Video/Reading](culture_day_lesson_a.md.html)
* [Lesson B: Student Research](culture_day_lesson_b.md.html)
* [Lesson C: My Skills and Interests Journal](culture_day_lesson_c.md.html)
* [Lesson D: Interview with People in Technology](culture_day_lesson_d.md.html)
================================================
FILE: docs/Video Resources.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
================================================
FILE: docs/additional_curriculum_resources.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Accessing Additional Curriculum Materials
To access the "Additional Curriculum Materials", log into your TEALS Dashboard at .
1. The Additional Curriculum Materials are stored in a Microsoft Office 365 SharePoint site under the TEALS domain.
2. You will find the link, username, and password for these materials under the "Resources" heading on the dashboard.
3. If you are already logged into an Office 365 account (perhaps because you use Office 365 at school or work) you will run into an authentication conflict when you try to access this SharePoint site in step 1. In this case, you need to access the "Additional Curriculum Materials" SharePoint site using an Incognito or InPrivate browser session.
4. To open an Incognito or InPrivate browser session, right-click on the "Additional Curriculum Materials" link and select "Open link in Incognito/InPrivate window".
5. The website will ask you to log into Office 365.
6. Be sure to use the username and password listed on the TEALS Dashboard, and not the account you usually use to log in at work or school.
================================================
FILE: docs/appendix-bjc-video-lectures.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/bjc_videosuggestions.md/bjcvideosuggestions.md
================================================
# BJC Lecture Suggestions
Dan Garcia of UC Berkeley presents the Beauty and Joy of Computing
## About the Lectures
### Use
The TEALS’ Introduction to CS Course is based on the The Beauty and Joy of Computing by Dan Garcia at UC Berkeley. However, the TEALS' curriculum varies greatly in content and scale, as it is aimed at High School students. This page outlines a series of video lectures from Dan Garcia’s version of this course--however the videos are not applicable in their entirety. The lectures are mapped out below by lecture, subject and time in their entirety.
Some of the lectures (or sections of the lectures) will be useful background for teachers learning the course materials. Some sections of the lectures are useful as instructional tools for classroom instruction. It is notated if the lecture is useful for background knowledge for teachers/volunteers and/or for classroom instruction. The lectures that are directly relevant to lessons or labs are directly referenced *below* the "Instructor's Notes". The lecture videos are licensed under a Creative Commons License by UC Berkeley.
- [BJC Lecture 1: Abstraction](https://www.youtube.com/watch?v=Dxw9cIbzaLk)
- Basic concepts of the course: 0:00-7:00
- Introduction of Piazza: 7:00-8:25
- Abstraction: 11:40-15:40
- Generalization: 15:50-20:00
- Summary: 20:05-25:10
- [BJC Lecture 2: 3D Graphics](https://www.youtube.com/watch?v=q2UMQaoW30U)
- SOPA & PIPA: 0:00-1:00
- 3D Computer Graphics Explanation: 1:00-5:24
- 3D Graphics steps outlined: 5:25-5:50
- Modelling (Useful for Lab 2.5): 5:50-11:40
- Animation (Uncanny Valley Explanation): 11:40-16:55
- Procedural Based Motion (Lab 1.1): 16:56-20:00
- Genetic Algorithms: 20:05-25:25
- Lighting and Shading: 25:25-27:10
- Rendering: 27:10- 30:55
- Global Illumination: 30:55-34:21
* [ BJC Lecture 3: Video Games](https://www.youtube.com/watch?v=hdSFuhyGTIg)
- Demystification Lecture-Novel Interaction techniques(emotive systems) 00:00-2:30
- [History of Video Games Overview](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=2m30s) (Platform Game Prep) 2:30-7:55 **Good for Classroom Instruction**
- [Casual Video Game World ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=8m0s)(light weight) 8:00-10:40 **Good for Classroom Instruction**
- [Core Video Game](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=10m45s) (heavy weight) 10:45-13:05 **Good for Classroom Instruction**
- 3D Computer Graphics 13:10-15:20
- [Motion Capture ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=15m25s)(Hero Movement for Platform Game Lab 2.6) 15:25-17:30 **Good for Classroom Instruction**
- Artificial Intelligence (Enemy Logic for Lab 2.6) 17:30-19:40
- [Video Games w/purpose](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=19m40s) (social benefits) 19:40-24:36 **Good for Classroom Instruction**
- [Negative Aspects of Video Games ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=19m40s)(RSI, addition, violence) 24:40-28:00 **Good for Classroom Instruction**
- [Glenn Sugden-Game Developer ](http://www.youtube.com/watch?v=hdSFuhyGTIg&t=28m03s)(History of VG Development & Industry) 28:03-40:53 **Good for Classroom Instruction**
* [BJC Lecture 4: Functions](https://www.youtube.com/watch?v=_uKCBmQEf5w)
* SIRI-EVI 0:00-1:00
* Functions & Generalizations (Function Basics) 1:00-3:45
* More Terminology (Boolean etc) 3:47-6:10
* Types of Input (Sentences, words, characters, digits) 6:12-8:00
* Functions (Explanations of Use-can be tied in to loops, and inputs) 8:00-9:55
* MIT Scratch --> BYOB Snap! ( Development of SNAP, DEMO) 10:00-11:30
* Functions-1 (BYOB-Custom Blocks) & Generalization 11:30-14:50
* Functions-2 (Join Block) Domain and Range 14:52-17:50
* Types of Blocks 18:15-19:45
* Recursion Preview 19:50-27:40
* Functional Programming Summary (Big concepts narrow down to functions) 27:40- End
* [BJC Lecture 5: Programming Paradigms](https://www.youtube.com/watch?v=_4ScHcLvQnw)
- Dilemma of Being a Cyborg 0:00-2:30
- Programming Paradigms 2:30-3:50
- Snap! BYOB (Hybrid) 3:55-4:45
- Functional Programming (Cascading Values) 4:50-5:35
- Imperative/Sequential 5:41-8:35
- Object Oriented Programming (OOP Basic Explanation) 8:40-15:45
- [OOP Ex: Sketch Pad Dr. Ivan Sutherland](http://www.youtube.com/watch?v=_4ScHcLvQnw&t=15m45s) "Father of Computer Graphics 15:45-22:10 **Good for Classroom Instruction**
- OOP in BYOB (Demo of Functions in BYOB) 22:35-29:20
- Declarative Programming 29-22-31:20
- Declarative Programming Examples in BYOB 31:25-35:20
- Review of Paradigms 35:25-end
* [BJC Lecture 6: Algorithms](https://www.youtube.com/watch?v=3tvbqdLjjSU) (With Luke Segars)
- Computer Worms 0:00-1:30
- Algorithm Concept Intro: Rubic Cube Competition 1:40-2:40
- [Algorithm Definition](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=3m20s) 3:20-4:20 **Good for Classroom Instruction**
- [Early Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=4m25s) 4:25-5:55 **Good for Classroom Instruction**
- [Familiar Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=6m00s) 6:00-7:30 **Good for Classroom Instruction**
- Commonly Used Algorithms (Page Rank, etc.) 8:00-10:45
- Choosing an Algorithm Technique 10:50-12:15
- Ways to Tackle Problems (Brute Force, Top Down, Bottom Up) 12:20-15:30
- Algorithms vs Functions and Procedures 15:30-16:00
- Turing Completeness (Computer Theory-BYOB is Turing Complete) 16:05-21:15
- Algorithm Correctness 21:25-26:00
- Algorithm Summary 26:00-end
* [BJC Lecture 7: Algorithm Complexity](https://www.youtube.com/watch?v=_fgtTE2bhMg)
- Yahoo predicts America’s Political Winner 0:00-1:25
- Function Abstraction (Explanation of Functions and Algorithms) 1:28-2:45
- What is IN a Spec 2:45-3:30
- What is NOT in a Spec 3:30-5:15
- Reference Text “Introduction to Algorithms” 5:18
- [Algorithm Analysis: The Basics](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=6m0s) 6:00-7:40 ** Good for Classroom Instruction**
- [Algorithm Analysis: Running Time](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=7m41s) 7:41-8:25 **Good for Classroom Instruction**
- Algorithm Analysis: Runtime Analysis Problem and Solution 8:25-9:55
- Runtime Analysis: Input Size and Efficiency 9:58-11:25
- Runtime Analysis: Worst of Avg Case 11:25-13:20
- Run Time: Final Assessment 13:20-16:46
- Example:Finding a student by ID (detailed explanation of input/output)
17:00-31:20
- Ex: Finding a shared birthday 31:21-33:30
- Ex: Finding Subsets 33:40 to End
* [BJC Lecture 8: Concurrency (Yaniv Assaf)](https://www.youtube.com/watch?v=LlLLcGJPvwU)
- Friendship Paradox: Facebook 00-1:30
- Concurrency & Parallelism (Inter-Intra Computer, Cloud Computing) 1:31-4:10
- [Anatomy of a Computer ( John von Neumann Architecture) 4:15-5:20 ](http://www.youtube.com/watch?v=LlLLcGJPvwU&t=4m15s)**Good for Classroom Instruction**
- But what is INSIDE of a Processor 5:20-6:30
- Moore’s Law Prediction (2x Transistors/chip every 2 years) 6:35-7:45
- Moore’s Law & Related Curves 7:50-10:00
- Power Density Prediction circa 2000 (Heat as an issue) 10:00-11:40
- Multiple Core and Energy Efficiency 11:45-14:40
- Energy & Power Considerations 14:45-15:40
- Parallelism Again (What’s different this time?) 15:41-16:40
- Speedup Issues: Amdahl’s Law 16:42-19:50
- Background:Threads (Threads of Execution” is a single stream of instruction) 19:55-21:15
- Speedup Issues:Overhead 21:15-23:50
- Parallel Programing Example in Snap! BYOB (Race Condition) 23:53-26:50
- Another Concurrency Problem (Deadlock and Livelock) 26:55-29:30
- Summary “Sea Change” of Computing 29:30 to End
* [BJC Lecture 9: Recusion](https://www.youtube.com/watch?v=JKn3nsfzBdA)
- Movie “Inception” as an example of recursion 0:00-0:50
- Recursion 0:50-1:40
- Recursion Demo in Snap! 1:40-17:00
- Overview 17:00-21:00
- Definition of Recursion 21:00-24:30
- Examples of Recursion (You Already Know It!) 24:30-26:20
- Trust the Recursion 26:22-29:40
- Summary of Recursion 29:40-End
* [BJC Lecture 10: Social Implications of Computing](https://www.youtube.com/watch?v=Rng91dxdsuM)
- META: Computers in Education (Implications of Multiple Choice Tests) 0:00-4:30
- Computers in Education (Open?) Judah Schwartz 4:31 --
- Tools 4:50-5:30
- Microworld 5:30-6:30
- Microworld Example Physics Simulation 6:30-10:30
- Courseware 10:38-11:30
- RSA Animate: Changing Educational Paradigms 11:35
- Animation Begins (Sir Ken Robinson: Changing Paradigms) 12:30-24:25
* [BJC Lecture 11: Recursion II Alijia Yan](https://www.youtube.com/watch?v=w2d_snYBLeY&index=11&list=PLA4F0F0CA4A3EE7F4)
- Mobile World Congress 0:00-2:15
- Recursion:Factorials (Factorial (n)+ n! 2:30-7:40
- [Fibonacci and Fibonacci Series Video 7:45-11:45](http://www.youtube.com/watch?v=w2d_snYBLeY&t=7m45s) **Good for Classroom Instruction**
- Fibonacci Ex: fin(n) Math and Snap! blocks 11:50-13:15
- Example of Recursion: Counting Change 13:20-17:30
- Call Tree for “Counting Change” with Snap! example 17:35-22:50
- Summary of Recursion 25:40-26:21
* [BJC Lecture 12: Social Implications II Dr. Gerald Friedland](https://www.youtube.com/watch?v=RNN19b61oRg)
**Good for Classroom Instruction-Suggest Previewing due to Social Media Examples.**
(This would be a good suppport for Social Media Safety/Awareness lesson)
- Dr. Gerald Friedland Sr. Research Scientist at International Computer Science Institute (ICSI) on Sharing Multimedia and the Impact on Online Privacy) 0:00-1:45
- Introduction to Social Media: The Price of Social Media Use-Stephen Colbert 1:50-6:25
- Observations on Sharing Data and Ineffective Privacy Protection 6:30-7:50
- Social Cause: Collection of Data Across Sites 7:50-10:30
- Multimedia in Internet is Growing 10:35-12:05
- CS Problem: Higher Demand for Retrieval and Organization of Data 12:07-13:05
- Manual Tagging & Geo Tagging 13:05-17:30
- Issue of Tracking & Dangers of Oversharing 17:30-18:31
- Berkeley Multimedia Location Estimation Project 18:31-28:14
- ICSI’s Evaluation Results 19:49
- YouTube Cybercasing 20:47
- Privacy Implication of Internet and Data 22: 30
- Person Linking Using Internet Videos 25:45-26:45
- Solutions for Privacy that Don’t Work: Think Before You Post! 26:45-28:14
* BJC Lecture 13 is Not Available
* [BJC Lecture 14: Human-Computer Interaction Bjorn Hartman ](https://www.youtube.com/watch?v=3VZ7D01T2Yc)
- Bjorn Hartman Background 0:00-3:30
- Human Computer Interface(HCI) 3:45-6:00
- HCI: Design, Computer Science, Applied Psychology 6:00-8:00
- Iterative Design Cycle 8:00-10:30
- Understanding Users 10:35-11:35
- Prototype Interface Examples 11:40-14:00
- Evaluation (Formative, Summative) 14:50
- [Why Study User Interfaces ](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=15m0s)**Good for Classroom Instruction**
Ex:Mouse Xy axis, Sketchpad, PC, Tablets 15:00-25:00
- What had changed? Research: Mainframe to Ubiquitous Computing 25:00-29:30
- [Example Project: Using Dexterity for Computer Interface Video](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=28m30s) 28:30-29:30 **Good for Classroom Instruction**
- Zipf/Power Law Distribution 30:00-32:00
- HCI Research at Berkeley 32:10-46:25
- [Multi Touch Apps and Toolkits](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=32m0s) **Useful for Classroom Instruction**
* [BJC Lecture 15:) Artificial Intelligence- Anna Rafferty](https://www.youtube.com/watch?v=_xcGWx3eDnw)
-Anna Rafferty 0:00-1:00
- Definition of AI 1:00-1:48
- John McCarthy AI definition 1:50-2:30
- AI History and Explanation 2:35-6:40
- Revival of AI: Rules & Concepts 6:45-10:20
- AI and Intelligence (What intelligent things do people do?) 10:25-11:52
- Tour of AI applications 11:55-12:30
- AI Planning 12:30-14:50
- Machine Learning 14:50-18:58
- Robot Learning to Walk (Video) 18:58-20:25
- Natural Language Processing 20:30-23:15
- Unsupervised Learning Ex. 23:20-25:00
- Robotics 25:00-30:05
- Automatic Towel Folding Robot (video) 27:40-29:45
- Recap of AI 30:10-31:15
- Turing Test of Intell 31:15-34:15
- Summary 34:20-35:53
* [BJC Lecture 16:) Computational Game Theory](https://www.youtube.com/watch?v=iATKQQaTKKY)
- Checkers (Weakly) Solved 0:00-1:17
- Computer Science Game Theory 1:20-1:35
- CS- A USV View 1:36-2:16
- The Turk (1770) 2:20-4:00
- Claude Shannon 1950 “Father of Informational Technology) 4:05-5:10
- Deep Blue vs Gary Kasparov 1997
- What is “Game Theory” 11:41-12:40
- What “Board Game” do you mean? 12:41-13:25
- What is a “Strong” Soluntion 13:28-15:00
- Game Crafters (Strongly Solve) 15:11-20:15
- Strongly Solve Ex. Video “War Games”(1983)16:26-19:41
- Weakly Solving a Game (Checkers) 20:20-22:12
- Strongly Solving Ex:1,2:...12) 22:20-35:00
- Ex: Tic Tac Toe 27:25
- Demo 29:20-33:15
- Games Crafters Revisited 35:00-35:50
- Future Application 35:51-36:47
* [BJC Lecture 17:) Higher Order Functions ](https://www.youtube.com/watch?v=Xr9dYPH3fw4)
- Coding is Cool Again 0:00-0:45
- High Order Function Introduction 0:47-8:50
- Higher Order Function Demo in Snap! BYOB (Functions and Blocks are commented out) 8:51-37:35
* [BJC Lecture 18:) Distributed Computing](https://www.youtube.com/watch?v=LkkQy6ivbe4)
- 0:00-2:25 Super Computers Faster than 50M Laptops
- Lecture Overview 2:25-3:00
- Memory Hierarchy 3:00-6:00
- Memory Hierarchy Details 6:00-10:40
- Networking Basics 10:45-12:45
- Networking Facts & Benefits 12:45-13:30
- Performance Needed for Big Problems 13:30-16:40
- What can we do? Use many CPUs 16:41-18:05
- Distributed Computing Themes 18:05-21:20
- Distributed Computing Challenges 21:25-25:40
- Review: Map Reduce 25:41-26:30
- Google’s Map Reduce Simplified 26:30-40:52
* [BJC Lecture 19: Higher Order Functions II](https://www.youtube.com/watch?v=QsiK8pB7KdQ)
- Busting the King’s Gambit (Strongly Solve-Chess) 0:00-2:30
- Higher Order Function Review (Filter, Map, Reduce) 2:30-6:30
- Snap! BYOB Demo (Commented Out) 6:31-28:19
================================================
FILE: docs/book.json
================================================
{
"plugins": [
"mathjax"
],
"pluginsConfig": {}
}
================================================
FILE: docs/chapter1.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# First Chapter
GitBook allows you to organize your book into chapters, each chapter is stored in a separate file like this one.
================================================
FILE: docs/contributing.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Contributing
## Repository Location
The curriculum's source code is hosted on GitHub at: https://github.com/TEALSK12/introduction-to-computer-science
You can open issues, fork the curriculum, or submit pull requests to suggest changes.
## Markdown style
To keep the curriculum's underlying markdown consistent, we use [this markdown style guide](http://www.cirosantilli.com/markdown-style-guide). Since markdown is not a strict specification, there are a few options we choose to take from the style guide
* [space-sentence:1]( http://www.cirosantilli.com/markdown-style-guide/#option-space-sentence-1)
* [wrap:inner-sentence](http://www.cirosantilli.com/markdown-style-guide/#option-wrap-inner-sentence)
* [header:atx](http://www.cirosantilli.com/markdown-style-guide/#option-header-atx)
* [list-space:mixed](http://www.cirosantilli.com/markdown-style-guide/#option-list-space-mixed)
* [code:fenced](http://www.cirosantilli.com/markdown-style-guide/#option-code-fenced)
### Updating GitBook with changes
If you make changes to file names and links, make sure to update the GitBook references in summary.md.html accordingly.
### Lint tool
We use [mdast-lint](https://github.com/wooorm/mdast-lint) to enforce the above style. All submissions will be run through [mdast-lint](https://github.com/wooorm/mdast-lint) and free of any errors and warnings.
## Curriculum style
### How to write *Snap!*
```snap
*Snap!*
```
### *Snap!* Code
Blocks and scripts should always be presented as they would be in *Snap!* as an image.
Good
> Use the  block to move your sprite.
Bad
> Use the move block to move your sprite.
If it is absolutely necessary that a block not have a picture, wrap the name in blockquotes (e.g. ```move 10 steps``` block).
#### Creating new script images
Use the "script pic..." feature to create new images. If you need the result of a reporter block, use shift-right-click to get the "script pic with result..." option.
If you are adding a block, the file name should follow the text of the block with lower camel case.
Good
>  -> ```move10Steps.png```
Bad
>  -> ```move.png```
#### Reusing existing script images
Before you create new blocks images, check to see of blocks are stored in the curriculum in ```/blocks```.
All script images should be stored in ```/scripts```.
### Vocabulary words
### Labs
### Lesson plans
## Creating a pull request
Each pull request should have it's own branch. Here are a few examples of a proper pull request workflow
* http://codeinthehole.com/writing/pull-requests-and-other-good-practices-for-teams-using-github/
* https://github.com/skyscreamer/yoga/wiki/GitHub-Best-Practices
* https://www.thinkful.com/learn/github-pull-request-tutorial/
================================================
FILE: docs/create-book.cmd
================================================
@echo off
setlocal
REM -- Create output directory and set up target output file name
mkdir 2>nul build
set targetBook=intro-book-complete.md
@REM set chrome="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
set edge="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Edge.lnk"
REM -- We need the `sed.exe` tool; grab it from the user's Git install.
if not exist "%ProgramFiles%\Git\usr\bin" (
echo ERROR: Unable to find Git install for `sed.exe` tool.
exit /b 1
)
path %ProgramFiles%\Git\usr\bin;%path%
type >%targetBook% SUMMARY.md
REM -- For each file referenced in SUMMARY.md, add it to the target output Markdown file.
REM -- The following sed command extracts the file name from inside parentheses, and reverses path
REM -- slashes.
for /f "delims=" %%t in ('findstr -c:"(" SUMMARY.md ^| sed -e "s/^ *\* *\[.*\](\(.*\))$/\1/"
-e "s/\//\\\/g"') do (
echo %%t
echo.>>%targetBook%
type >>%targetBook% %%t
)
REM -- Normalize line endings to newlines.
move /y >nul %targetBook% %targetBook%.tmp
eol "\n" <%targetBook%.tmp >%targetBook%
del %targetBook%.tmp
@REM -- Create .pdf version of markdown files with no toc
type >"%targetBook%.html" .\markdeep-header.txt
type >>"%targetBook%.html" .\"%targetBook%
type >>"%targetBook%".html .\markdeep-footer-tocstyle-none.txt
@REM --no-margins does not work, had to edit the javascript
@REM %chrome% --headless --print-to-pdf="%%~pf%%~nf.pdf" --no-margins "%%f-pdf.html"
echo %edge% --headless --print-to-pdf="%targetBook%.pdf" --no-margins "%targetBook%.html"
%edge% --headless --print-to-pdf="%CD%\intro-book-complete.pdf" --no-margins "%CD%\%targetBook%.html"
del "%targetBook%.html"
del "%targetBook%"
echo.
echo Finished. You can find the resulting unified book in `intro-book-complete.pdf`.
================================================
FILE: docs/culture_day_lesson_a.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Culture day: Real world video or selected reading
In this lesson, students will have the opportunity to learn about concepts not currently covered in this course and relates to the societal impacts of computing. Take this opportunity to allow students to explore outside of their course work and learn where computer science intersects other industries. Have them dive deep into a concept and challenge them to explore their interests.
## Learning objectives
Students will be able to...
* Describe how computer science intersects with other industries.
* Explore new topics in computer science that interests them.
* Connect their learning to some aspect of their culture, society, or life.
## Materials/preparation
* Select a video or reading excerpt about a real world topic.
* Prepare leading questions directly relevant to the video or reading.
* [TEALS Volunteer show and tell example video](https://youtu.be/TeUgIXgds5o)
* [Computer Science Education Week daily video playlist](https://youtube.com/playlist?list=PL-YUPixQ92JF67xXTcYkUI1Fnk6lcwGuj)
* Created by the Computer Science Teacher Association
## Pacing guide
| Duration | Description |
| :--- | :--- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introduction to topic and video or reading |
| 15 minutes | Watch video or Read material |
| 20 minutes | Class discussion or activity |
| 5 minutes | Debrief and wrap-up |
Feel free to adjust the pacing guide liberally to meet the needs of your chosen material. If a video or reading will require more than 20-25 minutes, consider splitting the lesson across two days.
* Day one should include introduction of the topic, the video/reading, and a brief reflection, with the discussion or activity pushed to day two.
## Instructor's notes
### Introduction to topic
Show video or have students read to begin class. Students may take notes if desired, but should give their full attention to the material.
Example discussion questions:
* Was there anything that suprised you about the video?
* How does this video relate to what we are currently studing in class.
Reinforce how the video or reading relates to the current topic in class.
* Your goal is to provide context and background, not to preview the material itself.
Provide students with some leading questions about the topic to push them into exploration.
* You will want to elaborate on the questions to get students all on the same page.
* In some cases, you will want to be deliberately vague to encourage students to form their own ideas or interpretations.
### Discussion/activity
Lead a class discussion or activity about the topics covered in the video/reading and guiding by the questions presented before the material. This can take one of several forms, including, but not limited to:
#### Full-class discussion
When using the approach, be sure that all students have a chance to contribute and that the conversation is not dominated by a few voices.
#### Small group discussions
This can either be open-ended, allowing each group to discuss whatever they choose, or a ["jigsaw"](https://www.jigsaw.org/)-style activity where each group is given one question to focus on.
* [Video explanation](https://youtu.be/-9AWNl-A-34) of a think-pair-share activity.
* Have students share out about their discussions with the class.
#### Think-pair-share
["think-pair-share"](http://www.readingrockets.org/strategies/think-pair-share) - a structured activity to simulate or recreate something discussed in the material to allow students to gain a deeper appreciation of the topic.
* As an example, after a reading or video on computer security, students could play (or at least read about and consider) the game [Control-Alt-Hack](http://www.controlalthack.com/)
### Debrief
Ask one or more students to summarize the topics covered in the lesson and their thought or opinions.
Consider collecting some evidence of the activity, such as students' responses to the guiding questions or notes from small-group discussions, to evaluate engagement with the lesson.
## Accommodation/differentiation
For example, if showing ["Smartest Machine on Earth"](http://www.pbs.org/wgbh/nova/tech/smartest-machine-on-earth.html), be aware that some students may not be familiar with _Jeopardy!_.
Try to vary the topics of culture days throughout the semester to engage a broad range of students' interests and experiences. Not all students will connect with every lesson, but you should strive to have every student connect with at least one or two culture days each semester.
================================================
FILE: docs/culture_day_lesson_b.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Culture day: Student research project and presentation
In this lesson, students will have the opportunity to research a topic related to computer science, describe an impact it had on the world, and present it to the class. This allows students to explore topics that interest them and present to the class. Presenting is a great way for students share what they know and give them practice in a crucial skill to have in the workplace. It also allows students to learn about other topics from each other. Finally, analyzing topics in Computer Science put the lessons of the class into context.
## Learning objectives
Students will be able to...
* Describe their assigned or chosen computer science related topic in detail.
* Facilitate and answer questions about their topic.
* Explore and analyze the interactions between technology and the rest of society.
## Materials/preparation
* A list of example topics for research projects.
* Prepare guidelines for projects and/or presentations.
* Encourage students to research from online and other resources, and keep track of sources.
* [Citation generator](http://www.easybib.com/) this is a handy way to generate citations (even for websites) that can be included as a Bibliography or References for the project.
* [Presentation tips](https://www.thinkoutsidetheslide.com/top-5-powerpoint-tips-for-student-presentations-in-school/)
* [Ideas for giving interesting presentations](https://www.powtoon.com/blog/17-killer-presentations-tips-students-stand/)
## Pacing guide
|Duration | Description|
|--|--|
|5 minutes | Welcome, attendance, bell work, announcements |
|15 minutes | Presentation #1 |
|15 minutes | Presentation #2 |
|15 minutes | Presentation #3 |
|5 minutes | Debrief and wrap-up |
## Explain to students
Coding is a technical skill, but the larger process of software development, product creation, and deployment involves
* Technical innovations
* A community of people
* Cultural beliefs and values.
This process is impacted by the society in which it occurs, and those developlments and products in turn impact that society and possibly many others. These impacts can occur at many levels incuding personal, communal, global, and environmental. The impacts are often positive, but frequently include negative consequences. People in all fields make choices about how they interact with technology and how technology interacts with the rest of the world. These choices -- choices the students will make -- can affect millions or billions of people. Understanding how technologies have affected us and continue to affect us will help us make better decisions in the future.
## Example topics
* Famous figures in computer science that are role models in the community you are serving.
* Important technologies or algorithms (RSA, Dijstra's Algorithm, RAID, integrated circuits).
* New and emerging technologies (AI, Machine Learning, robotics, cryptocurrencies).
* The tech industry (social media, smart phones, video games, health and lifestyle).
* Ethical computing (privacy, cyberbullying, security).
## Instructor notes
### Prior to culture day
* Assign each student one or more topics to research and present to the class on a future day. Topics can be assigned, chosen by students from a pre-defined list, or suggested by students and approved by instructors.
* Create a schedule of when culture days will occur and which students will present on each day.
* Depending on how many students are in the class, and how many days you wish to allot for presentations, your pacing guide can be adjusted.
### Student presentations
* Each student should give a 5-7 minute presentation on their assigned topic, followed by 8-10 minutes for questions from the class.
* Students should have a visual aspect to their project (poster, slide deck, props) as well as giving a verbal presentation.
* Use your judgement regarding the level of technical detail expected in the presentation. It is probably not realistic to expect students to become experts in advanced technologies but they should be able to give an overview of their topic and explain at least one way in which this person or technology has impacted some aspect or segment of society.
* Do not allow students to simply read a textbook or online definition of the topic. Ensure they can at least explain the subject in their own words and are begining to analyze its effects on the world.
* Allow classmates to ask questions, but beware of students trying to stump each other.
* Have a few questions for each assigned topic prepared ahead of time for instructors to ask in case classmates do not have questions.
### Accommodation/differentiation
* In smaller classes, each student may be able to present twice in a single semester.
* For classes where students are less experienced with presentations, consider a "science fair"-style event where students produce a display that can be viewed by others to present their topic.
* For students with high levels of anxiety, consider allowing them to submit a video to share with the class or any method that they are comfortable with.
* Students new to presenting can have success presenting with one or two of their peers. Each student should make an attempt to speak during the presentation.
================================================
FILE: docs/culture_day_lesson_c.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Culture day: My skills and interests journal
In this lesson, students will use a learning journal to record the learning throughout the course in order to gain confidents in using and creatiing with technology.
## Learning objectives
Students will be able to...
* Document their technology learning journey.
* Self-reflect on the joys and challenges of technology learning.
* Appreciate software development as a process.
## Pacing guide
Have students do self-evaluation journaling at different stages during the course, for example:
1. first week of course
2. after unit 2
3. after unit 4
4. and last week of course.
On Journal Writing days, teachers can omit bell work, and provide students with 10 minutes to do their writing.
| Duration | Description |
| :--- | :--- |
| 2 minutes | Welcome, attendance, (omit bell work), announcements |
| 10 minutes | Journal Writing Time |
| 38 minutes | A shortened regular class |
| 5 minutes | Debrief and wrap-up |
## Materials/Preparation
* Students should have individual notebooks, a registered blog space, or worksheet handout to journal with.
* Teachers can provide a list of guidance questions (see below), or a survey that contains these questions.
## Instructor's Notes
### Explain to students
You may come to this course with stereotypes and myths about your abilities with computer science. By keeping a learning journal we will be using self-evaluation and self-reflection to help build your confidence. We will be reflecting on:
* what skills you currently have.
* what skills you gained over time.
* what you are capable of learning.
* what your interests might be.
* and what you would like to learn in the future
It's ok not to know everything. There is always something new to learn. Just take one step at a time.
### Beginning of the course
* Introduce students to the idea of a learning journal.
* Create a schedule of when, or how frequently, students are to write in their Journal.
### Self-evaluation and reflection example questions
Teacher should writes their own response to the prompts and share them with students.
Peer feedback is a powerful tool to use for this entries. When doing this make sure to go over how to give feedback with the students.
Here are some sentence starters to help guide through giving feedback to guide students.
* One thing I liked was…
* One thing I would change was…
* I’d like to know about ….
#### Beginning of the course entry
* What tools and technologies have you used before?
* On a scale of 1-5, how confident are you with them (5 being super-confident)
* What do you look forward to learning in this course?
* What are your worries and concerns about this course?
* other thoughts or comments.
#### Intermediate entries
* List the technical skills have you gained since the last time you wrote in your journal.
* What other skills have you gained? For example: creating a plan, drawing a graphic design, giving a presentation.
* What would you like more time working on to learn more?
* Looking at the new skills you have gained, or practiced, how do you feel about it?
* What did you like best about the course so far?
* What other skills would you really like to learn?
* What do you think we can do to improve the course?
* other thoughts or comments.
#### End of the course entry
* If you were to give advice to a new student who will start the course, what would it be?
* Was learning new skills easier, or harder than you thought? Explain.
* What are your project or design interests?
* Would skills would you like to learn next?
* What future jobs might use these skills?
* other thoughts or comments.
### Continue explaining to students
Like learning any new skill, or language, it takes time to learn. In computer programming, it's normal for a section of code to not work the first time.
Here are some things to think about during your journey through computer science:
1. If something doesn't work, don't be discouraged! It's part of the process. In fact, even experienced programmers spend a lot of time finding errors in their design and code. It's like detective work. This is when you can practice critical thinking steps of breaking down the problem, isolating the error, analyzing the values of variables. It can be frustrating but it's fun and rewarding when you resolve the error.
2. Don't be afraid to ask for help. Professional developers consult focus groups online to ask questions, and share solutions. One popular developer community is [Stack overflow](https://stackoverflow.com/)
#### Share learning journey with peers
* At the end of the course, ask each students to share a few key points with the class. They can refer to their final entry page in their Journal.
* This is an excellent oppotunity to share these stories to build community in your school and help to encourage more students to join the class.
### Continue to emphasize with students
Let's celebrate your learning journey! Don't let stereotypes, myths, or negative messages affect your motivation to learn technology. Whether it's coding, creative user-centered design, project management and everything in between. Don't just be technology consumers, be equipped to create and build your own uses for technology. The essentials skills you learn in this course will empower you to use technology in meaningful ways for a better future.
## Accommodation/differentiation
* This exercise could also be conducted in the form of a series of online surveys. The survey should allow for written responses, so that students are free to enter their own thoughts. Though remember that it's important that they reflect on this at the end of the course in order to build their confidence.
================================================
FILE: docs/culture_day_lesson_d.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Culture day: Interview people in technology fields
## Learning Objectives
Students will be able to...
* Identify the people in their family, or community, who have technology-related jobs.
* Create interview questions to find out about their jobs.
* Conduct an interview.
* Identify the different types of roles and skills needed in the technology industry.
* Identify technology skills needed in non-technology organizations.
* Reflect on how technology could be part of their future careers.
## Resources and project ideas
[Computer science hero classroom resources](https://www.csedweek.org/teach)
## Pacing Guide
This lesson can be done over two class periods.
### Day 1
Students prepare for the interviews. This class could be combined with a [journal writing day](culture_day_lesson_c.md.html).
| Duration | Description |
| :--- | :--- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introduce lesson and warmup activity|
| 15 minutes | Prepare interview questions |
| 10 minutes | Other activity (suggestion: Journal Writing)|
| 5 minutes | Debrief and wrap-up |
### Day 2
Students share and report on the interviews.
| Duration | Description |
| :--- | :--- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 45 minutes | Each group presents their interview highlights and key reflections|
| 5 minutes | Debrief and wrap-up |
## Instructor's Notes
### Explain to students
You may come with stereotypes and myths about technology jobs. There are many different types of roles and skills needed in the technology industry. There are many roles that don't require you to sit at your computer all day long and write code.
Here are a few examples:
* Artistic designers
* Music creators
* Script writers
* Project managers
* Marketing specialists
* Web designer
As you get to know people in your community, you can discover individuals who are willing to be mentors for your classroom in the days ahead.
### Introduction to the lesson, and warmup activity
#### Identifying local industries
* Before students start thinking about who to interview, find out how much your students know about technology companies in your city or town. Spend some time to search online. Write on the board some examples of technology companies, or companies that have technology departments.
#### Identify people in their lives
* Ask each student alone, or with partner, to brainstorm on a piece of paper 3-4 people who have technology-related jobs. Encourage students to think of a different variety of jobs.
* Encourage students to think of people that they know personally.
* Encourage students to think about the different people around them:
* those who work in technology organizations.
* those who have technical positions in other types of organizations.
* could be friend, relative, or even someone that you can approach
#### Share and decide
* Find a partner, and share your list with each other.
* Agree on 2 people from your combined list to interview together.
### Preparing for the interview
* In pairs, have students prepare a list of interview questions for each person.
* Encourage students to create a variety of questions, for example:
* What does your typical work day look like?
* What do you like, or not like, about your job?
* What inspires you?
* What are some challenges?
* What educational background is needed to do your job?
* What kind of technical skills are needed in your job?
* What advice do you have for students?
### Conducting the interview
* Each pair should make a plan of how to conduct the interview in the coming week.
* This should be done outside of class time.
#### Professional and respectful
* Contact the person first to arrange a time and place to meet
* Be punctual; if working with a partner, remember to introduce all parties involved.
* Tell interviewee the purpose of the interview is for you (students) to learn more about technology related careers.
* Ask politely for permission to share some of their answers (within the classroom).
* Avoid questions that may be awkward or too personal (like salary), and always thank the person for their time.
* Take some notes, while still listening and being attentive.
#### After the interview
* Students should talk with each other about key points, and personal take-aways.
* Here are some reflection prompts for students:
* What surprised you?
* What was interesting?
* What did you learn?
* Did you feel inspired or get ideas about possibilities jobs you could do in the future?
* Write 1-2 paragraphs of reflection
* As a team, prepare a few PowerPoint slides (or photos, brochures, or grab bag items) to capture your interview findings and reflections, which to use for sharing with peers.
### Share with peers
* Ask each pair to share highlights, and key reflections, with the class.
* This can be done in one class period. The presentation time per group should be adjusted so to accommodate all students, so that no one feels left out.
* As a guideline for a 5-6 minute presentation, they can prepare 2-3 slides for each person interviewed.
* Students can also play short video clips from their interview as well.
## Accommodation and differentiation
* Students who have little experience with interviews may practice interviewing one another in the class with a few simple questions.
* Some students may struggle to think of others to interview. They may be encouraged to consider asking a teacher or staff in the school as potential interviewees.
* Be sensitive to assist students who are new to the community, those not living with family, those who don't speak English at home, or have other situations that they may feel embarrassed about.
* Working with a partner can alleviate awkwardness for students who can't think of anyone to interview and anxiety related to a face-to-face interview.
* Motivated students could video the interview as well, and show clips during peer sharing time, with permission from the interviewee. The final sharing could be done in the format of a prepared video.
================================================
FILE: docs/curriculum_map.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Intro to Computer Science teaching resource (curriculum map)
Materials and preparation resources can be found in each of the lesson pages.
**Pacing guidance:** 1 Day is a 55 minute class period.
**Protected content** such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Support documents
* [Template Syllabus](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/IntrotoCSSyllabusExample.docx): Feel free to use this template to build a syllabus for your class.
* [Master Vocabulary List](master_vocab.md.html)
* [Computer Science Teachers Association Standards Mapping](CSTA_standards_mapping.md.html)
* [Slide decks](slidedecks.zip): Download all the slide decks in one zip file.
* [CSTA content matrix](CSTA-content-matrix-9-12.docx) - this resource has some culture day activities aligned to the CSTA standards.
## Unit 0: Beginnings
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | -- |
| [0.1: The first day of school][] | Identify the class they are taking. List the high-level goals of the course. Describe classroom procedures, rules, and norms. | Syllabus | 1 |
| [0.2: Algorithms][] | Define **algorithm.** Construct algorithms for performing simple tasks. | Peanut Butter Jelly | 1 |
| [0.3: Programming languages][] | Complete small scripting tasks (Hour of Code). Explain why computer programs are written in specialized languages. | Hour of Code | 1 |
| [0.4: Self-portrait][] | Create a simple script in to describe themselves | Getting to Know You | 1 |
| [0.5: Coordinate system][] | Recall the Cartesian coordinate system. Implement the coordinate system to position a sprite using Coordinates. | Getting to Know Coordinates | 1 |
## Unit 1: basics
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [1.1: Welcome to Snap!][] | Define and identify **blocks**, **scripts**, **sprites**, and **the stage**. Write simple scripts. Describe what simple scripts do without executing the script.| Welcome to Snap! | 2 |
| [1.2: Building blocks][] | Identify the pallettes of blocks in . Describe the function of several common blocks. Be able to use common blocks to build simple scripts. | Scavenger Hunt | 1 |
| [1.3: Drawing shapes][] | Construct simple algorithms to draw shapes. Convert algorithms into scripts. | Squares, triangles and Stars | 1 |
| [1.4: Animation][] | Animate sprites using costume changes and movement.Trigger action in other sprites using broadcasts. Implement scripts for multiple sprites. | Sprites in Action | 1 |
| [1.5: Storytelling project][] | Apply programming skills to create an animated movie, play, nursery rhyme, or other scene. Practice good debugging skills to correct issues as they arise while scripting. | Project 1: Animated Storytelling | 2 |
| [Culture day lesson A: Video/reading][] | Connect CS Unit topics with current events | | 1 or more |
## Unit 2: Loop-de-loop
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [2.1: Loops][] | Define **loop** in a programming context. Explain why loops are useful. Implement simple repeat and forever loops. Apply loops to reduce redundancy in a program. | Squares and Triangles Redux | 1 |
| [2.2: Nested loops][] | Apply nested loops to solve programming problems. | Yellow Brick Road | 1 |
| [2.3: Inputs and conditionals][] | Apply **Ask** and **Receive**. Apply simple conditional, **if** and **if-else** blocks, to alter control flow in a script. | What Shape Is That? | 1 |
| [2.4: Variables][] | Apply variables to track values throughout a program or script. | Guessing Game | 1 |
| [2.5: Boole in the house][] | Define and identify Boolean expressions and operators. Evaluate Boolean expressions. Utilize Boolean operators, `and`, `or`, `not`, to create compound conditions. | Triangles of All Kinds | 1 |
| [2.6: Pong project][] | Implement a well-written version of Pong. Practice good style and conventions to create readable and maintainable program. | Project 2: Pong | 4 |
| [Culture Day Lesson B: Student research project/presentation][] | Connect CS Unit topics with current events | | 1 or more |
## Unit 3: Abstraction and Customization
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [3.1: Abstraction and generalization][] | Define the terms **Abstraction** and **Generalization**. Recognize opportunities to improve algorithms by abstracting or generalizing parts into sub-procedures. | Drawing Shapes Again | 1 |
| [3.2: Combining Loops and conditionals][] | Combine loops with conditionals to create models with repeated but conditional behavior. | What Goes Up... | 1 |
| [3.3: Customization I: Arguments][] | Build custom blocks that take arguments. | Let Me Check My Calendar | 1 |
| [3.4: Customization II: Reporters and predicates][] | Build custom reporter and predicate blocks. | If My Calculations Are Correct... | 1 |
| [3.5: Platform game project][] | Apply loops, variables, and Boolean expressions to implement a Super Mario Bros. style platform game. Practice good debugging skills to correct issues as they arise while scripting. | Project 3: Platform Game | 8 |
| [Culture Day Lesson C: My skills and interests journal][] | Connect CS Unit topics with current events. | | 1 or more |
## Unit 4: Lists
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [4.1: Intro to lists][] | Explain the concept of a `list` in a programming context. Identify scenarios in which lists are useful. | | 1 |
| [4.2: Static lists][] | Create static lists. Access elements of a list. Add and remove elements from a list. | You Talkin' to Me? | 1 |
| [4.3: List practice I][] | Traverse a list, accessing each element one at a time.Perform operations combining all elements in a list. Select defined subsets of elements in a list. | Guess Who | 1 |
| [4.4: List practice II][] | Traverse a list, accessing each element one at a time. Perform operations combining all elements in a list. Select defined subsets of elements in a list. | Number Cruncher | 1 |
| [4.5: Sequential search][] | Explain the sequential search algorithm. Implement several variations of sequential search.. | It's Around Here Somewhere | 1 |
| [4.6: Guess my word project][] | Apply lists to implement a complete version of _Guess My Word_. Exercise good programing practices to produce a program that is not only functional but also elegant and well-written. | Project 4: Guess My Word | 5 |
| [Culture day lesson D: Interview with people in technology][] | | | 1 or more |
## Unit 5: Cloning
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [5.1: Intro to cloning][] | Explain why prototyping and clones can be useful. Describe how complex goals can be accomplished using cloning. | Connect the Dots | 1 |
| [5.2: Cloning sprites][] | Demonstrate the difference between sprite and global variables. Explain how cloning and prototyping simplify similar sprites in the same program. Create prototype sprites and clones of the prototype sprite. Explain the difference between a "master" sprite and a "clone" sprite. | Lots of Balls | 1 |
| [5.3: Communicating With clones][] | Pass information from the master to individual clones. Delete clones when they are no longer needed. | Fewer Balls | 1 |
| [5.4: Space Invaders project][] | Use cloning to implement a complete version of "Space Invaders". Exercise good programing practices to produce a program that is not only functional but also elegant and well-written. | Project 5: Space Invaders | 10 |
## Unit 6: Final project
| Lesson | Objectives | Lab | Days |
| ------ | ---------- | --- | --- |
| [6.1: Design basics][] | Identify the key considerations when designing a piece of software. Describe methods for prioritizing features, use cases, and/or scenarios. Explain why design and planning are necessary steps in the software engineering process. | Final Project | 1 |
| [6.2: Research and ideate][] | Identify potential users, intended impact, and possible unintended negative consequences. Generate ideas to create range of possibilities using a brainstorm technique. Conduct user-centered research to understand design opportunities and barriers. Critically analyze factors when choosing between project ideas. Prioritize proposed project ideas using the identified factors. | Final Project | 1 |
| [6.3: Defining requirements][] | Define key **user-scenarios** for a project and the features required to implement each scenario. Explain the importance of wire framing when designing an application. Capture key scenarios using **sketches** - (hand drawn, or with drawing tool). Refine design based on user-centered research. | Final Project | 1 |
| [6.4: Building a plan][] | Break down, and identify the main technical components needed for the functional project specifications (scenarios). Explain the purpose of each technical component. Develop the project idea into a full, detailed specification. Create a plan that includes specific steps or a list of bite-sized tasks. Estimate time required for tasks. | Final Project | 1 |
| [6.5: Project implementation][] | Apply the skills developed throughout the course to implement a medium* to large-scale software project. Realistically evaluate progress during software development and identify when cuts are necessary. Prioritize features and scenarios and choose which should be eliminated or modified if/when resources and/or time become limited. Record time taken for tasks, and lessons learned in the process, to help refine estimates. Record iterations of prototyping. | Final Project | 10 |
| [6.6: Project sharing][] | Share their progress, invite feedback, collaboration, and if applicable, prepare a marketing pitch. Decide on how and with whom to promote and share their project. Critically evaluate the design process, their ability to work effectively, including the ability to implement project management processes. Identify new design issues, including how they or others might build on their concept. Identify and evaluate their skills, and things to learn in the future. Analyze the role and impact of their project idea, and similar technologies, in societal change. Consider how cultural beliefs, values, and ethical positions affect the development and use of technologies. | Final Project | 1 |
[0.1: The First Day of School]:lesson_01.md.html
[0.2: Algorithms]:lesson_02.md.html
[0.3: Programming Languages]:lesson_03.md.html
[0.4: Self-Portrait]:lesson_04.md.html
[0.5: Coordinate System]:lesson_05.md.html
[1.1: Welcome to Snap!]:lesson_11.md.html
[1.2: Building Blocks]:lesson_12.md.html
[1.3: Drawing Shapes]:lesson_13.md.html
[1.4: Animation]:lesson_14.md.html
[1.5: Storytelling Project]:lesson_15.md.html
[Culture Day Lesson A: Video/Reading]:culture_day_lesson_a.md.html
[2.1: Loops]:lesson_21.md.html
[2.2: Nested Loops]:lesson_22.md.html
[2.3: Inputs and Conditionals]:lesson_23.md.html
[2.4: Variables]:lesson_24.md.html
[2.5: Boole in the House]:lesson_25.md.html
[2.6: Pong Project]:lesson_26.md.html
[Culture Day Lesson B: Student Research Project/Presentation]:culture_day_lesson_b.md.html
[3.1: Abstraction and Generalization]:lesson_31.md.html
[3.2: Combining Loops and Conditionals]:lesson_32.md.html
[3.3: Customization I: Arguments]:lesson_33.md.html
[3.4: Customization II: Reporters and Predicates]:lesson_34.md.html
[3.5: Platform Game Project]:lesson_35.md.html
[Culture Day Lesson C: My Skills and Interests Journal]:culture_day_lesson_c.md.html
[4.1: Intro to Lists]:lesson_41.md.html
[4.2: Static Lists]:lesson_42.md.html
[4.3: List Practice I]:lesson_43.md.html
[4.4: List Practice II]:lesson_44.md.html
[4.5: Sequential Search]:lesson_45.md.html
[4.6: Guess My Word Project]:lesson_46.md.html
[Culture Day Lesson D: Interview with People in Technology]:culture_day_lesson_d.md.html
[5.1: Intro to Cloning]:lesson_51.md.html
[5.2: Cloning Sprites]:lesson_52.md.html
[5.3: Communicating with Clones]:lesson_53.md.html
[5.4: Space Invaders Project]:lesson_54.md.html
[6.1: Design Basics]:lesson_61.md.html
[6.2: Research and Ideate]:lesson_62.md.html
[6.3: Defining Requirements]:lesson_63.md.html
[6.4: Building a Plan]:lesson_64.md.html
[6.5: Project Implementation]:lesson_65.md.html
[6.6: Project Sharing]:lesson_66.md.html
================================================
FILE: docs/do_now_04.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Identity
How would you fill in the following: I am ______?
This could be answered in many ways:
1. What you enjoy doing: I am a musician.
2. Physically: I am tall.
3. Personal characteristic: I am funny.
4. Career aspirations: I am an engineer.
5. Self reflective: I am a deep thinker.
6. As an athlete: I am a runner.
## In your notebook
After taking few minutes to think who you are, write down your thoughts in your notebook. We will be using who you are to write a self expression script.
================================================
FILE: docs/do_now_05.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Draw the coordinate system
## In your notebook
Draw this image to the best of your ability and then answer the questions below the image.

1. Can you label the _x_ and _y_ axes?
2. Can you label the tick marks on the axes from -5 to 5?
3. Draw a point at the origin (0, 0).
Note: It's ok you don't know the answers to these questions. We will go over them in this lesson.
================================================
FILE: docs/do_now_11.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Review the coordinate System

## Answer the following in your notebook
1. What are the coordinates of the red sprite?
2. What are the coordinates of the green sprite?
In your window, take a look at the blocks under the motion pallette. The majority of the blocks there will help you position your sprite on the stage. Try them and see what they do! Change the input values to see what happens.
3. List at least 4 blocks from the motion pallette that will change the position of a sprite.
## Make sure you know how to use the **say** block
1. Open the development environment and start a new project.
2. Using the **say** block have your sprite say "Hello World".
3. Save your with the file name _DoNow1.1_.
================================================
FILE: docs/do_now_12.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Tracing and debugging
## In your notebook
1. Define **Code tracing**.
2. Define **Debugging**.
## Putting blocks together to build a script
All of the following blocks, you have been introduced too. Let's put them together to create a script.
1. Open the development environment and Start a new project.
2. Select the check box next to the `x position` and `position` pointer block to display their values on the stage.
3. Have your sprite move 100 units to left.
4. Turn 90 degrees clockwise.
5. Move 100 units.
6. Write down the coordinates in your notebook.
7. Save your project as _DoNow1.2_
================================================
FILE: docs/do_now_13.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Drawing a triangle
## Setup
1. Open this [starter script](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Equalteral%20Triangle)
2. exit full screen
3. Save your project as _DoNow1.3_.
4. You can use this as a starting point for today's lab.
> Try enabling `visible steps` near the middle of the top toolbar. Adjust the slider so you can see what happens as you step through your script.

## Instructions
Using only the blocks already added on screen (not every block is needed), create a script that draws an equilateral triangle, like:

[starter project]: https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%201.3_Starter
Save your project.
================================================
FILE: docs/do_now_14.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Example animation
## Follow these steps on your own
1. Open this [starter script](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%201.4_Starter).
2. Log into your account and save the starter project.
3. Save your project as _DoNow1.5_.
4. Press the space bar on your keyboard several times in a row. Notice what happens to the two bats on the screen.
>Hint: If a sprite moves completely off the Stage, you can bring the sprite back on the Stage by right-clicking its icon in the sprite corral and choosing `show`.
5. Use your mouse to point the cursor at one of the bats. Then, click the mouse button several times. Notice what happens to the two bats on the screen.
6. Take a look at all of the parts of the window. Read the comments in the script. Be sure to explore the tabs at the top of the scripting area and the icons in the sprite corral.
> Hint: It may be helpful to activate "visual steps" with the footprint icon near the middle of the top tool bar.
## Respond to the following in your notebook
1. Write down the name of all of the blocks that you have never seen before.
2. Write down every object has a script that executes.
================================================
FILE: docs/do_now_15.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Knock knock joke
1. Write a program where one sprite is telling another a "knock, knock" joke. Internet search for one if you need ideas.
Use these blocks:


2. Save your project as _DoNow1.5_.
================================================
FILE: docs/do_now_152.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Click event interaction
1. Write a script where one sprite acts as a button and when pressed, it increases the size of another sprite. Use these blocks:




2. Save your project as _DoNow1.5.2_.
================================================
FILE: docs/do_now_153.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Movement interaction
1. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160201%20Do%20Now%20Bat%20and%20Dragon).
2. Save your project as _DoNow1.5.3_.
3. Look at the bat's program and how events are triggered by two different keys. Trace through the scripts to understand how the it works.
4. Modify the script so that the bat flies to the Dragon when the space key is pressed once.
5. Add to the script to have the bat to say "BOO!" when it stops.
6. Add to the script to have the dragon turn around and say, "You scared me!".
7. Add to the script to have the Bat to then turn around and fly away.
================================================
FILE: docs/do_now_21.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Introduction to loops
Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160205%20Do%20Now%20User%20Input), run the scrpt and test it, then answer these in your notebook.
1. What is the **forever** block, and why is it important for this program?
2. What happens if you take it out temporarily, reattach the rest of the script to the **When Green Flag clicked** block, and run the program?
3. What does the **point direction 90** do to the sprite?
4. What would happen if you decrease or increase the number of steps?
5. Add scripting so that if the user presses the left arrow key, the sprite faces the left direction and moves a few steps in that direction. Test to make sure that this works and also that right arrow key still works.
6. Save your project as _DoNow2.1_.
================================================
FILE: docs/do_now_22.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Building a staircase
1. Open this [starter project](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%202.2_Starter) puzzle.
2. Reassemble the blocks so Alonzo asks how many stairs to draw.
3. Have Alonzo draw stairs from the center of the stage to the upper right the number of times specified.
4. Save your project as _DoNow2.2_.

================================================
FILE: docs/do_now_23.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Stairs
1. Use the following **Repeat** block to draw a square (note: you will have to put a number in place of the blank).

2. How would you use an additional **repeat** block to draw 12 squares in a line one next to each other. Each square will be to the right of the last square drawn.
3. How would you modify the script so the squares form a set of stairs going up?
4. Save your project as _DoNow2.3_.
================================================
FILE: docs/do_now_24.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Debugging
1. Open this [starter project](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%202.4_Starter) game.
2. Save your project as _DoNow2.4_
3. In this two-player game, Alonzo is trying to catch the blue dog. Both Alonzo and the blue dog are controlled using keys on the keyboard.
4. There are at least six bugs in this program. Four of them affect the game play and two of them are cosmetic.
5. Fix all of the bugs to get the program working correctly.
## Respond to the following in your notebook
1. What keys were used to control Alonzo?
2. What keys were used to control the dog?
3. List at least six bugs in the program and explain what the bugs are and how to fix them.
__Bonus:__ Once you get the game working, can you think of some changes to make it more fun?
================================================
FILE: docs/do_now_25.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Variables practice
## In your notebook
1. Write an algorithm, in English, for how you would swap the values in two variables. For example, suppose we have two variables that have different values:
* set `playerOneValue` to "Torch"
* set `playerTwoValue` to "Gold"
2. How would you swap the values so `playerOneValue` is set to "Gold" and `playerTwoValue` is set to "Torch"?
* Here, "Torch" and "Gold" are just examples. Suppose the algorithm doesn't know what values the variables have before it begins.
3. Swap your algorithm with a partner and test it to determine if it works or not.
================================================
FILE: docs/do_now_26.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Bouncing ball
1. Open a new project and change the sprite's costume to a ball.
2. Save your project as _DoNow2.6_
3. Using the following blocks, write a script that continuously moves the ball across the screen and bounces the ball when it hits the edge of the screen.




4. Add a second sprite. Add the same script from step 2 above for the new sprite.
5. What happens when you run? Explain what you observe.
================================================
FILE: docs/do_now_31.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Guided Tour
## In your notebook
Plan a route, starting at the hotel, so that tourists can visit every tourist attraction just once and be back to the hotel.

Credit: Queen Mary University of London
================================================
FILE: docs/do_now_32.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Sprite control
1. Open this [starter program](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Do_Now%203.2_Starter).
2. Save your project as _DoNow3.2_.
3. Add to the program to do the following:
* Move Dino up 1 unit at a time when you press the **arrow up** key. You must use the **change y by** block.
* Move Dino down 1 unit at a time when you press the **arrow down** key. You must use the **change y by** block.
* Don't let Dino leave the screen.
* Don't let Dino go through the platform.
* Don't let Dino go underground.
================================================
FILE: docs/do_now_33.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Jumping
Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160223%20Do%20Now%20dog%20walking%20and%20jumping) that can move left and right in response to arrow keys. Make the following modifications to the program:
1. A walking animation for the dog. Hint: it has 2 costumes.
2. Add the script below to the **forever** block to make the dog jump.

* What is the problem with this jump script when you test it?
* How should jump work when the player presses the spacebar?
3. Add gravity by making a custom **motion** block called "gravity" and adding it inside the forever loop. In the **gravity** custom block use an if statement to implement gravity. Hint: If not touching ground or platform color, go down by a small amount.
4. Save your project as _DoNow3.3_.
================================================
FILE: docs/do_now_34.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Practice using arguments
Open your _DoNow3.3_ program. In this program, you created a **gravity** block where a sprite would fall to the ground and stop when it touched a color. The sprite always falls at the same rate.
How would we get the sprite to fall at different rates?
We will solve this problem by adding an argument to the **gravity** block. We can then pass the rate we want the sprite to move.
1. Add an argument named "rate" to the **gravity** block by clicking the "+" next to the block name.
2. Change the **move** block to move "rate" spaces by dragging the rate variable to the **move** block.
3. You can now pass different rates in your **gravity** block call located in the sprite's forever loop.
4. Save your project as _DoNow3.4_.
================================================
FILE: docs/do_now_42.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Letters of a word
1. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=Starter%20project%20for%20text%20operators%20practice) and run the script.
2. Once you understand how it works, modify the program so that the sprite says every letter in the word.
3. Save your project as _DoNow4.2_.
================================================
FILE: docs/do_now_43.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Quote of the day
1. Create a list with 10 inspirational quotes. You may use the internet for ideas.
2. Use the item block below to pick a random quote of the day.

3. Save your project as _DoNow4.3_.
================================================
FILE: docs/do_now_44.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Traversing lists
## In your notebook
1. Describe what it means to _traverse a list_.
2. List 2 different blocks you can use to traverse list and how you would use them.
================================================
FILE: docs/do_now_45.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# List tracing
For each script below, describe what the sprite does when that script is triggered. Number your answers. If you have time, check your answers by assembling these scripts.
You will need to add the "words, sentences" library to your project to use the **list->sentence** block.
1. Click the File Icon in the upper left corner next to the image.
2. Click "Libraries..."
3. Select "Words, sentences"
4. Click "Import"
* The "list->sentence" block will be one of the blocks added to the operators palette.

5. Save your project as _DoNow4.5_.
================================================
FILE: docs/do_now_46.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Spaceman
Participate in a couple of rounds of the game Spaceman with your teacher.
## In your notebook, answer the following questions
1. How could you use lists from this unit to help implement a version of this game?
2. What other creative ideas can you come up with to visualize the number of chances a player has to guess the letters? (come up with at least 2)
================================================
FILE: docs/do_now_52.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Star Wars troopers
1. In Star Wars, what are "clone troopers"? Do an internet search to find out and write a sentence to answer the question.
2. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160425%20Do%20Now%20cloning). Duplicate the sprite (and scripts) so that there are 5 clone troopers that move from the right side of the screen to the left side in a straight line when green flag is clicked. The starting and ending positions of the sprites are shown below.
3. Save your project as _DoNow5.2_.
Start:

End:

================================================
FILE: docs/do_now_53.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Star Wars troopers using cloning
1. In yesterday's do now, we used a script to duplicate 5 Star Wars troopers to march across the stage. Today we will use the clone feature to do the same thing.
2. Open this [starter project](http://snap.berkeley.edu/snapsource/snap.html#present:Username=whuangpha&ProjectName=160425%20Do%20Now%20cloning). Using the **create a clone of** block, create a script so there are 5 clone troopers that move from the right side of the screen to the left side in a straight line when green flag is clicked. The starting and ending positions of the sprites are shown below.
3. Save your project as _DoNow5.3_.

## Start

## End

================================================
FILE: docs/helping_trios.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Helping Trios
## Overview
In Helping Trios, each student presents something they are working on and get help from classmates. Group students in trios and ask students to take a couple of minutes to complete the first question in the handout.
In their groups, each student will have a total of five minutes to speak:
* 2-3 min to describe their challenge.
* 2-3 min to get peer feedback and write it down in their notebooks.
## Instructions
Students do not want to give each other the answers but help each other by providing advice on how to figure out a way to solve their problem.
Have students keep their answers to the questions in a their so you and the student can track their improvement over time. This can be a supplement to any written feedback you have given the student.
## Logistics
* Groups group students into trios (You may need a group that has 2 students to accommodate the classroom roster).
* The length of the activity should be 10-15 minutes.
## Remote Synchronous Guidance
* Utilize breakout rooms to arrange students into their trios.
* Have students Students share document and/or share screen
* Consider having students use any of the following
* Loading the document directly to the breakout room
* Utilize Digital Whiteboard
* Teacher or Teaching Team should move about the breakout rooms to ensure students are engaging with each other
* If groups are not engaged, ask leading questions to get them sharing about their challenges
## Student Handout
Students will be utilizing their classroom notebook to complete this activity. We have prepared a [student facing document][helping_trios_handout.md.html]] to give to your students.
### Distribution
This student facing document could be presented to students in a variety ways based on your classroom structure.
* This document could be displayed on a projector in the front of the classroom.
* The link to this document could be posted in your learning management
system.
* Consider a permanent link in the course to refer to quickly when it's needed.
* This document could be distributed in the chat feature in your classroom tool
================================================
FILE: docs/helping_trios_handout.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Helping Trios Student Guide
In your notebook, take notes on the following:
## My Challenge
Define the problem you are having completing the project.
## Peer Suggestions
After presenting your challenge to your trio, write down some of the suggestions you peers have to solve your challenge.
## My Plan
Write down your plan to solve the problem you are having based on the feedback you got from your peers.
================================================
FILE: docs/index.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Important! TEALS will no longer make updates to this course. Use at your own risk!
The curriculum repo will remain available and anyone who wants to develop it further can fork it.
## Intro to Computer Science
The **Introduction to Computer Science curriculum** is a flexible and approachable course adapted from the [UC Berkeley CS 10](https://cs10.org), and is course for a wide range of high school students from diverse backgrounds. The course has been successfully implemented in hundreds of high schools.
Introduction to Computer Science is an engaging course that explores a variety of basic computational thinking and programming concepts through a project-based learning environment. Every unit culminates in a comprehensive project and roughly 75% of student time is spent building projects and practicing the skills they are learning.
## Visual and approachable
This course uses Snap!, an approachable visual block-based programming language with a robust tool set, perfect for introducing students to coding for the first time.
## Course version control
This course uses GitHub to manage version, course updates, etc. You can access the repository here:
* GitHub: https://github.com/TEALSK12/introduction-to-computer-science/
### Curriculum issues and answer keys
TEALS will no longer be updating TEALS curricula. Answer keys are not available.
## Introduction to computer science implementation options
This Introduction to CS course can be offered as a semester-long course offered twice in a single school year or as a year-long course with an expanded curriculum. The year-long class transitions to text-based programming using the beginner-friendly Python language in the second semester. Teachers participating in the TEALS Program can use the following options:
* [TEALS Second Semester Introduction to Computer Science - Python curriculum](https://tealsk12.github.io/2nd-semester-introduction-to-computer-science/)
* [Carnegie Mellon CS Academy](https://academy.cs.cmu.edu).
## About this curriculum
### Philosophy
The curriculum is based on, and borrows heavily from, the [Beauty and Joy of Computing Curriculum](http://bjc.berkeley.edu/) developed at the University of California, Berkeley. The TEALS curriculum has a heavier focus on the basic programming components of the course than BJC, sacrificing some of the advanced programming and conceptual topics that are less appropriate in an introductory high school classroom.
This curriculum advocates a "hands-on" learning approach in which students' primary means of learning is through discovery, experimentation, and application. To that end, each unit is built around a large, culminating, programming project that exercises the objectives of the unit. In addition, nearly all lessons in the curriculum include a guided activity of some kind to allow students to practice with and experience the concepts covered in the lesson first-hand. Taken together, the lessons provide the skills and support necessary to enable students to complete the project and demonstrate mastery of the unit's objectives. Substantial class time should be provided for the project in each unit to ensure students have the opportunity to demonstrate mastery of the skills from each unit before moving on.
Because this curriculum was designed to be used in a wide variety of classrooms, we have made as few assumptions as possible. In particular, the curriculum does not depend on any specific technologies or resources in the classroom other than computers with reliable internet access. This curriculum is also designed without any student homework assignment, as not all classes will have students who can reliably access a computer with internet access at home. For classes where home computer access is not an issue, some amount of lab work can be reassigned as homework.
### Resources
This curriculum is designed for use with the Snap! programming language designed at the University of California, Berkeley. Snap! is a visual programming language designed to allow students to focus on concepts and skills rather than syntax when learning to program. Snap! is an extension and reimplementation of Scratch, designed at MIT, and many Scratch lessons and programs can be easily adapted to Snap! The following resources are available to support use of Snap! in this curriculum:
* [The Snap! Reference Manual](https://snap.berkeley.edu/snap/help/SnapManual.pdf)
* [Snap! examples and extensions](https://snap.berkeley.edu/#help-examples) (including using hardware devices with Snap!):
* [ScratchEd online community for Scratch educators:](https://scratch.mit.edu/educators/)
* [Beauty and Joy of Computing curriculum:](https://bjc.berkeley.edu/)
### Snap! mirrors
Access to Snap! is necessary for students to complete the labs. The main Snap! site has been known to be inaccessible due to system updates or network outages. It is important to have contingency plans in the event the web site is unreachable. Here is a list of mirror sites that can be used in the event the main site is unreachable. In addition, Snap! can be downloaded to run locally on a student's computer, however the projects will not be able to be save to the cloud and will need to be exported and then imported to the cloud when Snap! becomes available.
The Berkeley Snap! is located at: http://snap.berkeley.edu/
The following are mirror sites:
* [Mirror 1](http://bjc.edc.org/snapsource/snap.html)
* [Mirror 2](http://media.mit.edu/~harveyb/snap)
* [Mirror 3](http://cs10.org/snap)
You can also download a local copy of Snap! as a backup:
1. Run Snap! from browser
2. Click on the Snap! logo in the upper-left of the app.
3. Choose “Download source” from the menu

4. Save snap.zip locally on your computer.
5. Extract snap.zip.
6. Open snap.html in a web browser.
## Using this curriculum
### Semester pacing
The TEALS Intro CS curriculum is designed for a semester-long introductory course meeting daily for 55 minute periods. A course that meets these criteria is expected to have roughly 90 class meetings in a semester. However, the TEALS curriculum in its current form includes an estimated 102 days of material. First and foremost, teachers should be reminded that the pacing in the curriculum is intended as a guideline and teaching teams are encouraged to make any adjustments they deem appropriate or necessary. However, there are certain aspects of the curriculum that are vital to maintain. In particular, the following should be considered when making pacing adjustments:
#### Lab Days
The number of lab days allotted for each project is an estimate for a typical class. Classes that are moving quickly, or classes in which most students are able to do work outside of class, can reduce the number of in-class lab days. If this route is taken, be certain that students still have enough time available to complete the projects. As the projects are the primary summative assessments in this course, it is vital that students not be rushed through completion of the project and that requirements are not cut in an attempt to shorten the time necessary.
#### Culture Days
Culture Days (see below) are included in the curriculum roughly once every two weeks. While it may be tempting to reduce the number of culture days, or remove them entirely, to gain back class days, these lessons are considered central to the student experience in this course. If an extra day or two are needed, culture days may be skipped on occasion, but teaching teams are advised to avoid making a habit of skipping culture days.
#### Pacing Considerations
##### Unit 5 (Optional)
It is expected that many teams will find it necessary to remove some or all of **Unit 5** from the curriculum. This unit covers cloning and prototyping, an interesting and worthwhile, though advanced topic. If time allows, teaching teams are encouraged to attempt to include at least part of this unit, possibly with a simplified version of the project, in their curriculum. But this unit can be removed without having too adverse an impact on the student experience, and should be the first major cut if one is necessary.
##### Unit 6 (Preserved)
The capstone experience for the course, Unit 6 enables students to apply the skills they have learned in a large-scale, individualized project setting. Cutting this unit would deprive students of the opportunity to experience a close approximation of a real-world development setting. Earlier units should be condensed or cut as necessary to ensure that Unit 6 is still included in the curriculum.
### Daily lesson plans
Most lesson plans in this curriculum are designed to represent a single 55-minute class period with average pacing. Each class will have slightly different needs, possibly including different period length, student capabilities, classroom interruptions, and more. Teachers and volunteers are encouraged to consider the lesson plans as guidance for one possible use of time to present the material, and to feel free to adapt the lesson plans as necessary to fit the needs of the particular class in which the plans are being applied.
With a few exceptions, each daily lesson plan consists of the following components:
#### Welcome/Announcements/Bell work
Five minutes are allotted at the beginning of each day for administrative tasks such as taking attendance, giving announcements, returning work, or other necessary actions. During this time, teachers are encouraged to assign "bell work" (sometimes called "do now" activities) for students to work on.
* These activities aim to engage students with the subject immediately upon entering the room, and should be short, clear, and able to be completed by all students.
* Specific "do now" activities are not given in the lesson plans, as they should be chosen by the teacher to reinforce or preview the specific topics with which students have or are expected to struggle most.
#### Instruction/discussion
Most lessons begin with a brief period of instruction on the topic of the day. These sections should be kept as brief as possible—the primary means of student learning in most lessons will be the lab activities.
* The goals of the instruction section of the lesson should be to motivate the concepts being exercised in the lab and to provide a short demonstration to help students find the necessary parts of Snap! the first time.
* Teaching teams should vary the ways in which the instruction is presented throughout the course, including class discussions, kinesthetic activities, demonstrations, Socratic seminars, occasional lectures, and other approaches.
#### Activity
The largest portion of time in each lesson is dedicated to a guided activity that allows students to explore and practice with the day's key topics. Each activity is broken down into several parts, each of which consists of several steps. In general, the steps in a single section build on each other, and each section covers a new topic or new application.
* It is intended that the labs be well enough structured for students to work through on their own, but teachers should feel free to interject at appropriate points to assess student progress and provide additional guidance as necessary.
* On occasion, steps 3 and 4 are repeated for multi-part activities.
#### Debrief
After each activity has concluded, time is allotted for teachers to review and debrief the activities with students. In general, there is not enough time, nor is there necessarily the need, to go through the lab step-by-step. Students should be able to at least partially assess their own progress by verifying that their programs function as specified in the lab.
* Rather than presenting solutions to each step of the lab, teachers are encouraged to use the debrief time to focus on particularly tricky or noteworthy parts of the lab or to discuss areas in which students struggled.
* Debrief time can also be used to compare and contrast different possible approaches to some of the problems, emphasizing that, in most cases, there is more than one valid solution.
* Whenever possible, use examples of student work rather than instructor-created solutions during the debrief—this is an excellent chance to showcase students who solve problems in elegant, creative, or canonical ways.
### Homework
This curriculum does not assign homework as part of its typical lessons. Because this curriculum is intended to be used in a wide variety of classrooms, some of which may include students that do not have regular access to an internet-enabled computer at home, all work is done during class time. In some circumstances, assigning some lab activities as homework can enable the teaching team to regain in-class time for additional lessons or activities, but this must be done with care. In particular, if homework is assigned, arrangements must be made so that any students who do not have the ability to complete the homework at home do not fall behind. Further, it should be expected that some students will not complete the assigned homework and teaching teams must have a way to both assess that homework was completed and ensure the material is reinforced briefly in class.
### Quizzes
To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes. The quizzes and answer keys can be found with protected materials for the course.
### Grading
Student work consists of class participation, daily labs, end of unit projects, and final project. Each classroom teacher is responsible for determining the grading breakdown for their classes. TEALS recommends the following as a starting point as grading guidelines for the introductory computer science course.
| Percentage | Description |
| ---------- | ------------------------------------- |
| 40 | Daily Labs |
| 40 | Projects and Large-Scale Labs |
| 20 | Participation, Notebooks, etc. |
### Creative Commons Attribution Non-Commercial Share-alike License
This curriculum is licensed under the [Creative Commons Attribution Non-Commercial Share-alike License](http://creativecommons.org/licenses/by-nc-sa/4.0/), which means you may share and adapt this material for non-commercial uses as long as you attribute its original source, and retain these same licensing terms.
================================================
FILE: docs/lab_04.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Getting to know you
In this lab, you will explore and create a simple "self-portrait" program to introduce yourself to your teachers and classmates.
## Part 1 - Exploring
1. Open a new project.
2. In order to save your project, the first thing you'll need to do is to create an account. In the browser window, find the cloud-shaped button in the top toolbar on the upper left corner of the window.

Click it, select the "sign up" option in the menu, and follow the instructions there. You will need to check your email after creating your account to get your initial password. Your username will be the first part of your school email address. If you need help, ask.

3. Spend a few minutes looking around, trying things out, and experience what the language can do.
4. Write down three things in your notebook you found that the environment can do and how to do them. Be as specific as you can!
| You can do this...| If I do this... |
| --- | --- |
| 1. | |
| 2. | |
| 3. | |
5. Find a partner and compare notes. Share your findings with your partner and ask them about what they learned. Write down the three capabilities your partner found below.
| You can do this... | If I do this... |
| --- | --- |
| 1. | |
| 2. | |
| 3. | |
## Part 2 - Self - portrait
Using what you've learned and other things you might discover, create a program that describes yourself. This can take whatever form and use whatever tools and blocks you want. Make sure your script includes following information:
* Your name
* Your current grade
* Your age
* Your favorite subject in school.
* One of your hobbies or interests.
* Any previous programming or computer experience you have.
* Example of something you learned
* What you think learning CS will be like?
* What are some of your favorite uses of technology?
1. Save your project as _Lab0.4_.
2. Submit your _self portrait_ using the submission instructions given to you by your instructor. If you are having trouble saving, here is a great video: [https://youtu.be/VHts_QAp3XU](https://youtu.be/VHts_QAp3XU)
## Grading rubric
| **Criteria** | Point values |
| :--------- | :--- |
| **Part 1** | |
| 1.4 Listed 3 things you found you can do. | 0.3 points |
| 1.5 Listed 3 things your partner found you can do. | 0.3 points |
| **Part 2** | |
| Includes name | 0.2 points |
| Current grade | 0.2 points |
| Age | 0.2 points |
| Programming or computer experience | 0.0 points |
| Learning CS going to be like | 0.2 points |
| Favorite uses of technology | 0.2 points |
| Favorite subject in school | 0.2 points |
| Example of something learned | 0.2 points |
| **Total** | **2.0 points** |
================================================
FILE: docs/lab_05.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Getting to know Coordinates
## Part 1 - Coordinates
1. Open the [Peabody test](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=PeabodyTest).
2. Click on Peabody to start the test.
3. Answer his question in the textbox.
4. You should answer at least 10 of his questions.
## Part 2 - Plot a drawing using a template
1. Using this [starter script](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Snap%20Coordinate%20System%20Intro) from the classroom activity, create a drawing that has at least 10 coordinates.
2. Save your project as _Lab0.5_.
Here is an example with 8 coordinates:

## Grading rubric
| **Criteria** | Points |
| ------------------------------------------------------------- | -------------- |
| **Part 1** | |
| Participated in the Peabody test | 0.5 points |
| **Part 2** | |
| Saves project | 0.25 points |
| Shares link with teacher | 0.25 points |
| Drawing contains at least 10 coordinates | 0.5 points |
| Drawing completeness (Resembles something recognizable) | 0.5 points |
| **TotalL** | **2 points** |
================================================
FILE: docs/lab_11.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Welcome to Snap!
Snap! is a programming language, which you can use to tell a computer what to do. A program is a particular set of instructions for the computer to follow.
Programs in most languages use only letters (and punctuation), but Snap! is different: it's a visual language. Instead of writing a program only using the keyboard, you will drag pictures of blocks and snap them together. In Snap!, programs contain multiple scripts. We will use this terminology going forward.
The following is a script in Snap!:

Can you guess what it might do? (Write your guess below)
____________________
## Part 1 - Blocks
The area at the left edge of the window is the **palette**. As you see in the picture, it contains pallettes for eight different-color block pallettes. In this lab, we will focus on the Motion, Sound, Pen, and Sensing pallettes. You will learn about the other pallettes in the next few labs.
These pallettes are an important organizational structure in Snap! because they are home to the various blocks that you will use to tell the computer what to do. The blocks are categorized under each pallette based on what kind of thing each block does.
1. Below, fill in the name of the pallette to which each block belongs.
| Block | Pallette |
| ------------------------- | -------- |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
Look at the **Motion** pallette. Under this pallette you will find a bunch of blocks that correspond to motion-like actions. For example, click on the **Move** block, drag it to the scripting area, and drop it anywhere in the scripting area.


The block that you just dragged and dropped into the scripting area controls something that we call a sprite, which is the arrowhead-looking thing in the middle of the stage (the white part of the window).
Back to the scripting area, if you click on the **Move** Block you just put there, the sprite will move 10 steps. You can see this visually depicted by the sprite moving in the stage. You can vary the input of the block, i.e., the number 10, to change the number of steps you want to the sprite to move.

2. How can you change the block input so that the sprite moves in the opposite direction?
## Part 2 - Scripts
Now that you have figured out how to make a sprite move, you might be wondering how to make the sprite do other things as well. To make a sprite do more than just move, we need to use different types of blocks and link them together. You can link blocks by snapping them together. Drag a block right underneath the one to which you want to attach it. Blocks will snap together when one block's indentation is near the pallette of the one above it. You should see a white bar appear like the one in the image below, which just shows you where the block will go after you drop it.

If you keep attaching blocks together in this way, you will create a script. A program consists of one or more of these scripts.
1. Try recreating the following script in the scripting area in Snap!.

The purple say... blocks are available from the **Looks** pallette.
Remember, a script will tell the sprite what to do. Click on the script and see what happens. You will know that your script is running if it has a highlighted border around it:

2. What happens when you run this script?

Be sure to note: _blocks in a script run in a specific order, from the top of the script to the bottom_. Generally, Snap! waits until one block has finished its job before continuing on to the block below it. (One common exception is blocks that play sounds: a block's job can be to start the sound, which means the block below it will execute while the sound is still playing.
## Part 3 - Reporters
At the bottom of **motion** palette are three blocks shaped differently from the others. The oval-shaped **x-position** and **y-position** are called _reporters_. (We don't need the third one right now.) Unlike the jigsaw-puzzle-piece-shaped command blocks we've used until now, reporters don't carry out an action (such as moving the sprite or displaying a speech balloon) by themselves. Instead they report a value, usually for use in another block's input slot.
 
These particular reporters tell you where the sprite is on the stage. As in algebra class, **x** means left-to-right position, and **y** means bottom-to-top position.
Drag your sprite to the far right side of the stage. Next, drag an x position block into the scripting area and click on it. You should see a little speech balloon next to the block:

1. What value does the **x position** block report to you when the sprite is?
...at the far right side of the stage:
...in the center of the stage:
...at the far left side of the stage:
Click on the gray box to the left of the **x-position** block in the palette, and then look over to the stage. You will see that the value that the block would report is displayed on the stage:


This on-stage display is called a _watcher_.
The **x-position** block and the **y-position** block will tell you the position of your sprite on the screen. Move the sprite around and the values reported by these blocks change.
 
## Part 4 - Experiment with drawing commands
Try to get comfortable with the blocks under the **motion** pallette and the **pen** pallette. Figure out what each one does and try to use these blocks to draw a square or a simple picture.
1. What do these blocks do? (write an explanation next to each block)?





2. Does the **turn** block change the sprite's x and/or y position?
3. Using these blocks, draw a square. Write the blocks you used below.
_Tips and Tricks:_
Once the pen is down, it stays down even in a different script. Use the **pen up** block to lift the pen so that no lines will be drawn.
You also will want to show the direction and x and y position of the sprite. In the **motion** pallette, you can select for these to be shown on the stage as described in the reporters activity you saw earlier in the lab.
## Part 5 - Follow that mouse

1. What do you think the script above will do?
Hint: **mouse x** and **mouse y** are reporters in the **sensing** palette; they tell you where the mouse is pointing.
 
Copy the script into Snap!, and click on the **forever** block to run it.
* Did it follow your expectations (Yes/No)?
2. What happens when you drag the mouse to a different part of the screen while the script is running?
3. How does script's behavior change when you modify the **go to** block as shown below?

## Part 6 - Forever and a day
From the previous exercise, you may have figured out what the `Forever` block does. The `forever` block is the first block you have seen that holds, or wraps around, other blocks. We call this a _C block_ because of its shape. As the name `forever` implies, it will run the blocks inside it again and again and again and ... well, forever. You will find this block under the **control** pallette.

Will a **forever** block ever stop?

Not unless you tell it to: Click on the stop sign icon on the upper right hand corner of the Snap! window.

This stop sign will stop all scripts that are running in any sprite. This is equivalent to executing the **stop all** in the **control** palette.

## Part 7 - Make a Kaleidoscope
Explore this drawing script for a little bit (). Press the spacebar to run the script, and move your mouse cursor over the stage of the Snap! window. While over the stage, use the **d** (pen down), **u** (pen up), and **c** (clear) keyboard keys to change what gets drawn on the screen. The script that causes the sprite to follow the pointer is

As you can see, this drawing script features more **Control** blocks, in addition to the **forever** block first introduced in the _Follow the Mouse activity_. These _hat_-shaped block, which can be used only at the beginning of a script, indicate when a specific script should be run.
## Part 8 - Kaleidoscope activity

The kaleidoscope consists of four sprites. Each sprite will be drawing with a different pen color. Each sprite's movement is based on the movement of the mouse. The first sprite follows the mouse, just like in the example we looked at before. The other three sprites move around as the mouse moves, but reflected over the X and Y axes.
Save your project as _lab1.1_.
Some tips:
* You will need four sprites. (We haven't used more than one sprite up to now, but having more than one allows for more interesting projects, as you'll see.) The easiest way to create three more is to _duplicate_ the one you have. Right-click the sprite in the sprite corral, and select **duplicate** from the _context menu_ that appears. Each duplicated sprite will have exactly the same scripts as the original, which is why we suggest duplication rather than just creating more sprites from scratch.
* You can change the color of each sprite by clicking the color input in that sprite's `set pen color` block (found under the **Pen** pallette), choosing a color, and then clicking on the block itself (to run the block and actually set the color). Don't worry about matching the colors in the animation exactly!

* Pay close attention to what each of the other sprites is doing in the animation above. You will need to modify the **x** and **y** inputs in each sprite's `go to x-y` block using simple formulas, with `addition`and `subtraction`.



>Hint: All the sprites are reflecting in different ways around the (x=0, y=0) origin point of the stage.**
* Once you figured this out, try out some complicated formulas and/or more sprites, and share with your classmates
## Grading rubric
| **Day 1 criteria** | Points |
| :--------------- | -------------- |
| 1.1 What does it do? | 2 |
| 1.2 Categories | 4 |
| 2.1 Move in opposite direction | 1 |
| 2.2 What happens | 2 |
| 3.1 x positions | 3 |
| 5.1 What it does | 3 |
| 5.2 Does turn block change x or y position | 1 |
| 5.3 Draw a square | 4 |
| 6.1 What does it do | 2 |
| 6.2 Dragging the mouse | 1 |
| 6.3 script behavior w/modification | 1 |
| **Total** | **24** |
| **Day 2 mini-project** | |
| 8 Make a kaleidoscope | 8 |
| **Total** | **6** |
| **Project total** | **30** |
================================================
FILE: docs/lab_12.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Scavenger hunt
In this lab, you will explore the functionality of some common blocks and where they are in the palette.
## Part 1: Locating common blocks
1. Fill in the name of the category to which each block belongs in the chart below. The first one is already filled in for example.
| Block | Category |
| ------------------------------------------- | -------- |
|  | _motion_ |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
## Part 2: What does it do
1. Describe the function of each block in the chart below. If the block accepts arguments (contains values that you can change), be sure to test out a few different ones to make sure you fully understand what those values mean. The first one is already filled in for example.
| Block | Function |
| --- | --- |
|  | _Changes the direction that the sprite is facing. The argument indicates the number of degrees the sprite turns clockwise from pointing upwards. When the argument is "90", the sprite points right, and so on._ |
|  | |
|  | |
| | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
2. At this point, you may be noticing some patterns. Use what you've learned from exploring these blocks. What do the blocks in the indicated pallette do?
| Pallette | Function |
| --- | --- |
|Motion| |
|Looks| |
|Sound| |
|Pen | |
## Part 3: Put it all together
You are now going to use some of the blocks you've explored to create, save, and submit your program.
1. Create a script that plays 4 different notes with at least 2 rests in between.
2. Use the **repeat** block to play the song you create in number 1 in a loop.
3. Create a script that initializes the sprite at position (-20, 10). Then, have the sprite draw a shape that has at least 2 different colors and 2 different line thicknesses. _An example would be a square that has 2 thin red sides, and 2 thick blue sides._
4. Save your project as _Lab1.2_.
## Grading rubric
| **Criteria** | Points |
| :------------------------------------------------------------- | :-------------- |
| 1.1 Locating common blocks | 0.4 |
| 2.1 What does it do? | 0.4 |
| 2.2 Pallette | 0.4 |
| 3.1 Four different notes, 2 rests in between | 0.4 |
| 3.2 repeat block plays song | 0.4 |
| 3.3 multi-color, multi-line thickness shape at (-20,10) | 0.5 |
| **Total** | **2.5** |
================================================
FILE: docs/lab_13.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Triangles, squares and stars
In this lab, you will write your first program to draw some simple shapes on the stage.
## Part 1: Drawing a triangle
1. Modify your program from the do now activity to draw a triangle when the number 1 is pressed on the keyboard.

2. Modify your script so that the sprite says the word "triangle" while it draws. The sprite should stop saying "triangle" once it has finished drawing.
3. Modify your script so that pressing the space bar clears the pen marks from the stage.
## Part 2: Adding more shapes
1. Now that you've drawn a triangle, add scripting to draw the shapes in the following table. Each shape should be drawn when the number next to it is pressed on the keyboard. (For example, pressing 3 on the keyboard should draw a diamond.)
| When this key is pressed... | Draw a ... |
| --------------------------- | ----------------------------------- |
| 1 | Equilateral triangle |
| 2 | Square |
| 3 | Diamond |
| 4 | Pentagon |
| 5 | Parallelogram ("leaning rectangle") |
| 6 (optional) | 5-pointed star |
You may want to draw a diagram like the one above of a triangle to figure out the angles in each shape.
2. Modify your script so the sprite is saying the name of shape. The sprite should stop saying the name of the shape when it is finished drawing.
3. Modify your script so that each different shape is drawn in a _different_ color and with a _different line thickness_. For example, if the square is drawn in blue with a line thickness of 3, each other shape must be drawn in a color that is not blue and with a line thickness that is not 3.
4. Modify your script so the sprite is hidden when it is not drawing. This will ensure the sprite is not obstructing the view of your beautiful artwork!
5. Save your project as _Lab1.3_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- |:-------------- |
| Equilateral Triangle | 0.25 |
| Square | 0.25 |
| Diamond | 0.5|
| Pentagon | 0.5 |
| Parallelogram | 0.5 |
| Star (bonus!) | 0.5 |
| **Total** | **2.0** |
================================================
FILE: docs/lab_14.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Sprites in action
In this lab, you will use costumes and movement to create simple animations.
## Part 1: Run, Spot, run
1. In a new project, click on the file menu, then click costumes. Import the costumes `dog2a` and `dog2b`.

`dog2a`

`dog2b`
2. Write a script to make the sprite change costume each time the space bar is pressed. (The sprite should switch back and forth between the two costumes.)
3. Add to your script so that when the left arrow is pressed the sprite
* Face to the left.
* Move a few steps.
* Change costume when the `left arrow` key is pressed.
_In your window, the dog should look like it is walking when you press the left arrow key repeatedly._
4. Enhance your script to look as though the dog can walk to the right when you click the `right arrow` key.
## Part 2: Dragons
1. Create a new sprite. Following the same steps as in part 1, import the costumes `dragon1-a` and `dragon1-b`.

`dragon1-a`

`dragon1-b`
2. Write a script to make the sprite appear to breathe fire when the `f` key is pressed. The sprite should switch to the `dragon1-b` costume for a few seconds, then switch back to the `dragon1-a` costume.
3. Modify your script so that the dragon `attacks` the mouse pointer when the `f` key is pressed. When the `f` key is pressed, the dragon should take the following actions in order:
1. Make sure it is in the `dragon1-a` costume.
2. Point at the mouse pointer.
3. Glide to the mouse pointer's position.
4. Change to the `dragon1-b` costume
5. Pause to breathe fire.
6. Change back to the `dragon1-a` costume.
## Part 3: Run away
1. Add another sprite to your program. (This sprite can have any costume you choose).
2. Write a script to make this new sprite point away from the dragon and move when the `r` key is pressed.
3. Using the **broadcast** and **when I receive** blocks, modify your program so that instead of moving when the `r` key is pressed, the new sprite moves when the dragon attacks. The fleeing sprite should move when the dragon starts breathing fire.
4. Add a second sprite that runs away from the dragon as well.
5. Save your project as _Lab1.4_.
## Part 4: Setting the stage
1. Select the stage icon.
2. Select file icon then import
3. Now select a picture from your computer to make the background of your project.
4. Download [this image](stage_example.jpg) if you do not have one to use.
## Grading rubric
| **Criteria** | Points |
| :------------------ | :--- |
| 2.2 Dragon breathes fire | 0.25 |
| 2.3 Dragon attacks mouse pointer correctly | 0.75 |
| 3.2 A sprite runs away from dragon | 0.25 |
| 3.3 Sprite runs away when dragon breathes fire | 0.25 |
| 3.3 Use of the `broadcast` and `when I receive` blocks | 0.25 |
| 3.4 Another sprite runs away too | 0.25 |
| 4.0 Setting the stage | .50 |
| **Total** | **2.5** |
================================================
FILE: docs/lab_21.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Squares and triangles redux
In this lab, you will rewrite your programs from Lab 1.3 to draw shapes using loops.
## Part 1: Back in time
1. Open your solution to the original "Squares, triangles and stars" activity.
2. Save your project as _Lab2.1_.

## Part 2: Simplifying your program
1. Look at your script to draw a square. It is probably quite long and has lots of repeated blocks. Using what you have learned about loops, rewrite this script to be shorter and have less redundancy. Make sure that your script still works as originally intended.
2. Now modify your other shape scripts to also use loops. In all cases, try to have as few blocks and as little redundancy as possible while still keeping your script easy to read and understand.
## Part 3: Adding more shapes
1. Modify your script to draw the extra shapes below. Follow all the original guidelines (different color and line thickness for each shape, say the name while drawing) and use loops to keep your scripts as short as possible.
| _When this key is pressed..._ | _Draw a..._ |
| ----------------------------- | -------------------------- |
| 7 | Decagon (10-sided polygon) |
| 8 | Circle |
You may not be able to draw a true circle, but you should get as close as you can.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :-------------- |
| Part 2 | |
| 2.2 Square using loop | 0.5 |
| Part 3 | |
| Decagon | 0.5 |
| Circle | 0.5 |
| Minimum redundancy in all | 0.5 |
| **Total** | **2.0** |
================================================
FILE: docs/lab_22.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Yellow brick road
In this lab, you will use nested loops to draw a yellow brick road using as little scripting as possible.
## Part 1: Brick by brick
1. Write a program to draw a single 20x10 "brick" in the lower left corner of the stage when the green flag is clicked.
2. Modify your program to draw two bricks side by side. The bricks should share a short edge, like this:

3. Now modify your program again to build a full row of bricks across the entire length of the stage. Use a loop to keep your script as concise as possible. Remember that the stage is 480 pixels wide.
## Part 2: Build a road
1. Build a row of bricks, add scripting to build a second row above the first row. The bricks in the second row should share a long edge with those in the first row, but should be "offset" so that the ends of the second row bricks are at the middle of the first row bricks, like this:

2. Modify your program to build four total rows, alternating back and forth between the "regular" and "offset" rows. Use nested loops to keep your script concise.
3. Finish off the road by building alternating rows all the way to the top of the stage. Your final road should look like this:

4. Save your project as _Lab2.2_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :-------------- |
| 1.2 2 bricks bottom left | 0.5 |
| 1.3 row on bottom | 0.5 |
| 2.1 second row offset | 0.5 |
| 3.3 complete road | 0.5 |
| Uses at least one loop | 0.5 |
| Minimum redundancy in all | 0.5 |
| **Total** | **3.0** |
================================================
FILE: docs/lab_23.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lab 2.3 - What shape is that
In this lab, you will use user input and conditional statements to identify shapes based on the number of sides and some other properties as given by the user.
## Part 1: Triangle...or no triangle
1. Write a program that asks the user to think of a shape and input how many sides it has. Then, if the user is thinking of a triangle, tell him or her so. Regardless of whether or not the shape was a triangle, thank the user for playing.
2. Modify your program to give an appropriate message both when the user _is_ thinking of a triangle and when he or she _is not_ thinking of a triangle. Give the same thank you message afterward in either case.
## Part 2: Name the polygon
You will now expand your program from above so that instead of just deciding if a shape is a triangle or not, your script will be able to name the specific polygon. Your script must be able to identify at least the following shapes:
| **Number of sides** | **Polygon name** |
| :----------------- | :-------------- |
| 3 | Triangle |
| 4 | Quadrilateral |
| 5 | Pentagon |
| 6 | Hexagon |
| any other number | Unknown |
1. Fill out a [planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/docs/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx) for the above script. Make sure you consider all aspects of the program carefully.
2. Write the program. Be sure that your program works correctly in all cases.
## Part 3: Quadrilateral fever
Quadrilaterals come in many different varieties. Add scripting to your script so that, if the user is thinking of is a quadrilateral, you ask more questions to find out which type of quadrilateral it is. Your script should give the most specific name that applies. The following table describes the quadrilaterals you should know about from most to least specific:
| **Property** | **Quadrilateral name** |
| :------------- | :--------------------- |
| All four sides have the same length and all four angles have the same measure. | Square |
| Not a square and all four angles have the same measure. | Rectangle |
| Not a rectangle and each side is parallel to one other side.| Parallelogram |
| Not a parallelogram and two sides are parallel to each other.| Trapezoid |
| Not a trapezoid | Unknown quadrilateral |

1. Fill out a [planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20script%20Design%20and%20Planning%20Worksheet.docx) for the above script. Make sure you consider all aspects of the program carefully.
2. Write the program. Be sure that your program works correctly in all cases.
3. Save your project as _Lab2.3_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :-------------- |
| 1 Identifies triangle | 0.5 |
| 2 Identifies polygons | 1.0 |
| 3 Identifies quadrilaterals | 0.5 |
| **Totals** | **2.0** |
================================================
FILE: docs/lab_24.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Guessing game
In this lab, you will use conditional statements and variables to build a simple number guessing game.
## Part 1: I'm thinking of a number
Write a program to choose a random number between 1 and 10 and then ask the user to guess a number. If the user's guess matches the random number, the user wins. If not, the user loses. In either case, the user should be shown a message indicating whether they won, lost and the secret random number should be revealed.
1. Fill out a [planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx) for the above script.
2. Write the simple version of the guessing game program described above.
3. Modify the script to keep asking the user for guesses until the correct number is given. Be sure to give a message after each guess, but only reveal the secret number when the user has guessed correctly and the game is over.
4. Modify the script to ask the player their name at the start of the game. Then, personalize the message for an incorrect guess by adding the player's name. For example, if Sarah is playing the game, then the message should say "Sorry, Sarah, that guess is not correct" instead of just "Sorry" when Sarah guesses incorrectly.
## Part 2: Game upgrades
1. Modify your guessing game so that the player can decide the range of possible numbers from which the secret number can be chosen. After asking the player's name, ask what they want the highest possible number to be. Then, instead of choosing a random number between 1 and 10, choose a random number between 1 and the number the player requested.
2. Modify the script to keep track of how many guesses the player has made. After the player guesses correctly, inform them how many tries it took before the correct number was guessed.
3. Increase the player's chances by telling them whether the guessed number is too high or too low instead of just that it is incorrect.
4. Save your project as _Lab2.4_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :----------- |
| 1.1 Planning worksheet | 0.2 |
| 1.2 Simple version | 0.2 |
| 1.3 Repeat till correct guess | 0.2 |
| 1.4 User name | 0.2 |
| 2.1 Range of numbers | 0.3 |
| 2.2 Number of guesses | 0.3 |
| 2.3 High or low | 0.3 |
| **Total** | **1.7** |
================================================
FILE: docs/lab_25.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Triangles of all kinds
In this lab, you will use Boolean operators to determine what sort of triangle a user is describing when entering answers to prompts.
## Part 1: Is that even possible
1. Write a program that asks the user for the lengths of all three sides of a triangle (_a_, _b_, _c_). Store each length in a variable. Then use the `say` block to display the perimeter of the triangle with those three side lengths.
2. **Real Triangle Check:** Modify your script to check the three side lengths can form a Real triangle. Remember that, in any Real triangle, the sum of the lengths of any two sides is greater than the length of the third side. So, if the triangle has side lengths _a_, _b_, and _c_, then all of the following must be true:
`a + b > c`
`a + c > b`
`b + c > a`
If the sides given cannot make a real triangle, **say** "this is not a Real triangle", instead of displaying the perimeter.
## Part 2: What kind of triangle
1. Modify your script to determine and **say** whether or not the triangle described is a right triangle. If the triangle has side lengths _a_, _b_, and _c_, then the triangle is a right triangle if the following is true:
`a * a + b * b = c * c`
2. Modify your script to determine which type of triangle has the side lengths given. A triangle can be one of the following three types:
| Triangle type | Description |
| ------------- | ------------------------------------- |
| Equilateral | All three side lengths equal. |
| Isosceles | Two side lengths equal, one different. |
| Scalene | All three side lengths different. |
3. Save your project as _Lab2.5_.
## Grading rubric
| **Criteria** | Points |
| :--------------------------------------- | :-------------- |
| Part 1 | |
| 1.2 Computes perimeter or says invalid | 1.0 |
| Part 2 | |
| 2.1 Identifies right | 0.25 |
| Identifies equilateral | 0.25 |
| Identifies isosceles | 0.25 |
| Identifies scalene | 0.25 |
| **PROJECT TOTAL** | **2.0** |
================================================
FILE: docs/lab_31.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Drawing shapes (again)
In this lab, you will write a program to draw regular polygons. But this time, you will incorporate custom blocks using abstraction to write a more efficient program.
## Part 1: Simple shapes
1. Write a script (or find one you've already written) to draw a square.
2. Write a script (or find one you've already written) to draw an equilateral triangle.
3. Write a script (or find one you've already written) to draw a regular pentagon.
4. Write a script (or find one you've already written) to draw a regular octagon.
5. Look over the four scripts from above. Do you notice sections that are very similar? What sections might be able to be abstracted into a separate block?
## Part 2: If you've seen one
1. Take your script from above that draws a square and turn it into a custom block.
2. Modify your custom block to use a variable for the number of sides instead of the number 4. Set that variable's value to be 4 so that you still draw a square.
3. Now, see if you can modify your block so that it will work correctly for any number of sides greater than 2. Look closely at the angles in your four scripts section 1 and see if you can spot a pattern.
4. Use your custom block in a script that asks the user for a number and then draws a regular polygon with that many sides. If the number given is less than 3, give an error message and do not draw anything.
5. Save your project as _Lab3.1_.
## Bonus: Sizing things up
Modify your custom block and script from the previous section so that the user can specify both the number of sides and the length of each side. Be sure to utilize generalization and detail removal to make your script and block as concise as possible.
## Grading rubric
| **Criteria** | Points |
| :------------------------------------------------- | :-------------- |
| 2.1 Custom block draws square | 0.25 |
| 2.2 Use variable for number of sides | 0.5 |
| 2.3 Works for all sides > 2 | 0.5 |
| 2.4a script asks for sides, calls block | 0.5 |
| 2.4b script handles input <= 2 | 0.5 |
| Bonus: script and block handle size of sides | 0.5 |
| script clear and concise | 0.25 |
| **Totals** | **2.5** |
================================================
FILE: docs/lab_32.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lab 3.2 - What Goes Up
In this lab, you will use everything you've learned about loops and conditionals to construct a simple model for gravity.
## Part 1: Before You Start
Go to the starter project at [https://aka.ms/Intro-lab3-2](https://aka.ms/Intro-lab3-2). Log into Snap! and save your own copy of the project by choosing **Save as** button from the file menu. Be sure to click the **Share** button in the Save dialog box. Highlight the URL in the address bar and copy it.
## Part 2: Channeling Newton
Write a script for the Dino sprite so that:
1. Use one **when green flag is clicked** block to place Dino at the top of the stage. No animation, just use **set y to** block.
2. Use two more **when green flag is clicked**, to start two **forever** loops that make Dino fall to the bottom of the stage. One will model gravity by subtracting a constant amount from Dino's speed. The second will move Dino by his current speed.
3. When Dino touches the ground, Dino stops falling. "*Stops falling*" means Dino's speed is set to zero and stays zero as long as he is touching the ground. The **touching color ?** block can be used to detect the grass in the background layer.
When using the **touching color** block, change the color by clicking on the color box, then select anything in the color palette or stage that has the desired color.
## Part 3: What Goes Up, Must Come Down
1. Modify your code so that when the **green flag** is clicked, Dino will still move to the top of the stage but also move to a random x-coordinate between -240 and 240. Use the **pick random to** block in the **operators** category.
2. Modify your code so that the Dino sprite stops falling when it touches the ground **or** if it is touching the Platform.
## Part 4: Jump Up
1. Modify your code so that when the **spacebar** is pressed, Dino will jump up. From a physics point of view, when you jump you set your speed to something greater than zero.
## Part 5: Challenge
1. Modify your code so Dino can only jump while on the ground or the platform.
2. Add code so Dino will move left and right with the arrow keys.
## Grading Rubric
| **Lab 3.2 Criteria** | Points |
| --- | --- |
| 2.1 Goes to the top of the stage | 0.3 |
| 2.2 Falls to the bottom of the stage | 0.3 |
| 2.3 Stops falling when touching the ground | 0.3 |
| 3.1 To a random x-coordinate | 0.2 |
| 3.2 Touching the ground OR touching the platform | 0.3 |
| 4.1 Jump up | 0.3 |
| 5.1 Jump Up: Ground or Platform | 0.5 |
| 5.2 Movement using left and right arrow | 0.2 |
| **PROJECT TOTAL** | **2.5** |
Lab updates done by Don Wells, Volunteer, Michigan.
================================================
FILE: docs/lab_33.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lab 3.3 - Let me check my calendar
In this lab, you will write custom blocks that take parameters and are useful for calculations involving dates and calendars.
## Part 1: Basics
1. Write a custom block called **month name** that takes a number between 1 and 12 as an parameter and says the name of the corresponding month.
2. Write a custom block called **day name** that takes a number between 1 and 7 as an parameter and says the name of the corresponding day. For our purposes, the week begins on Sunday.
3. Write a custom block called **days in** that takes a month name as an parameter and says how many days are in that month. Assume a non-leap year.
## Part 2: Going Farther
1. Write a custom block called **is a leap year** that takes a year number as an parameter and says whether or not that year is a leap year.
- A year is a leap year if the year is a multiple of 4 that is not a multiple of 100 (e.g. 1984), or if it is a multiple of 400 (e.g. 2000). Years that are multiples of 100 but not multiples of 400 are NOT leap years (e.g. 1800). See [Wikipedia](https://en.wikipedia.org/wiki/Leap_year#Algorithm) for more detail.
2. Write a custom block called **is a valid date** that takes a month name and a date as parameters and says whether or not that date exists in that month. For example, the 31st is a valid date in January, but not in June. The 5th is a valid date in every month, and the 40th is not a valid date in any month.
3. Write a custom block called **day in year** that takes a year number and a number between 1 and 366 and says the date that corresponds to that numbered day of the specified year. For example, in non-leap years day #1 is January 1, day #32 is February 1, day #365 is December 31, and day #185 is July 4. Give an error message if the number is 366 and a non-leap year is specified.
Bonus: Determine the day you were born. Write a custom block called **day of week** that takes a month name, date, and year as parameters and says the day of week on which that date falls in that year. See [Wikipedia](https://artofmemory.com/blog/how-to-calculate-the-day-of-the-week/) for information on finding the day of the week from a date.
4. Save your project as _Lab3.3_.
## Grading rubric
| **Criteria** | Points |
| :------------------------------- | :-------------- |
| 1.1 month name | 0.5 |
| 1.2 day name | 0.5 |
| 1.3 days in | 0.5 |
| 2.1 is leap year | 0.5 |
| 2.2 is a valid date | 0.5 |
| 2.3 day in year | 0.5 |
| Bonus: day in week | 0.5 |
| **Total** | **3.0** |
================================================
FILE: docs/lab_34.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# If my calculations are correct
In this lab, you will write custom **reporter** and **predicate** blocks to perform several useful calculations and computations.
## Simple Computations
1. Write a custom **reporter** block called **min** that determines which of two numbers is smaller and reports that value. If the two numbers are equal, report either one.
2. Write a custom **reporter** block called **max** that determines which of two numbers is larger and reports that value. If the two numbers are equal, report either one.
3. Write a custom **predicate** block called **between** that determines if a number is between two other numbers. If the first number is equal to either of the other two numbers or is between them, the block should report "true".
4. Write a custom **predicate** called **at least as long as** that determines whether a word has at least a specified number of letters.
5. Save your project as _Lab3.4_.
## Bonus: Stepping Things Up
Write a custom **reporter** block called **distance to** that computes and reports the distance from a sprite's position to another point. Use the **x position** and **y position** blocks to determine the sprite's position. Remember that the formula for the distance between points `(x1, y1)` and `(x2, y2)` is `sqrt((y2-y1)^2+(x2-x1)^2)`.
## Grading rubric
| **Criteria** | Points |
| :------------------------------- | :-------------- |
| 1.1 min | 0.5 |
| 1.2 max | 0.5 |
| 1.3 between | 0.5 |
| 1.4 at least as long as | 0.5 |
| Bonus | 0.5 |
| **Total** | **2.0** |
================================================
FILE: docs/lab_42.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Sentence generator
In this lab, you will create a simple sentence generator using lists.
## Part 1: Let's talk
1. Create a variable for each part of speech below, and set each variable to hold a list of words that fit that part of speech. Some examples are given, but feel free to use your own.
| Part of Speech | Example words |
| -------------- | ------------------------------------------------ |
| noun | giraffe, monkey, boy, girl, elephant, ... |
| verb | jumps, runs, sleeps, sits, dances, ... |
| adjective | big, small, loud, silly, young, old, sleepy, ... |
| adverb | quickly, excitedly, angrily, happily, sadly, ... |
| article | a, the |
| preposition | under, over, around, near, beside, ... |
## Part 2: Reporting Phrases
1. Write a custom reporter block called “noun phrase” that reports a noun phrase where each word is chosen randomly from the lists you created.
```A noun phrase consists of an article, an adjective, and a noun in that order.```
2. Write custom reporter blocks like “noun phrase” for each of the phrase types listed below.
| Phrase type | Construction |
|--|--|
|prepositional phrase | preposition, noun phrase|
|verb phrase|adverb, prpositional phrase|
|sentence|noun, phrase, verb phrase|
## Part 3: Making sentences
1. Modify your script so that when you press the space bar, a random sentence is generated and a sprite says the resulting sentence.
Bonus: Modify your script so that a noun phrase can either be the construction from part 1 or a single proper noun (e.g. a person's name). Your script should randomly decide which version of a noun phrase to use.
_A noun phrase consists of an article, an adjective, and a noun in that order._
Bonus: Modify your script so that a verb phrase can sometimes leave out the prepositional phrase. Your script should randomly decide to include the prepositional phrase or not.
## Part 4: Changing our vocabulary
1. Write a script so that when the `n` key is pressed, the user is prompted for a new noun and that noun is added to list of nouns. After that point, the new noun entered by the user should be able to appear in sentences.
2. Write scripts to add words to the other lists. Use the keys listed below.
| Key | Part of speech |
| --- | -------------- |
| v | verb |
| j | adjective |
| d | adverb |
| a | article |
| p | preposition |
3. Write a script so that when the `x` key is pressed, the user is asked for one of the parts of speech and then for a number (n).
* Your script should remove the nth item from the list of words for the specified part of speech.
* For example, if the user types in "verb" and "3" then you should remove the 3rd word from the list of verbs.
* The removed word should no longer appear in sentences.
4. Save your project as _Lab4.2_.
## Grading rubric
| **Criteria** | **Points** |
| :------ | :-- |
| 1.1 6 lists | 0.5 |
| 2.2 reporter blocks | .75 |
| 3.1 sentence script | 0.5 |
| Bonus: add proper nouns | 0.25 |
| Bonus: Make prepositional phrase for verb phrases | 0.25 |
| 4.1 add nouns | 0.25 |
| 4.2 add other 5 parts of speech | 0.25 |
| 4.3 remove one word from a part of speech | 0.5 |
| **Total** | **3.25** |
================================================
FILE: docs/lab_43.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lab 4.3 - Guess Who
In this lab, you will create a list of names and then look through the list pulling out a subset of names.
## Part 1: Role call
1. Create a list of six different names (e.g. the names of your favorite music artists, family members, authors, celebrities, etc.).
2. Write a program to welcome each person individually to the program one at a time. (For example, "Welcome, John.")
3. Write a new script that welcomes all the players at once. For example, your new script should say "Welcome John, Kayla, and Michael." First, by writing a script that can say all the names on one line. Then add the commas and the word "and". Make sure your script works correctly no matter how many names are in the list.
## Part 2: I'm looking for
1. Write a script that says every other name in a list one at a time when the space bar is pressed. Use the same list of names from above. For example, if the list is [Eric, Sally, Michelle, John, Sam, Caleb], the names Eric, Michelle, and Sam would be said.
2. Write a script that says the names in the list one at a time in reverse order when the `0` key is pressed. For example, if the list is [Eric, Sally, Michelle, John, Sam, Caleb], the names Caleb, Sam, John, Michelle, Sally, and Eric would be said.
3. Write scripts so that when each of the following keys is pressed, the corresponding subset of names from the list is said one at a time.
| When this key is pressed... | Say the names in the list that... | For example... |
| --------------------------- | ----------- | --------------------- |
| 1 | Have more than four letters | Sally, Michelle |
| 2 | Start with the letter 'c' | Caleb |
| 3 | End with the letter 'y' | Sally |
| 4 | Are not the first two or last two names in the list | Michelle, John |
| 5 (Bonus) | Contain the letter 'e' | Eric, Michelle, Caleb |
4. Save your project as _Lab4.3_.
## Grading rubric
| **Criteria** | **Points** |
| ------------------------------------------------------ | -------------- |
| 1.2 Welcome by name | 0.25 |
| 1.3 Welcome all at once | 0.25 |
| 2.1 Every other name | 0.25 |
| 2.2 Reverse order | 0.5 |
| 2.3 4 letters | 0.25 |
| 2.3 start with C | 0.5 |
| 2.3 End with y | 0.5 |
| 2.3 Not first 2 or last 2 | 0.5 |
| Bonus: Contain e or E | 0.25 |
| **Total** | **3.0** |
================================================
FILE: docs/lab_44.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Number cruncher
In this lab, you will continue practicing processing lists, this time using lists of numbers instead of words.
## Part 1: Numbers
Write 5 custom **reporter** blocks that takes a list as an argument. You can assume that all items in the list will be numbers.
1. Sum of all the numbers in the list.
2. average of all the numbers in the list.
3. True if the list contains one negative number and false if all the numbers are non-negative.
4. True if each value in the list is greater than or equal to the one before it.
5. The largest number in the list.
## Part 2: Transforming lists
1. Write a custom **reporter** block called **make all positive** that takes a list of numbers as an argument and reports a new list that is the same as the argument, except all negative numbers have been replaced by their absolute value.
2. Write a custom **reporter** block called **only evens** that takes a list of numbers as an argument and reports a new list that contains only the even numbers from the list. The result list should have its values in the same order as the original list, but with the odd integers removed. (Remember that **mod** block can be useful in determining whether or not a number is even.)
3. Save your project as _Lab4.4_.
Bonus: Write a custom **reporter** block called **add all** that takes two list of numbers as arguments and returns a new list that contains the sum of the corresponding values in each argument list. For example, if the arguments to **add all** are (1, 4, 6) and (2, 2, 3), the result should be (3, 6, 9). You can assume the two lists will be the same size.
## Grading rubric
| **Criteria** | Points |
| :------------------------------ | :--------------- |
| 1.1 sum **reporter** block | 0.25 |
| 1.2 average **reporter** block | 0.25 |
| 1.3 includes negative **predicate** block | 0.25 |
| 1.4 increasing? **predicate** block | 0.25 |
| 1.5 maximum **reporter** block | 0.25 |
| 2.1 make all positive **reporter** block | 0.5 |
| 2.2 only evens **reporter** block | 0.25 |
| Bonus: add all **reporter** block | 0.25 |
| **Total** | **2.0** |
================================================
FILE: docs/lab_45.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# It's around here somewhere
In this lab, you will implement several custom blocks performing variants of sequential search.
## Part 1: You there
1. Write your own version of the **contains** block, which takes a list and a value as arguments. Then reports true if the value is in the list and reports false otherwise. You should not use the existing **contains** block in your implementation.
## Part 2: Where
1. Write a custom block called **index of** that takes a list and a value as arguments and reports the index of the value found in the list. If the value is not in the list, report -1.
## Part 3: Tell Me More
1. Write a custom block called **first e-word** that takes a list as an argument and reports the first word in the list that starts with the letter 'e'. If no such word exists, report a blank (nothing).
2. Save your project as _Lab4.5_.
Bonus: Write a custom block called **first word that starts with** that takes a list and a letter as arguments, and reports the first word in the list that starts with the given letter. If no such word exists, report a blank (nothing).
## Grading rubric
| **Criteria** | Points |
| :------------------------------------- | :-------------- |
| 1.1 contains block | 0.5 |
| 2.1 index of block | 0.5 |
| 3.1 first e-word block | 1.0 |
| Bonus: first word that starts with block | 0.5 |
| **Total** | **2.0** |
================================================
FILE: docs/lab_51.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Connect the dots
In this lab, you will follow sets of instructions to investigate how clones work.
## Part 1: All together now
1. Each of the six students in your group should follow these instructions. Each student should then follow their instructions, completing each corresponding step together. (For example, everybody should complete Part 2 at the same time. Everyone should work on the same grid.)
1. Put your pen on the first dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.

### Reflection
1. What was the result of the group following the instructions?
2. Were there any difficulties you encountered?
3. Does it seem like the result was intended?
## Part 2: To each his own
1. Give each member of the group one of the sets of instructions below. Each student should then follow his or her instructions, completing each corresponding step together. (For example, everybody should complete their step ii. at the same time.) Everyone should work on the same grid.
### Person #1
1. Put your pen on the first dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #2
1. Put your pen on the third dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #3
1. Put your pen on the fifth dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #4
1. Put your pen on the seventh dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #5
1. Put your pen on the ninth dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #6
1. Put your pen on the eleventh dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.

## Part 3 - Reflection
1. What was the result of following the instructions?
2. Does this seem like the most efficient way to achieve this goal?
3. What would happen if the shape needed to be changed?
4. What problems could that cause?
5. What might be a better or more efficient way to accomplish the goal of these instructions?
## Part 4 - The same but different
Assign each member of your group a different number from 1 to 6. Each of the six students in your group should then follow these instructions. Each student should then follow their instructions, completing each corresponding step together. (For example, everybody should complete their step ii. at the same time.) Everyone should work on the same grid.
1. If you are person #1, put your pen on the first dot in the bottom row of the grid below.
2. If you are person #2, put your pen on the third dot in the bottom row of the grid below.
3. If you are person #3, put your pen on the fifth dot in the bottom row of the grid below.
4. If you are person #4, put your pen on the seventh dot in the bottom row of the grid below.
5. If you are person #5, put your pen on the ninth dot in the bottom row of the grid below.
6. If you are person #6, put your pen on the eleventh dot in the bottom row of the grid below.
7. Draw a line to the dot to the right.
8. Draw a line to the dot to the left.
9. Draw a line to the dot above.
10. Draw a line to the dot above.
11. Draw a line to the dot to the right.
12. Lift your pen.

## Part 5 - Results
1. Was the result of these instructions any different than in part 2?
2. Do you think this process was more or less effective than the process from part 2? Why?
## Grading rubric
| **Criteria** |Points |
| :----- | :-- |
| Part 1 participation and reflection completed | 0.5 |
| Part 2 participation | 0.5 |
| Part 3 reflection questions answered | 0.5 |
| Part 4 participation | 0.5 |
| Part 5 questions answered | 0.5 |
| **Total** | **2.5** |
================================================
FILE: docs/lab_52.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lots of balls
In this lab, you will use cloning to create many identical sprites without having to rescript each one individually.
## Part 1 - Follow the bouncing sprites
1. Create a script that contains a single sprite, choose from available costumes (i.e. basketballs, hearts, stars, balloons, Alonzo, doves). When `the green flag` is clicked, the sprite should go to the center of the stage, pick a random direction, and start moving in the chosen direction. If the sprite hits a wall, it should bounce off and keep moving.
2. Modify the script to be controlled by the stage rather than by the sprite itself. When the spacebar is pressed, the stage should broadcast a message that triggers the sprite's movement. Pressing the spacebar again should restart the sprite's movement, including a new speed and new direction.
3. What would you need to do to add a second bouncing sprite (that behaved in the same way) to the script? What about 10 sprites? 100 sprites? What would happen if you wanted to change the speed of all the bouncing sprites in the script after you had created 100?
## Part 2 - Clones
1. Modify your script so that, instead of a single sprite restarting each time the spacebar is pressed, a new clone of that sprite is created. You'll want to use the **Create a Clone of** and **When I starts as a clone** blocks in place of **Broadcast block** and **When I Receive** block.



.
2. What happens to the original ("master") sprite each time the spacebar is pressed? Does that seem useful? What role should the original sprite play now that we're cloning?
3. Modify the script so that the original ("master") sprite hides at the beginning of the script and each new sprite appears when it is created.
4. Save your project as _Lab5.2_.
Bonus: Assign each clone a different value for some properties, such as speed, color, or size. Try controlling these values from the master sprite rather than having each clone choose its own.
## Grading rubric
| **Criteria** | Points |
| -------------------------------------------------- | -------------- |
| 1.1 One bouncing sprite | 0.5 points |
| 1.2 Sprite controlled by stage | 0.5 points |
| 2.1 Clones created by stage | 0.5 points |
| 2.3 Hide master sprite | 0.5 points |
| Bonus: Sprites have different properties | 0.5 points |
| **PROJECT TOTAL** | **2.0 points** |
================================================
FILE: docs/lab_53.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Fewer balls
In this lab, you will build on what you created in lab 5.2 to enable better management of the number of sprites in the script.
## Part 1 - Getting out of hand
1. Open up your program from [Lab 5.2](lab_52.md.html). Modify your program so that, when the `d` key is pressed, all bouncing sprites are deleted. You should be able to create new bouncing sprites . You should be able to create new bouncing sprites after you have removed the old clones. Use the **delete this clone** block and a message.

2. What if you wanted to remove only a few clones? Or only specific clones? What would be needed in order to accomplish that?
## Part 2 - Better control
1. Add a **global** variable to your script called `g_nextID` and give it a value of 1 when the green flag is clicked.
2. In your master bouncing sprite, create a `sprite` variable called `s_ID`. Modify your script so that each time a new clone is created, the clone's `s_ID` variable gets the value currently in `g_nextID` and `g_nextID` is incremented by 1.
3. Change your script so that when the `d` key is pressed, the _newest_ bouncing sprite gets deleted. Think about the right way to use the variables you created in the previous steps to know which sprite to delete. (_Hint: in order for this to work right, you should reuse old IDs once the clones are deleted. So, for example, if the most recently created clone was number 6, and you hit `d`, clone number 6 should be deleted. Then, if a new clone is created, it should be a new clone number 6._) Try to do this without requiring a lot of special cases in your script-- every clone should operate in the same way to determine if it should be deleted.
4. Save your project as _Lab5.3_.
Bonus: Modify the script so that if the `x` key is pressed the script asks for an ID number and deletes that numbered clone. All clones with higher numbers should be renumbered so that ID numbers remain contiguous. (For instance, if clone number 5 is deleted, then clone numbers 6, 7, and 8 should be renumbered as clone numbers 5, 6, and 7 respectively. Then, the next clone created should be a new clone number 8.) This is tricky and will require you to think very carefully about how to use the variables.
## Grading rubric
| **Criteria** | Points |
| :-------------------------------------------------- | :-------------- |
| 1.2 Delete all clones | 0.5 |
| 2.1 Assign unique s_ID to each clone | 0.5 |
| 2.2 Delete newest clone | 0.5 |
| 2.3 Delete newest and add combined | 0.5 |
| Bonus: Delete specific clone | 0.5 |
| **PROJECT TOTAL** | **2.0** |
================================================
FILE: docs/lab_day_lesson.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Standard lab day lesson
## Learning objectives
Students will be able to...
* Describe difficulties they were having with the assignment on previous days.
* Explain the requirements of the project on which they are working.
* List questions they have about the current project.
## Materials and preparation
* Current project specification.
* Examples of necessary concepts or techniques.
* Prior to each lab day, have a sense of students' difficulties with the current project so you will know what to address in the review portion of the lesson.
* Observe student progress throughout lab time and note common issues or misconceptions.
* Be aware of students who are more behind than most of the class.
* The exit ticket (see below) will help with gathering this information.
## Pacing guide
| Duration | Description |
| ------------- | ------------------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review of trouble spots, concepts, misconceptions, etc. |
| 30-35 minutes | In-class lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review
Discuss and review areas in which a number of students are having trouble (or are expected to have trouble) with the current project..Using previous days exit tickets, questions from students, instructor awareness of trouble points in the project, and/or any other resources to determine what needs covering.
* Avoid lecturing or directly giving solutions; instead, present the problem and ask leading questions to help guide students to the solution.
* e.g. (from [Project 1](project_1.md.html): "It looks like a lot of us are having difficulty making all our sprites move at the same time that the words change. Is there something we learned about that can trigger scripts in a bunch of sprites all at once?"
If some students appear to be further along, utilize them to help explain the tricky concepts to their classmates. Use this time as an opportunity to remind students of upcoming checkpoints, recent labs or activities that may be applicable to the project, and/or how far along they should be by the end of the day.
### Lab time
Allow students to work on the current project at their own pace.
* Circulate and observe progress, stepping in if students appear stuck but are not asking for help.
* Be sure not spend more than a minute or two with any single student at a time.
### Exit ticket
Before students leave, have them answer the following questions on a small piece of paper:
1. What was the last thing you accomplished on the project today?
2. What is the first thing you will work on tomorrow?
3. Do you have any questions about the project you would like answered? If so, what are they?
4. Are there any topics or concepts that would help with the project that you would like reviewed? If so, what are they?
* These answers will help you plan your review time for the next lab day.
## Accommodations and differentiation
* Students who are consistently ahead and finish early can be encouraged to add extra features to their project for possible extra credit.
* Beware of students who claim to be ahead or finished but are actually trying to avoid work. When in doubt, ask a student to demonstrate their project.
* Students who are consistently behind should get extra attention during lab time. If they continue to be behind, try to find a before- or after-school opportunity to provide extra assistance.
* Students who are struggling significantly can be offered late turn-in, reduced requirements, or other "deals."
================================================
FILE: docs/lesson_01.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 0.1: The first day of school
## Learning objectives
Students will be able to...
* Identify the class they are taking.
* List the high-level goals of the course.
* Describe classroom procedures, rules, and norms.
## Materials and preparation
* [0.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.1.pptx)
* [Template syllabus](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/IntrotoCSSyllabusExample.docx)
* [Unit 0 tips](unit_0_tips.md.html)
## Pacing guide
| Duration | Description |
| -------- | ----------- |
| 5 minutes | Welcome, attendance |
| 10 minutes | Course staff introductions |
| 10 minutes | Icebreakers |
| 10 minutes | Course Syllabus |
| 15 minutes | Course norms, procedures, and administrative tasks |
## Instructor's notes
Suggested topics to cover:
* Names and backgrounds of TEALS teaching team members.
* Brief background on TEALS program (i.e. "Why are there so many adults here?").
* Go over the Classroom Syllabus with students.
* Classroom rules, behavior expectations, grading guidelines, late work policies, etc.
* Academic Integrity/Cheating policy.
* Introductions/Icebreakers with students.
* High-level learning objectives for course.
================================================
FILE: docs/lesson_02.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 0.2: Algorithms
## Learning objectives
Students will be able to...
* Define **algorithm**.
* Construct algorithms for performing simple tasks.
## Materials and preparation
* [0.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.2.pptx)
* [Unit 0 tips](unit_0_tips.md.html)
* Sandwich ingredients: Bread, peanut butter, jelly, utensils, plates, napkins
* Large poster paper and markers
### Video resources
* [https://youtu.be/ZnBF2GeAKbo](https://youtu.be/ZnBF2GeAKbo)
* Video quiz - located in protected materials through your TEALS Dashboard account
* [CodeScty algorithm music video](https://youtu.be/LMRSr_y9jPU)
* [CodeScty algorithm dance challenge](https://youtu.be/LfhZzHrWDQM)
## Pacing guide
| Duration | Description |
| --------- | -------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion; present activity |
| 10 minutes | Students write first algorithms |
| 5 minutes | Sample algorithm execution |
| 10 minutes | Students debug/rewrite algorithms |
| 5 minutes | Second sample algorithm execution |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Show this video to activate disucssion: [https://youtu.be/ZnBF2GeAKbo](https://youtu.be/ZnBF2GeAKbo)
* Invite discussion about what constitutes a computer, what computers do, and what computer science is.
* An excellent protocol for these types of discussions is ["Chalk Talk"](http://www.nsrfharmony.org/system/files/protocols/chalk_talk_0.pdf) or ["World Café"](http://www.theworldcafe.com/key-concepts-resources/world-cafe-method/).
* Develop definitions for important terms ("computer," "computer science," "algorithm," "program," "programming language").
* Display each term on the board or projector and ask students to provide key ideas or concepts they know that relate to the term. From this, you can develop a classroom definition. Feel free to have a pre-written definition and guide students to that definition using leading questions.
* You can introduce the idea that the first computers were human (a person who makes calculations, especially with a calculating machine) with the story about Katherine Johnson whose calculations were used for manned and unmanned orbital missions (read more [here](https://airandspace.si.edu/stories/editorial/hidden-figures-and-human-computers)).
### Activity
#### Write algorithms
In pairs or small groups, students will attempt to develop an algorithm to teach a robot to [brush their teeth](https://bam.files.bbci.co.uk/bam/live/content/z9bmxnb/transcript), or to prepare a peanut butter and jelly sandwich (check for food allergies before performing this exercise). Specify to students that their algorithm must be complete and detailed enough for a "computer" (the teacher) to unambiguously follow the steps and achieve the desired result.
* Give little guidance at this stage, as the confusion (and the errors that are likely to result) will both reinforce the importance of specificity and detail as well as provide entertainment value later on.
* Algorithms should be written on paper to be shared and reviewed. Students should _not_ be writing any code, nor should they develop algorithms "in their heads."
_Remote Learning Guidance_ - This activity could be done using a shared document and then links could be shared. Consider pairing students in advance or building in a procedure on how students will pair up moving forward in the semester.
#### Algorithm execution
After groups have finished, choose a group and have them read their instructions. Act as a computer and follow each step as literally as possible. If there is ambiguity, or if a step is not possible to complete, point out the error.
When an instruction is ambiguous or impossible, interpret the algorithm in the most atypical (and hilarious) way possible. This will reinforce to students that many seemingly clear instructions can be taken many ways.
For the PBJ activity, common errors will include:
* Failing to open a container before using what is inside.
* **Response:** Try (and fail) to access the inside in a humorous fashion (e.g. try to reach through the bag or jar, acting confused as to why you cannot reach the ingredient inside).
* Failing to specify in which orientation or position to use something (e.g. "grab the knife" but not by the handle, "put down the bread" but not on the plate).
* **Response:** use or place the ingredient in an obviously (and humorously) incorrect way (e.g. grab the knife (carefully) by the sharp end, put the slice of bread on the table next to plate, spread peanut butter around the crust instead of on the face).
* Using instructions that are too broad (e.g. "pick up the bread" to mean a single slice, "put the peanut butter on the bread" to mean spreading a small amount).
* **Response:** Ask for more detail, or interpret the instruction literally.
* Combining multiple steps into one instruction (e.g. "spread peanut butter on the bread" without specifically opening the jar, putting peanut butter on the knife, using the knife to spread, etc.)
* **Response:** Ask for more detail.
Most algorithms will fail. If there is time, repeat the process with one or two other groups.
* Here is an example video of the PBJ activity:
#### Debugging algorithms
Spend a brief moment explaining that programming is an iterative process, and that errors are expected. Introduce the concept of "debugging." Then, have students "debug" their algorithms and attempt to fix all errors and ambiguities.
* Changes should be made on paper. Consider introducing a standard notation for edits (strike-through for deletion, carat (^) for insertion, circle for modify, etc.) to make changes easy to spot.
* If possible, have students make changes using a different color marker or pen.
While students are working, circulate and look for a promising algorithm. The goal is to have a successful algorithm at the end of the class.
#### Execute debugged algorithm
Once groups have finished debugging, repeat the execution process. Hopefully, at this point, at least one algorithm will result in a proper sandwich.
* If no successful algorithm is found, try to debug on the fly. When you hear an incorrect or unclear instruction, point out the error and either propose or request a fix before proceeding. The goal is to create a sandwich before the end of class.
Take note of issues while circulating through the class so you can address them quickly.
### Debrief
Ask students to describe why there were problems with the first round of algorithms, and how those problems were fixed. Encourage the use of computer science terminology.
* Keep students from fixating on the specifics of any one error and guide discussion to the general approaches and concepts used to resolve problems.
Have students discuss what lessons can be learned from this activity and how they can be applied to programming and computer science.
## Accommodation and differentiation
Check for food allergies before performing this exercise. If any student has allergies that would put them at risk, substitute another food item or simulate the process with stand-in ingredients. The most common allergy will be to peanuts. Possible alternatives in this case include cream cheese & jelly, toast with butter and jam, or even a deli sandwich (turkey/ham/roast beef) with mayo and/or mustard.
* For other allergies, or if no options are acceptable, simulate using fake ingredients. (Even slips of paper with the ingredients written on them can suffice.)
Students who have previous programming experience may tend to dominate the algorithm generation process. Encourage these students to avoid pointing out errors directly and help the other members of their group find and fix errors.
If students are struggling with the level of specificity required, allow them to make some basic assumptions to ease the process.
In the "debugging" round, some students may go overboard with the level of detail in an attempt to resolve all possible ambiguities. Remind these students that there are some basic instructions that can be easily understood by most people, and there is no need to go into further detail in those cases.
## University of California - Berkley teacher support resources
[BJC Lecture 6: Algorithm](https://www.youtube.com/watch?v=3tvbqdLjjSU) (With Luke Segar)
* Computer Worms 0:00-1:30
* Algorithm Concept Intro: Rubic Cube Competition 1:40-2:40
* [Algorithm Definition](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=3m20s) 3:20-4:20
* [Early Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=4m25s) 4:25-5:55
* [Familiar Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=6m00s) 6:00-7:30
* Commonly Used Algorithms (Page Rank, etc.) 8:00-10:45
* Choosing an Algorithm Technique 10:50-12:15
* Ways to Tackle Problems (Brute Force, Top Down, Bottom Up) 12:20-15:30
* Algorithms vs Functions and Procedures 15:30-16:00
* Turing Completeness (Computer Theory-BYOB is Turing Complete) 16:05-21:15
* Algorithm Correctness 21:25-26:00
* Algorithm Summary 26:00-end
[BJC Lecture 7: Algorithm Complexity](https://www.youtube.com/watch?v=_fgtTE2bhMg)
* Yahoo predicts America’s political winner 0:00-1:25
* Function abstraction (Explanation of Functions and Algorithms) 1:28-2:45
* What is IN a Spec 2:45-3:30
* What is NOT in a Spec 3:30-5:15
* Reference Text “Introduction to Algorithms” 5:18
* [Algorithm Analysis](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=6m0s): The Basics
* [Algorithm Analysis:](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=7m41s) Running Time
================================================
FILE: docs/lesson_03.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 0.3: Programming languages
## Learning objectives
Students will be able to...
* Complete small coding tasks (Hour of Code).
* Explain why computer programs are written in specialized languages.
## Materials and preparation
* [0.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.3.pptx)
* [Unit 0 tips](unit_0_tips.md.html)
* Work through at least one of the coding activities on your own so you are familiar with the activities and can provide assistance as needed:
* [MakeCode Arcade](https://arcade.makecode.com/hour-of-code)
* [Minecraft: Timecraft tutorial](https://aka.ms/HOC21trailerbuild)
* [Educator guide](https://aka.ms/HOC21educatorguide)
* [Slide deck](https://aka.ms/HOC2021presentationslides)
* [Beyond Hour of code](https://aka.ms/HOC2021beyondhoclessons)
* [Extension activities](https://aka.ms/HOC21extensionactivities)
* [Facilitation guide](https://education.microsoft.com/en-us/course/abb0ebf3/overview)
* Solution and train the trainer guide available in curriculum resources located in the TEALS dashboard.
* [Minecraft Adventurer](https://studio.code.org/s/mc/stage/1/puzzle/1)
* [Dance Party](https://studio.code.org/s/dance-2019/lessons/1/levels/1)
* [Choose your own](https://hourofcode.com/us/learn)
### Video resources
* [https://www.youtube.com/watch?v=6qF3HmRzg8o](https://www.youtube.com/watch?v=6qF3HmRzg8o)
* Video quiz: See protected materials accessed from your TEALS Dashboard.
## Pacing guide
| Duration | Description |
| --------- | -------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 5 minutes | Introductory discussion |
| 35 minutes | Coding activities |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Introduce students to the concept of a **Computer program**: a sequence of instructions or steps, written in a language that can be understood by a computer, that will be used by the computer to complete a task or solve a problem.
* Ask for any programming languages students are familiar with (even just names).
* Draw distinctions between proper programming languages and other types of languages (such as markup languages e.g. HTML).
Lead the group to develop expectations about what aspects of programming might be most challenging and what skills might be most useful to be successful.
#### Guiding questions
What are the steps required to write a computer program?
* This is essentially developing an algorithm for writing a program.
What knowledge might make writing a program easier?
What might you need to do when writing a computer program that you have never or rarely done before?
What parts of programming are most intimidating or scary?
What are you good at that might help you be a better programmer?
### Activity
Students should work through one of the Hour of Code activities of your choice.
* Choose one activity as the requirement, and leave another for those who finish quickly.
* Allow students to struggle with the activities if needed, stressing the importance of patience and persistence in programming.
* Have students submit the certificate of completion of their hour of code to the instructor.
* _Remote Guidance_: The certificates can be submitted digitally upon completion.
### Debrief
Guide students in a discussion about the activities. Some sample guiding questions:
* What was most challenging?
* Put special emphasis on the iterative nature of programming, and the need to occasionally throw out a partial solution and start over.
* What was different about solving these problems than solving other problems encountered in school?
* Why can instructions not be given in simple English? Why must we be limited to certain operations from which we must build up solutions?
* If students seem interested, this can be an opportunity for a brief conversation about the difference between high-level programming languages and machine languages (assembly code).
## Accommodations and differentiation
If students appear to be frustrated enough to not be enjoying the activity, provide a step in the right direction and remind them that programmers rarely create a correct program on the first try.
## University of California - Berkley teacher support resources
[BJC Lecture 5: Programming Paradigms](https://www.youtube.com/watch?v=_4ScHcLvQnw)
* Dilemma of Being a Cyborg 0:00-2:30
* Programming Paradigms 2:30-3:50
* Snap! BYOB (Hybrid) 3:55-4:45
* Functional Programming (Cascading Values) 4:50-5:35
* Imperative/Sequential 5:41-8:35
* Object Oriented Programming (OOP Basic Explanation) 8:40-15:45
[OOP Ex: Sketch Pad Dr. Ivan Sutherland](http://www.youtube.com/watch?v=_4ScHcLvQnw&t=15m45s) "Father of Computer Graphics" 15:45-22:10
* OOP in BYOB (Demo of Functions in BYOB) 22:35-29:20
* Declarative Programming 29-22-31:20
* Declarative Programming Examples in BYOB 31:25-35:20
* Review of Paradigms 35:25-end
================================================
FILE: docs/lesson_04.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 0.4: Self-portrait
## Learning objectives
Students will be able to...
* Create a simple script to describe themselves.
## Materials and preparation
* [0.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.4.pptx)
* [Unit 0 tips](unit_0_tips.md.html)
* [Do Now: I am...](do_now_04.md.html)
* [Lab 0.4 - Getting to know you](lab_04.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_04.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_04.pdf))
* Student experience survey [(docx)](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/Student%20Experiences%20Survey.docx) [(pdf)](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/Student%20Experiences%20Survey.pdf)
* Review [saving and sharing](https://youtu.be/VHts_QAp3XU)
* Ensure that all classroom computers can access [http://snap.berkeley.edu/run](http://snap.berkeley.edu/run)
### Video resources
* [https://www.youtube.com/watch?v=7fncD7NH7g8](https://www.youtube.com/watch?v=7fncD7NH7g8)
* Video Quiz - See protected curriculum materials accessed through your TEALS Dashboard.
* [https://youtu.be/_Mwc1gc77dc](https://youtu.be/_Mwc1gc77dc)
* [https://youtu.be/b-EWj7xN90U](https://youtu.be/b-EWj7xN90U)
## Pacing guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 5 minutes | Introduce activity |
| 35 minutes | Getting to know You lab |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introduce activity
Play [introductory video](https://youtu.be/b-EWj7xN90U) of Snap! put together by Jens Moenig
Tell students that today they will explore and use it to create a "self-portrait" program.
* Emphasize that the goal of today's lesson is **_not_** for students to develop a deep understanding of any of the features. Later lessons will teach them everything they need to know. For now, they should just explore, figure out what they can, and put it to use however they see fit.
* Tell students they will create accounts so they can save their self-portraits and share them.
* Give students the link to the student experience survey. Tell them that answering these questions will help them to think about themselves and give them some ideas for their self-portraits.
Spend just a couple minutes demonstrating, create sprites and scripts, and run scripts.
Show students the [lab handout](lab_04.md.html) and read through the instructions.
* Point out the places to write answers to the written questions in parts 1.2 and 1.3.
* Draw special attention to the list of requirements for the self-portrait script in part 1.4.
* This is an excellent opportunity to tell students that all labs in this course will look like this, and that they should get used to reading instructions carefully.
### Student experiences survey
Instruct students to complete the [student experiences survey](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/Student%20Experiences%20Survey.docx).
Students should answer every question and “I don’t know” or “I’m not sure” are okay answers.
* Privacy notice: make sure you do not publish students submissions to this survey.
#### Optional
If you have a digital camera available, you can take photos of the students for use in the self-portraits.
* Doing so will give a level of personalization to each student's project.
* You will need to provide students with a location to download their photo.
In addition you need to walk students through the process of importing a costume from the file menu.
### Activity
Instruct students to complete the [getting to know you](lab_04.md.html) lab.
* Make sure they understand what your expectations are for student account names.
* Verify that every student has an account.
* If you have a digital camera available, you can take photos of the students and have them use their picture as the costume to the sprite. Doing so will give a level of personalization to each student's project. You will need to provide students with a location to download their photo. In addition you need to walk students through the process of importing a costume from the file menu.
### Save and share
Instruct students on how to Save their projects and what they should be named.
Here is a great video of how to share a script - [https://youtu.be/VHts_QAp3XU](https://youtu.be/VHts_QAp3XU)
Students will be able to share the URL of their projects for submission purposes.
### Debrief
Ask each student to identify and describe _one_ feature they discovered in the program. Keep a running list on the whiteboard or projector.
* If the students build a pretty comprehensive list, you can use this as a chance to go over a brief roadmap for the course.
* Ask students what they enjoyed about working with program and what they disliked.
## Accommodation and differentiation
Allow students to use whatever resources they need, including instructors, peers, and web searches if necessary, to create their programs. The goal of this lesson is exploration and exposure, not mastery.
For students that are hesitant or unwilling to engage, point out some simple, useful features (like basic drawing and the **Say** block) to get them started. Remind them that complexity or "coolness" are not important for this lab.

If you wish, you can add a second day to this lesson for students to share out their programs on a volunteer basis. Work with your classroom teacher and/or school IT staff to determine the best way for students to be able to present.
One simple option is to have volunteering students share their projects with you, and then show each one in turn on the teacher computer/projector.
Have a plan for collecting or accumulating the students' projects, which you can then use to get to know your class!
`This Lesson was designed by J-Mag Guthrie, TEALS Volunteer, Texas`
## University of California - Berkley teacher support resources
* [BJC Lecture 4: Functions](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=18m15s)
* [Types of blocks](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=18m15s) 18:15-19:45
================================================
FILE: docs/lesson_05.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 0.5: Coordinate system
The lesson is important to cover if students have not learned the concept of the coordinate system and plotting (x,y) coordinates.
## Learning objectives
Students will be able to...
* Recall the Cartesian coordinate system.
* Implement the coordinate system to position a sprite using coordinates.
## Materials and preparation
* [0.5 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.5.pptx)
* [Unit 0 tips](unit_0_tips.md.html)
* [Do now: Draw the coordinate system](do_now_05.md.html)
* [Lab 0.5 handout (Getting to know coordinates)](lab_05.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_05.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_05.pdf)).
* Familiarize yourself with this [Coordinate system](https://www.desmos.com/calculator/ui4klsjued) tool.
* Students will be entering coordinates on the left side of the screen
* The points will plot on the graph.
* Familiarize yourself with this [Snap! template](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Snap%20Coordinate%20System%20Intro).
* Familiarize yourself with the [Peabody test](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=PeabodyTest).
* Here is a place to print [Graph Paper](https://free-printable-paper.com/graph-paper/) in case it is necessary to print graph paper for the class.
### Video resources
* [https://youtu.be/5ctsUsvIp8w](https://youtu.be/5ctsUsvIp8w)
## Pacing guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Do Now |
| 10 minutes | Introduce Coordinate System |
| 15 minutes | Integrate Coordinate Concept |
| 15 minutes | Lab Activity |
| 5 minutes | Debrief and wrap-up |
## Instructor's notes
### Introduce activity
Explain to students the coordinate system using the grid they have drawn from the dow now.
Define the origin and that its center is (0,0).
Define the grid limits of positive and negative 240 on the x-axis and positive and negative 180 on the y-axis.
### Classroom activity
(_This classroom activity is optional - use it if you think your class could use the additional scaffolding._)
Together as a class, practice plotting a few points on the Coordinate System.
Use [this coordinate tool](https://www.desmos.com/calculator/ui4klsjued) to have the students plot points.
* This has been pre-configured with the dimensions of the grid so they can see the points being graphed.
* Have students enter the points on the left side of the tool and the points will be plotted on the graph on the right.
* Note that the grid lines are set to 10 unit increments.
* Have them plot the following points.
* (0, 0)
* (50, -50)
* (100, 0)
* (50, 100)
Ask students if they connect the dots, what shape would the points make? (Answers may vary: kite, diamond, quadrilateral, polygon, etc).
### Integrate
Explain to students that this is how the stage is setup but it doesn't have a grid to view.
The origin (0,0) is the exact center of the grid.
Have students enter the following points into the **go to x: y:** in the [template](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Snap%20Coordinate%20System%20Intro)
* (0, 0)
* (50, -50)
* (100, 0)
* (50, 100)
Have students click the green flag to see the sprite draw the shape.
Instruct the students to use the block template to draw at least two shapes of their own.
### Lab activity
Introduce the lab activity to students by explaining the instructions and getting them started with the activity.
### Debrief
Can you think of any other technologies that use a coordinate system to display graphics?
Are there any blocks that you have discovered that have helped you draw shapes faster?
## Accommodation and differentiation
Kinesthetic learners could use graph paper to draw the shapes with a writing utensil.
Challenge students who understand this challenge them to draw more complex figures and allow them to explore other blocks that may be useful to do this faster. (i.e repeat blocks, etc).
Students will have different levels of prior knowledge on this topic. The objective of this lesson is to level set students to ensure they all have an understanding of coordinates. There may be students seeing coordinates for the first time that may need more 1 on 1 support to move through this lesson.
================================================
FILE: docs/lesson_11.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 1.1: Welcome to Snap!
## Learning objectives
Students will be able to...
* Define and identify _blocks_, _scripts_, _sprites_, and _the stage_.
* Write simple scripts.
* Describe what simple scripts do without executing the script.
## Materials and preparation
* [1.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.1.pptx)
* [Unit 1 Do now](do_now_11.md.html)
* [Lab 1.1 - Welcome to Snap!](lab_11.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.1%20Welcome%20To%20SNAP.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.1%20Welcome%20To%20SNAP.pdf))
* [Helping trios activity](helping_trios.md.html)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://www.youtube.com/watch?v=b-EWj7xN90U](https://www.youtube.com/watch?v=b-EWj7xN90U)
* Video quiz - Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| _Day 1_ | |
| 10 minutes | Welcome, attendance, do now, announcements |
| 10 minutes | Introductory discussion |
| 10 minutes | Lab walkthrough |
| 20 minutes | "Welcome to Snap!" lab activity |
| 5 minutes | Demonstrate turn-in procedures and wrap-up |
| _Day 2_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review from yesterday |
| 30 minutes | Continue lab |
| 10 minutes | Debrief, turn-in, and wrap-up |
## Using zoom blocks

Zoom blocks are a useful tool to increase the readability of script in Snap!. To access the zoom blocks feature, simply go up to settings in the upper left, and select the second option in the list, zoom blocks. Once selected, an interface pops up which allows you to increase the zoom on your script and shows you a preview.
## Instructor's notes
### Day 1
#### Introductory discussion
Review the definitions of _algorithm_ and _program_ developed in lesson 0.2.
* **Algorithm:** a complete, well-defined sequence of steps for completing a task or solving a problem.
* **Program:** a sequence of instructions or steps, written in a language that can be understood by a computer, that will be used by the computer to complete a task or solve a problem.
#### Activity walkthrough
Work through [Welcome to Snap!](lab_11.md.html) lab through part 3 as a class.
Point out key aspects of Snap! in each section, including:
* Part 1 - the sections of the window.
* Part 2 - block shapes and color-coding of pallettes
* Draw attention to the different shapes. Their meanings will be covered as each block type is introduced.
* The "drag-and-drop" nature of the language.
* Running blocks/scripts by clicking on them.
* Ensure that all students can create an account and save their work.
* Allow students a few minutes to develop their own answers to each of the questions and activities before discussing as a class.
#### Activity
Individually or in pairs, have students continue working through the [Welcome to Snap!](lab_11.md.html) lab activity.
* Students should answer all questions and complete all activities and turn them in using your chosen turn-in procedure.
* For programs, including the kaleidoscope program, students should save the project to the cloud and share a link with you.
#### Turn-in procedures
Remind students of the turn in procedures introduced in Unit 0.
### Day 2
#### Review
Go over answers to the questions from the parts of the lab completed on day 1.
#### Discussion
Consider the following questions:
* Can you name the different parts of the browser window?
* Can you define _block_, _reporter_, and _script_ ?
* Can you Describe, in your own words, the coordinate system?
#### Continue lab
As before, students should turn in all answers using your chosen turn-in procedure.
Judge the appropriate time based on observing student progress.
#### Debrief and wrap-up
Discuss the challenges in the Kaleidoscope program.
* If time allows, ask one or two students to demonstrate and describe their programs.
Remind students of the turn-in procedures discussed yesterday and ensure all students can turn in their work.
## Accommodations and differentiation
For students that finish the lab early, encourage them to add more advanced features to their Kaleidoscope program, exploring parts of Snap! not covered in the lab.
Students that are struggling with the lab can be paired and receive individual instruction to help them through the activity. You can also use [helping trios activity](helping_trios.md.html).
No parts of this lab can be easily skipped without impacting learning objectives, so provide as much support or scaffolding as you can to ensure all students can complete the lab. Add days to the lesson if needed.
## University of California - Berkley teacher support resources
[BJC Lecture 2: 3D Graphics](http://www.youtube.com/watch?v=q2UMQaoW30U&t=16m50s)
[Procedural Based Motion](http://www.youtube.com/watch?v=q2UMQaoW30U&t=16m50s)
* Lab 1.1: 16:56-20:00
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_12.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 1.2: Building blocks
## Learning objectives
Students will be able to...
* Identify the pallettes of blocks.
* Describe the function of several common blocks.
* Be able to use common blocks to build simple scripts.
## Materials and preparation
* [1.2 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.2.pptx)
* [Do now 1.2](do_now_12.md.html)
* Picture of [Admiral Grace Hopper](https://upload.wikimedia.org/wikipedia/commons/2/21/Grace_Murray_Hopper%2C_in_her_office_in_Washington_DC%2C_1978%2C_%C2%A9Lynn_Gilbert.jpg) or her Mark II [notes](https://upload.wikimedia.org/wikipedia/commons/8/8a/H96566k.jpg) that show the bug she found in the computer.
* [Lab 1.2 - Scavenger hunt](lab_12.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.2%20SNAP%20Scavenger%20Hunt.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.2%20SNAP%20Scavenger%20Hunt.pdf)).
* [Helping trios activity](helping_trios.md.html)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://youtu.be/u80WYSNxRjM](https://youtu.be/u80WYSNxRjM)
* Video Quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
### Who is Grace Hopper? video
## Pacing guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion |
| 25 minutes | Scavenger hunt activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
#### Do now debrief
Tell the story of [Admiral Grace Hopper](https://en.wikipedia.org/wiki/Grace_Hopper) who originated the term "debugging".
* You could also use this _Who is Grace Hopper?_ video: [https://youtu.be/Fg82iV-L8ZY](https://youtu.be/Fg82iV-L8ZY)
Review concepts from the previous lesson.
* Ensure that students can:
1. Define _block_ and _script_.
2. Review snapping blocks together to make a script.
3. Review how blocks are executed in order.
Introduce the concept of block pallettes.
* Ask students to consider why pallettes are helpful as opposed to having a simple list of blocks.
### Activity
Individually or in pairs, have students work through the [scavenger hunt](lab_12.md.html) activity.
Students should turn in answers to all questions and scripts for the final problems.
Consider gamifying the worksheet or debrief as an online poll and/or quiz.
### Debrief
Go through each question or prompt in parts 1 and 2 and ask students to share their answer.
> **Cold calling alternative:** Write each student’s name on an index card and shuffle the cards. Next, ask a few “review” questions to set the stage that ask for application (or creativity, or evaluation) and have no single “right answer.” Give students 30 to 60 seconds to formulate an answer. You can have them talk in pairs or groups for a few minutes as well if you prefer. It’s only after students have been thinking that you take the top card to see who answers. Sometimes you can say something like, “If you don’t know, make something up like you would on a mid-term, and then we’ll all help you develop better answers.” The student takes their best shot, knowing that others will help if necessary.
At that point you have lots of options: You can ask a follow-up to the same student, pick another card and have somebody else answer the follow-up, or simply have students volunteer to expand on the first answer.
>**Remote cold calling adaptation**
>Consider using this [Random name generator](Excel-Randomizer.xlsx) to select a student in a remote setting.
Point out the color coding for each pallette.
Emphasize important details in some of the blocks listed in part 2, such as:
* The **think** block will leave the bubble on the stage until something else is thought.

* the **go to xy** block and **glide** block blocks require explicit _x_ and _y_ coordinates.
 
Call on a few student responses for each pallette before commenting yourself.
* Try to guide students to discuss with each other and settle on a description for each pallette with minimal instructor intervention.
Discuss one or two student solutions to each of the programming problems.
* Point out differences between student solutions and call attention to the fact that there is more than one way to solve a problem.
## Accommodations and differentiation
Colorblind students may not be able to identify the block colors, but can still recognize the organization of pallettes. Be sensitive to this, but no modifications are likely required.
Students that are struggling with the lab can work with another student or receive individual instructor attention to help them through the activity. Consider using [helping trios](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Helping%20Trios.pdf) if appropriate.
The bonus assignment should be used for students who finish quickly.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_13.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 1.3: Drawing Shapes
## Learning objectives
Students will be able to...
* Construct simple algorithms to draw shapes.
* Convert algorithms into scripts.
## Materials and preparation
* [1.3 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.3.pptx)
* [Do now 1.3](do_now_13.md.html)
* [Lab 1.3 - Squares, triangles and stars](lab_13.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.3%20Squares%20Triangles.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.3%20Squares%20Triangles.pdf)).
* [Exterior angles review](Geometry_Exterior_Angles.pdf)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://www.youtube.com/watch?v=qLU3PtaG3ww](https://www.youtube.com/watch?v=qLU3PtaG3ww)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing guide
| Duration | Description |
| :--------- | :-------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review and introduce activity |
| 25 minutes | Shape drawing activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Review the pallettes of blocks and what each is for.
* Put emphasis on motion and drawing pallettes.
* Remind students about the iterative process of programming.
* Students may get frustrated throughout this activity. Remind them that requiring multiple attempts to find the right solution is normal.
### Introduce the following blocks
| Block name | Block image | description |
| :--- | :--- | --- |
| **clear** |  | Clears all pen marks from the stage. |
| **pen up** |  | Picks up the pen from the stage. |
| **pen down** |  | Puts down the pen on the stage. |
| **set pen color to** | | Sets the pen color to the indicated color. |
| **set pen size to** || Set the pen thickness to 1. |
| **change pen size by** |  | Changes the pen size by 1. |
| Block name | Block image | description |
| :--- | :--- | --- |
| **Show** |  | Shows the sprite on the stage. |
| **Hide** |  | Hides the Sprite from the stage. |
### Scaffolding
Review [exterior angles of regular polygons](Geometry_Exterior_Angles.pdf) with the class.
* Focus on the shapes on this document and the formula used to determine the angle.
* This will help them determine find the angles of any regular shape.
### Activity
Students should complete the ["Triangles, squares, and stars"](lab_13.md.html) activity individually.
* This will give them the tools they need to figure out the angles they need for any shape they would like to draw.
When students finish, have them turn in their project using whatever procedures you have set up.
### Debrief
Have students switch seats with a nearby classmate and review each other's work.
* If one in a pair student was able to complete a program and the other was not, have the student who was successful walk his/her partner through.
* If neither student in a pair was able to complete a program, encourage them to work together to figure out what they were missing.
Ask students to share what they learned from looking at their partner's projects.
Point out that there is more than one way to solve a problem and two programs that are both correct might not look the same.
## Accommodations and differentiation
Advanced students can attempt the five-pointed star. If students finish that shape, encourage them to try more advanced shapes.
* Examples: kite, smiley face, student's initials
Struggling students can either be paired or allowed to not complete certain shapes.
Students who have not yet learned the skills necessary in determining the correct angles. Point out to them that geometric understanding is not necessary and the angles can be determined using trial and error.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_14.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 1.4: Animation
## Learning objectives
Students will be able to...
* Animate sprites using costume changes and movement.
* Trigger action in other sprites using broadcasts.
* Implement scripts for multiple sprites.
## Materials and preparation
* [Do now 1.4](do_now_14.md.html)
* [1.4 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.4.pptx)
* [Do now 1.4](do_now_14.md.html)
* [Lab 1.4 - Sprites in action](lab_14.md.html)([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.4%20Sprites%20in%20Action.docx)) ([blocks](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.4%20Sprites%20in%20Action.pdf)).
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://youtu.be/3x5ZI-mKc44](https://www.youtube.com/watch?v=3x5ZI-mKc44)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
* Changing costumes video: [https://youtu.be/kgqi7CQLgJU](https://youtu.be/kgqi7CQLgJU)
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 10 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Lecture and introduce activity |
| 25 minutes | Animation activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
_Note: The [Lesson 1.4](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%201.4) project has examples of all the concepts covered in this lesson._
### Warm-up
* Students should complete [Do Now 1.4](do_now_14.md.html) individually.
### Lecture
#### Broadcasting
Introduce students to the **Costumes** tab and show them how to import costumes to a sprite.
* Point out that, while a sprite's costumes can be anything, most often the different costumes of a single sprite will be somehow related.
Demonstrate how to use the **next costume** and **switch to costume** blocks to change the appearance of a sprite.


* Emphasize that costumes will cycle and that switching to the costume a sprite is already "wearing" is OK.
* Combine costume switching with movement and other actions to show that blocks of different pallettes can be combined in the same script.
Introduce the **broadcast** and **when I receive** blocks and show how they can be used to coordinate action between sprites


* Point out that all sprites "hear" a broadcast and any sprite with a corresponding **when I receive** block will react.
Discuss the difference between **broadcast** and **broadcast and wait** blocks and ask students to come up with ideas for when each would be useful.

It's worthwhile to introduce the rotate buttons. These buttons allow you to Snap your rotation, allowing you to lock rotation, allow free rotation, or allow only left/right rotation.

#### Adding more sprites
Introduce students to adding more sprites to their script using the **add a new turtle sprite** button.

When clicked, the students will notice a new sprite is created with a different color.
Have them select the new sprite, then click on `file` > `costumes` > import > Have them select a sprite of their choice.
Show them how they can now write a script for this second sprite that is only for that Sprite.
### Activity
Students should complete the [Sprites in Action](lab_14.md.html) lab individually.
* Ensure that students create two different sprites for parts 1 and 2 so they do not get the costumes mixed up.
Students can submit the assignment using your turn-in procedures or you can check off the work as students complete it.
### Debrief
Ask a student to show their solution to each part. Call on a different student (either a volunteer or via cold calling) for part 1 and part 2.
* Note any places in which there may be multiple possible approaches. Ask for volunteers to describe differences in their script.
## Accommodations and differentiation
Students that finish quickly can be encouraged to add more detail to their animations, such as sounds, **say** blocks, and/or more costumes.
Especially advanced students can be encouraged to create their own costumes for a new animation that does not use any built-in sprites.
With struggling students, re-emphasize the fact that each sprite can have different costumes and that changing costumes is very much like changing position by moving. Get students to be able to change costumes on a key press before moving on to the animation aspect.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_15.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 1.5: Storytelling project
## Learning objectives
Students will be able to...
* Apply programming skills to create an animated movie, play, nursery rhyme, or other scene.
* Practice good debugging skills to correct issues as they arise while programming.
## Materials and preparation
* [1.5 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.5.pptx)
* [Do now 1.5: Day 1](do_now_15.md.html)
* [Do now 1.52: Day 2](do_now_152.md.html)
* [Do now 1.53: Day 3](do_now_153.md.html)
* [Project 1 - Storytelling](project_1.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%201%20Storytelling.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%201%20Storytelling.pdf))
* [Most popular plays and musicals](http://www.npr.org/sections/ed/2015/07/30/427138970/the-most-popular-high-school-plays-and-musicals)
* [Wikipedia](https://en.wikipedia.org/wiki/List_of_nursery_rhymes)
* [Planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
## Pacing guide
| _Duration_ | _Description_ |
| :------------- | :--------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit concepts |
| 20 minutes | Introduce project |
| _Days 2-5_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review
Play a review game to remind students of the skills and concepts that have been learned in this unit.
* **Movement**
* **Drawing**
* **Hide/Show**
* **Costumes**
* **Broadcasting**
Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks.
### Introduce project
Walk students through project specification, pointing out important details, potential pitfalls, and specific requirements.
1. The words to the story must appear on the screen.
* This can be as a sprite, as a part of the background, or "said" by a narrator
2. Sprites must act out the story line by line.
3. The action must be dynamic. A series of static images is not sufficient.
4. The action and words should advance automatically, but at a slow enough pace that the viewer can follow.
5. The user must be able to restart the animation (in a manner other than pressing the green flag again) after it has concluded.
6. At least two sprites must act during the animation, and the sprites must collectively meet the requirements on page 2.
Encourage students to look at the grading rubric on page two repeatedly throughout the project to ensure they are meeting all the requirements.
### Project
This project is a summative assessment for the unit and students should be demonstrating mastery of all the skills covered. Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete projects, tracking questions asked during lab time, and/or utilizing peer reviews. See the standard [Lab Day Lesson](lab_day_lesson.md.html) for detailed plans for lab days.
* Most students will require roughly 4-8 hours of total work time to complete the project.
* Adjust the amount of time allowed for the project to fit the needs of your students.
* If most students have the ability to work on assignments at home, the amount of class time provided can be reduced.
* If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
* Ensure that students are able to ask questions in class throughout the project.
## Accommodation and differentiation
Instead of a scene from a play or a nursery rhyme, students can recreate a famous scene from a movie, depict lyrics from their favorite song, or develop their own unique animations. Feel free to modify the specification for whichever version will appeal most to your students.
Advanced students can be encouraged to add detail and/or complexity to their project for possible extra credit.
For ELL students or students from other cultures, offer the opportunity to choose an animation subject familiar to them rather than requiring a traditional English nursery rhyme or play.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_21.html
================================================
lesson_21
Lesson 2.1: Loops
Learning Objectives
Students will be able to...
Define "loop" in a programming context.
Explain why loops are useful.
Implement simple repeat and forever loops in Snap!.
Show students the code, ask what it does, then ask if they can think of ways to improve it.
Attempt to get students to realize that the code is redundant and could be simplified if there were a way to execute a block of code more than once.
Introduce loops
Begin with general definition: A type of block that causes other code to run multiple times in succession.
Use real life loops to introduce the concept: water cycle, eating one spoonful at a time,use a poem like "Still I Rise" by Maya Angelou or a song with a repetitive hook like "Happy" by Pharrell Williams. If you choose to use a song, you can break students into groups and have each group choose their own song. Make sure to ask students to identify a song that has a repetitive hook without explicit lyrics.
Introduce Snap! specific loops:
Repeat block runs the body of the loop the specified number of times.
Number of iterations can be a value, variable, or reporter.
Forever block runs the body of the loop nonstop until the script is ended.
Can be stopped either by clicking the stop sign or by any version of Stop Block.
Repeat Until runs the body of the loop until the specified condition becomes true.
Save detailed discussion of this loop until conditionals are introduced.
Walk through examples of Repeat Block and Forever Block
Emphasize usefulness in reducing redundancy and complexity, especially for repetitive tasks.
If available, students should use their solutions to Lab 1.3 ("Squares and Triangles and Stars, Oh My!") as a starting point. Ensure students "Save as..." before starting on the new lab to not overwrite their original project (part 1.1).
If student solutions for Lab 1.3 are not available, or are not correct, provide a correct implementation (the solution to Lab 1.3 can be found on the TEALS Dashboard under Additional Curriculum Materials).
Encourage students to try to use as few blocks and have as little code duplication as possible to draw each shape while still creating understandable scripts. Asa reminder you may want to make the Geometry Exterior Angles Review showing various shapes and their respective angles as a reference for students throught unit 2.
Once students complete part 2.1, the remaining parts should go much more quickly as they all follow the same basic pattern.
Debrief
Discuss one or two student solutions to part 2.2.
Ask students to think about what the code would look like without loops.
Discuss one or two students solutions to part 3.1.
Point out how unwieldy the code for these two shapes would be without loops.
Accommodation/Differentiation
More advanced students can add additional shapes, including a five-pointed star without interior lines.
Particularly advanced students can be encouraged to build pictures by combining multiple shapes (e.g. a house built of squares of various sizes).
================================================
FILE: docs/lesson_21.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 2.1: Loops
## Learning objectives
Students will be able to...
* Define **loop** in a programming context.
* Explain why loops are useful.
* Implement simple repeat and forever loops.
* Apply loops to reduce redundancy in scripts.
## Material and Preparation
* [Do now 2.1](do_now_21.md.html)
* [2.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.1.pptx)
* [Exterior angles review](Geometry_Exterior_Angles.pdf)
* [Lab 2.1 - Squares and triangles Redux](lab_21.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.1%20Triangles%20and%20Squares%20Redux.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.1%20Triangles%20and%20Squares%20Redux.pdf)).
* Looping real world examples
* [Water cycle](https://pmm.nasa.gov/education/water-cycle)
* [Still I Rise](https://m.poets.org/poetsorg/poem/still-i-rise)
* [Happy](https://genius.com/Pharrell-williams-happy-lyrics)
* [Example](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%202.1%20Example)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resource: [https://youtu.be/XbZqfRGPom0](https://youtu.be/XbZqfRGPom0)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and examples |
| 25 minutes | Squares and Triangles Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
Introduce and discuss concepts of code redundancy and readability. Remind students that a program can be written in many different ways that are functionally equivalent.
* Ask students to speculate as to why one version of a program might be better or worse.
* Possible answers: more efficient (in time or space), shorter code, more elegant/readable code.
Show [this example](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Lesson%202.1%20Example) to demonstrate unreadable program and give examples on how the **repeat** blocks (loops) can help make more concise scripting.
* Show students the script, ask what it does, then ask if they can think of ways to improve it.
* Attempt to get students to realize that the script is _redundant_ and could be simplified if there were a way to execute a block of script more than once.
#### Introduce loops
Begin with general definition: _A type of block that causes other code to run multiple times in succession_.
Use real world loops to introduce the concept:
* [Water cycle](https://pmm.nasa.gov/education/water-cycle)
* [Still I Rise](https://m.poets.org/poetsorg/poem/still-i-rise) by Maya Angelou
* [Happy](https://genius.com/Pharrell-williams-happy-lyrics) by Pharrell Williams
#### Introduce specific loops
The **repeat** block runs the body of the loop the specified number of times.

* Number of iterations can be a value, variable, or reporter.
The **forever** block runs the body of the loop nonstop until the script is ended.

It can be stopped either by clicking the stop sign or by any version of **Stop** Block.

The **repeat until** runs the body of the loop until the specified condition becomes true.

Save detailed discussion of this loop until conditionals are introduced.
Walk through [examples](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%202.1%20Example) of **repeat** Block and **forever** Block
* Emphasize usefulness in reducing redundancy and complexity, especially for repetitive tasks.
### Activity
Direct students to complete ["squares and triangles redux"](lab_21.md.html) individually.
* If available, students should use their solutions to Lab 1.3 as a starting point. Ensure students "Save as..." before starting on the new lab to not overwrite their original project (part 1.1).
* If student solutions for Lab 1.3 are not available, or are not correct, provide a correct implementation (the solution to Lab 1.3 can be found on the TEALS Dashboard under Additional Curriculum Materials).
Encourage students to try to use as few blocks and have as little script duplication as possible to draw each shape while still creating understandable scripts.
* Once students complete part 2.1, the remaining parts should go much more quickly as they all follow the same basic pattern.
### Debrief
Discuss one or two student solutions to part 2.2. Ask students to think about what the script would look like without loops.
Discuss one or two students solutions to part 3.1. Point out how unwieldy the script for these two shapes would be without loops.
## Accommodation and differentiation
More advanced students can add additional shapes, including a five-pointed star without interior lines.
Particularly advanced students can be encouraged to build pictures by combining multiple shapes (e.g. a house built of squares of various sizes).
For students struggling with the mathematics, make the [exterior angles review](Geometry_Exterior_Angles.pdf) available showing various shapes and their respective angles as a reference for students through unit 2.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_22.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 2.2: Nested loops
## Learning objectives
Students will be able to...
* Apply nested loops to solve programming problems.
## Materials and preparation
* [Do now 2.2](do_now_22.md.html).
* [2.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.2.pptx)
* [Lab 2.2 - Yellow brick road](lab_22.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.2%20Yellow%20Brick%20Road.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.2%20Yellow%20Brick%20Road.pdf)).
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resources
* [https://youtu.be/bons028VLEU](https://youtu.be/bons028VLEU)
* [https://youtu.be/Y5lZQRawsFk](https://youtu.be/Y5lZQRawsFk)
* Video Quiz - Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing Guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Review, lecture, and examples |
| 25 minutes | Yellow brick road Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Prompt students to restate the definition of **loop**.
* A type of block that causes other code to run multiple times in succession.
Prompt students to explain why loops are useful in programming.
* To reduce code redundancy and increase readability when dealing with repetitive tasks.
Ask for examples of problems that can be solved with loops.
* Drawing polygons, repeating an action, etc..
Ask students how their scripts to draw shapes improved when they introduced loops.
* Code became shorter and more readable.
* Small changes, such as altering the size of the shape, became simpler.
### Lecture
Ask students to consider the problem of drawing two squares next to each other. Work through writing a script to do this. The likely result will duplicate the script to draw a single square:

* Remind students to remember what they previously learned and use loops.
* Once the script is complete, ask students if there are ways they could improve it.
Discuss what would happen if you needed to draw 10 squares, or 100, or an unknown number.
* If students seem capable, you can allude to user input for the unknown number example, but do not get into details at this point.
Ask if loops can somehow be applied to reduce redundancy even further in the script to draw two squares.
#### Introduce the concept of nested loops
Define **nested loop:**
* A loop used inside the body of another loop.
Point out that there is nothing particularly special happening here
* The body of a loop can contain any script, including another loop.
* Emphasize that the inner loop will run all its iterations _each time_ the outer loop runs.
* Walk through rewriting the script to draw multiple squares to use nested loops:

Ask how many total times the sprite will move 50 steps.
* The sprite will move 50 steps 8 times (4 * 2).
Show that the number of squares drawn can be easily changed by simply changing the number of times the outer loop iterates.
### Activity
Direct students to complete the [Yellow Brick Road](lab_22.md.html) activity individually or in pairs. Try to pair students that have not previously interacted.
* Remind students to continue using the principles learned with basic loops.
Encourage students to write scripts that are as short and succinct as possible while still being functional and readable.
### Debrief
Show a student's solution.
* Either request a volunteer.
* Point out uses of nested loops.
Ask students to describe how loops, specifically nested loops, made the assignment easier.
* Each brick, or at least each row, would have needed to be scripted separately creating much longer scripts.
Ask students to think about what part of the script would need to change to alter the size of each brick or the size of the road and how that was made easier with loops.
* Size of road: number of iterations in one or both loops.
* Size of brick: one or both move blocks **and** number of iterations in one or both loops.
* Without loops, the change would have been needed in many different places.
## Accommodation and differentiation
Not all students will recognize all the possible places to use nested loops in the final program. Encourage students to find as many places to use a nested loop as possible, but allow struggling students to focus on just one or two uses.
Advanced students can be encouraged to change the size of the bricks, which will require not only altering the number of steps moved but also the number if iterations in the loops. You can also ask students to draw a building/house using only squares. For example, they can be instructed to draw where they live, favorite building, or school.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_23.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 2.3: Inputs and conditionals
## Student objectives
Students will be able to...
* Apply **ask** and **receive** blocks.
* Apply simple conditional, **if** and **if-else** blocks, to alter control flow in a program.
## Materials and preparation
* [Do now 2.3](do_now_23.md.html).
* [2.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.3.pptx)
* [Lab 2.3 - What shape is that?](lab_23.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.3%20What%20Shape%20Is%20That.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.3%20What%20Shape%20Is%20That.pdf))
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resource - [https://youtu.be/t3k3wOxO1xI](https://youtu.be/t3k3wOxO1xI)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
* [Flocabulary](https://www.flocabulary.com/unit/coding-conditionals/)
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 20 minutes | Lecture |
| 20 minutes | Lab activity |
| 10 minutes | Debrief and wrap-up |
_Note: This lesson may cover too much material for some classes to handle in one day. Feel free to spill over into a second day, splitting the material however works best for your class._
## Instructor's notes
### Lecture
Point out that, so far, our scripts have had minimal interactivity. There was _some_ user interaction in the shape drawing labs, but no back and forth. Just pushing a key to trigger an action.
* This is not normally how scripts work.
Ask students for examples of interactive computer programs.
Ask students for suggestions for making previous labs or activities more interactive. There are no right or wrong answers here. The goal is to get students thinking about interactivity.
Introduce the **ask_and wait** block.

Demonstrate that it functions similar to the **say** block but waits for a response from the user.

The response is stored in the **answer** block and can be referenced later.

Variables will not be introduced until unit 3, so this block will be somewhat magical for now. You should judge your students' preparedness to handle the details and act accordingly.
* Emphasize that only one input is stored at a time, and that asking a new question deletes the previous answer.
* For example, the following script, intended to draw a bunch of squares where the user specifies both the size and the number of squares, will not work as intended:

#### Introduce conditional statements
Define **conditional** - a block used to make a choice between executing two different chunks of script.
You can also use this [video on conditionals](https://www.flocabulary.com/unit/coding-conditionals/) by Flocabulary.
* Point out the differences between **if** and **if/else** block.


* Namely, if-else provides a choice between two script paths, whereas if simply chooses between executing script or not
* Emphasize that **only one** of the bodies, either the if or the else, will ever be executed.
Show students the relational operators (<, >, and =).



### Activity
Direct students to complete the [What shape is that?](lab_23.md.html) activity individually or in pairs.
### Debrief
Discuss one or two students solutions.
* Point out differences between the approaches of different students and lead discussion about advantages and disadvantages.
* Place particular emphasis on the choice between if and if-else blocks.
Explain that, when conditions are mutually exclusive (as in part 2.1), a series of if vs. if-else blocks can be functionally equivalent.
* When the conditions are not mutually exclusive (as in part 2.2), the choice matters more.
## Accommodation and differentiation
Advanced students can be encouraged to add extra functionality, such as attempting to draw the shape the user is specifying or identifying types of triangles (equilateral, isosceles, scalene)
Students who are struggling can be allowed to skip some parts of the tables in 2.1 and 2.2, focusing on just a few cases
## University of California - Berkley teacher support resources
[BJC Lecture 13: Mislabeled as 14) Human-Computer Interaction Bjorn Hartman](https://www.youtube.com/watch?v=3VZ7D01T2Yc)
* Bjorn Hartman Background 0:00-3:30
* Human Computer Interface(HCI) 3:45-6:00
* HCI: Design, Computer Science, Applied Psychology 6:00-8:00
* Iterative Design Cycle 8:00-10:30
* Understanding Users 10:35-11:35
* Prototype Interface Examples 11:40-14:00
* Evaluation (Formative, Summative) 14:50
* [Why Study User Interfaces](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=15m0s)
* Ex:Mouse Xy axis, Sketchpad, PC, Tablets 15:00-25:00
* What had changed? Research: Mainframe to Ubiquitous Computing 25:00-29:30
* [Example Project: Using Dexterity for Computer Interface Video](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=28m30s) 28:30-29:30
* Zipf/Power Law Distribution 30:00-32:00
* HCI Research at Berkeley 32:10-46:25
* [Multi Touch Apps and Toolkits](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=32m0s) 32:00-End
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_24.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 2.4: Variables
## Learning objectives
Students will be able to...
* Apply variables to track values throughout a script or program.
## Materials and preparation
* [2.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.4.pptx)
* [Do now 2.4: Debugging](do_now_24.md.html)
* [Lab 2.4 - Guessing game](lab_24.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.4%20Guessing%20Game.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.4%20Guessing%20Game.pdf))
* [The Box Variable Activity](https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-box-variable-activity/) materials (Optional)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resources
* [https://youtu.be/YMVo9Wdpv5s](https://youtu.be/YMVo9Wdpv5s)
* [https://youtu.be/ps8tc0cQsGg](https://youtu.be/ps8tc0cQsGg)
* Video Quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and introduce activity |
| 25 minutes | Lab Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Debrief
Go over all of the bugs in the Do Now script with students? (There are at least six.)
1. In order to control Alonzo's movement with the arrow keys, the if statements need to be in a forever loop; otherwise, the script will run once and complete. Alonzo never moves!

2. Likewise, the script checking for the _W-A-S-D keys_ to move the Blue Dog need to be in a loop or they will also only check for a key press one time and complete. The blue dog never moves, either.

3. In Alonzo's script, the conditional checking for the left arrow key is inside of the conditional checking for the right arrow key, so Alonzo can never move to the left.
4. The **if on edge, bounce** block in Alonzo's script is inside of the conditional checking for the left arrow key, so Alonzo will run off every edge of the screen, except the left.
5. The fifth bug is more subtle. After the bugs preventing the movement of Alonzo and the Blue Dog have been fixed, the blue Dog says "I got you!" when touched by Alonzo. Since the Blue Dog is supposed to be running away from Alonzo, it doesn't make sense for the Blue Dog to say that when caught.
6. The sixth bug is just good coding style. The Blue Dog has an unused **say** block in the scripting area that should be deleted.
Did the students have any suggestions about ways to improve the game?
Here are some possible improvements they might have thought of:
* Have a score counter that increments when the _reset_ message is sent. (After Alonzo catches the blue dog.)
* Since Alonzo starts on the left of the screen and the Blue Dog starts on the right, have Alonzo be controlled by the _W-A-S-D_ keys and the Blue Dog by the **arrow** keys. That way, the **control** keys are on the same side of the keyboard as the sprites they are controlling.
* Have the computer control the Blue Dog using random movements.
* Have the computer control the Blue Dog by always moving in the opposite direction from Alonzo.
* Have the players choose which sprite is being chased at the beginning of the game.
### Lecture
Review user input, specifically the **answer** block.

Ask students to speculate about how the **answer** block works.
* Students should recognize that the block must be storing a value somehow and remembering it for later.
Ask students whether that type of functionality might be useful in other cases.
#### Introduce variables
Define and explain the concept of a **variable:** _a location in memory to store a value for retrieval and use later_.
Consider introducing variables with an interactive physical demonstration by modifying the [The Box Variable Activity](https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-box-variable-activity/) for your students.
Demonstrate creating, assigning, and accessing a variable.
* Point out that a variable can only hold one value at a time.
* When a new value is assigned, the old value is lost and cannot be recovered.
* Emphasize the importance of descriptive, readable names for variables.
* Show that variables are independent.
One variable's value can be assigned to another, as in **set var1 to var2** Block, but changing the value of **var2** later will not update the value of **var1**.

### Activity
Briefly demonstrate the **pick random 1 to 10** block which will be used in the lab.
Direct students to complete [Guessing Game](lab_24.md.html) individually or in pairs.

### Lesson debrief
Discuss and demonstrate one or more students' submissions.
Ask students for commentary on usage and naming of variables throughout script.
## Accommodation and differentiation
Advanced students can be encouraged to implement statistics (best score, average guesses/game, number of time each secret number chosen, etc.).
Struggling students can be given script that completes part 1.1, and possibly also part 1.2, to get them started.
Students who are particularly overwhelmed should focus only on parts 1.2 and 2.2.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_25.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 2.5: Boole in the house
## Learning objectives
Students will be able to...
* Define and identify Boolean expressions and operators.
* Evaluate Boolean expressions.
* Utilize Boolean operators, `and`, `or`, `not`, to create compound conditions.
## Materials and preparation
* [Do now 2.5](do_now_25.md.html)
* [2.5 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.5.pptx)
* [The box variable activity](https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-box-variable-activity/)
* [Lab 2.5 - Triangles of all kinds](lab_25.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.5%20Triangles%20of%20All%20Kinds.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.5%20Triangles%20of%20All%20Kinds.pdf))
* [Exterior angles review](Geometry_Exterior_Angles.pdf)
* [Heron's formula](https://en.wikipedia.org/wiki/Heron%27s_formula)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resource - [https://youtu.be/XXS9aDlN14s](https://youtu.be/XXS9aDlN14s)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 20 minutes | Review and lecture |
| 20 minutes | Triangles activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Remind students about conditional statements, and ask what the blocks that can go in the holes in if blocks have in common.
Blocks are "pointy" and all are "yes/no" or "true/false" questions.
### Lecture
Define **Boolean expressions** as expressions that evaluate to true or false.
* If desired, explain that the term "Boolean" is derived from [George Boole](https://en.wikipedia.org/wiki/George_Boole).
Present the three Boolean operators: `and`, `or` and `not`.
* Define the operators and describe when each will return true.
* Show the truth tables for each operator and explain how to read them (see below for truth table example).
* Truth tables are simply one way of expressing how the Boolean operators work; if students are struggling, other depictions (such as an exhaustive list of all possible results) can be substituted.
* Emphasize that since Boolean operators are themselves Boolean expressions, they can be nested.
Practice evaluating Boolean expressions, starting simple and moving to more complex nested operations.
* Start with simple expressions:

* Introduce the variable _x = 7_:

* Nest operations operations using _x = 4, y = -3_:

* Discuss short-circuiting in evaluation of Boolean expressions.
* Discuss situations in which the Boolean operators might be needed.
### Activity
Students should complete the [Triangles of all kinds](lab_25.md.html) activity individually or in diverse pairs (students who have not interacted previously, by ability, etc.).
A number of geometric concepts (Triangle Inequality Theorem, Pythagorean Theorem, etc.) are used in this lab, but students need not have a deep understanding of them. The necessary points are explained in the lab.
Encourage students to think about whether an "and" or an "or" is appropriate in each case. Draw out truth tables if necessary.
As done previously in the unit, you can make the [Exterior angles review](Geometry_Exterior_Angles.pdf) available to students.
### Debrief
Walk through a student's response.
* Point out uses of Boolean operators.
Discuss how nested or chained if blocks could potentially be used to obtain the same behavior, but would result in longer, less-readable programs.
## Logical _and_ truth table
| p | q | p and q |
| ----- | ------| ------- |
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
## Logical _or_ truth table
| p | q | p or q |
| ----- | ------| ------ |
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
## Logical _Not_ truth table
| p | not p |
| ----- | ------|
| true | false |
| false | true |
## Accommodations and differentiation
Students that have not taken Geometry made be intimidated by some of the concepts in the lab. Deep understanding of the theorems is not necessary; encourage the students to simply focus on the equations and inequalities presented.
If the students continue to struggle, help them build the necessary expressions, but encourage them to assemble them into the full condition on their own.
Advanced students, especially those who have taken higher levels of math, can be encouraged to add additional functionality, such as using [Heron's formula](https://en.wikipedia.org/wiki/Heron%27s_formula) to calculate the triangles area or using trigonometry to attempt to draw the triangle.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_26.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 2.6: Pong project
## Learning objectives
Students will be able to...
* Implement a well-written version of the pong game.
* Practice good style and conventions to create readable and maintainable script.
## Materials and preparation
* [Do now 2.6: Bouncing ball](do_now_26.md.html)
* [Pong project](project_2.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%202%20Pong.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%202%20Pong.pdf))
* Pong planning worksheet: ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project_2_Pong_Planning_Worksheet.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project_2_Pong_Planning_Worksheet.pdf))
* [Lab day lesson](lab_day_lesson.md.html)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
## Pacing guide
| Duration | Description |
| :------------- | :--------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit concepts |
| 20 minutes | Introduce project |
| _Days 2-9_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review and introduction
* Play a review game to remind students of the skills and concepts have been learned in this unit.
* Variables
* Operators
* Remind students of the skills and concepts they have learned in previous lessons.
### Introduce project
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements.
If students are unfamiliar with the concept of the Pong game, spend a couple minutes demonstrating one for the class. Here is an [online game](http://www.ponggame.org/) of Pong.
### Project
This project is a summative assessment for the unit. Students should be demonstrating mastery of all the skills covered.
* Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete scripts, tracking questions asked during lab time, and/or utilizing peer reviews.
Most students will require roughly 6-10 hours of total work time to complete the project.
* Adjust the amount of time allowed for the project to fit the needs of your students.
* It is vital that nearly all students complete the project before moving forward in the course.
If most students have the ability to work on assignments at home, the amount of in-class time provided can be reduced if necessary.
* If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
Ensure that students are able to ask questions in class throughout the project.
See the standard [lab day lesson](lab_day_lesson.md.html) for detailed plans for lab days.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to add a single-player mode with a computer-controlled opponent, recreate the original mechanic in which the ball’s angle depends on where it hit the paddle, add different “levels” with obstacles or differently shaped fields, or any other extension.
Struggling students can be exempted from certain features (such as ball speed or scoring) or given starter script.
* If students need significant assistance, focus them on the ball’s movement, as it is both the most computationally interesting part of the assignment.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_31.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 3.1: Abstraction and generalization
## Student objectives
Students will be able to...
* Define the terms **abstraction** and **generalization**.
* Recognize opportunities to improve algorithms by abstracting or generalizing parts into sub-procedures.
## Materials and preparation
* [Do now 3.1](do_now_31.md.html)
* [3.1 slide Deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.1.pptx)
* [Lab 3.1 - Drawing shapes again](lab_31.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.1%20Drawing%20Shapes%20Again.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.1%20Drawing%20Shapes%20Again.pdf))
* [Snap! tips][]: 0, 4, 8, 16
* Video resources
* [https://youtu.be/Dxw9cIbzaLk?t=681](https://youtu.be/Dxw9cIbzaLk?t=681)
* Video Quiz - Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
* [https://youtu.be/AighCB14bNw](https://youtu.be/AighCB14bNw)
* [https://www.youtube.com/watch?v=K0yReJ9T600](https://www.youtube.com/watch?v=K0yReJ9T600)
## Pacing guide
| Duration | Description |
| :---------| :---------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introduce terminology, demo, introduce activity |
| 20 minutes | Draw Shapes (Again) activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Define and discuss the following terms:
* **Abstraction:** removing the specifics that are not relevant in each context.
* e.g. being able to drive a car without understanding how an internal combustion engine works.
* **Generalization:** combining a group of related concepts or processes into a single category.
* e.g. spreading any condiment or ingredient onto a slice of bread (butter, jam, peanut butter, mayo, etc.).
Demonstrate constructing a custom command block.
### Drawing shapes (again)
Students should complete the [drawing shapes again](lab_31.md.html) activity individually or in diverse pairs.
Work with students to be certain that they are using custom blocks and variables as described by the activity.
Point out places where a script can be abstracted and generalized.
Emphasize conciseness into a program.
### Debrief
Discuss one or two student submissions.
Point out differences between different student solutions.
Point out missed opportunities for abstraction (if any).
Discuss how this custom block can be useful.
## Accommodation and differentiation
In addition to attempting the bonus in the lab, advanced students can be encouraged to write a new custom block that draws a specified number of the given shape (for example, 2 squares or 5 hexagons). The number of shapes should be taken as user input.
Struggling students can be given solution scripts for all of section 1. Work with these students to answer the questions in part 1.5 so that they are prepared to attempt the custom block authoring.
## University of California - Berkley teacher support resources
[BJC Lecture 1: Abstraction](https://www.youtube.com/watch?v=Dxw9cIbzaLk)
* Abstraction: 11:40-15:40
* Generalization: 15:50-20:00
[BJC Lecture 4: Functions](https://www.youtube.com/watch?v=_uKCBmQEf5w)
[MIT Scratch --> BYOB Snap!](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=10m0s) (Development of Snap!, Demo) 10:00-11:30
[BYOB-Custom Blocks](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=11m30s) (Explains functions with examples) 11:30-14:50
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_32.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 3.2: Combining loops and conditionals
## Learning objectives
Students will be able to...
* Combine loops with conditionals to create models with repeated but conditional behavior.
## Materials and preparation
* [Do now 3.2](do_now_32.md.html)
* [3.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.2.pptx)
* [Lab 3.2 - What goes up...](lab_32.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.2%20What%20Goes%20Up.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.2%20What%20Goes%20Up.pdf))
* [Snap! tips][]: 0, 4, 8, 16
* Video resources:
* [https://youtu.be/MegYWakO1yw](https://youtu.be/MegYWakO1yw)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing Guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review, lecture and introduce activity |
| 30 minutes | Gravity activity |
| 10 minutes | Review and wrap-up |
## Instructor's notes
### Review and lecture
#### Review loops and conditionals
Ask students what loops do, when they are useful, and what blocks exist.
* Loops cause code to execute multiple times.
* Loops can help reduce redundancy and increase readability.
There are three types of loops: _repeat_, _forever_, and _repeat until_.
Ask students what conditionals are for and when they are useful.
conditionals are used to execute a block of code only under certain circumstances.
Encourage discussion about previous activities.
Fill in understanding gaps when necessary.
#### Demonstrate combining loops and conditionals
Present **repeat until** and **forever if** blocks.


Ask students to suggest when these constructs might be useful.
* **repeat until** is useful when a loop needs to run not for a set number of iterations, but until some situation occurs.
* **forever if** is useful when a script should execute _any time_ a condition is true, for the duration of the program.
* Point out that the condition in **repeat until** is a termination condition, while in **forever-if** it is a continuation condition.
#### Introduce the concept of modeling
**Modeling:** building a system to simulate the behavior of a real-life phenomenon by simplifying or ignoring certain details.
Ask students to suggest systems or concepts that might need to be modeled.
Discuss important considerations when designing and implementing a model.
Lead students to realize that most sacrifice some amount of accuracy or realism for simplicity.
### Activity
Students should complete "What Goes Up..." lab individually.
Mention that the program written in this lab will be helpful for the end of unit project.
### Debrief
## Accommodations and differentiation
Take care to ensure that all students have a functional program by the end of the lab to avoid putting some students at a disadvantage starting the project.
If many students struggle, consider releasing your own solution after the lab has been completed in class.
Ask the more advanced students to assist struggling students. It is vital that all students complete this lab in advance of starting the project.
Advanced students can consider increasing the realism of their gravity model by adding acceleration and/or beginning to implement jumping.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_33.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 3.3: Customization I: parameters
## Learning objectives
Students will be able to...
* Build custom blocks that take parameters.
## Materials and preparation
* [Do Now 3.3](do_now_33.md.html)
* [3.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.3.pptx)
* [Lab 3.3 - Let me check my calendar](lab_33.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.3%20Let%20Me%20Check%20My%20Calendar.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.3%20Let%20Me%20Check%20My%20Calendar.pdf))
* [parameters example](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%203.3)
* [Snap! tips][]: 0, 4, 8, 16
* Video resources:
* [https://youtu.be/ZLxql1kLvCw](https://youtu.be/ZLxql1kLvCw)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Welcome, bell work, announcements |
| 15 minutes | Lecture and introduce activity |
| 20 minutes | Custom block parameter activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
#### Introduce block parameters
Define **parameters:** An parameter is any area in a block that accepts user input, or another block. It could be a Boolean Block or a value placed inside of a variable or block.
Ask students to speculate on risks of relying on variables instead of parameters.
* Variables could be changed by a script other than the custom block, variable names could be changed causing errors, etc.
* Emphasize importance of custom blocks being self-contained.
* Custom blocks should continue to function correctly independent of any other changes in the script.
* Custom blocks should work correctly anywhere in the script and not require specific setup or cleanup.
Point out how complicated a script would be if blocks like **move 10 steps** required setting a variable with a specific name to work.

#### Demonstrate declaration and usage of parameters
Point out that parameters are very similar to variables, except their values come outside the block.
Explain parameter types.
* Only discuss text, numbers, and Booleans.
* Other types can be mentioned, but won't be used in the course.
Ask students to describe why restricting types is important.
* Point out that parameters are passed by value.
* Specifically, changing the value of an parameter inside a custom block will typically not change the value at the call site.
* Basic parameter in pen pallette.
* Pass by value example in "Variables" pallette.
### Activity
Students should complete the [Let Me Check My Calendar](lab_33.md.html) activity individually or in pairs.
This lab consists of a series of independent custom blocks. The blocks need not necessarily be completed in the order given, but are roughly in order of difficulty.
* The bonus requires implementing a fairly complex formula.
### Debrief
Ask a different student to provide their solution to each part. If time allows, discuss multiple solutions to each part. Emphasize differences and encourage discussion about advantages and disadvantages.
Point out corner cases and cases where typed parameters are particularly helpful.
* For example, avoiding try to find out whether "bubblegum" is a leap year.
## Accommodations and dfferentiation
Part 3.4 is a fairly complex formula and should be a challenge for advanced students.
Struggling students should focus on section 1. The problems in section 2 represent more complex algorithms, but not necessarily any more difficult usage of parameters.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_34.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 3.4: Customization II: Reporters and predicates
## Learning objectives
Students will be able to...
* Build custom reporter and predicate blocks.
## Material and preparation
* [Do now 3.4](do_now_34.md.html)
* [3.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.4.pptx)
* 2 Labs to choose from:
1. [Lab 3.4 - If my calculations are correct...](lab_34.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.4%20If%20My%20Calculations%20Are%20Correct.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.4%20If%20My%20Calculations%20Are%20Correct.pdf))
2. Lab 3.4 - The technicolor window ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.4%20The%20Technicolor%20Window.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.4%20The%20Technicolor%20Window.pdf))
* [Snap! tips][]: 0, 4, 8, 16
* Video resources
* [https://youtu.be/6gT91ltwM1Q](https://youtu.be/6gT91ltwM1Q)
* Video quiz: Protected content such as unit quizzes, quiz answer keys, project sample solutions are available to those with a TEALS Dashboard account. Please email info@tealsk12.org for access information.
## Pacing Guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Lecture and introduce activity |
| 25 minutes | Custom reporter activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
#### Introduce reporter blocks
Ask students to find blocks with the reporter shape (round) and speculate as to what they do. Point out familiar examples, such as:
* 
* 
* 
Explain the concept of reporting (returning) a value, and how reporter blocks are used to provide values to commands.
Emphasize that reporters do not (and should not) perform any action. They are used to compute values which are used by commands.
#### Introduce predicate blocks (as a special case of reporter blocks)
Emphasize that predicates must return true or false. Point out examples, such as:
* 
* 
* 
Ask students why it might be useful to differentiate predicates from other reporters.
* Only predicates can be used in a conditional.
### Activity
Students should complete the ["If my calculations are correct..."](lab_34.md.html) activity individually. We have an optional lab available for this lesson, the technicolor window ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.4%20The%20Technicolor%20Window.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.4%20The%20Technicolor%20Window.pdf))
This lab consists of a series of independent custom blocks. The blocks need not necessarily be completed in the order given.
Work with students to ensure they are testing their blocks properly and reporting correct values.
### Debrief
Ask a different student to provide their solution to each part. If time permits, go over multiple students' work for each part.
Point out differences and discuss advantages and disadvantages to different approaches.
Emphasize that custom blocks do not have to be long and complicated to be useful.
## Accommodations and differentiation
Struggling students should focus on just the first 2 or 3 parts of the lab. Even if they cannot move on to the more difficult problems, getting used to defining custom reporters is helpful and important.
Advanced students who finish quickly can be utilized to assist other students or they can be challenged to complete the bonus problem using the distance formula.
If most students are not equipped to handle this math, a simpler computation, such as area of a triangle or average of three numbers, can be substituted.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_35.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 3.5: Platform game project
## Learning objectives
Students will be able to...
* Apply loops, variables, and Boolean expressions to implement a Super Mario Bros. style platform game.
* Practice good debugging skills to correct issues as they arise while programming.
## Materials and preparation
* Platform game project: [Platform game](project_3_platform_game_easy.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%203%20Platform%20Game%20Easy.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%203%20Platform%20Game%20Easy.pdf)).
* Advanced version of the project: [Advanced platform game](project_3.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%203%20Platform%20Game.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%203%20Platform%20Game.pdf))
* [Platform game planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Platform_Game_Planning_Worksheet.docx)
* A few suggested themes available for students who may struggle to come up with their own.
* Suggestions for characters, power-ups, goals, etc.
* [Snap! tips][]: 0, 4, 8, 16
## Pacing guide
| Duration | Description |
| :------------ | :-------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit topics |
| 20 minutes | Introduce project |
| _Days 2-9_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review and introduction
Play a review game to remind students of the skills and concepts have been learned in this unit.
* Basic loops
* Nested loops
* User input
* Conditional blocks
* Advanced (conditional) loops
* Boolean logic
Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks.
### Introduce project
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements. If students are unfamiliar with the concept of a platform game, spend a couple minutes demonstrating one for the class. Discourage students from simply recreating a game they are already familiar with (and using copyrighted assets) and encourage them to be creative and design their own characters and world instead. Static screens are somewhat easier to implement than smooth scrolling, but scrolling is doable with some scaffolding.
### Project
This project is a summation of the unit. Students should be demonstrating mastery of all the skills covered.
* Most students will require roughly 6-10 hours of total work time to complete the project. Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete programs, tracking questions asked during lab time, and/or utilizing peer reviews. Adjust the amount of time allowed for the project to fit the needs of your students. It is vital that nearly all students complete the project before moving on.
If most students have the ability to work on the project at home, the amount of in-class time provided can be reduced if necessary. If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
Ensure that students are able to ask questions in class throughout the project.
See the standard [lab day lesson](lab_day_lesson.md.html) for detailed plans for lab days.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to extend their games beyond the minimum required number of screens, add more features (power-ups, "boss" enemies, secret screens, etc.), create multiple "levels" that must be worked through, or any other extension.
Struggling students can be exempted from certain requirements or given a starter project.
If scaffolding this project, provide a script to perform some of the various actions required in the game (changing screens, moving the character, defeating enemies, etc.) and ask the students to fill in the triggers and conditions for using these routines.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_41.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 4.1: Introduction to lists
## Learning objectives
Students will be able to...
* Explain the concept of a `list` in a programming context.
* Identify scenarios in which lists are useful.
## Materials and preparation
* [4.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.1.pptx)
* Paper/writing implements for each group of students
* Large poster paper and markers will allow for display of the algorithms, but standard paper will work fine.
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion |
| 10 minutes | Students write Solar System algorithm |
| 10 minutes | Debrief |
| 10 minutes | Translate algorithms into pseudocode |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Describe the solar system and hook your students by explaining a way to collect and store new information and discoveries.
### Activity
In small groups,
1. have students write an algorithm for adding new Solar System discoveries to a collection of older ones. The process should be complete and detailed so that a person can unambiguously follow the steps.
2. The process itself will seem relatively simple. Ensure students think not only about the steps to be taken but the necessary materials and resources.
3. Ensure that the algorithm would work for any discovery of any name size and does not make assumptions. e.g SUPER MEGA COOL ASTEROID, etc.
* Pay particular attention to when the various materials are needed.
* The key here is that the student will need to constantly be referencing this same pool of discoveries e.g. Pool, Pool + 1 discovery, Pool + 1 discovery + another etc. etc.
Instruct students to think about how they would write a script to complete this task. They need not write actual script, but should write pseudocode to attempt to solve the problem.
After groups have finished, explain to them that usually scientists organize their discoveries alphabetically not by recently discovered. Challenge them to create an algorithm that organizes their new discoveries with their old discoveries alphabetically.
The ultimate conclusion should be that they need a way to store the entire collection of discoveries, and operate on individual parts of the collection.
### Debrief
In attempting to write pseudocode, students should realize that they need variables to store the discoveries, but do not know ahead of time how many variables will be necessary. Clever students may want to simply store the message in a single variable using the **join** block. This approach can work if they choose an unambiguous delimiter (space won't work if there are multi-word sections of the message), and is effectively the same as using a list.
Point out that, thus far, they have not seen a way to store an arbitrary number of data values. They have needed a separate variable for each value, which must be created ahead of time.
Briefly introduce the concept of a list as a means of storing multiple values in a single location. Lists have the useful property of not having a static size, so any number of values can be added at any time.
## Accommodations and differentiation
As in the peanut butter and jelly activity, discourage stronger students from dominating the conversation and instead ask them to take on a leadership role and help other group members find issues.
Struggling students can be given permission to use a higher level of abstraction, ignoring certain details that other students will attend to.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_42.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 4.2: Static lists
## Learning objectives
Students will be able to...
* Create static lists.
* Access elements of a list.
* Add and remove elements from a list.
## Materials and preparation
* [Do now 4.2](do_now_42.md.html)
* [4.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.2.pptx)
* [Lab 4.2 - You talkin' to me?)](lab_42.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.2%20You%20Talkin%20To%20Me.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.2%20You%20Talkin%20To%20Me.pdf))
* [List Components](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/SNAP%20Lists%20Components.docx?raw=true) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/SNAP%20Lists%20Components.docx?raw=true)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/SNAP%20Lists%20Components.pdf))
* [Context - Free grammars for English](http://www.cs.uccs.edu/~jkalita/work/cs589/2013/12Grammars.pdf)
* [Context - Free grammars](https://www.cs.rochester.edu/~nelson/courses/csc_173/grammars/cfg.html)
* [Woodward English](https://www.woodwardenglish.com/wp-content/uploads/2018/01/parts-of-speech-english.jpg)
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and introduce activity |
| 25 minutes | Grammar Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
#### Review the concept of a list from the previous lesson
Ask students to brainstorm examples of when lists could be useful.
* To store an unknown number of values (e.g. a bunch of student test scores, shopping list, the songs of your favorite music artist).
* To store a collection of related values as one entity (e.g. the number of absent students each day over a week, how often a video on YouTube in a week).
#### Demonstrate creating lists
Use the [List Components](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/SNAP%20Lists%20Components.docx?raw=true) file to demonstrate the list structure.
Use the **list** block to create a simple list.
* Point out the format in which lists are displayed (gray box with red elements).
* Show that lists can be assigned to variables like other values.
* Emphasize that the list is considered a single value, even though it consists of multiple values.
* Point out and explain basic list operations blocks.
The **item**, **add**, and **delete** blocks will be most important. The **length** block will be useful as well.
* Point out that these blocks all take a list as an argument.
### Activity
Students should complete the [You Talkin' to Me?](lab_42.md.html) activity individually or in pairs.
Encourage students to be creative with their word lists.
Don't allow students to fixate on the exact grammatical correctness of generated phrases and sentences.
If this is a major concern, choose words for the lists such that generated phrases will always be grammatically correct.
### Debrief
Ask a student to present and discuss their solution to each step.
Emphasizes uses of lists and encourage students to discuss and think about why lists were necessary.
Ask students to consider if the tasks would have been doable without lists.
## Accommodations and differentiation
In addition to the bonuses in the lab, advanced students can attempt further extensions of the grammar, including conjunctions, non-transitive verb phrases, and/or recursive rules (e.g. multiple adjectives).
A more complex context-free grammar for English sentences can be found [here](http://www.cs.uccs.edu/~jkalita/work/cs589/2013/12Grammars.pdf)
Struggling students should focus on generating a noun phrase from only a few words. The other parts of speech and phrase types can be omitted without losing the key learning objectives.
Non-native English speakers or those with low literacy may struggle with the grammatical concepts here. Since the grammar is not the key objective, feel free to scaffold liberally and/or substitute a different type of grammar.
You can also provide a grammar supplement with [example sentences](https://www.woodwardenglish.com/wp-content/uploads/2018/01/parts-of-speech-english.jpg).
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_43.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 4.3: List practice I
## Learning objectives
Students will be able to...
* Traverse a list, accessing each element one at a time.
* Perform operations combining all elements in a list.
* Select defined subsets of elements in a list.
## Materials and preparation
* [Do now 4.3](do_now_43.md.html)
* [4.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.3.pptx)
* [Lab 4.3 - Guess who](lab_43.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.3%20Guess%20Who.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.3%20Guess%20Who.pdf))
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and demonstration |
| 30 minutes | Lab activity |
| 5 minutes | Wrap-up |
## Instructor's notes
### Lecture
In small diverse groups, ask students to consider how to count the number of students with July birthdays in the room.
* Provide only a few minutes to work through this-- students need not write full, formal algorithms, but simply describe an approach.
Have groups share with each other and work together to come up with a single approach, hopefully settling on asking each student if s/he has a July birthday and counting the number of yeses (or something similar).
Define _traversal_ as the process of accessing each element of a list in order and performing some operation. Explain that the operation can be anything, and may not actually be performed on every element.
Provide a few examples of possible operations (say each person's name, count the number of females, add up the total number of siblings, find the average GPA, etc.)
Explain that traversing is how many problems involving lists are solved.
As a group, develop sample script for a simple list traversal, such as the following:

Ask leading questions to help students write each line of the script, one a time, then gradually put the pieces together ("build up" approach).
* Point out that the **say** block can be replaced by any script (including larger blocks of scripting for more complex operations), but that the rest of the script will typically be the same.
* Emphasize that the _index_ variable is keeping track of where we currently are in the list, and can be used in the traversal operation if wanted, as in:

### Activity
Students should complete the [guess who](lab_43.md.html) activity individually or in pairs.
Students will be performing several traversal operations, some of which simulate mapping, filtering, or reducing/folding the list. You can discuss these operations if you feel the class can handle it.
Part 1.3 requires use of the **join** block. Be sure that the students are comfortable using this block.
### Wrap-up
Ask students to briefly describe how the various parts of the lab were similar or different.
* Hopefully the students find that the scripts were quite similar for each part.
Ask students to describe something they found challenging about the lab.
* You will go over the correct solutions to the lab in the next lesson.
## Accommodations and differentiation
Advanced students can attempt more complex filters in part 2.3 (such as finding all names that contain at least two vowels) and/or more advanced maps in part 1.3 (such as greeting each person by first initial).
Struggling students should focus on parts 1.2, 2.1, and select items from part 2.3. Partial script can be provided.
## University of California - Berkley teacher support resources
[BJC Lecture 9: Recursion](https://www.youtube.com/watch?v=JKn3nsfzBdA)
* Recursion 0:50-1:40
* Recursion Demo in Snap! 1:40-17:00
* Overview 17:00-21:00
* Definition of Recursion 21:00-24:30
* Examples of Recursion (You Already Know It!) 24:30-26:20
* Trust the Recursion 26:22-29:40
* Summary of Recursion 29:40-End
[Snap! Tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_44.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 4.4: List practice II
## Learning objectives
Students will be able to...
* Traverse a list, accessing each element one at a time.
* Perform operations combining all elements in a list.
* Select defined subsets of elements in a list.
## Materials and preparation
* [Do now 4.4](do_now_44.md.html)
* [4.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.4.pptx)
* [Lab 4.4 - Number cruncher](lab_44.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.4%20Number%20Cruncher.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.4%20Number%20Cruncher.pdf))
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review and debrief lab 4.3 |
| 25 minutes | Number Cruncher Activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Ask students to define _traversal_ and outline the basic script pattern.
* Have students mention the key points (index variable, use index to access each item, repeat length of list, etc.).
#### Review solutions to lab 4.3
Ask a student to provide their solution to each part.
Discuss errors or flaws in each solution.
Point out similarities between each part, emphasizing that the basic script pattern is the same each time with only the operation performed on each item changing.
Further classify various traversals (maps, filters, folds).
* If necessary, provide the basic script pattern for a traversal again:

### Activity
Students should complete the [Number Cruncher](lab_44.md.html) lab individually.
The operations in this lab are similar to those in lab 4.3, but work with lists of numbers instead of names. As a result, students should progress more quickly.
As in lab 4.3, help students realize that the basic script pattern in each part will be the same.
### Debrief
Ask one or two students to share their solution to each part of the lab.
If all students seem to grasp the concept, not all parts need to be reviewed.
* If skipping some parts, be sure to review at least parts 1.1 (a fold), 2.1 (a map) and 2.2 (a filter).
Point out that the solutions from labs 4.3 and 4.4 will look quite similar, even though in lab 4.3 the lists contained names in in lab 4.4 they contained numbers.
The traversal script pattern is the same regardless of the type of elements in the list.
## Accommodations and differentiation
Advanced students should complete both bonus parts of the lab (1.5 and 2.3) and then assist struggling students.
Students who need more assistance should focus on parts 1.3, 2.1, and 2.2. Ensure that all students are able to complete at least these three parts before concluding the lesson.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_45.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 4.5: Sequential search
## Learning objectives
Students will be able to...
* Explain the sequential search algorithm.
* Implement several variations of sequential search.
## Materials and preparation
* [Do now 4.5: List tracing](do_now_45.md.html)
* [4.5 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.5.pptx)
* [Lab 4.5 - It's around here somewhere](lab_45.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.5%20Its%20Around%20Here%20Somewhere.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.5%20Its%20Around%20Here%20Somewhere.pdf))
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and demonstration |
| 25 minutes | It's Around Here Somewhere Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
Ask students to consider how to determine if a particular person is in the room or not. At first, you will likely get answers like "call out the person's name" or "look around." Press the students to come up with a method that will always work, including when the person is not present. If necessary, ask them to pretend they are a computer. Point out that solutions like "look around" are too high-level, and in reality, there is a lot more going on (such as looking at each person individually).
Guide students to the process of checking if each person is the one they are seeking, in some deterministic order, until they have either found the person or checked everyone. Emphasize that the absence of the person is only confirmed when everyone has been checked, but that the presence is known as soon as the person is found.
Ensure students recognize that this process is a traversal of the people in the room. Explain that the process of traversing a list looking for a particular item is known as a "sequential search."
Ask students to think about the efficiency of this algorithm. Emphasize best, worst, and average cases (both what those cases are and how long they take). Students should have a basic understanding of the fact that the speed of the search is dependent on the size of the list. If students seem prepared, ask them to speculate under what circumstances you might be able to do better (eventually leading to binary search).
Show the script for a basic sequential search:

Point out that this script is another variation of a traversal.
Emphasize that this is only one variant of sequential search. The specifics of what to report can vary (true/false, index in list, item itself, etc.).
### Activity
Students should complete the [It's around here somewhere](lab_45.md.html) activity individually or in pairs.
* Each part asks students to write a slightly different sequential search. In all cases, make sure students are clear on what they should be reporting, both when the desired item is found and when it is not.
### Debrief
Ask one or two students to provide their solutions to each part.
Point out the similarities in each solution, emphasizing that the algorithm remains constant and only the value that is reported changes.
## Accommodations and differentiation
Advanced students can be encouraged to explore more efficient searching algorithms (specifically binary search).
Struggling students should focus on just parts 1.1 and/or 2.1 of the lab. Remind these students that they are starting with a traversal and simply changing what happens to each item.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_46.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 4.6: Guess my word project
## Learning objectives
Students will be able to...
* Apply lists to implement a complete version of _Guess my word_.
* Exercise good programming practices to produce a program that is not only functional but also elegant and well-written.
## Materials and preparation
* [Do now 4.6: Spaceman](do_now_46.md.html)
* Download [Spaceman template](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/spaceman.pptx)
* [Spaceman instructions](https://tekhnologic.wordpress.com/2017/03/01/spaceman-an-alternative-to-hangman/)
* Watch Spaceman [template tutorial](https://videopress.com/v/Fk5cYswc)
* Prepare two or three rounds of Spaceman to play with the class as the Do now.
* [Project 4 - Guess my word](project_4.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/Project%204%20Guessmyword.docx?raw=true)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Project%204%20Guessmyword.pdf))
* Guess my word planning worksheet: ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project_4_Guessmyword_Planning_Worksheet.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project_4_Guessmyword_Planning_Worksheet.pdf))
* Word Lists to use for Spaceman and Guess My Word Game
* [Starter code](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Project%204.6_starter)
* Randomly generated [Word list][]
* [Countries and states](Country-n-State.txt)
* A word list from which words can be selected for the game, such as [Word list][]
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Review and introduce project |
| As needed | Lab time for Guess My Word project |
## Instructor's notes
### Review and introduction
Review the various skills and concepts have been learned so far in the unit. Consider using some of the tools you learned about in Summer Training. (Kahoot, Quizziz, Socrative, Plickers).
* Put particular emphasis on the maintenance of lists and traversals.
* Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks.
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements.
* Focus students' attention on the checkpoints to help them avoid becoming overwhelmed.
Help students import the word list into a list, either by right-clicking on the list view and selecting "import" or by parsing the online list directly using the **http://** block. This is not one of the objectives of the project, so feel free to provide starter project if you prefer.
* Emphasize that generating the "word pattern" or "blanks" and keeping that sequence up-to-date with each guess is the hardest part of the assignment, and should not be overlooked.
* Remind students that it will be important to keep straight what each variable and list in the script is used for. Each variable or list should have a single purpose, and those purposes should never be conflated.
### Project
This is a summative assessment project. Students should be given at least a few days in class to work on the project. The exact schedule should be determined by your teaching team based on overall class capability and other factors. Here is some [starter code](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Project%204.6_starter) to have students start with the list already populated.
* If most students have the ability to work at home, you can consider reducing the amount of in-class time provided and requiring students to spend time working at home.
Provide a means for students to ask questions throughout the project and provide assistance as needed.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to add extensions such as:
* Enabling guessing of the entire word.
* Allowing the user to specify the length of the word to be guessed.
* Keeping statistics (win-loss record, fewest guesses, etc.) across games.
Struggling students can be given a starter project or exempted from certain features.
* Though it is the most difficult part of the assignment, tracking the "blanks" is the best practice working with lists and should be preserved.
* The requirements to display a graphical figure, track repeated guesses, and specifically recognize a win can be removed for students in need of significant simplification.
[Word list]: wordlist.txt
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_51.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 5.1: Intro to cloning
## Learning objectives
Students will be able to...
* Explain why prototyping and clones can be useful.
* Describe how complex goals can be accomplished using cloning.
## Materials and preparation
* [5.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%205.1.pptx)
* [Lab 5.1 - Connect the dots](lab_51.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20Word/Lab%205.1%20Connect%20the%20Dots.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20PDF/Lab%205.1%20Connect%20the%20Dots.pdf))
* If possible, create large poster-sized versions of the dot grids (each grid is 12 x 3).
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introduce activity |
| 25 minutes | Activity |
| 15 minutes | Debrief and wrap-up|
## Instructor's notes
### Introduce activity
Inform students that they will be drawing some figures by following specific instructions.
Emphasize that students must follow all instructions in the lab carefully.
Throughout the activity, ask students to think about other ways they could accomplish the same goals and the advantages and disadvantages of each approach.
### Activity
Split students into diverse groups of at least six. If the number of students is not an exact multiple of six, create a few groups of seven and have students take turns being "active".
* Students should follow the steps in the lab, being careful to act as a group.
In each part, the group will draw the letter 'C' six times, using slightly different instructions.
* Students should, hopefully, notice that in part 3, they are able to achieve similar but not exactly the same results by all following the same instructions. (Though each student draws a 'C', they are not all in the same location.) In each part, they were able to improve the efficiency and clarity of the instructions.
### Debrief
Ask each group to share their answers to the questions at the end of each part.
Discuss how this approach could be applied to programming.
Introduce the terms _prototyping_ and _cloning_ as synonyms:
_Prototyping:_ creating a single "master" entity that defines the behavior for a group of objects, then creating many copies of the prototype to duplicate the behavior.
## University of California - Berkley teacher support resources
[BJC Lecture 11:Recursion II Alijia Yan](https://www.youtube.com/watch?v=w2d_snYBLeY&index=11&list=PLA4F0F0CA4A3EE7F4)
* Mobile World Congress 0:00-2:15
* Recursion:Factorials (Factorial (n)+ n! 2:30-7:40
* [Fibonacci and Fibonacci Series Video](http://www.youtube.com/watch?v=w2d_snYBLeY&t=7m45s) 7:45-11:45
* Fibonacci Ex: fin(n) Math and Snap! blocks 11:50-13:15
* Example of Recursion: Counting Change 13:20-17:30
* Call Tree for “Counting Change” with Snap! example 17:35-22:50
* Summary of Recursion 25:40-26:21
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_52.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 5.2: Cloning sprites
## Learning objectives
Students will be able to...
* Demonstrate the difference between sprite and global variables.
* Explain how cloning and prototyping simplify similar sprites in the same script.
* Create prototype sprites and clones of the prototype sprite.
* Explain the difference between a "master" sprite and a "clone" sprite.
## Materials and preparation
* [Do now 5.2](do_now_52.md.html)
* [5.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%205.2.pptx)
* [Lab 5.2 - Lots of balls](lab_52.md.html)([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20Word/Lab%205.2%20Lots%20of%20Balls.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20PDF/Lab%205.2%20Lots%20of%20Balls.pdf))
* Test out the lab on student machines before class (cloning can bring the web browser to a crawl on some machines).
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introductory discussion |
| 30 minutes | Lab activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
#### Example game
Show students a brief video demonstrating space invaders.
#### Discussion
Ask students to think about how we create all the “invaders”?
* Answer with current knowledge: make one invader sprite, and copy it many times while adjusting the copies as necessary.
Ask what might go wrong or be bad about this approach.
* If anything in an invader changes, it will need to be changed many times.
* Lots of sprites clogging up the program that are all basically doing the same thing.
#### Demonstration
Introduce cloning as the automated way of doing the manual copying.
Demonstrate how to create a clone using:

Point out that clones inherit all aspects of the "master" or "prototype" sprite, including scripts.

### Activity
Students should complete the [Lots of balls](lab_52.md.html) lab.
* This lab will be repeating much of what was in the lesson. This is intentional.
* Students should focus on ensuring they are differentiating between "master" sprites and "clone" sprites, and that the stage is serving as the main "driver" for the program.
## Accommodations and differentiation
Advanced students can attempt to assign properties to clones (color, size, etc.) so that not all clones look alike. To do this, they will need to use a global variable to temporary hold the value that can be "claimed" by the clone.
Struggling students should focus on just creating a single clone from the prototype and not worry about creating multiple clones.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_53.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 5.3: Communicating with clones
## Learning objectives
Students will be able to...
* Pass information from the master to individual clones.
* Delete clones when they are no longer needed.
## Materials and preparation
* [Do now 5.3](do_now_53.md.html)
* [5.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%205.3.pptx)
* [Lab 5.3 - Fewer balls](lab_53.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20Word/Lab%205.3%20Fewer%20Balls.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20PDF/Lab%205.3%20Fewer%20Balls.pdf))
* [Helping trios activity](helping_trios.md.html)
* Test out the lab on student machines before class to ensure the machines can handle the number of clones.
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion |
| 30 minutes | Fewer Balls lab |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Review the lab from yesterday again, focusing on the identical nature of the clones.
Ask students to describe how (or if) the prototype communicates to the clones.
Ask students how they might remove balls if they decide there too many.
* Students should ultimately realize that there is no way to destroy only some clones.
Introduce the distinction between "global variables" and "sprite variables".
* Global variables ("for all sprites") are visible to and usable by all sprites in the program.
* Sprite variables ("for this sprite only") are only visible to and usable by a single sprite.
Emphasize that, when cloning is used, each clone gets its own copy of any sprite variables inherited from the prototype.
Ask students to brainstorm situations in which each type of variable is appropriate.
* Global variables are best for application-level data, such as sprite counts, game level number, score, etc.
* Sprite variables are best for properties that may be specific to each sprite, such as speed, id #, etc.
### Activity
Students should complete the [fewer balls](lab_53.md.html) lab.
* Students will likely have difficulty isolating the uses for each variable. Remind them that each variable serves a specific purpose, and that they should focus on keeping straight what variable does what.
* Currently, the lab is written to use global variable "id" to talk to one sprite at a time. If not used carefully, this design pattern has the potential for race conditions. If you believe students are capable, you can have a discussion about race conditions and concurrency and the problems that can arise.
### Debrief
Have students pair up and review each other's script. Encourage students to discuss differences in their approaches and try to understand why each wrote the script as they did.
If students have struggled with the lab, consider implementing [Helping trios activity](helping_trios.md.html).
Ask a few students to share difficulties they or their partner had and/or different approaches they took the problems.
## Accommodations an differentiation
For faster students, explaining and demonstrating race conditions would be valuable. Instructors could also give out project with a "simple race condition" (if such a thing exists) and ask the students to fix it.
Advanced students can also try to implement features giving them additional control over clones, such as changing a specific clone's speed or direction.
Struggling students can ignore the requirement to be able to create new sprites after some have been deleted and just focus on deleting clones one at a time.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_54.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 5.4: Space Invaders project
## Learning objectives
Students will be able to...
* Use cloning to implement a complete version of _Space Invaders_.
* Exercise good programming practices to produce script that is not only functional but also elegant and well-written.
## Materials and preparation
* [Project 5 - Space Invaders](project_5.md.html) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%205%20Space%20Invaders.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%205%20Space%20Invaders.pdf))
* Example of [Space Invaders](http://www.pacxon4u.com/space-invaders/)
* [Lab Day Lesson](lab_day_lesson.md.html)
* [online game](http://www.pacxon4u.com/space-invaders/)
* [GrudgeBall](http://toengagethemall.blogspot.com/2013/02/grudgeball-review-game-where-kids-attack.html)
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :------------- | :--------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit concepts |
| 20 minutes | Introduce project |
| _Days 2-12_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review and introduction
Play a review game (such as [GrudgeBall](http://toengagethemall.blogspot.com/2013/02/grudgeball-review-game-where-kids-attack.html)) to remind students of the skills and concepts have been learned in this unit.
* Definition of "prototyping"
* Creating clones
* Using a master sprite
* Modifying clone behavior
* Passing information from the master to clones
* Deleting clones
Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks
### Introduce project
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements.
If students are unfamiliar with Space Invaders, spend a couple minutes demonstrating one for the class. IHere is an [online game](http://www.pacxon4u.com/space-invaders/)s.
Remind students that their version of the game does not need to exactly mimic the classic version. In particular, they need not have quite as many invaders, create barriers for the player to hide behind, or duplicate invader movement or firing patterns exactly.
### Project
This project is a summative assessment for the unit. Students should be demonstrating mastery of all the skills covered.
* Most students will require roughly 10-15 hours of total work time to complete the project.
* Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete programs, tracking questions asked during lab time, and/or utilizing peer reviews.
* Adjust the amount of time allowed for the project to fit the needs of your students.
* It is vital that nearly all students complete the project before moving on.
* Ensure that students are able to ask questions in class throughout the project
* See the standard [lab day lesson](lab_day_lesson.md.html) for detailed plans for lab days.
If most students have the ability to work on assignments at home, the amount of in-class time provided can be reduced if necessary.
* If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to add different types of invaders that behave differently, implement a Galaga-style "swoop" behavior from the invaders, add player power-ups (such as advanced weapons), or any other extension.
Struggling students can be exempted from certain features (such as levels or invader firing) or given starter script.
If students need significant assistance, focus them on the invaders. Getting a set of invaders created and moving properly will best target the vital objectives from this unit.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_61.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 6.1: Design basics
## Learning objectives
Students will be able to...
* Identify the key considerations when designing a piece of software.
* Describe methods for prioritizing features, use cases, and/or scenarios.
* Explain why design and planning are necessary steps in the software engineering process.
## Materials/Preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :-------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introduce final project, demo examples |
| 25 minutes | Sample Design activity |
| 10 minutes | Debrief and wrap-up|
### Understanding context, defining, ideating
In this course, we are not actually typing out any script. In our case, "coding" would refer to the stage where we actually drag-and-drop in the design environment. Later when we learn other languages, "coding" would refer to when we start typing out script in a specific language like Java or Python.
When we first learn computer scripting, it may seem fun to dive right into coding. Resist the urge to do so! Software development is a process. It begins with carefully thinking about, and planning out, your design. This includes envisioning what the final product might look like, and planning out the steps needed to implement it. Remember, "design then script".
## Instructor's notes
### Introduce project
Talk about how far students have come this semester. Ask students to think back to the start of the semester and remember how little they knew about scripting. Briefly list a bunch of the things they've learned (drawing, animation, variables, loops, conditionals, loops, etc.). Show a lab or assignment from early on and remind them that, not that long ago, this was challenging, whereas it now seems nearly trivial.
Explain that, for their final project, the students will get to design and build a script of their own choosing. Point out that this will involve more than just writing script. There will be planning, design, scheduling, and other project management tasks. Emphasize that students will be graded on not only the script they produce, but the process they used to design, plan, and implement it.
Demonstrate a few example projects (with as much variety as possible). Try to hit a bunch of different types of scripts. Many students will gravitate towards games, but other options include simulations, productivity tools, musical projects, animations, and more.
Distribute the project rubric and point out key aspects of the requirements. Point out the steps in the process and that each one is equally important. Specifically mention the large number of points for things _not_ related to coding. Remind students that, as they are now experts, there are high expectations for the depth, complexity, and completeness of their projects.
* What are the different categories of software applications?
* When looking at an application, what type of functionality does it have?
* Who are the end users, or target audience?
* What do you like, or not like, about it?
* What do other users/reviewers say about it?
* How does it compare to, or stand apart from, other similar apps?
As we study and analyze sample applications, we gain experience that will help us design our own.
### Sample design activity
Tell students that, as a class, they will now practice some of the design and planning tasks for the project on a well-known app. Pick an app that both you and most of your students have a deep familiarity with, but that is not too complex. Twitter, Instagram, Pinterest, or other relatively small-scope social media work well here. If necessary, scope down the app by focusing on only the core features (e.g. only consider public, text-only Tweets to start). In this step, try to keep students from fixating on making their app look _exactly_ like the existing app.
Walk through each of the design steps in the project rubric for the chosen app:
* **Pitch** - describe the basic functionality of the app in one paragraph of less.
* **Define** - List the features/scenarios the app will support.
* **Sketch** - Draw a very basic wire frame sketch of the main "screens" of the app.
#### Expand
Build a spec using the [Final Project Plan Organizer][]. In this step, emphasize completeness and detail. Leaving out steps or requirements will make it difficult to plan effectively and will likely force major changes or cuts later.
#### Plan
Based on the feature list and spec, create a full development plan using the [Final Project Development Plan][]. As tasks and costs are listed, remind students to keep an eye on the total amount of time required and to include buffer for things going wrong. Be sure to prioritize tasks so that cuts can be made if necessary.
### Debrief
Once all documents have been created, ask students what the next steps should be. Students should be focused on the highest-priority tasks and should understand the plan for evaluating progress throughout the project. Preserve the documents created in the activity to give to students as examples when planning their own projects. Emphasize that both the spec and the plan are "living documents" and should be updated as the project progresses (when new features are thought of, tasks are cut for time or complexity, priorities are reorganized, etc.).
## Accommodation and differentiation
This lesson could easily take two or even three days depending on the class. Take as long as is necessary to ensure students have a complete understanding of the steps necessary to create their final project, but try not to get too bogged down in the details of the sample app.
For classes with a large number of self-sufficient students, consider having students complete this activity in small groups rather than as a full class. Along the way, have groups share their progress and provide feedback to each other.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md.html
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_62.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 6.2: Research and ideate
## Learning objectives
Students will be able to...
* Identify potential users, intended impact, and possible unintended negative consequences.
* Generate ideas to create range of possibilities using a brainstorm technique.
* Conduct user-centered research to understand design opportunities and barriers.
* Critically analyze factors when choosing between project ideas.
* Prioritize proposed project ideas using the identified factors.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review process and identify first steps |
| 5 minutes | Brainstorming |
| 10 minutes | Pitch writing |
| 15 minutes | Peer review |
| 5 minutes | Prepare interview or survey questions
| 5 minutes | Debrief and wrap-up|
### Personal design interests and project goals
When coming up with ideas, personal interests are considered. The final product often reflect the "heart and soul" of the designers behind the product. If you are working in a group, each person should be willing to see the project through to completion.
### Product life cycle
The design of a new software product progresses through a sequence of stages called the "life cycle", and is often associated with changes in the marketing situation. The first step of introducing a product involves getting to know the market, or in other words, the users or potential customers out there.
### Understanding context, defining, ideating
When coming up with a great product idea, it is important to conduct user-centered research to understand the needs of the client/customer/end-user. This research helps us understand design opportunities and barriers. This research could be done as a survey or interview, given to random people, to people in your friends or family circle, or to a specific population of people (like customers of a supermarket, or members of a soccer club, for example).
## Instructor's notes
### Review
Ask students to identify the steps in the design and planning process as discussed in [Lesson 6.1](lesson_61.md.html). Remind students that all steps are vital, and that thorough and thoughtful planning and design can make the coding phase much easier. Inform students that today they will take the first steps in designing their final project.
### Brainstorming
Give students 3-4 minutes to brainstorm and write down as many project ideas as they can. This should be done mostly in silence. At this point, there should be minimal detail, no evaluation or rejection of ideas, and no discussion. In particular, students should not think about the difficulty or "coolness" of the project yet. Just write down ideas. Have each student share one idea. Do not allow discussion, criticism, or explanation. Each idea should be summarized in only a few words or a single sentence.
### Pitch writing
Have students look at their list of ideas and spend a few minutes thinking about them. Then, each student should pick their favorite ideas and write a "pitch" for the project. A pitch should be no more than a short paragraph and should describe the basic, high-level features of the project. The pitch should _not_ include any implementation details (scripts, sprites, etc.).
Pitches should include a moderate level of specificity. Enough for someone to imagine how the app will work, but not so much to get bogged down. Enforce the "one short paragraph" restriction. If a student is having difficulty developing a pitch for an idea, that might be a sign that the idea is not fully-formed enough to be a final project. If a student is having trouble keeping the pitch short, the project may be too complex to complete in the available time.
### Peer review
Pair students up and have students take turns reading one of their pitches to their partner and asking for feedback. Partners should ask questions to help identify both the best and worst parts of each pitch. Remind students to keep all feedback constructive, respectful, and professional. Students should not criticize each other's ideas, but can point out potential concerns.
Students should take notes during their conversations and refine their pitches based on their partner's feedback and their own realizations. If time allows (or over the course of multiple days), repeat this process with new partners.
### Prepare interview questions, and evaluate
At this points, students should have between one and three pitches that are well-defined and reasonably well fleshed-out. Overnight, students should do some research, re-consider their pitches and rank them in order or which they would most like to pursue as their final project. Make sure students don't just pick the "coolest" sounding idea, but also consider the technical challenges, amount of time available, and their own interest in and willingness to see the project through to completion.
As homework, students may create a simple survey or a list of questions to ask friends or relatives to help refine ideas, and subsequently, decide on the final project. Make changes to the project pitch based on these recommendations.
Software design is a process that takes time. Conducting user-centered research helps narrow down and refine ideas.
* What do potential users think?
* For example, what components are necessary?
* What components are nice to have?
* Is it easy to use?
## Accommodation and differentiation
If students are having difficulty coming up with project ideas, encourage them to think about existing software. While simply recreating an existing app should be a last resort, thinking about applications they already know can help students come up with functionality they might like to include.
If your class is fairly self-sufficient and mature, you can consider allowing students to "borrow" an idea from a classmate if they find one they like better than any of their own. Make sure the person who had the idea is OK with it being borrowed, and emphasize that the students must each build their own version.
This can be a bit dangerous, as it puts the student somewhat behind in the process right from the start, since they won't have as much context having not written the pitch themselves. Consider carefully whether this is a good idea.
Encourage each student to pick a project that fits his or her level of technical skill. Make sure students are not over committing and choosing projects they do not have the skills to complete. Also try to discourage stronger students from choosing simpler projects in an effort to do less work.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md.html
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_63.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 6.3: Defining requirements
## Learning objectives
Students will be able to...
* Define key _user-scenarios_ for a project and the features required to implement each scenario.
* Explain the importance of wire framing when designing an application.
* Capture key scenarios using _sketches_ - (hand drawn, or with drawing tool).
* Refine design based on user centered research.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review pitches |
| 20 minutes | Scenario definition |
| 15 minutes | Wire framing |
| 5 minutes | Debrief and wrap-up|
### Prototype, test, and make
From Lessons 6.3 to 6.5 you will be doing this type of iterative and incremental work. Lesson 6.3 does not involve any "coding" yet. You will start with sketching things down with pencil-and-paper, or with a drawing tool. Use the handouts to help you. You may revise some sketches later on, after you have started implementation (ie, "coding") and testing.
## Instructor's notes
### Review pitches
Have students look at their revised pitches from yesterday. Tell them that they will be choosing _one_ to pursue as their final project. If desired, give students a few minutes to rework their pitches or get more feedback from a classmate or instructor. Ask students to choose which idea they want to pursue, and write it down on the top of their [Final Project Plan Organizer].
### Defining scenarios
Defining the term "scenario" for students:
* _Scenario: a description of a set of interactions and/or tasks that describe a start-to-finish example of how a user might want to use the application_.
Explain that defining scenarios helps a programmer focus on what features are actually necessary to enable the key user interactions for their application. Instruct students to write down at least **3** scenarios for their project describing, from start to finish, interactions a user might have with their script to accomplish a specific goal. The scenarios should have a moderate level of detail in the description of the user interaction (e.g. "push a button," "type in their name," etc.) but should not include any design or implementation details. Once students have written their scenarios, they should review them and develop a list of the necessary features to enable each scenario. Again, there should be minimal technical detail in these descriptions, instead focusing on details of the user experience. The feature lists should be more about _requirements_ than implementation.
### Wire framing
Define the term _wire frame_ for students: a high-level sketch of an application's user interface intended to help visualize layout, interactions, and transitions_. Explain that wire frames do not include any details (such as specific graphics or text), but instead provide a broad impression of what an application will look like to aid in design and planning.
Students will complete page 1 of the organizer by sketching or wire framing the important screens for their project. If you have one available, a wire framing tool such as [Balsamiq](https://balsamiq.com/) can be used instead of sketching by hand. As with all wire framing, students should not focus on the specific details of the sprites, images, etc. that will appear, but instead design the basic layout and main components of each screen. Encourage students to reference their feature lists to ensure they include _all_ necessary screens for their project, including simple things like a splash screen, help screen, or exit ("game over") screen.
### Debrief
As class ends, ensure students retain their work as they will use it to construct a detailed specification and implementation plan tomorrow.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md.html
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=tru
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_64.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 6.4: Building a plan
## Learning objectives
Students will be able to...
* Break down, and identify the main technical components needed for the functional project specifications (scenarios).
* Explain the purpose of each technical component.
* Develop the project idea into a full, detailed specification.
* Create a plan that includes specific steps or a list of bite-sized tasks.
* Estimate time required for tasks.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review feature lists and wire frames |
| 20 minutes | Spec writing |
| 15 minutes | Building implementation plan|
| 5 minutes | Debrief and wrap-up|
### Prototype, test, and make
From Lessons 6.3 to 6.5 you will be practicing an iterative and incremental project management work flow. In Lesson 6.3 you identified user scenarios. Now in Lesson 6.4 you identify what technical components are needed for each scenario, and define all the tasks that need to be done. You are not "coding" yet.
Each defined task, or step, should be bite-sized, and specific enough to do. This plan should include testing done by you, as the developer, and by other users. As you progress, gather feedback from users/testers over time, and make changes to your design, and plan, as needed.
#### Applied technologies
Your classroom may have a diverse student population, and include English Language Learning (ELL) students. Following a project management flow helps ensure that the development process is simple, clear to follow, well documented, and easy to share and evaluate. Practicing these skills will help students collaborate and share their work in diverse classrooms. These skills prepare students to engage more successfully in an increasingly global technology industry.
## Reference
[English Language Learning](https://www2.gov.bc.ca/gov/content/education-training/k-12/teach/teaching-tools/english-language-learning)
## Instructor's notes
### Review
Ask students to take out their feature lists and wire frames from [Lesson 6.3](lesson_63.md.html). They will be using these to develop a more detailed specification and plan for their project today. If time allows, ask one or two students to share their feature list and/or wire frame and discuss with the class. Ensure that students have an understanding of the proper level of detail at this point.
### Spec writing
Using the details from their pitch, their feature lists, their wire frames, and the feedback they've received, students should fill out the rest of the [plan organizer][]. It is vital at this stage that students be as detailed and thorough as they can. Any missing information will complicate the process later when they realize what was left out. Encourage students to take their time and make sure they hit everything.
While this process is happening, instructors should circulate through the class and check-in with student. Verify that they have a complete, well-thought out idea that is feasible to complete in the available time. If you have concerns about a student's ability to complete the proposed project, help them scope down by removing or simplifying features.
### Implementation plan
Students should use the details built in their plan organizer to list the tasks necessary on their [Final Project Development Plan][]. Emphasize to students that tasks should be at a very low level of granularity (hence the time requirement being specified in minutes). If a single task has a time estimate of more than a few hours, the student should try to break the task into smaller pieces. Ensure that students do not skip "trivial" or "simple" tasks (such as building a script they have written before) or non-coding tasks (such as developing graphics) in their plan.
### Debrief
As class ends, remind students that their spec and implementation plan will be their guides throughout the process. They should update them each day and keep them with them at all times. Ideally, anytime there is a question about the requirements or scope of the project, the spec should have the answer. If not, it's a new idea and the spec needs to be updated accordingly.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md.html
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_65.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 6.5 - Project implementation
## Learning objectives
Students will be able to...
* Apply the skills developed throughout the course to implement a medium* to large-scale software project.
* Realistically evaluate progress during software development and identify when cuts are necessary.
* Prioritize features and scenarios and choose which should be eliminated or modified if/when resources and/or time become limited.
* Record time taken for tasks, and lessons learned in the process, to help refine estimates.
* Record iterations of prototyping.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing guide
| Duration | Description |
| :------------- | :--------------------------------------------- |
| _Days 1-15_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Check-in |
| 30 minutes | Lab time |
| 10 minutes | Exit ticket |
### Prototype, test, and make
From Lessons 6.3 to 6.5 you will be practicing an iterative and incremental project management workflow. Now it's time to start following your plan. You can finally start "coding", and testing! Remember that not all tasks involve coding. Take note of the time it takes you to complete each task (this will help you make better estimates in the future). Estimating time for tasks can be difficult to do. This will get better with experience.
## Instructor's notes
### Check-in
Remind students daily to keep their planning documents up-to-date and make edits as necessary. Point out how many days remain and have students check their implementation plan to ensure they do not have more work than time remaining. If they do, they will need to create a tentative cut list in case they don't catch up.
Using previous days exit tickets, questions from students, instructor awareness of trouble points in the project, and/or any other resources to determine what needs covering. Use this time as an opportunity to remind students of previous labs or activities that may be applicable to their project, and/or how far along they should be by the end of the day
### Lab time
Allow students to work on their project at their own pace. Provide a mechanism for students to ask questions of course staff as needed. Simply having students raise hands often does not work well, as it can be hard to keep track of in what order hands were raised; consider a queue of some kind where students write their names when they have a question
When there are no current questions, circulate and observe progress, stepping in if students appear stuck but are not asking for help
### Exit ticket
Before students leave, have them answer the following questions on a small piece of paper, or in their daily journal notebook:
1. What was the last thing you accomplished on the project today?
2. What is the first thing you will work on tomorrow?
3. Are you currently ahead, behind, or on track with your schedule? If you are behind, what tasks will you cut to get back on track? If you are ahead, what are some extra features you can add?
4. What is the riskiest remaining task for your project?
These answers will help you determine which students to visit first the next day. Any student who indicates they are behind should get a consult with an instructor the next day to help get them back on track. Encourage students to save each day's version of their planning documents with a new name so they can track progress and recover cut tasks if they make up time.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md.html
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/lesson_66.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson 6.6 - Project sharing
## Learning objectives
Students will be able to...
* Share their progress, invite feedback, collaboration, and if applicable, prepare a marketing pitch.
* Decide on how and with whom to promote and share their project.
* Critically evaluate the design process, their ability to work effectively, including the ability to implement project management processes.
* Identify new design issues, including how they or others might build on their concept.
* Identify and evaluate their skills, and things to learn in the future.
* Analyze the role and impact of their project idea, and similar technologies, in societal change.
* Consider how cultural beliefs, values, and ethical positions affect the development and use of technologies.
## Materials and Preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing guide
| Duration | Description |
| ------------- | --------------------------------------------- |
| _Sharing Day_ | |
| 5 minutes | Welcome, introduction |
| 40 minutes | Project sharing (Format defined by teacher) |
| 10 minutes | Concluding thoughts |
### Share, applied Skills, applied Technologies
At the end of the day, software must connect with people. Now it's time to share your project with others! It's also fun, and helpful, to see what others have been doing. Furthermore, it's time to reflect on the whole development process, and share what you have learned from this experience.
Invite questions and feedback from peers and guests. Celebrate your achievement. Consider ideas for improvement and future work. Think about how you could do things differently using other tools/strategies. Think about how this project might be adapted for, or influenced by, another culture, social situation, or target user group.
## Instructor's notes
### Preparation
Choose a date for project sharing ahead of time, and inform students of the format. Check that each student's planning documents, and or daily journal notes, are up to date. Some possible formats (depends on the size of your class):
* 40 minutes for individual presentations, followed by 10 minutes of "open-floor" time where students can roam around the classroom and look at each other's work science-fair style, and answer questions;
* Prepare a Project Walk-through video ahead of time, showcasing their project;
* Share in pairs, and then shift to the next table/chair round-robin, or jigsaw style;
* Conduct an interview of a few projects at the beginning of class over a period of time.
This may be a good opportunity to invite guests or visitors to your classroom. Peer feedback is valuable. It helps us grow. This can be done by having a few minutes for Q&A after the presentation. Or, peers can be invited to complete a short survey. Remember to put any emotions or hard feelings aside.
### Sharing Content
Inform students that their sharing should include: pitch or poster (highlight key features); demo (how it works); reflections on their development process (what went well? what didn't go well); lessons learned; ideas for future work.
Other questions to consider:
* What skills did you use to complete this project?
* What other skills do you wish you had?
* How does your project/product compare to other ones that you have seen?
* How does a project/product like yours impact societal change?
* Do you foresee any unintended, or negative consequences, of it's use?
* How might someone of a different culture, value or ethical position view your project/product?
### Concluding thoughts
Congratulate students on completion of project. Emphasize that while having a fun final product to show others is great, this Unit is also about practicing a project management flow, where learning from self-reflection and experience (both good and bad - even mistakes) is invaluable.
## Accommodation and differentiation
Students who are shy and afraid of public speaking may be given the option of preparing a "walk-through" video to show-case their project experience.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md.html
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/markdeep-footer-tocstyle-none.txt
================================================
================================================
FILE: docs/markdeep-footer.txt
================================================
================================================
FILE: docs/markdeep-header.txt
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
================================================
FILE: docs/master_vocab.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Master Vocabulary List
## Unit 0 Beginnings
| Word | Definition |
| --- | --- |
| Algorithm | A complete, well-defined sequence of steps for completing a task or solving a problem. |
| Computer | An electronic machine that can solve different problems, process data, store & retrieve data and perform calculations. |
| Computer Science | The study of the principles and use of computers. |
| Computer Program | A sequence of instructions or steps, written in a language that can be understood by a computer, that will be used by the computer to complete a task or solve a problem.|
| Debug | A process of locating and removing computer program bugs, fixing errors or abnormalities. |
| Programming Language | A vocabulary and set of grammatical rules for instructing a computer or computing device to perform specific tasks. |
| Cartesian coordinate system | A system in which the location of a point is given by coordinates that represent its distances from perpendicular lines that intersect at a point called the origin. |
| x-axis | The axis along which values of x are measured and at which both y equal zero. |
| y-axis | The axis along which values of y are measured and at which both x equal zero. |
| Origin | A fixed point from which coordinates are measured, as where axes intersect. |
## Unit 1 Basics
| Word | Definition |
| --- | --- |
| Block | Puzzle-piece shapes that are used to create code. |
| Script | Different types of blocks linked together. |
| Sprite | An object which performs functions controlled by scripts. |
| Stage | The background of a project, performs functions through scripting. |
| Costume | A costume is one out of possibly many "frames" or alternate appearances of a sprite. |
| X Position | The position that a sprite or the mouse is at along the horizontal axis. |
| Y Position | The position that a sprite or the mouse is at along the vertical axis. |
## Unit 2 Loop-de-Loop
| Word | Definition |
| --- | --- |
| Loop | A type of block that causes other code to run multiple times in succession. A control flow statement that allows code to be executed repeatedly based on a given Boolean condition. |
| Nested Loop | A loop used inside the body of another loop. |
| Conditional | A block used to make a choice between executing two different chunks of code."If" statements. |
| Variable | A placeholder for some value. Types of variables: Global variables - apply to all sprites Sprite variable - applies to one sprite Script variable - parameter that applies to one script |
| Boolean Expression | A value (text, number, picture, etc.) that evaluate to true or false. |
| Boolean Operators | Boolean expressions that can be nested. |
| Function/Methods | Other programming languages, like Python or Java, use these terms to refer to the same idea as a custom block is reusable. |
| Truth Tables | A tool for evaluating the possible inputs and outputs of a Boolean expression. |
| Modeling |Building a system to simulate the behavior of a real-life phenomenon by simplifying or ignoring certain details. |
## Unit 3 Variables and Customization
| Word | Definition |
| ------------- | --------------------------------------------- |
| Abstraction | Removing the specifics that are not relevant in a given context. |
| Generalization | Combining a group of related concepts or processes into a single category. |
| Custom Blocks | Allow for one to make their own programming blocks. |
| Command Block | Puzzle-piece shaped block that executes a command (it causes an effect). |
| Reporter Block | Report a value, usually for use in another block's input slot. |
| Predicate Block | A hexagonal block that always returns a Boolean value (true or false). |
| Argument | Any area in a block that accepts user input, or another block. It could be a Boolean Block or a value placed inside of a variable or block. The value that is "passed into" a parameter of a custom block. |
| Say Block | The block gives its sprite a speech bubble with the specified text — the speech bubble stays until an another speech or thought block is activated, or the stop sign is pressed. |
## Unit 4 Lists
| Word | Definition |
| --- | --- |
| Programming List | Called an 'array' in most programming languages, this holds lots of values. |
| Lists Block | A block which controls a list. |
| Operator Block | A block that performs math functions and string handling. |
| List Element | A part of a list. |
| Traverse | Go through or travel across an item/list. |
| Transform | Create a new list based on the values of the old list. |
| Sequential Search Algorithm | A method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. |
| Index Variable | Keeps track of where you currently are in a list. |
| Join Block | Links two values together and reports the result. |
| Contains Block | Checks an operator block for a particular variable. |
## Unit 5 Cloning
| Word | Definition |
| --- | --- |
| Cloning | A feature that allows a sprite to create a clone, or semi-duplicate, of itself, while the project is running. Clones of a sprite will be the same as the original or parent sprite but as a separate instance. Clones inherit the parent's scripts, costumes, sounds, and properties, yet they can then be modified.
| Global Variable | A variable that can be used by all of your sprites. |
## Unit 6 Final Project
| Word | Definition |
| ------------- | --------------------------------------------- |
| Scenario | A description of a set of interactions and/or tasks that describe a start-to-finish example of how a user might want to use the application |
| Wireframe | A high-level sketch of an application's user interface intended to help visualize layout, interactions, and transitions |
================================================
FILE: docs/md-to-markdeep.cmd
================================================
@echo off & setlocal
echo %time%
robocopy /E .\ .\docs /XD %CD%\docs
cd .\docs
set sed="C:\Program Files\Git\usr\bin\sed.exe"
@REM -- Convert files at the root of the repo.
for %%f in (*.md) do (
@echo %%f
type >%%f.html markdeep-header.txt
%sed% >>%%f.html "s/\.md/.md.html/g" %%f
type >>%%f.html markdeep-footer.txt
del "%%f"
)
MOVE /Y README.md.html index.html
echo %time%
Exit /B
================================================
FILE: docs/project_1.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 1: Animated storytelling
Students will use programming basics to implement an animated version of a story.
## Overview
Storytelling is a great way to convey culture. Some examples of storytelling are plays and nursery rhymes. Famous plays like those of William Shakespeare have been performed over centuries. Some have been adapted for modern times like West Side Story. A nursery rhyme is a short poem or song written for children. Though the term is typically applied to British or other English language poems, similar concepts exist in many world cultures. These short stories are generally meant to entertain and/or calm young children. Some are believed to have a hidden moral or meaning related to historical events, but many of these meanings are questionable.
### Emphasize with students
Digital tools and technologies can help capture stories in our own heritage, especially ones that might otherwise be lost, or difficult to write down.
In North America there are over 1000 indigenous communities, speaking more than 300 distinct languages, and a multitude of dialects. Students may be familiar with many places in North America that have been given names adapted from the original aboriginal language spoken in the area, such as Alaska ("peninsula"), or Ontario ("beautiful lake"), or Minnesota ("cloudy water"), or Seattle ("named after a Native American Chief"). Traditionally indigenous peoples relied on storytelling instead of the written language to pass down information and history.
Many other communities have used storytelling as a method to pass down history. And these stories were often shared from generation to generation by word of mouth from a relative or elder.
For this project, student may be encouraged to portray an animation that depicts some aspect of their own heritage, especially stories that have been passed down by word of mouth. Some ideas:
* Animation of how a city/town name came to be
* Animated map of an immigration journey
* A personal family story
## Reference
* [Traditional plays](http://www.npr.org/sections/ed/2015/07/30/427138970/the*most*popular*high*school*plays*and*musicals)
* [Nursey rhymes](http://en.wikipedia.org/wiki/Nursery_rhymes)
* [History of immigration to the US](https://www.youtube.com/watch?v=Fe79i1mu-mc)
* [Welcome to Canada: 150 years of immigration](https://www.youtube.com/watch?v=cX02bJ1pyw4)
## Details
### Behavior
You will create a short animation depicting a story of your choice.
* Whenever the green flag is clicked, your animation should display your chosen story line by line somewhere on the stage. (This should work correctly even if the last run was interrupted and restart.)
* As each line is shown, sprites should act out the story.
* The animation should advance on its own, but should do so at a pace that allows each action to complete and the viewer to read the line before the next line is shown and new action begins.
* In addition, the sprites must act out the story; you should not simply create a series of static backgrounds or costumes that show a stop*motion version of the story.
* Each line must be readable and must stay shown while the corresponding action is occurring.
* When the story ends, there should be a way for the user to replay the entire animation from the beginning.
* You are free to be as creative as you like with your choice of sprites and actions.
You may choose from the provided sprites or create your own. (You will not be graded on your artistic skills.) You may interpret the story literally or be clever with your depiction (but don't go too far). However, all sprites, behaviors, words, and animations must be school*appropriate.
If you choose a particularly long story, you may not need to animate the whole thing. Please check with your teacher if you think your idea is long enough for this.
### Implementation details
Fill out a [Planning Worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx) for the above script. Make sure you consider all aspects of the script carefully.
As mentioned above, your animation must display the text and animate each line. Action must be performed by sprites and must consist of more than simply changing costumes. You must include the following components in your animation:
* At least two sprites that act in some way to contribute to the depiction of the story
* At least one sprite that moves
* At least one sprite that rotates
* At least one sprite that changes costume
* At least one sprite that is both hidden and shown at some point
Note that multiple of these requirements may be satisfied by the same sprite (e.g. the same sprite can both move and change costume), but you must have at least two separate sprites that act in the animation.
### Sharing
Stories are meant to be shared. Prepare to demo your animation with a partner, in front of the whole class, or with your family members. See if your audience can understand the meaning of your animation, and be prepared to provide some background information associated with the story. The animation can also be video captured and shared online.
### Emphasize with students (Continued)
### Curriculum competencies - Design sharing
As you create software, you will need to keep the end user, or final audience, in mind. Be thinking of what you are hoping to achieve or communicate when you are creating a piece of work, and be prepared to explain your thoughts behind the ideas.
## Grading rubric
| **Functional Correctness (Behavior)** | Points |
|:--|--|
| Animation depicts a story | 2 |
| Story is shown one line at a time | 2 |
| Each line is accompanied by sprites depicting the story, and all action is related to the current line | 3 |
| Clicking green flag starts animation from the beginning | 1 |
| Animation progresses at a reasonable pace | 2 |
| User is able to restart animation when it concludes | 2 |
|**Total** | **12** |
| **Technical Correctness (Implementation)** | |
| script shows good creativity and effort | 2 |
| At least two sprites participate in the action | 2 |
| At least one sprite moves | 1 |
| At least one sprite rotates | 1 |
| At least one sprite changes costume | 1 |
| At least one sprite hides and/or appears | 1 |
| **Total** | **8** |
| **Project total** |**20** |
|
================================================
FILE: docs/project_2.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 2: Pong
Students will implement a well-written and engineered version of the classic arcade game Pong.
## Overview
In 1972, when video games were still very new and relatively unknown, a new game took the world by storm. A simple simulation of tennis using two-dimensional graphics, minimal sounds, and extremely basic controls, Pong became the first arcade game to achieve widespread popularity and is credited as the genesis of the modern video game industry. Today, the game has been played, remade, spun-off, and referenced innumerable times and it remains, to many, the single most identifiable and recognizable game in the history of video games.
## Details
### Behavior
#### Gameplay
Pong is played by two players each controlling a paddle with the goal of defending their end of the "field." A ball begins play in the middle of the screen and, at the start of each round, moves in a random direction. The ball bounces off the upper and lower edges of the field and the players' paddles. Each time the ball bounces off a paddle, its speed increases by a small amount. When the ball bounces off a paddle, its direction is reversed with a small random variation to add unpredictability to the game.
#### Scoring
If the ball touches the left or right edge of the field, a point is scored for the opponent of the player who was defending that edge and the ball resets to the middle of the field. When one player reaches 5 points, the game is over and that player is the winner. The winner is announced on the screen and the players are given the opportunity to start a new game.
#### Player control
Paddles are positioned a short distance away from the side they are defending, and can only move up and down, not side to side. Each player should have two keys to control the movement of their paddle: one for up, and one for down. Paddles move at a set speed that is the same for both players. The player on the left will control their paddle with the 'w' and 's' keys. The player on the right will use the up arrow and down arrow keys.
### Required checkpoints
#### Checkpoint 1
Players can control paddles; the ball starts in the middle, moves in a random direction, and bounces
#### Checkpoint 2
The ball speeds up when it hits a paddle, and resets to the middle when it hits the left or right edge
#### Final due date
A point is scored when the ball hits the edge on the opponent's side of the field; the game ends when one player reaches five points; players can start a new game after the game ends
## Planning worksheet
Part of the design process is planning. The Pong planning worksheet is an example of how to plan. Fill out the planning worksheet first before writing any scripts.
## Grading rubric
| Functional correctness (behavior) | Points |
| :------------------------------------------------------------------------------------ | :--------- |
| Players can control paddles with required keys | 2 |
| Ball begins play at middle of field at start of game and after each point | 3 |
| Ball bounces correctly off upper and lower edges and paddles | 4 |
| Ball increases in speed each time it bounces off a paddle | 3 |
| A point is scored for the opponent each time the ball touches the left or right edge | 3 |
| Game ends when one player reaches five | 2 |
| Winning player is shown when game ends | 1 |
| Players can begin a new game | 1 |
| **SubTotal** | **19** |
| **Technical correctness** (implementation) | |
| Gameplay is smooth, polished, and intuitive | 3 |
| Program shows good creativity and effort | 2 |
| Program is well-documented and exhibits good style | 2 |
| **Checkpoint** 1 | 4 |
| **Checkpoint** 2 | 4 |
| **Sub Total** | **15** |
| **Total** | **34** |
================================================
FILE: docs/project_2_alternative.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 2: Pong remix
Students will implement a well-written and engineered to the Pong Project.
## Learning Objectives
Students will be able to ...
* Research, ideate, and apply personal interests to an application that includes:
* 1 or more moving sprites
* 2 or more user keyboard controlled sprites
* The sprites should interact in a way that allows the users to accumulate a score or value.
* Practice good style and conventions to create readable and maintainable program.
## Overview
Read over Lesson 2.7 and the pong project (project_2.md.html) file.
Your challenge is to create a project of your own that contains similar elements.
## Possible ideas
### Jurassic world
The Stegosaurus lived in the Upper Jurassic period around 155 to 145 million years ago. It is one of the most easily recognized dinosaurs, with its distinctive double row of kite-shaped plates on its back, and the long spikes on its tail. The armor was necessary as it lived with such meat-eaters as Allosaurus and Ceratosaurs. Learn more about dinosaur's [here](https://en.wikipedia.org/wiki/Category:Late_Jurassic_dinosaurs_of_North_America):
Imagine that a few Jurassic era dinosaurs are living in Alaska and now being endangered by our changing climate which has caused melting glaciers and sharp icebergs. These beautiful creatures roam around randomly, unaware of impending threats to their survival. Your goal is to move your truck (user-controlled-sprite1) to catch a dinosaur, so they can be safely transported to another habitat where they are safe to roam and survive. Meanwhile a moving iceberg (user-controlled-sprite2) is endangering the animals. When the dinosaur comes in contact with the iceberg, it is injured, and it's movement is affected...
### Penny catcher
The Penny, also called a one-cent piece, is a coin worth one one-hundredth of a dollar. Learn more about the Penny [here](https://en.wikipedia.org/wiki/Penny_(United_States_coin)):
Imagine that the Penny has been discontinued and after many years, hardly any young person has seen a penny. You go to your grandfather's attic to look for something, and by accident, spill several baskets of coins. Coins are flying around randomly. Your job is to catch the pennies with your basket as fast as possible. Some coins are falling into cracks in the wood. Some coins are not pennies (and you don't care about them). To complicate matters, a window washer pops by and he happens to be a numismatist (pronounced `noo-miz-ma-ticks`) someone who collects coins. He is also trying to catch the pennies, thus competing with you...
### On your own
Come up with your own creative idea!
## Required checkpoints
1. Create 2 or more user controlled sprites; Create 1 or more randomly moving sprite.
2. When the random-sprite touches certain wall/object it changes movement and/or direction.
3. Final due date: When the user-controlled sprite and random-sprite touch, something happens to the score or counter. When the score or counter reaches are certain value, or condition, the animation or game is over.
## Planning worksheet
Part of the design process is planning. The "pong planning worksheet" is an example of how to plan. Create a similar planning worksheet first before writing any script. Describe your own "game play" or animation rules using 1-2 paragraphs.
## Grading rubric
| **Functional Correctness (Behavior)** | Points |
| :-------------------------------------------------------- | :--------- |
| Players can control sprites with required keys | 2 |
| Random-sprite begins from a fixed location and returns there after certain event(s) | 3 |
| Random-sprite bounces correctly and moves within the window space | 4 |
| Random-sprite's movement changes after certain event(s) | 3 |
| Score is changed when some interaction happens between sprites | 3 |
| Animation ends when some score is achieved | 2 |
| Winner or conclusion is announced when animation ends | 1 |
| Users can begin a new animation | 1 |
| **Total** | **19** |
| **Technical Correctness (Implementation)** | |
| Animation or game logic is smooth, polished, and intuitive | 3 |
| script shows good creativity and effort | 2 |
| script is well-documented and exhibits good style | 2 |
| Checkpoint 1 | 4 |
| Checkpoint 2 | 4 |
| **Total** | **15** |
| **Project total** | **34** |
================================================
FILE: docs/project_3.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 3: Advanced platform game
**Students will implement a side scrolling platform game, example Super Mario Bros.**
## Overview
Platform games are among the most widely recognized types of video games. Composing about one third of all console games at the peak of their popularity, platform games are characterized by their relative simplicity and by the common game play element of jumping across suspended platforms (hence the name) to avoid falling into a hazard. Platform games also typically include enemy characters, items that grant the hero special abilities ("power*ups"), and a "checkpoint" system that allows the player to restart from partway through a game or level when he or she dies.
### Big ideas
Personal design interests require the evaluation and refinement of skills; Tools and technologies can be adapted for specific purposes
Consider using the familiar platform game concept to not only entertain, but also educate or bring awareness to social concerns, an environmental issue, or some other context.
*Example 1:* In Pacific Northwest, there are many efforts exist to promote and guide a sustainable future of wild Pacific Salmon and their [habitat](https://www.fisheries.noaa.gov/species/chinook*salmonStudents). Students can create a game where the player can help salmon swim back to the stream where they were born, jumping upstream through ladders and fishways, battling hazards and enemies (predators, fishermen). Game play can introduce elements of education and awareness.
*Example 2:* The West Coast has been battling with more Wildfires than ever in [history](https://www.fireweatheravalanche.org/fire/). Students can create a game where a traveler drives through different towns, parks, and highways in your area, extinguishing hazards (cigarette butts, campfires), battling enemies (fires out of control, irresponsible tourist), enforcing fire bans, reporting fires, being a good neighbor, implementing home prevention, rescuing animals, and so on. Game play can introduce elements of geography (parks and forests, lakes and waters) and climate and terrain (temperature, animal habitats). Read more about wildfires in [here](https://fsapps.nwcg.gov/afm/activefiremaps.php):
How can the classic platform game be adapted to a specific purpose, cause, or context that interests you, or impacts your community?
## Behavior
### Game play
In a platform game, the player controls a hero who moves throughout the world attempting to reach an endpoint and/or accomplish a goal. Along the way, the hero encounters hazards such as pits (into which he or she can fall) and enemies (which can either move or be stationary). The hero has a finite number of chances (known as "lives") to achieve his or her objective. Each time the hero succumbs to a hazard, a life is lost and the player must try again.
#### The hero
The hero moves around the world under the player's control. The hero can perform three basic actions: move left and right (controlled by the arrow keys) and jump (by pressing the space bar). As the hero moves throughout the world, he or she is subject to gravity. This means that when the hero jumps or moves off the edge of a platform, he or she should return quickly to the ground (or another platform). The hero should never fall through a platform or the ground.
#### Screens
Your platform game will be a side*scrolling game. In this style of game, the scenery changes as the player moves horizontally across the screen. While many modern side*scrollers (including Super Mario Bros.) scroll smoothly as the player moves, our game will use a simpler system and consist of screens. Each screen represents one section of the overall world in which the game takes place. The hero should be able to move freely around each screen, but when the hero reaches the far right edge of a screen, the next screen should appear and the hero should be placed on the far left edge at the same height. Your game must include three distinct screens, and each screen must have one hazard.
#### Hazards and lives
Your script should include one of each of the following types of hazards:
* A falling hazard (a hole, pit, or other opening) into which the hero can fall if he or she does not jump to avoid it. Falling to the bottom of this hazard causes the hero to die.
* A stationary enemy that does not move, but that causes the hero to die if it is touched.
* A moving enemy that also causes the hero to die if it is touched, but that moves in some way.
Note that an enemy can be either a character (like Goombas in Super Mario Bros.) or an environmental hazard (such as spikes). When the hero dies by either falling down a falling hazard or touching an enemy, he or she loses a life. If the hero has lives remaining, one should be lost, used power*ups and defeated enemies should be reinstated, and the hero should be placed back at the left edge of the current screen. Otherwise, the game is over and a suitable message should be displayed.
#### Power Ups
While moving through the world, the hero may obtain power*ups that grant him or her special abilities. Examples can include increased jumping power, invulnerability, or the ability to destroy enemies. These abilities should be temporary, and there should be some visual indication when the hero has access to them. A power*up should appear as an item (sprite) in the world. The hero will obtain the abilities by touching the power*up sprite, at which point the power*up should disappear. Your game should include two distinct power*ups, one of which is required for the hero to win the game.
In addition, one of your power*ups should be hidden, meaning that the player must take some action before he or she can obtain its abilities. For example, in Super Mario Bros., Mario must jump into a special block to make many power*ups appear. A hidden power*up should not be visible until it is triggered by the hero, and the hero should not be able to obtain the abilities until the power*up is revealed.
#### Winning the game
There should be some clear end goal that, when achieved by the hero, ends the game in victory. This victory condition should be obvious even to a new player. You need not (and probably should not) provide written instructions to the player about this condition. Make sure to use easily identifiable visual indicators such as flags, doors, etc.
#### Reset button
At any point during game play, if the player presses the 'z' key, the game should reset to its initial state. The game state after pressing the 'z' key should be indistinguishable from when the game first begins. This means, among other things, that:
* the hero should return to the left edge of the first screen, lose all special abilities, and be given back all his or her lives
* any destroyed enemies should be reinstated and replaced in their original positions
* obtained power*ups should become available and revealed power*ups should be hidden
## Implementation details
### Design and creativity
Your script should be well designed and have a unifying theme, characteristic, or style. This can be a particular style of artwork, common colors, and/or related types of characters. In addition, you should show some effort and creativity in your design. Do not simply recreate an existing game or use only ideas put forth in this spec. Come up with some original concepts for characters, backgrounds, power ups, etc. and utilize them in your game. If you make us say "Wow!" it may even be worth some extra credit. Using copyrighted assets (including characters or artwork from an existing game), even with modification, is not allowed.
### Custom blocks
Throughout your script, you should use custom blocks to generalize common operations and increase the readability and maintainability of your script. Your script must include at least three custom blocks, at least one of which must take arguments. Do not limit yourself to just three blocks: use custom blocks (including arguments and reporters) anywhere you feel it will help your script. Part of your grade will be based on not only meeting the minimum usage requirement but also on your decisions of when, where, and how to use custom blocks.
### Documentation
In addition to functioning well, your script must be well documented and readable. This includes, but is not limited to, things such as:
* organizing your scripts so that they can be read and comprehended easily
* giving your sprites meaningful names
* naming and using your variables well
* including comments to describe the structure of your script and any particularly complex or unintuitive pieces of script
### Required elements
Your script must include, at a minimum, the following script elements:
* At least two variables
* At least one conditional (if or if-else) statement
* At least two messages, one of which must be received and responded to by multiple sprites
### Peer feedback
As part of the software development experience on this project, you will participate in a peer review with one or more of your classmates. Near the end of the project, you will play another student's game and provide him or her with notes and comments. Your partner(s) will also play your game and offer the same feedback. Describe to your partner what parts of the game you liked. You should offer suggestions for features that could be improved or changed as well as look for bugs in the script you are reviewing. Keep your comments constructive and professional! Don't just point out things you don't like—explain your thinking and propose solutions. Also, restrict your comments to things that can be reasonably addressed. Do not tell your partner that he or she made a poor choice of theme and should start over, for example.
After receiving your peer feedback, you should consider the comments carefully and respond. You will be expected to turn in the feedback provided to you and identify ways in which you modified your game in response to the feedback you received.
#### Curriculum competencies - design sharing
As you create software, you will need to put yourself in the end*user's position, and imagine yourself using the software. At the same time, providing objective, critical analysis and feedback of other people's work will not only benefit others, but also help you in your own design work. Being able to welcome, and provide, feedback are essential skills for a software developer.
### Required checkpoints
1. Screens should be designed; the hero should be able to move and jump; gravity should work; reset button should be functional
2. Hazards and enemies should be present; death should work properly.
3. Lives, power*ups, and victory should be implemented; all other required script components must work
## Grading rubric
| **Functional correctness (behavior)** | **Points** |
| :-- | :-- |
| Left arrow, right arrow and space bar control hero's movement. Hero does not move through walls. | 2 |
| Hero is subject to gravity, and does not fall through platforms. | 2 |
| Game consists of three screens. | 1 |
| Game contains One falling hazard (pit), one stationary enemy, and one moving enemy. | 3 |
| Player loses a life when falling down the falling hazard or touching an enemy. Hero restarts on current screen after death. | 2 |
| Player starts with three lives and game ends when player is out of lives. | 2 |
| Game contains two power-ups, one of which is hidden and one of which is necessary to win the game. | 3 |
| Hero has a clear goal to win the game. | 1 |
| Game play is clear and intuitive, even to a brand new player. | 1 |
| Game resets when the 'z' key is pressed. | 2 |
| **Total** | **19** |
| **Technical Correctness (Implementation)** | |
| Well designed visually and has a consistent theme. | 2 |
| Shows good creativity and effort. | 2 |
| Well documented and exhibits good style. | 2 |
| Includes at least two variables. | 2 |
| Includes at least two messages, at least one of which is received and reacted to by multiple sprites. | 2 |
| Includes at least one conditional statement. | 1 |
| Includes at least three custom blocks, at least one with arguments. | 4 |
| Custom blocks are used where appropriate. | 2 |
| Provide valuable test feedback to at least two other students. | 2 |
| Test feedback from at least two other students. | 2 |
| **Checkpoint 1** | **2** |
| **Checkpoint 2** | **4** |
| **Total** | **27** |
| **Grand total** | **46** |
================================================
FILE: docs/project_3_platform_game_easy.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 3: Platform game
Adapted from Forest Ridge High School's Mario project.
**Students will implement a side-scrolling platform game For Example, Super Mario Bros.**
## Overview
Platform games are among the most widely recognized types of video games. Composing about one third of all console games at the peak of their popularity, platform games are characterized by their relative simplicity and by the common gameplay element of jumping across suspended platforms (hence the name) to avoid falling into a hazard. Platform games also typically include enemy characters, items that grant the hero special abilities ("power-ups"), and a "checkpoint" system that allows the player to restart from partway through a game or level when he or she dies.
## Details
### Controllable sprite
Your script should have a "Mario" sprite. It does not necessarily need to look like Mario (a simple stick figure will suffice). Mario should respond to user input. Specifically:
* Mario should clearly “face” the right when you push the right arrow key
* Mario should clearly “face” the left when you push the left arrow key
* Mario should perform an animated "in-place" walk when you hold left or right arrow key
* Mario should jump based on some input (you can decide the key or mouse click)
### Moving scenery sprites
You should have scenery sprites that move based upon Mario’s traveling on the level. It is up to you to decide the level scenery, but you should meet the following requirements:
* There should be at least two scenery sprites (Example: A mountain and a tree)
* You should layer these sprites relative to Mario and each other. For example, Mario should always be “in front” of any background scenery sprites
* Scenery sprites move relative to Mario as he moves. For example, when you hold down the right arrow key, the background sprites should move from right to left in the stage.
* Following with the layers, scenery sprites should move at different speeds so that one seems farther away. For example, a faraway mountain should move more slowly than a nearby tree.
* Scenery sprites should roll over/re-appear when they hit the edge of the stage. For example, when Mario is walking to the right, the scenery Sprites should re-appear on the right side of the stage when they roll off the left.
### On-ground enemy
There should be an on-ground enemy for Mario to contend with. Specific criteria here include:
* There is at least one on-ground enemy.
* The enemy sprite moves towards Mario, independent of whether Mario is moving (e.g. regardless of whether the user is pressing an arrow key).
* The enemy sprite reappears/rolls-over when he hits the edge of the stage.
* The enemy sprite is animated when he is moving towards Mario.
* If Mario does not jump he runs into the enemy and the game ends with an appropriate message Hint: you can use the `stop all` block to end all scripts.
* It should be possible for Mario to jump over the enemy.
## Programming habits
We will again look for you to incorporate good programming habits in your script:
* Using Start and Stop blocks.
* Making sure you initialize state appropriately so that your script is repeatable.
* Add comments to your script so it is easy to understand.
* Always keep in mind all Good Programming Skills you’ve been taught.
## Additional extensions
Once you complete the above, you can extend your script. Some suggestions:
* Include flying enemies for Mario to dodge or duck
* Keep score based on how many objects Mario gets by [Hint: Use a variable and show it on the screen]
* Have Mario jump to ‘grab’ an object that offers Mario extra points or more powerful abilities (such as jumping higher or not being killed when he runs into an enemy). The objects must appear at random times and move smoothly as Mario runs
**We will demo the most interesting projects in class, so be creative!**
## Grading rubric
The detailed list for what we will use to grade your projects is below. Please review your projects before submitting to be sure you meet all of them. If you have any questions on whether you meet a requirement, please ask us!!
|Requirement | Points |
|:------------|:-------|
| Mario turns to the right on right arrow key | 5 |
| Mario turns to the left on left arrow key | 5 |
| Mario performs an in-place animated walk if you hold down either arrow key | 5
| Mario jumps based on some input | 5 |
| There are least two scenery sprites | 5 |
| Scenery sprites are layered with Mario (e.g. appropriate layering blocks are in your script) | 5 |
| Scenery sprites move based on Mario’s movement | 5 |
| Scenery sprites move at different speeds (e.g. far away versus near) | 5 |
| Scenery sprites roll over when the fall of the stage | 5 |
| There is at least one on-ground enemy | 5 |
| Enemy sprite always moves towards Mario | 5 |
| Enemy sprite re-appears/rolls over correctly | 5 |
| Enemy sprite is animated when it moves | 5 |
| If Mario does not jump, he runs into the enemy and the game ends nicely and properly | 10 |
| Mario can jump over the enemy | 5 |
| *Good programming #1:* script has clear start and stop | 5 |
| *Good programming #2:* script is repeatable and initializes state correctly | 5 |
| *Good programming #3:* Use of comments in your script | 5 |
| *Good programming #4:* General skills you’ve been taught | 5 |
| *Good programming #5:* Custom blocks used to break down script into logical parts | 5 |
| **Extra Credit:** Include flying enemies for Mario to dodge or duck | 5 |
| **Extra Credit:** Keep score based on how many objects Mario gets by | 5 |
| **Extra Credit:** Have Mario jump to ‘grab’ an object that offers Mario extra points or more powerful abilities. The objects must appear at random times and move smoothly as Mario runs | 10 |
| **Extra Credit:** Create Your Own Extension | 0-10 |
| **TOTAL POINTS** | **105** (135 Possible with all the extra credit) |
================================================
FILE: docs/project_4.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 4: Guess my word
Students will implement a "Guess my word" word game.
## Overview
In Guess My Word, one player (the "chooser") chooses a secret word and another player (the "guesser") attempts to guess the word one letter at a time. If a guessed letter appears in the word, all instances of it are revealed. If not, the guesser loses a chance. If the guesser figures out the secret word before he or she runs out of chances, he or she wins. If not, the player who chose the word wins. Chances are tracked using a figure drawing of your choice. You can build a bear or build an ice cream cone, or disassemble a snowman, be creative. The figure is drawn one part at a time, and the guesser loses when the entire figure has been drawn or disappears. This game is also the basis for the TV game show Wheel of Fortune.
### Behavior
#### Game play
In this implementation of Guess my word, the computer will take on the role of the "chooser" and the human player will be the "guesser." The computer will secretly choose a word from a list (see below) and show the player how many letters are in the word by displaying a sequence of blanks (underscores). Then, the computer will begin asking for guesses. If the player guesses a letter that is in the secret word, all blanks representing an instance of that letter should be replaced by the letter. If the guessed letter is not in the word at all, the player should lose a chance and a new part of the figure being built should appear or disappear if figure is being disassembled. If the player guesses a letter he or she has already guessed, he or she should not lose a chance, even if that letter is not in the word. If the player guesses all letters in the word, he or she wins. If the figure being built is completed, the player loses. In either case, the secret word should be revealed after the game is over.
#### Sprites
Your game will need to include at least three sprites: the figure being built or disassembled, a "host" sprite that asks the player for a guess and informs him or her whether the guess is correct, and an "assistant" sprite that tells the player the status of the secret word. You may use more sprites if you think they are appropriate. The host and assistant should have clear roles and should never do each other's job.
#### Word status
As the game is played, the player should be shown the current guessed status of the secret word. Letters that have been correctly guessed should be shown in the correct locations. Unguessed letters will appear as blanks. At the beginning of the game, no letters will have been guessed, and the only information shown to the player will be a sequence of blanks, with one blank for each letter in the secret word. As the player guesses letters correctly, blanks representing guessed letters should be replaced by those letters. So, for example, if the secret word is "screwdriver" and the player has guessed `e`, `s`, `r`, and `d`, the current word status would be: `s _ r e _ d r _ _ e r`.
#### Chances
The player will have six "chances" to guess the word. Guessing a correct letter does not cost a chance. Each missed chance will cause a new piece of the figure being built to appear or disappear if figure is being disassembled. The six pieces will depend on the figure you choose. Example 1, a snowman can have the following parts: head, eyes, left arm, right arm, middle snowball, and bottom snowball. Example 2, a bear can have the following parts: head, body, left arm, right arm, left leg, and right leg. Example 3, an ice cream cone can have the following parts: cone, 2 scoops of ice cream, fudge, sprinkles, and a cherry. If you would like to be more creative with the appearance, feel free to do so. No matter what your figure looks like, though, it should include these six pieces and no more.
#### Game end
The game can end in one of two ways:
* If the player has guessed the complete secret word, he or she wins.
* Otherwise, if the player has run out of chances and the complete figure has been drawn, or disassembled as in the Snowman sample solution the player loses.
In either case, when the game ends the host should stop asking for guesses. The host should inform the player whether he or she won or lost, and the assistant should reveal the entire secret word.
#### Video example
Here is a sample of a simple version of the game being played - [https://youtu.be/H3djon837cc](https://youtu.be/H3djon837cc)
### Implementation details
#### Word list/secret word
You will be provided with a list of words from which the secret word should be chosen for each game. Instructions for importing the word list:
* To import the list, set a variable "imported words" to be a list.
* [Download and save](wordlist.txt) as a text file on your computer.
* Click the checkbox on the "imported words" variable so that it is visible on the stage.
* Right click on the stage image to find the 'import...' command. Select the correct file to import.
* Set another variable to be a list of words by splitting the imported words by line.

#### Documentation
In addition to functioning well, your script must be well-documented and readable. This includes, but is not limited to, things such as:
* organizing your scripts so that they can be read and comprehended easily
* giving your sprites meaningful names
* naming and using your variables, lists, and custom blocks well
* including comments to describe the structure of your script and any particularly complex or unintuitive pieces of script.
#### Required elements
Your script must include, at a minimum, the following script elements:
* At least two lists, once of which must be used to track guessed letters
* Custom blocks as appropriate, including arguments and reporters
## Required checkpoints
1. Be able to select a secret word, keep track of which letters have been guessed, determine if each letter guessed is in the secret word or not
2. Be able to announce the current status of the word, showing letters that have been guessed and blanks for other letters.
3. Be able to play a full game of Guess My Word, identify correct and incorrect letters, display the figure, and inform the player whether they have won or lost.
## Grading rRubric
| Functional correctness (behavior) | Points |
| :------------------| :---------- |
| Computer randomly chooses a secret word | 1 |
| Host repeatedly asks for a letter and announces whether that letter is in the secret word | 2 |
| Assistant displays the correct secret word status after each guess | 4 |
| Player loses a chance and a piece of the figure appears when a guess is incorrect | 3 |
| Host informs player when he or she guesses a letter that has already been guessed; player does not lose a chance | 2 |
| Game ends with player victory if the entire secret word is guessed | 2 |
| Game ends with player defeat if the player runs out of chances | 2 |
| Secret word is revealed when game ends | 1 |
| **Subtotal** | **17** |
| Technical correctness (implementation) | |
| script is well-designed visually and has a consistent theme | 2 |
| script is well-documented and exhibits good style | 2 |
| script shows good creativity and effort | 3 |
| script includes at least two lists | 2 |
| script uses custom blocks with arguments and reporters appropriately | 2 |
| script tracks guessed letters using a list | 2 |
| Obtain and respond to playtest feedback from a parent or guardian | 2 |
| Checkpoint 1 (4/30) | 4 |
| Checkpoint 2 (4/30) | 4 |
| **Subtotal** | 19 |
| **Total** | **40** |
================================================
FILE: docs/project_5.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 5 - Space Invaders
Students will implement a version of the classic arcade game _Space Invaders_.
## Overview
Originally released in 1978, Space Invaders was one of the modern video games and is often credited with popularizing the video game industry. In addition to being a vastly popular arcade game, the 1980 version for an early Atari system helped game consoles achieve the mainstream status they maintain today. Because of this, the characters and gameplay style of Space Invaders are often used to represent the video game industry as a whole. You can play an [online version](http://www.pacxon4u.com/space-invaders/). Our game will have some differences from the classic version, but will maintain the key aspects of gameplay.
## Behavior
### Sprite
Your implementation of Space Invaders will include at least three main sprites: the **player**, **invaders**, and **projectiles**.
* The **player** moves along the bottom of the stage attempting to destroy invaders by firing projectiles. The player can move left and right only (controlled by the arrow keys), not up and down. The player fires when the space bar is pressed. The player begins with three lives and loses a life each time an invader touches him or reaches the bottom of the stage.
* **Invaders** begin at the top of the stage and slowly move towards the bottom in a grid formation. Invaders move from side to side across the stage, bouncing off the left and right edges. Each time an invader bounces off an edge, it should move down by the height of one invader. When an invader is hit by a projectile, it is destroyed, and should disappear from the stage.
* **Projectiles** are fired by both the player and the invaders. The player fires a projectile when the user presses the space bar, while the invaders fire randomly. A projectile should originate at the position of the sprite that fired it and move quickly up or down the stage until hitting either an invader, the player, or the edge of the stage. If the projectile hits an invader or player, that invader or the player should be destroyed. Upon hitting either an edge of the stage or another sprite, the projectile should then disappear. Only one invader may fire a projectile at time, and another invader may not fire until the projectile has disappeared. The player has an unlimited supply of projectiles, but may only shoot _three_ at a time.
### Starting the game
When the green flag is clicked, the game should initialize and a welcome screen should be displayed to the user (think of this as inserting a coin into an arcade machine). The welcome screen should include a “Start Game” button that, when clicked, begins the actual game. The welcome screen should also display some basic information about the game.
### Lives and game over
The player begins the game with three lives, and loses a life each time an invader either touches the player or reaches the bottom of the stage. When the player loses a life, the game should halt momentarily. All invaders and projectiles should disappear, and there should be a visual indication that the player has lost a life (message, change in costume, etc.). After a brief delay, the game should restart with all invaders at the top of the stage and the player having one fewer life. When the player loses its final life, the game ends and a “Game Over” message should be displayed. A “New Game” button should then be displayed that, when click, restarts the game from the beginning.
### Levels
Each time the player manages to destroy all the invaders on the screen, he or she completes a level. When a level is completed, a “Level Cleared” message should be displayed. Then, after a brief delay, the next level should begin. Each successive level should be made more difficult by increasing the speed at which the invaders advance down the stage and the frequency at which they fire projectiles.
### Score
Each time the player destroys an invader, points should be earned. Scoring should start at 100 points per invader in the first level, and increase by 50 points per invader in each successive level. So, for example, each invader in level 2 is worth 150 points, each in level 3 is worth 200 points, at so on. The player’s score should be displayed on the stage throughout the game and be featured on the “Game Over” screen.
### Implementation details
#### Documentation and style
As with all previous projects, your script must be well-written, well-documented, and readable. This includes, but is not limited to:
* organizing your scripts so that they can be read and comprehended easily
* giving your sprites meaningful names
* naming and using your variables, lists, and custom blocks well
* including comments to describe the structure of your script and any particularly complex or unintuitive pieces of script
* separating master sprites from clones, and cleaning up clones that are finished (see below)
#### Cloning
The invaders and the projectiles should be implemented using prototyping. A single master sprite should be implemented for each type and clones should be created each time a new instance of the sprite is needed. The master sprites should be hidden throughout the script and should not take part in gameplay.
#### Required elements
Your script must include the following elements:
* At least three variables
* At least two custom blocks, at least one of which must take an argument
## Required Checkpoints
1. Have the player and a single invader moving correctly.
2. Be able to clone invaders and have the entire group move correctly.
3. Be able to fire projectiles from both the player (when the space bar is pressed) and the invaders (randomly).
## Grading rubric
|Functional Correctness (Behavior)| Points |
|:--|:--|
|Welcome screen containing game info displayed green flag clicked| 1 |
|Start button displayed and game starts when clicked |1 |
|Keyboard control of player (including shooting) |1 |
|Multiple invaders |2 |
|Invaders attack in formation |2|
|Invaders die when hit by projectile |1 |
|Player earns s when an invader is killed |1 |
|Player fires projectiles correctly |2 |
|Invaders fire projectiles correctly | 3 |
|Player loses life and level resets when player or bottom of stage touched by invader |2 |
|Game ends and new game screen appears when player is out of lives |1 |
|Level changes when all invaders are destroyed |1 |
|Invaders speed up in each level |1 |
| values increase each level |1 |
|**SubTotal**| **20** |
|**Technical Correctness (Implementation)** | |
|script is well-documented and shows good style |2 |
|script shows creativity and effort |2|
|Invaders and projectiles are implemented using cloning | 3 |
|script operates correctly under all normal conditions (aka “No bugs”) |3 |
|script uses at least three variables |2 |
|script includes two custom blocks, one of which accepts arguments |3 |
|Check 1 | 5 |
|Check 2 | 5 |
|Check 3 | 5 |
|**SubTotal**| **30** |
|**Total**|**50**|
================================================
FILE: docs/project_6.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Project 6 - Final project
Students will design, plan, and implement a medium- to large-scale final project of their own choosing.
## Overview
During this course, you have learned a huge amount about computer science and scripting in general. In this project, you will put all of that knowledge, along with some new skills you will develop around design, planning, and project management, to build a relatively large and complex application that _you_ choose. You can create almost anything you want and should ultimately produce a project that is interesting, useful, and challenging.
## Details
### Project phases
This project will be significantly larger in scope than any of your previous assignments, so there will be more design and planning than before. More importantly, though, rather than be given a well-defined specification, _you_ will be setting the requirements for your project by coming up with an idea, fleshing out the details, and defining the steps necessary to complete your script.
To help you through this process, there will be several steps to this project. You must complete **all** of the steps **in order** for your project to be successful. In fact, _half_ of your grade will be based not on how well your script works, but on how well you completed the design and planning process.
The phases of the project will be:
* _Brainstorming_ - coming up with as many possible project ideas as you can.
* _Pitching_ - choosing a few ideas and developing a short description of what the project will entail.
* _Review_ - getting feedback from your peers and instructors on your pitches and choosing one.
* _Scenario Definition_ - listing out the features the project will need and what they will look like.
* _Wireframing_ - drawing simple sketches of what the various "screens" in your script will look like.
* _Specification_ - fleshing out all the specifics of how the project will work.
* _Scheduling_ - listing the programming tasks necessary to complete your project and estimating how long each will take.
* _Development_ - writing the script for your project by following the spec and schedule created in the previous steps.
### Progress tracking
In phase vi, you will complete a [final project plan organizer][] and in phase vii you will complete a [final project development plan][]. These documents will be your guides in the development phase and will help you stay on track and aware of your progress. Throughout the development phase of the project, you will be expected to keep your spec and plan up-to-date and make adjustments as you get ahead or behind, as requirements change, or as tasks or features get prioritized. At the end of each coding day, your spec and plan documents should be updated to reflect the current state of your project, and you will check in with an instructor at least once a week to make sure things are on track.
### Implementation requirements
#### Complexity and creativity
Your final project should be sufficiently complex and large-scale to push your limits as a programmer, but not so sophisticated that you are not able to complete it in the time allotted. The complexity in your project should come from the _design_ and the _algorithms_ and not from the _script_. (That is, you cannot meet the complexity requirement simply by writing a lot of script. Your script must be challenging or interesting in some meaningful way.) In addition, you should not add complexity by introducing peripheral elements, such as graphics or sound effects. In addition, one of the main goals of this project is to allow you to unleash your creativity and allow you to create something of interest to you. To achieve this, your project must show some level of creativity or personalization that makes it your own. Simply creating your own version of some existing application will not fully meet this requirement. For both the complexity and creativity requirements, you should talk to the instructors early and often to ensure your project is in line with our expectations.
#### Documentation and style
As with all previous projects, your script must be well-written, well-documented, and readable. Writing script with good style is always a good idea, but in a project of this size and scope, following style guidelines will help you keep your thoughts organized and make it easier to keep track of your progress, pick up where you left off each day, and find and fix bugs. In particular, though this is certainly not a comprehensive list, pay attention to the following:
* Organizing your scripts so that they can be read and comprehended easily.
* Giving your sprites, variables, lists, and custom blocks descriptive and meaningful names.
* Using the right type of variable (global, local, sprite) for each situation.
* Including comments to describe the structure of your script and track your progress.
* Avoiding redundancy with good use of loops, custom blocks, and/or lists.
* Practicing good procedural decomposition and abstraction .
#### Required elements
In order to show that you have fully mastered all the skills from the course, you project must include at least the following:
* A clear way to start the script, and clear prompts or instructions for any user interaction.
* At least one loop, variable, custom block, and list, and more as necessary or appropriate.
* Each these must be used correctly and meaningfully (creating a list that contains a single element just to meet this requirement will not earn points).
* At least one user interaction
* This can be prompting for information using ask, responding to key presses or mouse movements, or any other action that keeps the user involved.
#### Required Checkpoints
At least three times during the project period, and at least once each week, you should check in with an instructor to ensure that your project is on track, that you are meeting the project requirements, and that you have the answers to any questions that might have arisen during your work. The course staff will work with you to set up a schedule for these checkpoints, but it is your responsibility to ensure that the meetings take place.
## Grading rubric
|Design Phases| Points |
|--|--|
|Brainstorming| 2 |
|Project Pitches |6 |
|Feature List |4 |
|Wireframes/Sketches |4 |
|Project Organizer (Specification) |8 |
|Implementation Plan |8 |
|Spec and plan are updated throughout project |8 |
|**Total** | 40 |
|**Implementation** | |
|Project is appropriately complex and creative |8 |
|script is well-documented and shows good style |4 |
|script uses elements effectively, including all required elements | 8 |
|Final product meets all requirements and goals laid out in spec |8 |
|Checkpoint 1 | 4 |
|Checkpoint 2 | 4 |
|Checkpoint 3 | 4 |
|_Total_ | 40 |
|**_Total_**|**80**|
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
================================================
FILE: docs/quiz_1.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 1 Quiz Basics
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md.html) for further instructions.
================================================
FILE: docs/quiz_2.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 2 Quiz Loops
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md.html) for further instructions.
================================================
FILE: docs/quiz_3.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 3 Quiz Customization
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md.html) for further instructions.
================================================
FILE: docs/quiz_4.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 4 Quiz Lists
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md.html) for further instructions.
================================================
FILE: docs/quiz_5.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 5 Quiz Cloning
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md.html) for further instructions.
================================================
FILE: docs/startercode.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Lesson Starter Code
## Unit 1
## Unit 2
[Lesson 2.1](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%202.1%20Example)
## Unit 3
Lesson 3.3 - [Arguments example](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%203.3)
## Unit 4
## Unit 5
## Unit 6
================================================
FILE: docs/student_notes_01.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Student notes: The First Day
================================================
FILE: docs/student_notes_02.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
Student Notes: Algorithms
================================================
FILE: docs/student_notes_03.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_04.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_11.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_12.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_13.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_14.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_15.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_21.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_22.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_23.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_24.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_25.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_31.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_32.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_33.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_34.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_35.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_41.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_42.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_43.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_44.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_45.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_46.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_51.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_52.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_53.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_54.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_61.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_62.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_63.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_64.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_65.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/student_notes_66.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Change Log
================================================
FILE: docs/styles/curriculum.css
================================================
body#md {
position: absolute;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
text-align: left;
left: 200px;
right: 0px;
margin: 0;
padding: 20;
max-width: none;
color: #555;
font-size: 15px;
padding-right: 20px;
overflow-x: hidden;
text-overflow: ellipses;
text-align: left;
}
.md .longTOC {
width: 200px;
display: block;
border-right: 3px solid #008575;
overflow-y:scroll;
font-size: 15px;
font-family: inherit;
background: #FFF;
position: absolute;
top: 90px;
left:-190px;
bottom:0px;
margin: 0px;
padding: 0px;
}
.scrolled .md .longTOC {
position: fixed;
left: 0px;
top: 0px;
border-left: 10px solid #fff;
}
/* no numbering of headings */
.md h1:before, .md h2:before, .md h3:before, .md h4:before, .md h5:before, .md h6:before { content: none; }
.md .longTOC a {
color: #000;
}
.md .tocHeader, .md .tocNumber {
display: none;
}
.md a,
.md div.title, contents, .md .tocHeader,
.md h1, .md h2, .md h3, .md h4, .md h5, .md h6,
.md .nonumberh1, .md .nonumberh2, .md .nonumberh3, .md .nonumberh4, .md .nonumberh5, .md .nonumberh6,
.md .shortTOC, .md .mediumTOC, .md .longTOC {
font-family: inherit;
}
.md div.title, .md h1, .md h2, .md h3, .md h4 {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-weight: 800;
}
.md h1, .md h2, .md h3, .md h4, .md h5, .md h6 {
color: #008575;
border-color: inherit;
}
.md h2, .md h3, .md h4 {
border: none;
line-height: 0%;
}
.md .tocTop {
display: inline;
}
.md div.title, .md div.subtitle {
text-align: left;
}
.md div.title {
position: absolute;
top: -14px;
left:-200px;
right: 0px;
font-weight: 900;
padding-left: 10px;
padding-top: 20px;
padding-bottom: 20px;
text-shadow: 0px 0px 3px #008575;
background-color: #008575;
background-repeat: no-repeat;
background-position: top right;
background-size: contain;
color: #fff;
font-size: 45px;
z-index: 10;
}
.md div.afterTitles {
height: 90px;
}
/* tables; use fainter colors than regular markdeep style */
.md table.table {
font-size: 90%;
margin-right: 20px;
margin-left: 20px;
}
.md table.table th {
border: none;
background-color: #ccc;
color: rgba(0,0,0,.6);
}
.md table.table tr, .md table.table td {
border-color: #eee;
}
.md table.table tr:nth-child(even) {
background-color: #f4f4f4;
}
================================================
FILE: docs/styles/pdf.css
================================================
/* CSS for pdf */
================================================
FILE: docs/tools/create-book-Pandoc.cmd
================================================
@echo off
setlocal
REM -- Create output directory and set up target output file name
mkdir 2>nul build
set targetBook=intro-book-complete.md
REM -- We need the `sed.exe` tool; grab it from the user's Git install.
if not exist "%ProgramFiles%\Git\usr\bin" (
echo ERROR: Unable to find Git install for `sed.exe` tool.
exit /b 1
)
path %ProgramFiles%\Git\usr\bin;%path%
type >%targetBook% SUMMARY.md
REM -- For each file referenced in SUMMARY.md, add it to the target output Markdown file.
REM -- The following sed command extracts the file name from inside parentheses, and reverses path
REM -- slashes.
for /f "delims=" %%t in ('findstr -c:"(" SUMMARY.md ^| sed -e "s/^ *\* *\[.*\](\(.*\))$/\1/"
-e "s/\//\\\/g"') do (
echo %%t
echo.>>%targetBook%
type >>%targetBook% %%t
)
REM -- Normalize line endings to newlines.
move /y >nul %targetBook% %targetBook%.tmp
eol "\n" <%targetBook%.tmp >%targetBook%
del %targetBook%.tmp
echo.
echo Finished. You can find the resulting unified book in `intro-book-complete.md`.
================================================
FILE: docs/tools/create-book.cmd
================================================
@echo off
setlocal
set sed="C:\Program Files (x86)\GnuWin32\bin\sed"
set chrome="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
for /r . %%f in (*.html) do (
%chrome% --headless --print-to-pdf="%%~pf%%~nf.pdf" --no-margins "%%f-md.html"
)
================================================
FILE: docs/unit_0.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 0
================================================
FILE: docs/unit_0_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 0 Tips
## Snap! Tips
[Tip Numbers from Tips Document:](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true) 0, 16, 23
================================================
FILE: docs/unit_1.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 1
================================================
FILE: docs/unit_1_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 1 Tips
## Snap! Tips
[Tip Numbers from Snap! Tips Document][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
[Tip Numbers from Snap! Tips Document]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/unit_2.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 2
================================================
FILE: docs/unit_2_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 2 Tips
## Snap! Tips
[Tip Numbers from Snap! Tips Document][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
[Tip Numbers from Snap! Tips Document]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/unit_3.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 3
================================================
FILE: docs/unit_3_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 3 Tips
## Snap! Tips
[Tip Numbers from Snap! Tips Document][]: 0, 4, 8, 16
[Tip Numbers from Snap! Tips Document]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/unit_4.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 4
================================================
FILE: docs/unit_4_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 4 Tips
## Snap! Tips
[Tip Numbers from Snap! Tips Document][]: 0, 19
[Tip Numbers from Snap! Tips Document]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/unit_5.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 5
================================================
FILE: docs/unit_5_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 5 Tips
## Snap! Tips
[Tip Numbers from Snap! Tips Document][]: 0, 3, 5, 9, 12, 17
## Word Wall
Terms introduced in the unit that you may consider adding to a classroom Word Wall.
| Word | Definition |
| ------------- | --------------------------------------------- |
| Cloning | A feature that allows a sprite to create a clone, or semi-duplicate, of itself, while the project is running. Clones of a sprite will be the same as the original or parent sprite but as a separate instance. Clones inherit the parent's scripts, costumes, sounds, and properties, yet they can then be modified.
| Global Variable | A variable that can be used by all of your sprites. |
[Tip Numbers from Snap! Tips Document]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/unit_6.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# Unit 6
================================================
FILE: docs/unit_6_tips.md.html
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
# TEALS Unit 6 Tips
## Snap! Tips
[Tip Numbers from Snap! Tips Document][]: 0, 21, 23
[Tip Numbers from Snap! Tips Document]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: docs/wordlist.txt
================================================
abandon
ability
able
about
above
abroad
absence
absolute
absolutely
absorb
abuse
academic
accept
access
accident
accompany
accomplish
according
account
accurate
accuse
achieve
achievement
acid
acknowledge
acquire
across
action
active
activist
activity
actor
actress
actual
actually
adapt
addition
additional
address
adequate
adjust
adjustment
administration
administrator
admire
admission
admit
adolescent
adopt
adult
advance
advantage
adventure
advertising
advice
advise
adviser
advocate
affect
afford
afraid
after
afternoon
again
against
agency
agenda
agent
aggressive
agree
agreement
agricultural
ahead
aide
aircraft
airline
airport
album
alive
alliance
allow
ally
almost
alone
along
already
also
alter
alternative
although
always
amazing
among
amount
analysis
analyst
analyze
ancient
anger
angle
angry
animal
anniversary
announce
annual
another
answer
anticipate
anxiety
anybody
anymore
anyone
anything
anyway
anywhere
apart
apartment
apparent
apparently
appeal
appear
appearance
apple
application
apply
appoint
appointment
appreciate
approach
appropriate
approval
approve
approximately
architect
area
argue
argument
arise
armed
army
around
arrange
arrangement
arrest
arrival
arrive
article
artist
artistic
aside
asleep
aspect
assault
assert
assess
assessment
asset
assign
assignment
assist
assistance
assistant
associate
association
assume
assumption
assure
athlete
athletic
atmosphere
attach
attack
attempt
attend
attention
attitude
attorney
attract
attractive
attribute
audience
author
authority
auto
available
average
avoid
award
aware
awareness
away
awful
baby
back
background
badly
bake
balance
ball
band
bank
barely
barrel
barrier
base
baseball
basic
basically
basis
basket
basketball
bathroom
battery
battle
beach
bean
bear
beat
beautiful
beauty
because
become
bedroom
beer
before
begin
beginning
behavior
behind
being
belief
believe
bell
belong
below
belt
bench
bend
beneath
benefit
beside
besides
best
better
between
beyond
bike
bill
billion
bind
biological
bird
birth
birthday
bite
black
blade
blame
blanket
blind
block
blood
blow
blue
board
boat
body
bomb
bond
bone
book
boom
boot
border
born
borrow
boss
both
bother
bottle
bottom
boundary
bowl
boyfriend
brain
branch
brand
bread
break
breakfast
breast
breath
breathe
brick
bridge
brief
briefly
bright
brilliant
bring
broad
broken
brother
brown
brush
buck
budget
build
building
bullet
bunch
burden
burn
bury
business
busy
butter
button
buyer
cabin
cabinet
cable
cake
calculate
call
camera
camp
campaign
campus
cancer
candidate
capability
capable
capacity
capital
captain
capture
carbon
card
care
career
careful
carefully
carrier
carry
case
cash
cast
catch
category
cause
ceiling
celebrate
celebration
celebrity
cell
center
central
century
ceremony
certain
certainly
chain
chair
chairman
challenge
chamber
champion
championship
chance
change
changing
channel
chapter
character
characteristic
characterize
charge
charity
chart
chase
cheap
check
cheek
cheese
chef
chemical
chest
chicken
chief
child
childhood
chip
chocolate
choice
cholesterol
choose
church
cigarette
circle
circumstance
cite
citizen
city
civil
civilian
claim
class
classic
classroom
clean
clear
clearly
client
climate
climb
clinic
clinical
clock
close
closely
closer
clothes
clothing
cloud
club
clue
cluster
coach
coal
coalition
coast
coat
code
coffee
cognitive
cold
collapse
colleague
collect
collection
collective
college
colonial
color
column
combination
combine
come
comedy
comfort
comfortable
command
commander
comment
commercial
commission
commit
commitment
committee
common
communicate
communication
community
company
compare
comparison
compete
competition
competitive
competitor
complain
complaint
complete
completely
complex
complicated
component
compose
composition
comprehensive
computer
concentrate
concentration
concept
concern
concerned
concert
conclude
conclusion
concrete
condition
conduct
conference
confidence
confident
confirm
conflict
confront
confusion
congressional
connect
connection
consciousness
consensus
consequence
conservative
consider
considerable
consideration
consist
consistent
constant
constantly
constitute
constitutional
construct
construction
consultant
consume
consumer
consumption
contact
contain
container
contemporary
content
contest
context
continue
continued
contract
contrast
contribute
contribution
control
controversial
controversy
convention
conventional
conversation
convert
conviction
convince
cook
cookie
cooking
cool
cooperation
cope
copy
core
corn
corner
corporate
corporation
correct
correspondent
cost
cotton
couch
could
council
counselor
count
counter
country
county
couple
courage
course
court
cousin
cover
coverage
crack
craft
crash
crazy
cream
create
creation
creative
creature
credit
crew
crime
criminal
crisis
criteria
critic
critical
criticism
criticize
crop
cross
crowd
crucial
cultural
culture
curious
current
currently
curriculum
custom
customer
cycle
daily
damage
dance
danger
dangerous
dare
dark
darkness
data
date
daughter
dead
deal
dealer
dear
death
debate
debt
decade
decide
decision
deck
declare
decline
decrease
deep
deeply
deer
defeat
defend
defendant
defense
defensive
deficit
define
definitely
definition
degree
delay
deliver
delivery
demand
democracy
democratic
demonstrate
demonstration
deny
department
depend
dependent
depending
depict
depression
depth
deputy
derive
describe
description
desert
deserve
design
designer
desire
desk
desperate
despite
destroy
destruction
detail
detailed
detect
determine
develop
developing
development
device
devote
dialogue
diet
differ
difference
different
differently
difficult
difficulty
digital
dimension
dining
dinner
direct
direction
directly
director
dirt
dirty
disability
disagree
disappear
disaster
discipline
discourse
discover
discovery
discrimination
discuss
discussion
disease
dish
dismiss
disorder
display
dispute
distance
distant
distinct
distinction
distinguish
distribute
distribution
district
diverse
diversity
divide
division
divorce
doctor
document
domestic
dominant
dominate
door
double
doubt
down
downtown
dozen
draft
drag
drama
dramatic
dramatically
draw
drawing
dream
dress
drink
drive
driver
drop
drug
during
dust
duty
each
eager
early
earn
earnings
earth
ease
easily
east
eastern
easy
economic
economics
economist
economy
edge
edition
editor
educate
education
educational
educator
effect
effective
effectively
efficiency
efficient
effort
eight
either
elderly
elect
election
electric
electricity
electronic
element
elementary
eliminate
elite
else
elsewhere
embrace
emerge
emergency
emission
emotion
emotional
emphasis
emphasize
employ
employee
employer
employment
empty
enable
encounter
encourage
enemy
energy
enforcement
engage
engine
engineer
engineering
enhance
enjoy
enormous
enough
ensure
enter
enterprise
entertainment
entire
entirely
entrance
entry
environment
environmental
episode
equal
equally
equipment
error
escape
especially
essay
essential
essentially
establish
establishment
estate
estimate
ethics
ethnic
evaluate
evaluation
even
evening
event
eventually
ever
every
everybody
everyday
everyone
everything
everywhere
evidence
evolution
evolve
exact
exactly
examination
examine
example
exceed
excellent
except
exception
exchange
exciting
executive
exercise
exhibit
exhibition
exist
existence
existing
expand
expansion
expect
expectation
expense
expensive
experience
experiment
expert
explain
explanation
explode
explore
explosion
expose
exposure
express
expression
extend
extension
extensive
extent
external
extra
extraordinary
extreme
extremely
fabric
face
facility
fact
factor
factory
faculty
fade
fail
failure
fair
fairly
faith
fall
false
familiar
family
famous
fantasy
farm
farmer
fashion
fast
fate
father
fault
favor
favorite
fear
feature
federal
feed
feel
feeling
fellow
female
fence
fewer
fiber
fiction
field
fifteen
fifth
fifty
fight
fighter
fighting
figure
file
fill
film
final
finally
finance
financial
find
finding
fine
finger
finish
fire
firm
first
fish
fishing
fitness
five
flag
flame
flat
flavor
flee
flesh
flight
float
floor
flow
flower
focus
folk
follow
following
food
foot
football
force
foreign
forest
forever
forget
form
formal
formation
former
formula
forth
fortune
forward
found
foundation
founder
four
fourth
frame
framework
free
freedom
freeze
frequency
frequent
frequently
fresh
friend
friendly
friendship
from
front
fruit
frustration
fuel
full
fully
function
fund
fundamental
funding
funeral
funny
furniture
furthermore
future
gain
galaxy
gallery
game
gang
garage
garden
garlic
gate
gather
gaze
gear
gender
gene
general
generally
generate
generation
genetic
gentleman
gently
gesture
ghost
giant
gift
gifted
girl
girlfriend
give
given
glad
glance
glass
global
glove
goal
gold
golden
golf
good
government
governor
grab
grade
gradually
graduate
grain
grand
grandfather
grandmother
grant
grass
grave
gray
great
greatest
green
grocery
ground
group
grow
growing
growth
guarantee
guard
guess
guest
guide
guideline
guilty
habit
habitat
hair
half
hall
hand
handful
handle
hang
happen
happy
hard
hardly
hate
have
head
headline
headquarters
health
healthy
hear
hearing
heart
heat
heaven
heavily
heavy
heel
height
helicopter
hell
hello
help
helpful
here
heritage
hero
herself
hide
high
highlight
highly
highway
hill
himself
hire
historian
historic
historical
history
hold
hole
holiday
holy
home
homeless
honest
honey
honor
hope
horizon
horror
horse
hospital
host
hotel
hour
house
household
housing
however
huge
human
humor
hundred
hungry
hunter
hunting
hurt
husband
hypothesis
idea
ideal
identification
identify
identity
ignore
illegal
illness
illustrate
image
imagination
imagine
immediate
immediately
immigrant
immigration
impact
implement
implication
imply
importance
important
impose
impossible
impress
impression
impressive
improve
improvement
incentive
incident
include
including
income
incorporate
increase
increased
increasing
increasingly
incredible
indeed
independence
independent
index
indicate
indication
individual
industrial
industry
infant
infection
inflation
influence
inform
information
ingredient
initial
initially
initiative
injury
inner
innocent
inquiry
inside
insight
insist
inspire
install
instance
instead
institution
institutional
instruction
instructor
instrument
insurance
intellectual
intelligence
intend
intense
intensity
intention
interaction
interest
interested
interesting
internal
international
interpret
interpretation
intervention
interview
into
introduce
introduction
invasion
invest
investigate
investigation
investigator
investment
investor
invite
involve
involved
involvement
iron
island
issue
item
itself
jacket
jail
join
joint
joke
journal
journalist
journey
judge
judgment
juice
jump
junior
jury
just
justice
justify
keep
kick
kill
killer
killing
kind
king
kiss
kitchen
knee
knife
knock
know
knowledge
label
labor
laboratory
lack
lady
lake
land
landscape
language
large
largely
last
late
later
latter
laugh
launch
lawn
lawsuit
lawyer
layer
lead
leader
leadership
leading
leaf
league
lean
learn
learning
least
leather
leave
left
legacy
legal
legend
legislation
legitimate
lemon
length
less
lesson
letter
level
liberal
library
license
life
lifestyle
lifetime
lift
light
like
likely
limit
limitation
limited
line
link
list
listen
literally
literary
literature
little
live
living
load
loan
local
locate
location
lock
long
look
loose
lose
loss
lost
lots
loud
love
lovely
lover
lower
luck
lucky
lunch
lung
machine
magazine
mail
main
mainly
maintain
maintenance
major
majority
make
maker
makeup
male
mall
manage
management
manager
manner
manufacturer
manufacturing
many
margin
mark
market
marketing
marriage
married
marry
mask
mass
massive
master
match
material
math
matter
maybe
mayor
meal
mean
meaning
meanwhile
measure
measurement
meat
mechanism
media
medical
medication
medicine
medium
meet
meeting
member
membership
memory
mental
mention
menu
mere
merely
mess
message
metal
meter
method
middle
might
military
milk
million
mind
mine
minister
minor
minority
minute
miracle
mirror
miss
missile
mission
mistake
mixture
mode
model
moderate
modern
modest
moment
money
monitor
month
mood
moon
moral
more
moreover
morning
mortgage
most
mostly
mother
motion
motivation
motor
mount
mountain
mouse
mouth
move
movement
movie
much
multiple
murder
muscle
museum
music
musical
musician
must
mutual
myself
mystery
myth
naked
name
narrative
narrow
nation
national
native
natural
naturally
nature
near
nearby
nearly
necessarily
necessary
neck
need
negative
negotiate
negotiation
neighbor
neighborhood
neither
nerve
nervous
network
never
nevertheless
newly
news
newspaper
next
nice
night
nine
nobody
noise
nomination
none
nonetheless
normal
normally
north
northern
nose
note
nothing
notice
notion
novel
nowhere
nuclear
number
numerous
nurse
object
objective
obligation
observation
observe
observer
obtain
obvious
obviously
occasion
occasionally
occupation
occupy
occur
ocean
odds
offense
offensive
offer
office
officer
official
often
okay
once
ongoing
onion
online
only
onto
open
opening
operate
operating
operation
operator
opinion
opponent
opportunity
oppose
opposite
opposition
option
orange
order
ordinary
organic
organization
organize
orientation
origin
original
originally
other
others
otherwise
ought
ourselves
outcome
outside
oven
over
overall
overcome
overlook
owner
pace
pack
package
page
pain
painful
paint
painter
painting
pair
pale
palm
panel
pant
paper
parent
park
parking
part
participant
participate
participation
particular
particularly
partly
partner
partnership
party
pass
passage
passenger
passion
past
patch
path
patient
pattern
pause
payment
peace
peak
peer
penalty
people
pepper
perceive
percentage
perception
perfect
perfectly
perform
performance
perhaps
period
permanent
permission
permit
person
personal
personality
personally
personnel
perspective
persuade
phase
phenomenon
philosophy
phone
photo
photograph
photographer
phrase
physical
physically
physician
piano
pick
picture
piece
pile
pilot
pine
pink
pipe
pitch
place
plan
plane
planet
planning
plant
plastic
plate
platform
play
player
please
pleasure
plenty
plot
plus
pocket
poem
poet
poetry
point
pole
police
policy
political
politically
politician
politics
poll
pollution
pool
poor
popular
population
porch
port
portion
portrait
portray
pose
position
positive
possess
possibility
possible
possibly
post
potato
potential
potentially
pound
pour
poverty
powder
power
powerful
practical
practice
precisely
predict
prefer
preference
preparation
prepare
prescription
presence
present
presentation
preserve
president
presidential
press
pressure
pretend
pretty
prevent
previous
previously
price
pride
priest
primarily
primary
prime
principal
principle
print
prior
priority
prison
prisoner
privacy
private
probably
problem
procedure
proceed
process
produce
producer
product
production
profession
professional
professor
profile
profit
program
progress
project
prominent
promise
promote
prompt
proof
proper
properly
property
proportion
proposal
propose
proposed
prosecutor
prospect
protect
protection
protein
protest
proud
prove
provide
provider
province
provision
psychological
psychologist
psychology
public
publication
publicly
publish
publisher
pull
punishment
purchase
pure
purpose
pursue
push
qualify
quality
quarter
quarterback
question
quick
quickly
quiet
quietly
quit
quite
quote
race
racial
radical
radio
rail
rain
raise
range
rank
rapid
rapidly
rare
rarely
rate
rather
rating
ratio
reach
react
reaction
read
reader
reading
ready
real
reality
realize
really
reason
reasonable
recall
receive
recent
recently
recipe
recognition
recognize
recommend
recommendation
record
recording
recover
recovery
recruit
reduce
reduction
refer
reference
reflect
reflection
reform
refugee
refuse
regard
regarding
regardless
regime
region
regional
register
regular
regularly
regulate
regulation
reinforce
reject
relate
relation
relationship
relative
relatively
relax
release
relevant
relief
religion
religious
rely
remain
remaining
remarkable
remember
remind
remote
remove
repeat
repeatedly
replace
reply
report
reporter
represent
representation
representative
reputation
request
require
requirement
research
researcher
resemble
reservation
resident
resist
resistance
resolution
resolve
resort
resource
respect
respond
respondent
response
responsibility
responsible
rest
restaurant
restore
restriction
result
retain
retire
retirement
return
reveal
revenue
review
revolution
rhythm
rice
rich
ride
rifle
right
ring
rise
risk
river
road
rock
role
roll
romantic
roof
room
root
rope
rose
rough
roughly
round
route
routine
rule
running
rural
rush
sacred
safe
safety
sake
salad
salary
sale
sales
salt
same
sample
sanction
sand
satellite
satisfaction
satisfy
sauce
save
saving
scale
scandal
scared
scenario
scene
schedule
scheme
scholar
scholarship
school
science
scientific
scientist
scope
score
scream
screen
script
search
season
seat
second
secret
secretary
section
sector
secure
security
seed
seek
seem
segment
seize
select
selection
self
sell
senator
send
senior
sense
sensitive
sentence
separate
sequence
series
serious
seriously
serve
service
session
setting
settle
settlement
seven
several
severe
shade
shadow
shake
shall
shape
share
sharp
sheet
shelf
shell
shelter
shift
shine
ship
shirt
shock
shoe
shoot
shop
shopping
shore
short
shortly
shot
should
shoulder
shout
show
shower
shrug
shut
sick
side
sigh
sight
sign
signal
significance
significant
significantly
silence
silent
silver
similar
similarly
simple
simply
since
sing
singer
single
sink
sister
site
situation
size
skill
skin
slave
sleep
slice
slide
slight
slightly
slip
slow
slowly
small
smart
smell
smile
smoke
smooth
snap
snow
soccer
social
society
soft
software
soil
solar
soldier
solid
solution
solve
some
somebody
somehow
someone
something
sometimes
somewhat
somewhere
song
soon
sophisticated
sorry
sort
soul
sound
soup
source
south
southern
space
speak
speaker
special
specialist
species
specific
specifically
speech
speed
spend
spending
spin
spirit
spiritual
split
spokesman
sport
spot
spread
spring
square
squeeze
stability
stable
staff
stage
stair
stake
stand
standard
standing
star
stare
start
state
statement
station
statistics
status
stay
steady
steal
steel
step
stick
still
stir
stock
stomach
stone
stop
storage
store
storm
story
straight
strange
stranger
strategic
strategy
stream
street
strength
strengthen
stress
stretch
strike
string
strip
stroke
strong
strongly
structure
struggle
student
studio
study
stuff
stupid
style
subject
submit
subsequent
substance
substantial
succeed
success
successful
successfully
such
sudden
suddenly
suffer
sufficient
sugar
suggest
suggestion
suicide
suit
summer
summit
super
supply
support
supporter
suppose
supposed
sure
surely
surface
surgery
surprise
surprised
surprising
surprisingly
surround
survey
survival
survive
survivor
suspect
sustain
swear
sweep
sweet
swim
swing
switch
symbol
symptom
system
table
tablespoon
tactic
tail
take
tale
talent
talk
tall
tank
tape
target
task
taste
taxpayer
teach
teacher
teaching
team
tear
teaspoon
technical
technique
technology
teen
teenager
telephone
telescope
television
tell
temperature
temporary
tend
tendency
tennis
tension
tent
term
terms
terrible
territory
terror
terrorism
terrorist
test
testify
testimony
testing
text
than
thank
thanks
that
theater
their
them
theme
themselves
then
theory
therapy
there
therefore
these
they
thick
thin
thing
think
thinking
third
thirty
this
those
though
thought
thousand
threat
threaten
three
throat
through
throughout
throw
thus
ticket
tight
time
tiny
tire
tired
tissue
title
tobacco
today
together
tomato
tomorrow
tone
tongue
tonight
tool
tooth
topic
toss
total
totally
touch
tough
tour
tourist
tournament
toward
towards
tower
town
trace
track
trade
tradition
traditional
traffic
tragedy
trail
train
training
transfer
transform
transformation
transition
translate
transportation
travel
treat
treatment
treaty
tree
tremendous
trend
trial
tribe
trick
trip
troop
trouble
truck
true
truly
trust
truth
tube
tunnel
turn
twelve
twenty
twice
twin
type
typical
typically
ugly
ultimate
ultimately
unable
uncle
under
undergo
understand
understanding
unfortunately
uniform
union
unique
unit
universal
universe
university
unknown
unless
unlike
unlikely
until
unusual
upon
upper
urban
urge
used
useful
user
usual
usually
utility
vacation
valley
valuable
value
variable
variation
variety
various
vary
vast
vegetable
vehicle
venture
version
versus
very
vessel
veteran
victim
victory
video
view
viewer
village
violate
violation
violence
violent
virtually
virtue
virus
visible
vision
visit
visitor
visual
vital
voice
volume
volunteer
vote
voter
vulnerable
wage
wait
wake
walk
wall
wander
want
warm
warn
warning
wash
waste
watch
water
wave
weak
wealth
wealthy
weapon
wear
weather
wedding
week
weekend
weekly
weigh
weight
welcome
welfare
well
west
western
what
whatever
wheel
when
whenever
where
whereas
whether
which
while
whisper
white
whole
whom
whose
wide
widely
widespread
wife
wild
will
willing
wind
window
wine
wing
winner
winter
wipe
wire
wisdom
wise
wish
with
withdraw
within
without
witness
woman
wonder
wonderful
wood
wooden
word
work
worker
working
works
workshop
world
worried
worry
worth
would
wound
wrap
write
writer
writing
wrong
yard
yeah
year
yell
yellow
yesterday
yield
young
your
yours
yourself
youth
zone
================================================
FILE: helping_trios.md
================================================
# Helping Trios
## Overview
In Helping Trios, each student presents something they are working on and get help from classmates. Group students in trios and ask students to take a couple of minutes to complete the first question in the handout.
In their groups, each student will have a total of five minutes to speak:
* 2-3 min to describe their challenge.
* 2-3 min to get peer feedback and write it down in their notebooks.
## Instructions
Students do not want to give each other the answers but help each other by providing advice on how to figure out a way to solve their problem.
Have students keep their answers to the questions in a their so you and the student can track their improvement over time. This can be a supplement to any written feedback you have given the student.
## Logistics
* Groups group students into trios (You may need a group that has 2 students to accommodate the classroom roster).
* The length of the activity should be 10-15 minutes.
## Remote Synchronous Guidance
* Utilize breakout rooms to arrange students into their trios.
* Have students Students share document and/or share screen
* Consider having students use any of the following
* Loading the document directly to the breakout room
* Utilize Digital Whiteboard
* Teacher or Teaching Team should move about the breakout rooms to ensure students are engaging with each other
* If groups are not engaged, ask leading questions to get them sharing about their challenges
## Student Handout
Students will be utilizing their classroom notebook to complete this activity. We have prepared a [student facing document][helping_trios_handout.md]] to give to your students.
### Distribution
This student facing document could be presented to students in a variety ways based on your classroom structure.
* This document could be displayed on a projector in the front of the classroom.
* The link to this document could be posted in your learning management
system.
* Consider a permanent link in the course to refer to quickly when it's needed.
* This document could be distributed in the chat feature in your classroom tool
================================================
FILE: helping_trios_handout.md
================================================
# Helping Trios Student Guide
In your notebook, take notes on the following:
## My Challenge
Define the problem you are having completing the project.
## Peer Suggestions
After presenting your challenge to your trio, write down some of the suggestions you peers have to solve your challenge.
## My Plan
Write down your plan to solve the problem you are having based on the feedback you got from your peers.
================================================
FILE: lab_04.md
================================================
# Getting to know you
In this lab, you will explore and create a simple "self-portrait" program to introduce yourself to your teachers and classmates.
## Part 1 - Exploring
1. Open a new project.
2. In order to save your project, the first thing you'll need to do is to create an account. In the browser window, find the cloud-shaped button in the top toolbar on the upper left corner of the window.

Click it, select the "sign up" option in the menu, and follow the instructions there. You will need to check your email after creating your account to get your initial password. Your username will be the first part of your school email address. If you need help, ask.

3. Spend a few minutes looking around, trying things out, and experience what the language can do.
4. Write down three things in your notebook you found that the environment can do and how to do them. Be as specific as you can!
| You can do this...| If I do this... |
| --- | --- |
| 1. | |
| 2. | |
| 3. | |
5. Find a partner and compare notes. Share your findings with your partner and ask them about what they learned. Write down the three capabilities your partner found below.
| You can do this... | If I do this... |
| --- | --- |
| 1. | |
| 2. | |
| 3. | |
## Part 2 - Self - portrait
Using what you've learned and other things you might discover, create a program that describes yourself. This can take whatever form and use whatever tools and blocks you want. Make sure your script includes following information:
* Your name
* Your current grade
* Your age
* Your favorite subject in school.
* One of your hobbies or interests.
* Any previous programming or computer experience you have.
* Example of something you learned
* What you think learning CS will be like?
* What are some of your favorite uses of technology?
1. Save your project as _Lab0.4_.
2. Submit your _self portrait_ using the submission instructions given to you by your instructor. If you are having trouble saving, here is a great video: [https://youtu.be/VHts_QAp3XU](https://youtu.be/VHts_QAp3XU)
## Grading rubric
| **Criteria** | Point values |
| :--------- | :--- |
| **Part 1** | |
| 1.4 Listed 3 things you found you can do. | 0.3 points |
| 1.5 Listed 3 things your partner found you can do. | 0.3 points |
| **Part 2** | |
| Includes name | 0.2 points |
| Current grade | 0.2 points |
| Age | 0.2 points |
| Programming or computer experience | 0.0 points |
| Learning CS going to be like | 0.2 points |
| Favorite uses of technology | 0.2 points |
| Favorite subject in school | 0.2 points |
| Example of something learned | 0.2 points |
| **Total** | **2.0 points** |
================================================
FILE: lab_05.md
================================================
# Getting to know Coordinates
## Part 1 - Coordinates
1. Open the [Peabody test](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=PeabodyTest).
2. Click on Peabody to start the test.
3. Answer his question in the textbox.
4. You should answer at least 10 of his questions.
## Part 2 - Plot a drawing using a template
1. Using this [starter script](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Snap%20Coordinate%20System%20Intro) from the classroom activity, create a drawing that has at least 10 coordinates.
2. Save your project as _Lab0.5_.
Here is an example with 8 coordinates:

## Grading rubric
| **Criteria** | Points |
| ------------------------------------------------------------- | -------------- |
| **Part 1** | |
| Participated in the Peabody test | 0.5 points |
| **Part 2** | |
| Saves project | 0.25 points |
| Shares link with teacher | 0.25 points |
| Drawing contains at least 10 coordinates | 0.5 points |
| Drawing completeness (Resembles something recognizable) | 0.5 points |
| **TotalL** | **2 points** |
================================================
FILE: lab_11.md
================================================
# Welcome to Snap!
Snap! is a programming language, which you can use to tell a computer what to do. A program is a particular set of instructions for the computer to follow.
Programs in most languages use only letters (and punctuation), but Snap! is different: it's a visual language. Instead of writing a program only using the keyboard, you will drag pictures of blocks and snap them together. In Snap!, programs contain multiple scripts. We will use this terminology going forward.
The following is a script in Snap!:

Can you guess what it might do? (Write your guess below)
____________________
## Part 1 - Blocks
The area at the left edge of the window is the **palette**. As you see in the picture, it contains pallettes for eight different-color block pallettes. In this lab, we will focus on the Motion, Sound, Pen, and Sensing pallettes. You will learn about the other pallettes in the next few labs.
These pallettes are an important organizational structure in Snap! because they are home to the various blocks that you will use to tell the computer what to do. The blocks are categorized under each pallette based on what kind of thing each block does.
1. Below, fill in the name of the pallette to which each block belongs.
| Block | Pallette |
| ------------------------- | -------- |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
Look at the **Motion** pallette. Under this pallette you will find a bunch of blocks that correspond to motion-like actions. For example, click on the **Move** block, drag it to the scripting area, and drop it anywhere in the scripting area.


The block that you just dragged and dropped into the scripting area controls something that we call a sprite, which is the arrowhead-looking thing in the middle of the stage (the white part of the window).
Back to the scripting area, if you click on the **Move** Block you just put there, the sprite will move 10 steps. You can see this visually depicted by the sprite moving in the stage. You can vary the input of the block, i.e., the number 10, to change the number of steps you want to the sprite to move.

2. How can you change the block input so that the sprite moves in the opposite direction?
## Part 2 - Scripts
Now that you have figured out how to make a sprite move, you might be wondering how to make the sprite do other things as well. To make a sprite do more than just move, we need to use different types of blocks and link them together. You can link blocks by snapping them together. Drag a block right underneath the one to which you want to attach it. Blocks will snap together when one block's indentation is near the pallette of the one above it. You should see a white bar appear like the one in the image below, which just shows you where the block will go after you drop it.

If you keep attaching blocks together in this way, you will create a script. A program consists of one or more of these scripts.
1. Try recreating the following script in the scripting area in Snap!.

The purple say... blocks are available from the **Looks** pallette.
Remember, a script will tell the sprite what to do. Click on the script and see what happens. You will know that your script is running if it has a highlighted border around it:

2. What happens when you run this script?

Be sure to note: _blocks in a script run in a specific order, from the top of the script to the bottom_. Generally, Snap! waits until one block has finished its job before continuing on to the block below it. (One common exception is blocks that play sounds: a block's job can be to start the sound, which means the block below it will execute while the sound is still playing.
## Part 3 - Reporters
At the bottom of **motion** palette are three blocks shaped differently from the others. The oval-shaped **x-position** and **y-position** are called _reporters_. (We don't need the third one right now.) Unlike the jigsaw-puzzle-piece-shaped command blocks we've used until now, reporters don't carry out an action (such as moving the sprite or displaying a speech balloon) by themselves. Instead they report a value, usually for use in another block's input slot.
 
These particular reporters tell you where the sprite is on the stage. As in algebra class, **x** means left-to-right position, and **y** means bottom-to-top position.
Drag your sprite to the far right side of the stage. Next, drag an x position block into the scripting area and click on it. You should see a little speech balloon next to the block:

1. What value does the **x position** block report to you when the sprite is?
...at the far right side of the stage:
...in the center of the stage:
...at the far left side of the stage:
Click on the gray box to the left of the **x-position** block in the palette, and then look over to the stage. You will see that the value that the block would report is displayed on the stage:


This on-stage display is called a _watcher_.
The **x-position** block and the **y-position** block will tell you the position of your sprite on the screen. Move the sprite around and the values reported by these blocks change.
 
## Part 4 - Experiment with drawing commands
Try to get comfortable with the blocks under the **motion** pallette and the **pen** pallette. Figure out what each one does and try to use these blocks to draw a square or a simple picture.
1. What do these blocks do? (write an explanation next to each block)?





2. Does the **turn** block change the sprite's x and/or y position?
3. Using these blocks, draw a square. Write the blocks you used below.
_Tips and Tricks:_
Once the pen is down, it stays down even in a different script. Use the **pen up** block to lift the pen so that no lines will be drawn.
You also will want to show the direction and x and y position of the sprite. In the **motion** pallette, you can select for these to be shown on the stage as described in the reporters activity you saw earlier in the lab.
## Part 5 - Follow that mouse

1. What do you think the script above will do?
Hint: **mouse x** and **mouse y** are reporters in the **sensing** palette; they tell you where the mouse is pointing.
 
Copy the script into Snap!, and click on the **forever** block to run it.
* Did it follow your expectations (Yes/No)?
2. What happens when you drag the mouse to a different part of the screen while the script is running?
3. How does script's behavior change when you modify the **go to** block as shown below?

## Part 6 - Forever and a day
From the previous exercise, you may have figured out what the `Forever` block does. The `forever` block is the first block you have seen that holds, or wraps around, other blocks. We call this a _C block_ because of its shape. As the name `forever` implies, it will run the blocks inside it again and again and again and ... well, forever. You will find this block under the **control** pallette.

Will a **forever** block ever stop?

Not unless you tell it to: Click on the stop sign icon on the upper right hand corner of the Snap! window.

This stop sign will stop all scripts that are running in any sprite. This is equivalent to executing the **stop all** in the **control** palette.

## Part 7 - Make a Kaleidoscope
Explore this drawing script for a little bit (). Press the spacebar to run the script, and move your mouse cursor over the stage of the Snap! window. While over the stage, use the **d** (pen down), **u** (pen up), and **c** (clear) keyboard keys to change what gets drawn on the screen. The script that causes the sprite to follow the pointer is

As you can see, this drawing script features more **Control** blocks, in addition to the **forever** block first introduced in the _Follow the Mouse activity_. These _hat_-shaped block, which can be used only at the beginning of a script, indicate when a specific script should be run.
## Part 8 - Kaleidoscope activity

The kaleidoscope consists of four sprites. Each sprite will be drawing with a different pen color. Each sprite's movement is based on the movement of the mouse. The first sprite follows the mouse, just like in the example we looked at before. The other three sprites move around as the mouse moves, but reflected over the X and Y axes.
Save your project as _lab05_.
Some tips:
* You will need four sprites. (We haven't used more than one sprite up to now, but having more than one allows for more interesting projects, as you'll see.) The easiest way to create three more is to _duplicate_ the one you have. Right-click the sprite in the sprite corral, and select **duplicate** from the _context menu_ that appears. Each duplicated sprite will have exactly the same scripts as the original, which is why we suggest duplication rather than just creating more sprites from scratch.
* You can change the color of each sprite by clicking the color input in that sprite's `set pen color` block (found under the **Pen** pallette), choosing a color, and then clicking on the block itself (to run the block and actually set the color). Don't worry about matching the colors in the animation exactly!

* Pay close attention to what each of the other sprites is doing in the animation above. You will need to modify the **x** and **y** inputs in each sprite's `go to x-y` block using simple formulas, with `addition`and `subtraction`.



>Hint: All the sprites are reflecting in different ways around the (x=0, y=0) origin point of the stage.**
* Once you figured this out, try out some complicated formulas and/or more sprites, and share with your classmates
## Grading rubric
| **Day 1 criteria** | Points |
| :--------------- | -------------- |
| 1.1 What does it do? | 2 |
| 1.2 Categories | 4 |
| 2.1 Move in opposite direction | 1 |
| 2.2 What happens | 2 |
| 3.1 x positions | 3 |
| 5.1 What it does | 3 |
| 5.2 Does turn block change x or y position | 1 |
| 5.3 Draw a square | 4 |
| 6.1 What does it do | 2 |
| 6.2 Dragging the mouse | 1 |
| 6.3 script behavior w/modification | 1 |
| **Total** | **24** |
| **Day 2 mini-project** | |
| 8 Make a kaleidoscope | 8 |
| **Total** | **6** |
| **Project total** | **30** |
================================================
FILE: lab_12.md
================================================
# Scavenger hunt
In this lab, you will explore the functionality of some common blocks and where they are in the palette.
## Part 1: Locating common blocks
1. Fill in the name of the category to which each block belongs in the chart below. The first one is already filled in for example.
| Block | Category |
| ------------------------------------------- | -------- |
|  | _motion_ |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
## Part 2: What does it do
1. Describe the function of each block in the chart below. If the block accepts arguments (contains values that you can change), be sure to test out a few different ones to make sure you fully understand what those values mean. The first one is already filled in for example.
| Block | Function |
| --- | --- |
|  | _Changes the direction that the sprite is facing. The argument indicates the number of degrees the sprite turns clockwise from pointing upwards. When the argument is "90", the sprite points right, and so on._ |
|  | |
|  | |
| | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
2. At this point, you may be noticing some patterns. Use what you've learned from exploring these blocks. What do the blocks in the indicated pallette do?
| Pallette | Function |
| --- | --- |
|Motion| |
|Looks| |
|Sound| |
|Pen | |
## Part 3: Put it all together
You are now going to use some of the blocks you've explored to create, save, and submit your program.
1. Create a script that plays 4 different notes with at least 2 rests in between.
2. Use the **repeat** block to play the song you create in number 1 in a loop.
3. Create a script that initializes the sprite at position (-20, 10). Then, have the sprite draw a shape that has at least 2 different colors and 2 different line thicknesses. _An example would be a square that has 2 thin red sides, and 2 thick blue sides._
4. Save your project as _Lab1.2_.
## Grading rubric
| **Criteria** | Points |
| :------------------------------------------------------------- | :-------------- |
| 1.1 Locating common blocks | 0.4 |
| 2.1 What does it do? | 0.4 |
| 2.2 Pallette | 0.4 |
| 3.1 Four different notes, 2 rests in between | 0.4 |
| 3.2 repeat block plays song | 0.4 |
| 3.3 multi-color, multi-line thickness shape at (-20,10) | 0.5 |
| **Total** | **2.5** |
================================================
FILE: lab_13.md
================================================
# Triangles, squares and stars
In this lab, you will write your first program to draw some simple shapes on the stage.
## Part 1: Drawing a triangle
1. Modify your program from the do now activity to draw a triangle when the number 1 is pressed on the keyboard.

2. Modify your script so that the sprite says the word "triangle" while it draws. The sprite should stop saying "triangle" once it has finished drawing.
3. Modify your script so that pressing the space bar clears the pen marks from the stage.
## Part 2: Adding more shapes
1. Now that you've drawn a triangle, add scripting to draw the shapes in the following table. Each shape should be drawn when the number next to it is pressed on the keyboard. (For example, pressing 3 on the keyboard should draw a diamond.)
| When this key is pressed... | Draw a ... |
| --------------------------- | ----------------------------------- |
| 1 | Equilateral triangle |
| 2 | Square |
| 3 | Diamond |
| 4 | Pentagon |
| 5 | Parallelogram ("leaning rectangle") |
| 6 (optional) | 5-pointed star |
You may want to draw a diagram like the one above of a triangle to figure out the angles in each shape.
2. Modify your script so the sprite is saying the name of shape. The sprite should stop saying the name of the shape when it is finished drawing.
3. Modify your script so that each different shape is drawn in a _different_ color and with a _different line thickness_. For example, if the square is drawn in blue with a line thickness of 3, each other shape must be drawn in a color that is not blue and with a line thickness that is not 3.
4. Modify your script so the sprite is hidden when it is not drawing. This will ensure the sprite is not obstructing the view of your beautiful artwork!
5. Save your project as _Lab1.3_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- |:-------------- |
| Equilateral Triangle | 0.25 |
| Square | 0.25 |
| Diamond | 0.5|
| Pentagon | 0.5 |
| Parallelogram | 0.5 |
| Star (bonus!) | 0.5 |
| **Total** | **2.0** |
================================================
FILE: lab_14.md
================================================
# Sprites in action
In this lab, you will use costumes and movement to create simple animations.
## Part 1: Run, Spot, run
1. In a new project, click on the file menu, then click costumes. Import the costumes `dog2a` and `dog2b`.

`dog2a`

`dog2b`
2. Write a script to make the sprite change costume each time the space bar is pressed. (The sprite should switch back and forth between the two costumes.)
3. Add to your script so that when the left arrow is pressed the sprite
* Face to the left.
* Move a few steps.
* Change costume when the `left arrow` key is pressed.
_In your window, the dog should look like it is walking when you press the left arrow key repeatedly._
4. Enhance your script to look as though the dog can walk to the right when you click the `right arrow` key.
## Part 2: Dragons
1. Create a new sprite. Following the same steps as in part 1, import the costumes `dragon1-a` and `dragon1-b`.

`dragon1-a`

`dragon1-b`
2. Write a script to make the sprite appear to breathe fire when the `f` key is pressed. The sprite should switch to the `dragon1-b` costume for a few seconds, then switch back to the `dragon1-a` costume.
3. Modify your script so that the dragon `attacks` the mouse pointer when the `f` key is pressed. When the `f` key is pressed, the dragon should take the following actions in order:
1. Make sure it is in the `dragon1-a` costume.
2. Point at the mouse pointer.
3. Glide to the mouse pointer's position.
4. Change to the `dragon1-b` costume
5. Pause to breathe fire.
6. Change back to the `dragon1-a` costume.
## Part 3: Run away
1. Add another sprite to your program. (This sprite can have any costume you choose).
2. Write a script to make this new sprite point away from the dragon and move when the `r` key is pressed.
3. Using the **broadcast** and **when I receive** blocks, modify your program so that instead of moving when the `r` key is pressed, the new sprite moves when the dragon attacks. The fleeing sprite should move when the dragon starts breathing fire.
4. Add a second sprite that runs away from the dragon as well.
5. Save your project as _Lab1.4_.
## Part 4: Setting the stage
1. Select the stage icon.
2. Select file icon then import
3. Now select a picture from your computer to make the background of your project.
4. Download [this image](stage_example.jpg) if you do not have one to use.
## Grading rubric
| **Criteria** | Points |
| :------------------ | :--- |
| 2.2 Dragon breathes fire | 0.25 |
| 2.3 Dragon attacks mouse pointer correctly | 0.75 |
| 3.2 A sprite runs away from dragon | 0.25 |
| 3.3 Sprite runs away when dragon breathes fire | 0.25 |
| 3.3 Use of the `broadcast` and `when I receive` blocks | 0.25 |
| 3.4 Another sprite runs away too | 0.25 |
| 4.0 Setting the stage | .50 |
| **Total** | **2.5** |
================================================
FILE: lab_21.md
================================================
# Squares and triangles redux
In this lab, you will rewrite your programs from Lab 1.3 to draw shapes using loops.
## Part 1: Back in time
1. Open your solution to the original "Squares, triangles and stars" activity.
2. Save your project as _Lab2.1_.

## Part 2: Simplifying your program
1. Look at your script to draw a square. It is probably quite long and has lots of repeated blocks. Using what you have learned about loops, rewrite this script to be shorter and have less redundancy. Make sure that your script still works as originally intended.
2. Now modify your other shape scripts to also use loops. In all cases, try to have as few blocks and as little redundancy as possible while still keeping your script easy to read and understand.
## Part 3: Adding more shapes
1. Modify your script to draw the extra shapes below. Follow all the original guidelines (different color and line thickness for each shape, say the name while drawing) and use loops to keep your scripts as short as possible.
| _When this key is pressed..._ | _Draw a..._ |
| ----------------------------- | -------------------------- |
| 7 | Decagon (10-sided polygon) |
| 8 | Circle |
You may not be able to draw a true circle, but you should get as close as you can.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :-------------- |
| Part 2 | |
| 2.2 Square using loop | 0.5 |
| Part 3 | |
| Decagon | 0.5 |
| Circle | 0.5 |
| Minimum redundancy in all | 0.5 |
| **Total** | **2.0** |
================================================
FILE: lab_22.md
================================================
# Yellow brick road
In this lab, you will use nested loops to draw a yellow brick road using as little scripting as possible.
## Part 1: Brick by brick
1. Write a program to draw a single 20x10 "brick" in the lower left corner of the stage when the green flag is clicked.
2. Modify your program to draw two bricks side by side. The bricks should share a short edge, like this:

3. Now modify your program again to build a full row of bricks across the entire length of the stage. Use a loop to keep your script as concise as possible. Remember that the stage is 480 pixels wide.
## Part 2: Build a road
1. Build a row of bricks, add scripting to build a second row above the first row. The bricks in the second row should share a long edge with those in the first row, but should be "offset" so that the ends of the second row bricks are at the middle of the first row bricks, like this:

2. Modify your program to build four total rows, alternating back and forth between the "regular" and "offset" rows. Use nested loops to keep your script concise.
3. Finish off the road by building alternating rows all the way to the top of the stage. Your final road should look like this:

4. Save your project as _Lab2.2_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :-------------- |
| 1.2 2 bricks bottom left | 0.5 |
| 1.3 row on bottom | 0.5 |
| 2.1 second row offset | 0.5 |
| 3.3 complete road | 0.5 |
| Uses at least one loop | 0.5 |
| Minimum redundancy in all | 0.5 |
| **Total** | **3.0** |
================================================
FILE: lab_23.md
================================================
# Lab 2.3 - What shape is that
In this lab, you will use user input and conditional statements to identify shapes based on the number of sides and some other properties as given by the user.
## Part 1: Triangle...or no triangle
1. Write a program that asks the user to think of a shape and input how many sides it has. Then, if the user is thinking of a triangle, tell him or her so. Regardless of whether or not the shape was a triangle, thank the user for playing.
2. Modify your program to give an appropriate message both when the user _is_ thinking of a triangle and when he or she _is not_ thinking of a triangle. Give the same thank you message afterward in either case.
## Part 2: Name the polygon
You will now expand your program from above so that instead of just deciding if a shape is a triangle or not, your script will be able to name the specific polygon. Your script must be able to identify at least the following shapes:
| **Number of sides** | **Polygon name** |
| :----------------- | :-------------- |
| 3 | Triangle |
| 4 | Quadrilateral |
| 5 | Pentagon |
| 6 | Hexagon |
| any other number | Unknown |
1. Fill out a [planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20script%20Design%20and%20Planning%20Worksheet.docx) for the above script. Make sure you consider all aspects of the program carefully.
2. Write the program. Be sure that your program works correctly in all cases.
## Part 3: Quadrilateral fever
Quadrilaterals come in many different varieties. Add scripting to your script so that, if the user is thinking of is a quadrilateral, you ask more questions to find out which type of quadrilateral it is. Your script should give the most specific name that applies. The following table describes the quadrilaterals you should know about from most to least specific:
| **Property** | **Quadrilateral name** |
| :------------- | :--------------------- |
| All four sides have the same length and all four angles have the same measure. | Square |
| Not a square and all four angles have the same measure. | Rectangle |
| Not a rectangle and each side is parallel to one other side.| Parallelogram |
| Not a parallelogram and two sides are parallel to each other.| Trapezoid |
| Not a trapezoid | Unknown quadrilateral |

1. Fill out a [planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20script%20Design%20and%20Planning%20Worksheet.docx) for the above script. Make sure you consider all aspects of the program carefully.
2. Write the program. Be sure that your program works correctly in all cases.
3. Save your project as _Lab2.3_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :-------------- |
| 1 Identifies triangle | 0.5 |
| 2 Identifies polygons | 1.0 |
| 3 Identifies quadrilaterals | 0.5 |
| **Totals** | **2.0** |
================================================
FILE: lab_24.md
================================================
# Guessing game
In this lab, you will use conditional statements and variables to build a simple number guessing game.
## Part 1: I'm thinking of a number
Write a program to choose a random number between 1 and 10 and then ask the user to guess a number. If the user's guess matches the random number, the user wins. If not, the user loses. In either case, the user should be shown a message indicating whether they won, lost and the secret random number should be revealed.
1. Fill out a [planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx) for the above script.
2. Write the simple version of the guessing game program described above.
3. Modify the script to keep asking the user for guesses until the correct number is given. Be sure to give a message after each guess, but only reveal the secret number when the user has guessed correctly and the game is over.
4. Modify the script to ask the player their name at the start of the game. Then, personalize the message for an incorrect guess by adding the player's name. For example, if Sarah is playing the game, then the message should say "Sorry, Sarah, that guess is not correct" instead of just "Sorry" when Sarah guesses incorrectly.
## Part 2: Game upgrades
1. Modify your guessing game so that the player can decide the range of possible numbers from which the secret number can be chosen. After asking the player's name, ask what they want the highest possible number to be. Then, instead of choosing a random number between 1 and 10, choose a random number between 1 and the number the player requested.
2. Modify the script to keep track of how many guesses the player has made. After the player guesses correctly, inform them how many tries it took before the correct number was guessed.
3. Increase the player's chances by telling them whether the guessed number is too high or too low instead of just that it is incorrect.
4. Save your project as _Lab2.4_.
## Grading rubric
| **Criteria** | Points |
| :----------------------------------- | :----------- |
| 1.1 Planning worksheet | 0.2 |
| 1.2 Simple version | 0.2 |
| 1.3 Repeat till correct guess | 0.2 |
| 1.4 User name | 0.2 |
| 2.1 Range of numbers | 0.3 |
| 2.2 Number of guesses | 0.3 |
| 2.3 High or low | 0.3 |
| **Total** | **1.7** |
================================================
FILE: lab_25.md
================================================
# Triangles of all kinds
In this lab, you will use Boolean operators to determine what sort of triangle a user is describing when entering answers to prompts.
## Part 1: Is that even possible
1. Write a program that asks the user for the lengths of all three sides of a triangle (_a_, _b_, _c_). Store each length in a variable. Then use the `say` block to display the perimeter of the triangle with those three side lengths.
2. **Real Triangle Check:** Modify your script to check the three side lengths can form a Real triangle. Remember that, in any Real triangle, the sum of the lengths of any two sides is greater than the length of the third side. So, if the triangle has side lengths _a_, _b_, and _c_, then all of the following must be true:
`a + b > c`
`a + c > b`
`b + c > a`
If the sides given cannot make a real triangle, **say** "this is not a Real triangle", instead of displaying the perimeter.
## Part 2: What kind of triangle
1. Modify your script to determine and **say** whether or not the triangle described is a right triangle. If the triangle has side lengths _a_, _b_, and _c_, then the triangle is a right triangle if the following is true:
`a * a + b * b = c * c`
2. Modify your script to determine which type of triangle has the side lengths given. A triangle can be one of the following three types:
| Triangle type | Description |
| ------------- | ------------------------------------- |
| Equilateral | All three side lengths equal. |
| Isosceles | Two side lengths equal, one different. |
| Scalene | All three side lengths different. |
3. Save your project as _Lab2.5_.
## Grading rubric
| **Criteria** | Points |
| :--------------------------------------- | :-------------- |
| Part 1 | |
| 1.2 Computes perimeter or says invalid | 1.0 |
| Part 2 | |
| 2.1 Identifies right | 0.25 |
| Identifies equilateral | 0.25 |
| Identifies isosceles | 0.25 |
| Identifies scalene | 0.25 |
| **PROJECT TOTAL** | **2.0** |
================================================
FILE: lab_31.md
================================================
# Drawing shapes (again)
In this lab, you will write a program to draw regular polygons. But this time, you will incorporate custom blocks using abstraction to write a more efficient program.
## Part 1: Simple shapes
1. Write a script (or find one you've already written) to draw a square.
2. Write a script (or find one you've already written) to draw an equilateral triangle.
3. Write a script (or find one you've already written) to draw a regular pentagon.
4. Write a script (or find one you've already written) to draw a regular octagon.
5. Look over the four scripts from above. Do you notice sections that are very similar? What sections might be able to be abstracted into a separate block?
## Part 2: If you've seen one
1. Take your script from above that draws a square and turn it into a custom block.
2. Modify your custom block to use a variable for the number of sides instead of the number 4. Set that variable's value to be 4 so that you still draw a square.
3. Now, see if you can modify your block so that it will work correctly for any number of sides greater than 2. Look closely at the angles in your four scripts section 1 and see if you can spot a pattern.
4. Use your custom block in a script that asks the user for a number and then draws a regular polygon with that many sides. If the number given is less than 3, give an error message and do not draw anything.
5. Save your project as _Lab3.1_.
## Bonus: Sizing things up
Modify your custom block and script from the previous section so that the user can specify both the number of sides and the length of each side. Be sure to utilize generalization and detail removal to make your script and block as concise as possible.
## Grading rubric
| **Criteria** | Points |
| :------------------------------------------------- | :-------------- |
| 2.1 Custom block draws square | 0.25 |
| 2.2 Use variable for number of sides | 0.5 |
| 2.3 Works for all sides > 2 | 0.5 |
| 2.4a script asks for sides, calls block | 0.5 |
| 2.4b script handles input <= 2 | 0.5 |
| Bonus: script and block handle size of sides | 0.5 |
| script clear and concise | 0.25 |
| **Totals** | **2.5** |
================================================
FILE: lab_32.md
================================================
# Lab 3.2 - What Goes Up
In this lab, you will use everything you've learned about loops and conditionals to construct a simple model for gravity.
## Part 1: Before You Start
Go to the starter project at [https://aka.ms/Intro-lab3-2](https://aka.ms/Intro-lab3-2). Log into Snap! and save your own copy of the project by choosing **Save as** button from the file menu. Be sure to click the **Share** button in the Save dialog box. Highlight the URL in the address bar and copy it.
## Part 2: Channeling Newton
Write a script for the Dino sprite so that:
1. Use one **when green flag is clicked** block to place Dino at the top of the stage. No animation, just use **set y to** block.
2. Use two more **when green flag is clicked**, to start two **forever** loops that make Dino fall to the bottom of the stage. One will model gravity by subtracting a constant amount from Dino's speed. The second will move Dino by his current speed.
3. When Dino touches the ground, Dino stops falling. "*Stops falling*" means Dino's speed is set to zero and stays zero as long as he is touching the ground. The **touching color ?** block can be used to detect the grass in the background layer.
When using the **touching color** block, change the color by clicking on the color box, then select anything in the color palette or stage that has the desired color.
## Part 3: What Goes Up, Must Come Down
1. Modify your code so that when the **green flag** is clicked, Dino will still move to the top of the stage but also move to a random x-coordinate between -240 and 240. Use the **pick random to** block in the **operators** category.
2. Modify your code so that the Dino sprite stops falling when it touches the ground **or** if it is touching the Platform.
## Part 4: Jump Up
1. Modify your code so that when the **spacebar** is pressed, Dino will jump up. From a physics point of view, when you jump you set your speed to something greater than zero.
## Part 5: Challenge
1. Modify your code so Dino can only jump while on the ground or the platform.
2. Add code so Dino will move left and right with the arrow keys.
## Grading Rubric
| **Lab 3.2 Criteria** | Points |
| --- | --- |
| 2.1 Goes to the top of the stage | 0.3 |
| 2.2 Falls to the bottom of the stage | 0.3 |
| 2.3 Stops falling when touching the ground | 0.3 |
| 3.1 To a random x-coordinate | 0.2 |
| 3.2 Touching the ground OR touching the platform | 0.3 |
| 4.1 Jump up | 0.3 |
| 5.1 Jump Up: Ground or Platform | 0.5 |
| 5.2 Movement using left and right arrow | 0.2 |
| **PROJECT TOTAL** | **2.5** |
Lab updates done by Don Wells, Volunteer, Michigan.
================================================
FILE: lab_33.md
================================================
# Lab 3.3 - Let me check my calendar
In this lab, you will write custom blocks that take parameters and are useful for calculations involving dates and calendars.
## Part 1: Basics
1. Write a custom block called **month name** that takes a number between 1 and 12 as an parameter and says the name of the corresponding month.
2. Write a custom block called **day name** that takes a number between 1 and 7 as an parameter and says the name of the corresponding day. For our purposes, the week begins on Sunday.
3. Write a custom block called **days in** that takes a month name as an parameter and says how many days are in that month. Assume a non-leap year.
## Part 2: Going Farther
1. Write a custom block called **is a leap year** that takes a year number as an parameter and says whether or not that year is a leap year.
- A year is a leap year if the year is a multiple of 4 that is not a multiple of 100 (e.g. 1984), or if it is a multiple of 400 (e.g. 2000). Years that are multiples of 100 but not multiples of 400 are NOT leap years (e.g. 1800). See [Wikipedia](https://en.wikipedia.org/wiki/Leap_year#Algorithm) for more detail.
2. Write a custom block called **is a valid date** that takes a month name and a date as parameters and says whether or not that date exists in that month. For example, the 31st is a valid date in January, but not in June. The 5th is a valid date in every month, and the 40th is not a valid date in any month.
3. Write a custom block called **day in year** that takes a year number and a number between 1 and 366 and says the date that corresponds to that numbered day of the specified year. For example, in non-leap years day #1 is January 1, day #32 is February 1, day #365 is December 31, and day #185 is July 4. Give an error message if the number is 366 and a non-leap year is specified.
Bonus: Determine the day you were born. Write a custom block called **day of week** that takes a month name, date, and year as parameters and says the day of week on which that date falls in that year. See [Wikipedia](https://artofmemory.com/blog/how-to-calculate-the-day-of-the-week/) for information on finding the day of the week from a date.
4. Save your project as _Lab3.3_.
## Grading rubric
| **Criteria** | Points |
| :------------------------------- | :-------------- |
| 1.1 month name | 0.5 |
| 1.2 day name | 0.5 |
| 1.3 days in | 0.5 |
| 2.1 is leap year | 0.5 |
| 2.2 is a valid date | 0.5 |
| 2.3 day in year | 0.5 |
| Bonus: day in week | 0.5 |
| **Total** | **3.0** |
================================================
FILE: lab_34.md
================================================
# If my calculations are correct
In this lab, you will write custom **reporter** and **predicate** blocks to perform several useful calculations and computations.
## Simple Computations
1. Write a custom **reporter** block called **min** that determines which of two numbers is smaller and reports that value. If the two numbers are equal, report either one.
2. Write a custom **reporter** block called **max** that determines which of two numbers is larger and reports that value. If the two numbers are equal, report either one.
3. Write a custom **predicate** block called **between** that determines if a number is between two other numbers. If the first number is equal to either of the other two numbers or is between them, the block should report "true".
4. Write a custom **predicate** called **at least as long as** that determines whether a word has at least a specified number of letters.
5. Save your project as _Lab3.4_.
## Bonus: Stepping Things Up
Write a custom **reporter** block called **distance to** that computes and reports the distance from a sprite's position to another point. Use the **x position** and **y position** blocks to determine the sprite's position. Remember that the formula for the distance between points `(x1, y1)` and `(x2, y2)` is `sqrt((y2-y1)^2+(x2-x1)^2)`.
## Grading rubric
| **Criteria** | Points |
| :------------------------------- | :-------------- |
| 1.1 min | 0.5 |
| 1.2 max | 0.5 |
| 1.3 between | 0.5 |
| 1.4 at least as long as | 0.5 |
| Bonus | 0.5 |
| **Total** | **2.0** |
================================================
FILE: lab_42.md
================================================
# Sentence generator
In this lab, you will create a simple sentence generator using lists.
## Part 1: Let's talk
1. Create a variable for each part of speech below, and set each variable to hold a list of words that fit that part of speech. Some examples are given, but feel free to use your own.
| Part of Speech | Example words |
| -------------- | ------------------------------------------------ |
| noun | giraffe, monkey, boy, girl, elephant, ... |
| verb | jumps, runs, sleeps, sits, dances, ... |
| adjective | big, small, loud, silly, young, old, sleepy, ... |
| adverb | quickly, excitedly, angrily, happily, sadly, ... |
| article | a, the |
| preposition | under, over, around, near, beside, ... |
## Part 2: Reporting phrases
1. Write a custom reporter block called “noun phrase” that reports a noun phrase where each word is chosen randomly from the lists you created.
```A noun phrase consists of an article, an adjective, and a noun in that order.```
Using our sample lists of words from part 1, here are a few examples of possible outputs from the "noun phrase" block:
* a silly elephant
* the sleepy boy
* the sleepy giraffe
2. Write custom reporter blocks like “noun phrase” for each of the phrase types listed below.
| Phrase type | Construction |Example
|--|--|--|
|noun phrase (completed in step 1) | article, adjective, noun|a big giraffe
|prepositional phrase | preposition, noun phrase|over the small monkey
|verb phrase|adverb, verb, prepositional phrase|quickly jumps over the small monkey
|sentence|noun phrase, verb phrase|a big giraffe quickly jumps over the small monkey
Using our sample lists of words from part 1, here are some possible outputs from each block:
* **noun phrase**: a small monkey
* **prepositional phrase**: around a sleepy elephant
* **verb phrase**: sadly dances beside the young boy
* **sentence**: the old giraffe quickly jumps over a silly elephant
## Part 3: Making sentences
1. Modify your script so that when you press the space bar, a random sentence is generated and a sprite says the resulting sentence.
Bonus: Modify your script so that a noun phrase can either be the construction from part 1 or a single proper noun (e.g. a person's name). Your script should randomly decide which version of a noun phrase to use.
A noun phrase consists of an article, an adjective, and a noun in that order.
## Part 4: Changing our vocabulary
1. Write a script so that when the `n` key is pressed, the user is prompted for a new noun and that noun is added to list of nouns. After that point, the new noun entered by the user should be able to appear in sentences.
2. Write scripts to add words to the other lists. Use the keys listed below.
| Key | Part of speech |
| --- | -------------- |
| n | noun |
| v | verb |
| j | adjective |
| d | adverb |
| a | article |
| p | preposition |
3. Write a script so that when the `x` key is pressed, the user is asked for one of the parts of speech and then for a number (n).
* Your script should remove the nth item from the list of words for the specified part of speech.
* For example, if the user types in "verb" and "3" then you should remove the 3rd word from the list of verbs.
* The removed word should no longer appear in sentences.
4. Save your project as _Lab4.2_.
## Grading rubric
| **Criteria** | **Points** |
| :------ | :-- |
| 1.1 6 lists | 0.5 |
| 2.2 reporter blocks | .75 |
| 3.1 sentence script | 0.5 |
| Bonus: add proper nouns | 0.25 |
| Bonus: Make prepositional phrase for verb phrases | 0.25 |
| 4.1 add nouns | 0.25 |
| 4.2 add other 5 parts of speech | 0.25 |
| 4.3 remove one word from a part of speech | 0.5 |
| **Total** | **3.25** |
================================================
FILE: lab_43.md
================================================
# Lab 4.3 - Guess Who
In this lab, you will create a list of names and then look through the list pulling out a subset of names.
## Part 1: Role call
1. Create a list of six different names (e.g. the names of your favorite music artists, family members, authors, celebrities, etc.).
2. Write a program to welcome each person individually to the program one at a time. (For example, "Welcome, John.")
3. Write a new script that welcomes all the players at once. For example, your new script should say "Welcome John, Kayla, and Michael." First, by writing a script that can say all the names on one line. Then add the commas and the word "and". Make sure your script works correctly no matter how many names are in the list.
## Part 2: I'm looking for
1. Write a script that says every other name in a list one at a time when the space bar is pressed. Use the same list of names from above. For example, if the list is [Eric, Sally, Michelle, John, Sam, Caleb], the names Eric, Michelle, and Sam would be said.
2. Write a script that says the names in the list one at a time in reverse order when the `0` key is pressed. For example, if the list is [Eric, Sally, Michelle, John, Sam, Caleb], the names Caleb, Sam, John, Michelle, Sally, and Eric would be said.
3. Write scripts so that when each of the following keys is pressed, the corresponding subset of names from the list is said one at a time.
| When this key is pressed... | Say the names in the list that... | For example... |
| --------------------------- | ----------- | --------------------- |
| 1 | Have more than four letters | Sally, Michelle |
| 2 | Start with the letter 'c' | Caleb |
| 3 | End with the letter 'y' | Sally |
| 4 | Are not the first two or last two names in the list | Michelle, John |
| 5 (Bonus) | Contain the letter 'e' | Eric, Michelle, Caleb |
4. Save your project as _Lab4.3_.
## Grading rubric
| **Criteria** | **Points** |
| ------------------------------------------------------ | -------------- |
| 1.2 Welcome by name | 0.25 |
| 1.3 Welcome all at once | 0.25 |
| 2.1 Every other name | 0.25 |
| 2.2 Reverse order | 0.5 |
| 2.3 4 letters | 0.25 |
| 2.3 start with C | 0.5 |
| 2.3 End with y | 0.5 |
| 2.3 Not first 2 or last 2 | 0.5 |
| Bonus: Contain e or E | 0.25 |
| **Total** | **3.0** |
================================================
FILE: lab_44.md
================================================
# Number cruncher
In this lab, you will continue practicing processing lists, this time using lists of numbers instead of words.
## Part 1: Numbers
Write 5 custom **reporter** blocks that takes a list as an argument. You can assume that all items in the list will be numbers.
1. Sum of all the numbers in the list.
2. average of all the numbers in the list.
3. True if the list contains one negative number and false if all the numbers are non-negative.
4. True if each value in the list is greater than or equal to the one before it.
5. The largest number in the list.
## Part 2: Transforming lists
1. Write a custom **reporter** block called **make all positive** that takes a list of numbers as an argument and reports a new list that is the same as the argument, except all negative numbers have been replaced by their absolute value.
2. Write a custom **reporter** block called **only evens** that takes a list of numbers as an argument and reports a new list that contains only the even numbers from the list. The result list should have its values in the same order as the original list, but with the odd integers removed. (Remember that **mod** block can be useful in determining whether or not a number is even.)
3. Save your project as _Lab4.4_.
Bonus: Write a custom **reporter** block called **add all** that takes two list of numbers as arguments and returns a new list that contains the sum of the corresponding values in each argument list. For example, if the arguments to **add all** are (1, 4, 6) and (2, 2, 3), the result should be (3, 6, 9). You can assume the two lists will be the same size.
## Grading rubric
| **Criteria** | Points |
| :------------------------------ | :--------------- |
| 1.1 sum **reporter** block | 0.25 |
| 1.2 average **reporter** block | 0.25 |
| 1.3 includes negative **predicate** block | 0.25 |
| 1.4 increasing? **predicate** block | 0.25 |
| 1.5 maximum **reporter** block | 0.25 |
| 2.1 make all positive **reporter** block | 0.5 |
| 2.2 only evens **reporter** block | 0.25 |
| Bonus: add all **reporter** block | 0.25 |
| **Total** | **2.0** |
================================================
FILE: lab_45.md
================================================
# It's around here somewhere
In this lab, you will implement several custom blocks performing variants of sequential search.
## Part 1: You there
1. Write your own version of the **contains** block, which takes a list and a value as arguments. Then reports true if the value is in the list and reports false otherwise. You should not use the existing **contains** block in your implementation.
## Part 2: Where
1. Write a custom block called **index of** that takes a list and a value as arguments and reports the index of the value found in the list. If the value is not in the list, report -1.
## Part 3: Tell Me More
1. Write a custom block called **first e-word** that takes a list as an argument and reports the first word in the list that starts with the letter 'e'. If no such word exists, report a blank (nothing).
2. Save your project as _Lab4.5_.
Bonus: Write a custom block called **first word that starts with** that takes both a list and a letter as arguments, and reports the first word in the list that starts with the given letter. If no such word exists, report a blank (nothing).
## Grading rubric
| **Criteria** | Points |
| :------------------------------------- | :-------------- |
| 1.1 contains block | 0.5 |
| 2.1 index of block | 0.5 |
| 3.1 first e-word block | 1.0 |
| Bonus: first word that starts with block | 0.5 |
| **Total** | **2.0** |
================================================
FILE: lab_51.md
================================================
# Connect the dots
In this lab, you will follow sets of instructions to investigate how clones work.
## Part 1: All together now
1. Each of the six students in your group should follow these instructions. Each student should then follow their instructions, completing each corresponding step together. (For example, everybody should complete Part 2 at the same time. Everyone should work on the same grid.)
1. Put your pen on the first dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.

### Reflection
1. What was the result of the group following the instructions?
2. Were there any difficulties you encountered?
3. Does it seem like the result was intended?
## Part 2: To each his own
1. Give each member of the group one of the sets of instructions below. Each student should then follow his or her instructions, completing each corresponding step together. (For example, everybody should complete their step ii. at the same time.) Everyone should work on the same grid.
### Person #1
1. Put your pen on the first dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #2
1. Put your pen on the third dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #3
1. Put your pen on the fifth dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #4
1. Put your pen on the seventh dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #5
1. Put your pen on the ninth dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.
### Person #6
1. Put your pen on the eleventh dot in the bottom row of the grid below.
2. Draw a line to the dot to the right.
3. Draw a line to the dot to the left.
4. Draw a line to the dot above.
5. Draw a line to the dot above.
6. Draw a line to the dot to the right.
7. Lift your pen.

## Part 3 - Reflection
1. What was the result of following the instructions?
2. Does this seem like the most efficient way to achieve this goal?
3. What would happen if the shape needed to be changed?
4. What problems could that cause?
5. What might be a better or more efficient way to accomplish the goal of these instructions?
## Part 4 - The same but different
Assign each member of your group a different number from 1 to 6. Each of the six students in your group should then follow these instructions. Each student should then follow their instructions, completing each corresponding step together. (For example, everybody should complete their step ii. at the same time.) Everyone should work on the same grid.
1. If you are person #1, put your pen on the first dot in the bottom row of the grid below.
2. If you are person #2, put your pen on the third dot in the bottom row of the grid below.
3. If you are person #3, put your pen on the fifth dot in the bottom row of the grid below.
4. If you are person #4, put your pen on the seventh dot in the bottom row of the grid below.
5. If you are person #5, put your pen on the ninth dot in the bottom row of the grid below.
6. If you are person #6, put your pen on the eleventh dot in the bottom row of the grid below.
7. Draw a line to the dot to the right.
8. Draw a line to the dot to the left.
9. Draw a line to the dot above.
10. Draw a line to the dot above.
11. Draw a line to the dot to the right.
12. Lift your pen.

## Part 5 - Results
1. Was the result of these instructions any different than in part 2?
2. Do you think this process was more or less effective than the process from part 2? Why?
## Grading rubric
| **Criteria** |Points |
| :----- | :-- |
| Part 1 participation and reflection completed | 0.5 |
| Part 2 participation | 0.5 |
| Part 3 reflection questions answered | 0.5 |
| Part 4 participation | 0.5 |
| Part 5 questions answered | 0.5 |
| **Total** | **2.5** |
================================================
FILE: lab_52.md
================================================
# Lots of balls
In this lab, you will use cloning to create many identical sprites without having to rescript each one individually.
## Part 1 - Follow the bouncing sprites
1. Create a script that contains a single sprite, choose from available costumes (i.e. basketballs, hearts, stars, balloons, Alonzo, doves). When `the green flag` is clicked, the sprite should go to the center of the stage, pick a random direction, and start moving in the chosen direction. If the sprite hits a wall, it should bounce off and keep moving.
2. Modify the script to be controlled by the stage rather than by the sprite itself. When the spacebar is pressed, the stage should broadcast a message that triggers the sprite's movement. Pressing the spacebar again should restart the sprite's movement, including a new speed and new direction.
3. What would you need to do to add a second bouncing sprite (that behaved in the same way) to the script? What about 10 sprites? 100 sprites? What would happen if you wanted to change the speed of all the bouncing sprites in the script after you had created 100?
## Part 2 - Clones
1. Modify your script so that, instead of a single sprite restarting each time the spacebar is pressed, a new clone of that sprite is created. You'll want to use the **Create a Clone of** and **When I starts as a clone** blocks in place of **Broadcast block** and **When I Receive** block.



.
2. What happens to the original ("master") sprite each time the spacebar is pressed? Does that seem useful? What role should the original sprite play now that we're cloning?
3. Modify the script so that the original ("master") sprite hides at the beginning of the script and each new sprite appears when it is created.
4. Save your project as _Lab5.2_.
Bonus: Assign each clone a different value for some properties, such as speed, color, or size. Try controlling these values from the master sprite rather than having each clone choose its own.
## Grading rubric
| **Criteria** | Points |
| -------------------------------------------------- | -------------- |
| 1.1 One bouncing sprite | 0.5 points |
| 1.2 Sprite controlled by stage | 0.5 points |
| 2.1 Clones created by stage | 0.5 points |
| 2.3 Hide master sprite | 0.5 points |
| Bonus: Sprites have different properties | 0.5 points |
| **PROJECT TOTAL** | **2.0 points** |
================================================
FILE: lab_53.md
================================================
# Fewer balls
In this lab, you will build on what you created in lab 5.2 to enable better management of the number of sprites in the script.
## Part 1 - Getting out of hand
1. Open up your program from [Lab 5.2](lab_52.md). Modify your program so that, when the `d` key is pressed, all bouncing sprites are deleted. You should be able to create new bouncing sprites . You should be able to create new bouncing sprites after you have removed the old clones. Use the **delete this clone** block and a message.

2. What if you wanted to remove only a few clones? Or only specific clones? What would be needed in order to accomplish that?
## Part 2 - Better control
1. Add a **global** variable to your script called `g_nextID` and give it a value of 1 when the green flag is clicked.
2. In your master bouncing sprite, create a `sprite` variable called `s_ID`. Modify your script so that each time a new clone is created, the clone's `s_ID` variable gets the value currently in `g_nextID` and `g_nextID` is incremented by 1.
3. Change your script so that when the `d` key is pressed, the _newest_ bouncing sprite gets deleted. Think about the right way to use the variables you created in the previous steps to know which sprite to delete. (_Hint: in order for this to work right, you should reuse old IDs once the clones are deleted. So, for example, if the most recently created clone was number 6, and you hit `d`, clone number 6 should be deleted. Then, if a new clone is created, it should be a new clone number 6._) Try to do this without requiring a lot of special cases in your script-- every clone should operate in the same way to determine if it should be deleted.
4. Save your project as _Lab5.3_.
Bonus: Modify the script so that if the `x` key is pressed the script asks for an ID number and deletes that numbered clone. All clones with higher numbers should be renumbered so that ID numbers remain contiguous. (For instance, if clone number 5 is deleted, then clone numbers 6, 7, and 8 should be renumbered as clone numbers 5, 6, and 7 respectively. Then, the next clone created should be a new clone number 8.) This is tricky and will require you to think very carefully about how to use the variables.
## Grading rubric
| **Criteria** | Points |
| :-------------------------------------------------- | :-------------- |
| 1.2 Delete all clones | 0.5 |
| 2.1 Assign unique s_ID to each clone | 0.5 |
| 2.2 Delete newest clone | 0.5 |
| 2.3 Delete newest and add combined | 0.5 |
| Bonus: Delete specific clone | 0.5 |
| **PROJECT TOTAL** | **2.0** |
================================================
FILE: lab_day_lesson.md
================================================
# Standard lab day lesson
## Learning objectives
Students will be able to...
* Describe difficulties they were having with the assignment on previous days.
* Explain the requirements of the project on which they are working.
* List questions they have about the current project.
## Materials and preparation
* Current project specification.
* Examples of necessary concepts or techniques.
* Prior to each lab day, have a sense of students' difficulties with the current project so you will know what to address in the review portion of the lesson.
* Observe student progress throughout lab time and note common issues or misconceptions.
* Be aware of students who are more behind than most of the class.
* The exit ticket (see below) will help with gathering this information.
## Pacing guide
| Duration | Description |
| ------------- | ------------------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review of trouble spots, concepts, misconceptions, etc. |
| 30-35 minutes | In-class lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review
Discuss and review areas in which a number of students are having trouble (or are expected to have trouble) with the current project..Using previous days exit tickets, questions from students, instructor awareness of trouble points in the project, and/or any other resources to determine what needs covering.
* Avoid lecturing or directly giving solutions; instead, present the problem and ask leading questions to help guide students to the solution.
* e.g. (from [Project 1](project_1.md): "It looks like a lot of us are having difficulty making all our sprites move at the same time that the words change. Is there something we learned about that can trigger scripts in a bunch of sprites all at once?"
If some students appear to be further along, utilize them to help explain the tricky concepts to their classmates. Use this time as an opportunity to remind students of upcoming checkpoints, recent labs or activities that may be applicable to the project, and/or how far along they should be by the end of the day.
### Lab time
Allow students to work on the current project at their own pace.
* Circulate and observe progress, stepping in if students appear stuck but are not asking for help.
* Be sure not spend more than a minute or two with any single student at a time.
### Exit ticket
Before students leave, have them answer the following questions on a small piece of paper:
1. What was the last thing you accomplished on the project today?
2. What is the first thing you will work on tomorrow?
3. Do you have any questions about the project you would like answered? If so, what are they?
4. Are there any topics or concepts that would help with the project that you would like reviewed? If so, what are they?
* These answers will help you plan your review time for the next lab day.
## Accommodations and differentiation
* Students who are consistently ahead and finish early can be encouraged to add extra features to their project for possible extra credit.
* Beware of students who claim to be ahead or finished but are actually trying to avoid work. When in doubt, ask a student to demonstrate their project.
* Students who are consistently behind should get extra attention during lab time. If they continue to be behind, try to find a before- or after-school opportunity to provide extra assistance.
* Students who are struggling significantly can be offered late turn-in, reduced requirements, or other "deals."
================================================
FILE: lesson_01.md
================================================
# Lesson 0.1: The first day of school
## Learning objectives
Students will be able to...
* Identify the class they are taking.
* List the high-level goals of the course.
* Describe classroom procedures, rules, and norms.
## Materials and preparation
* [0.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.1.pptx)
* [Template syllabus](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/IntrotoCSSyllabusExample.docx)
* [Unit 0 tips](unit_0_tips.md)
## Pacing guide
| Duration | Description |
| -------- | ----------- |
| 5 minutes | Welcome, attendance |
| 10 minutes | Course staff introductions |
| 10 minutes | Icebreakers |
| 10 minutes | Course Syllabus |
| 15 minutes | Course norms, procedures, and administrative tasks |
## Instructor's notes
Suggested topics to cover:
* Names and backgrounds of TEALS teaching team members.
* Brief background on TEALS program (i.e. "Why are there so many adults here?").
* Go over the Classroom Syllabus with students.
* Classroom rules, behavior expectations, grading guidelines, late work policies, etc.
* Academic Integrity/Cheating policy.
* Introductions/Icebreakers with students.
* High-level learning objectives for course.
================================================
FILE: lesson_02.md
================================================
# Lesson 0.2: Algorithms
## Learning objectives
Students will be able to...
* Define **algorithm**.
* Construct algorithms for performing simple tasks.
## Materials and preparation
* [0.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.2.pptx)
* [Unit 0 tips](unit_0_tips.md)
* Sandwich ingredients: Bread, peanut butter, jelly, utensils, plates, napkins
* Large poster paper and markers
### Video resources
* [https://youtu.be/ZnBF2GeAKbo](https://youtu.be/ZnBF2GeAKbo)
* Video quiz - See additional curriculum materials accessed from the TEALS dashboard.
* [CodeScty algorithm music video](https://youtu.be/LMRSr_y9jPU)
* [CodeScty algorithm dance challenge](https://youtu.be/LfhZzHrWDQM)
## Pacing guide
| Duration | Description |
| --------- | -------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion; present activity |
| 10 minutes | Students write first algorithms |
| 5 minutes | Sample algorithm execution |
| 10 minutes | Students debug/rewrite algorithms |
| 5 minutes | Second sample algorithm execution |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Show this video to activate disucssion: [https://youtu.be/ZnBF2GeAKbo](https://youtu.be/ZnBF2GeAKbo)
* Invite discussion about what constitutes a computer, what computers do, and what computer science is.
* An excellent protocol for these types of discussions is ["Chalk Talk"](http://www.nsrfharmony.org/system/files/protocols/chalk_talk_0.pdf) or ["World Café"](http://www.theworldcafe.com/key-concepts-resources/world-cafe-method/).
* Develop definitions for important terms ("computer," "computer science," "algorithm," "program," "programming language").
* Display each term on the board or projector and ask students to provide key ideas or concepts they know that relate to the term. From this, you can develop a classroom definition. Feel free to have a pre-written definition and guide students to that definition using leading questions.
* You can introduce the idea that the first computers were human (a person who makes calculations, especially with a calculating machine) with the story about Katherine Johnson whose calculations were used for manned and unmanned orbital missions (read more [here](https://airandspace.si.edu/stories/editorial/hidden-figures-and-human-computers)).
### Activity
#### Write algorithms
In pairs or small groups, students will attempt to develop an algorithm to teach a robot to [brush their teeth](https://bam.files.bbci.co.uk/bam/live/content/z9bmxnb/transcript), or to prepare a peanut butter and jelly sandwich (check for food allergies before performing this exercise). Specify to students that their algorithm must be complete and detailed enough for a "computer" (the teacher) to unambiguously follow the steps and achieve the desired result.
* Give little guidance at this stage, as the confusion (and the errors that are likely to result) will both reinforce the importance of specificity and detail as well as provide entertainment value later on.
* Algorithms should be written on paper to be shared and reviewed. Students should _not_ be writing any code, nor should they develop algorithms "in their heads."
_Remote Learning Guidance_ - This activity could be done using a shared document and then links could be shared. Consider pairing students in advance or building in a procedure on how students will pair up moving forward in the semester.
#### Algorithm execution
After groups have finished, choose a group and have them read their instructions. Act as a computer and follow each step as literally as possible. If there is ambiguity, or if a step is not possible to complete, point out the error.
When an instruction is ambiguous or impossible, interpret the algorithm in the most atypical (and hilarious) way possible. This will reinforce to students that many seemingly clear instructions can be taken many ways.
For the PBJ activity, common errors will include:
* Failing to open a container before using what is inside.
* **Response:** Try (and fail) to access the inside in a humorous fashion (e.g. try to reach through the bag or jar, acting confused as to why you cannot reach the ingredient inside).
* Failing to specify in which orientation or position to use something (e.g. "grab the knife" but not by the handle, "put down the bread" but not on the plate).
* **Response:** use or place the ingredient in an obviously (and humorously) incorrect way (e.g. grab the knife (carefully) by the sharp end, put the slice of bread on the table next to plate, spread peanut butter around the crust instead of on the face).
* Using instructions that are too broad (e.g. "pick up the bread" to mean a single slice, "put the peanut butter on the bread" to mean spreading a small amount).
* **Response:** Ask for more detail, or interpret the instruction literally.
* Combining multiple steps into one instruction (e.g. "spread peanut butter on the bread" without specifically opening the jar, putting peanut butter on the knife, using the knife to spread, etc.)
* **Response:** Ask for more detail.
Most algorithms will fail. If there is time, repeat the process with one or two other groups.
* Here is an example video of the PBJ activity:
#### Debugging algorithms
Spend a brief moment explaining that programming is an iterative process, and that errors are expected. Introduce the concept of "debugging." Then, have students "debug" their algorithms and attempt to fix all errors and ambiguities.
* Changes should be made on paper. Consider introducing a standard notation for edits (strike-through for deletion, carat (^) for insertion, circle for modify, etc.) to make changes easy to spot.
* If possible, have students make changes using a different color marker or pen.
While students are working, circulate and look for a promising algorithm. The goal is to have a successful algorithm at the end of the class.
#### Execute debugged algorithm
Once groups have finished debugging, repeat the execution process. Hopefully, at this point, at least one algorithm will result in a proper sandwich.
* If no successful algorithm is found, try to debug on the fly. When you hear an incorrect or unclear instruction, point out the error and either propose or request a fix before proceeding. The goal is to create a sandwich before the end of class.
Take note of issues while circulating through the class so you can address them quickly.
### Debrief
Ask students to describe why there were problems with the first round of algorithms, and how those problems were fixed. Encourage the use of computer science terminology.
* Keep students from fixating on the specifics of any one error and guide discussion to the general approaches and concepts used to resolve problems.
Have students discuss what lessons can be learned from this activity and how they can be applied to programming and computer science.
## Accommodation and differentiation
Check for food allergies before performing this exercise. If any student has allergies that would put them at risk, substitute another food item or simulate the process with stand-in ingredients. The most common allergy will be to peanuts. Possible alternatives in this case include cream cheese & jelly, toast with butter and jam, or even a deli sandwich (turkey/ham/roast beef) with mayo and/or mustard.
* For other allergies, or if no options are acceptable, simulate using fake ingredients. (Even slips of paper with the ingredients written on them can suffice.)
Students who have previous programming experience may tend to dominate the algorithm generation process. Encourage these students to avoid pointing out errors directly and help the other members of their group find and fix errors.
If students are struggling with the level of specificity required, allow them to make some basic assumptions to ease the process.
In the "debugging" round, some students may go overboard with the level of detail in an attempt to resolve all possible ambiguities. Remind these students that there are some basic instructions that can be easily understood by most people, and there is no need to go into further detail in those cases.
## University of California - Berkley teacher support resources
[BJC Lecture 6: Algorithm](https://www.youtube.com/watch?v=3tvbqdLjjSU) (With Luke Segar)
* Computer Worms 0:00-1:30
* Algorithm Concept Intro: Rubic Cube Competition 1:40-2:40
* [Algorithm Definition](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=3m20s) 3:20-4:20
* [Early Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=4m25s) 4:25-5:55
* [Familiar Algorithms](http://www.youtube.com/watch?v=3tvbqdLjjSU&t=6m00s) 6:00-7:30
* Commonly Used Algorithms (Page Rank, etc.) 8:00-10:45
* Choosing an Algorithm Technique 10:50-12:15
* Ways to Tackle Problems (Brute Force, Top Down, Bottom Up) 12:20-15:30
* Algorithms vs Functions and Procedures 15:30-16:00
* Turing Completeness (Computer Theory-BYOB is Turing Complete) 16:05-21:15
* Algorithm Correctness 21:25-26:00
* Algorithm Summary 26:00-end
[BJC Lecture 7: Algorithm Complexity](https://www.youtube.com/watch?v=_fgtTE2bhMg)
* Yahoo predicts America’s political winner 0:00-1:25
* Function abstraction (Explanation of Functions and Algorithms) 1:28-2:45
* What is IN a Spec 2:45-3:30
* What is NOT in a Spec 3:30-5:15
* Reference Text “Introduction to Algorithms” 5:18
* [Algorithm Analysis](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=6m0s): The Basics
* [Algorithm Analysis:](http://www.youtube.com/watch?v=_fgtTE2bhMg&t=7m41s) Running Time
================================================
FILE: lesson_03.md
================================================
# Lesson 0.3: Programming languages
## Learning objectives
Students will be able to...
* Complete small coding tasks (Hour of Code).
* Explain why computer programs are written in specialized languages.
## Materials and preparation
* [0.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.3.pptx)
* [Unit 0 tips](unit_0_tips.md)
* Work through at least one of the coding activities on your own so you are familiar with the activities and can provide assistance as needed:
* [MakeCode Arcade](https://arcade.makecode.com/hour-of-code)
* [Minecraft: Timecraft tutorial](https://aka.ms/HOC21trailerbuild)
* [Educator guide](https://aka.ms/HOC21educatorguide)
* [Slide deck](https://aka.ms/HOC2021presentationslides)
* [Beyond Hour of code](https://aka.ms/HOC2021beyondhoclessons)
* [Extension activities](https://aka.ms/HOC21extensionactivities)
* [Facilitation guide](https://education.microsoft.com/en-us/course/abb0ebf3/overview)
* Solution and train the trainer guide available in curriculum resources located in the TEALS dashboard.
* [Minecraft Adventurer](https://studio.code.org/s/mc/stage/1/puzzle/1)
* [Dance Party](https://studio.code.org/s/dance-2019/lessons/1/levels/1)
* [Choose your own](https://hourofcode.com/us/learn)
### Video resources
* [https://www.youtube.com/watch?v=6qF3HmRzg8o](https://www.youtube.com/watch?v=6qF3HmRzg8o)
* Video quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
## Pacing guide
| Duration | Description |
| --------- | -------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 5 minutes | Introductory discussion |
| 35 minutes | Coding activities |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Introduce students to the concept of a **Computer program**: a sequence of instructions or steps, written in a language that can be understood by a computer, that will be used by the computer to complete a task or solve a problem.
* Ask for any programming languages students are familiar with (even just names).
* Draw distinctions between proper programming languages and other types of languages (such as markup languages e.g. HTML).
Lead the group to develop expectations about what aspects of programming might be most challenging and what skills might be most useful to be successful.
#### Guiding questions
What are the steps required to write a computer program?
* This is essentially developing an algorithm for writing a program.
What knowledge might make writing a program easier?
What might you need to do when writing a computer program that you have never or rarely done before?
What parts of programming are most intimidating or scary?
What are you good at that might help you be a better programmer?
### Activity
Students should work through one of the Hour of Code activities of your choice.
* Choose one activity as the requirement, and leave another for those who finish quickly.
* Allow students to struggle with the activities if needed, stressing the importance of patience and persistence in programming.
* Have students submit the certificate of completion of their hour of code to the instructor.
* _Remote Guidance_: The certificates can be submitted digitally upon completion.
### Debrief
Guide students in a discussion about the activities. Some sample guiding questions:
* What was most challenging?
* Put special emphasis on the iterative nature of programming, and the need to occasionally throw out a partial solution and start over.
* What was different about solving these problems than solving other problems encountered in school?
* Why can instructions not be given in simple English? Why must we be limited to certain operations from which we must build up solutions?
* If students seem interested, this can be an opportunity for a brief conversation about the difference between high-level programming languages and machine languages (assembly code).
## Accommodations and differentiation
If students appear to be frustrated enough to not be enjoying the activity, provide a step in the right direction and remind them that programmers rarely create a correct program on the first try.
## University of California - Berkley teacher support resources
[BJC Lecture 5: Programming Paradigms](https://www.youtube.com/watch?v=_4ScHcLvQnw)
* Dilemma of Being a Cyborg 0:00-2:30
* Programming Paradigms 2:30-3:50
* Snap! BYOB (Hybrid) 3:55-4:45
* Functional Programming (Cascading Values) 4:50-5:35
* Imperative/Sequential 5:41-8:35
* Object Oriented Programming (OOP Basic Explanation) 8:40-15:45
[OOP Ex: Sketch Pad Dr. Ivan Sutherland](http://www.youtube.com/watch?v=_4ScHcLvQnw&t=15m45s) "Father of Computer Graphics" 15:45-22:10
* OOP in BYOB (Demo of Functions in BYOB) 22:35-29:20
* Declarative Programming 29-22-31:20
* Declarative Programming Examples in BYOB 31:25-35:20
* Review of Paradigms 35:25-end
================================================
FILE: lesson_04.md
================================================
# Lesson 0.4: Self-portrait
## Learning objectives
Students will be able to...
* Create a simple script to describe themselves.
## Materials and preparation
* [0.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.4.pptx)
* [Unit 0 tips](unit_0_tips.md)
* [Do Now: I am...](do_now_04.md)
* [Lab 0.4 - Getting to know you](lab_04.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_04.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_04.pdf))
* Student experience survey [(docx)](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/Student%20Experiences%20Survey.docx) [(pdf)](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/Student%20Experiences%20Survey.pdf)
* Review [saving and sharing](https://youtu.be/VHts_QAp3XU)
* Ensure that all classroom computers can access [http://snap.berkeley.edu/run](http://snap.berkeley.edu/run)
### Video resources
* [https://www.youtube.com/watch?v=7fncD7NH7g8](https://www.youtube.com/watch?v=7fncD7NH7g8)
* Video Quiz - See Additional Curriculum Materials accessed from the TEALS Dashboard.
* [https://youtu.be/_Mwc1gc77dc](https://youtu.be/_Mwc1gc77dc)
* [https://youtu.be/b-EWj7xN90U](https://youtu.be/b-EWj7xN90U)
## Pacing guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 5 minutes | Introduce activity |
| 35 minutes | Getting to know You lab |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introduce activity
Play [introductory video](https://youtu.be/b-EWj7xN90U) of Snap! put together by Jens Moenig
Tell students that today they will explore and use it to create a "self-portrait" program.
* Emphasize that the goal of today's lesson is **_not_** for students to develop a deep understanding of any of the features. Later lessons will teach them everything they need to know. For now, they should just explore, figure out what they can, and put it to use however they see fit.
* Tell students they will create accounts so they can save their self-portraits and share them.
* Give students the link to the student experience survey. Tell them that answering these questions will help them to think about themselves and give them some ideas for their self-portraits.
Spend just a couple minutes demonstrating, create sprites and scripts, and run scripts.
Show students the [lab handout](lab_04.md) and read through the instructions.
* Point out the places to write answers to the written questions in parts 1.2 and 1.3.
* Draw special attention to the list of requirements for the self-portrait script in part 1.4.
* This is an excellent opportunity to tell students that all labs in this course will look like this, and that they should get used to reading instructions carefully.
### Student experiences survey
Instruct students to complete the [student experiences survey](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/Student%20Experiences%20Survey.docx).
Students should answer every question and “I don’t know” or “I’m not sure” are okay answers.
* Privacy notice: make sure you do not publish students submissions to this survey.
#### Optional
If you have a digital camera available, you can take photos of the students for use in the self-portraits.
* Doing so will give a level of personalization to each student's project.
* You will need to provide students with a location to download their photo.
In addition you need to walk students through the process of importing a costume from the file menu.
### Activity
Instruct students to complete the [getting to know you](lab_04.md) lab.
* Make sure they understand what your expectations are for student account names.
* Verify that every student has an account.
* If you have a digital camera available, you can take photos of the students and have them use their picture as the costume to the sprite. Doing so will give a level of personalization to each student's project. You will need to provide students with a location to download their photo. In addition you need to walk students through the process of importing a costume from the file menu.
### Save and share
Instruct students on how to Save their projects and what they should be named.
Here is a great video of how to share a script - [https://youtu.be/VHts_QAp3XU](https://youtu.be/VHts_QAp3XU)
Students will be able to share the URL of their projects for submission purposes.
### Debrief
Ask each student to identify and describe _one_ feature they discovered in the program. Keep a running list on the whiteboard or projector.
* If the students build a pretty comprehensive list, you can use this as a chance to go over a brief roadmap for the course.
* Ask students what they enjoyed about working with program and what they disliked.
## Accommodation and differentiation
Allow students to use whatever resources they need, including instructors, peers, and web searches if necessary, to create their programs. The goal of this lesson is exploration and exposure, not mastery.
For students that are hesitant or unwilling to engage, point out some simple, useful features (like basic drawing and the **Say** block) to get them started. Remind them that complexity or "coolness" are not important for this lab.

If you wish, you can add a second day to this lesson for students to share out their programs on a volunteer basis. Work with your classroom teacher and/or school IT staff to determine the best way for students to be able to present.
One simple option is to have volunteering students share their projects with you, and then show each one in turn on the teacher computer/projector.
Have a plan for collecting or accumulating the students' projects, which you can then use to get to know your class!
`This Lesson was designed by J-Mag Guthrie, TEALS Volunteer, Texas`
## University of California - Berkley teacher support resources
* [BJC Lecture 4: Functions](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=18m15s)
* [Types of blocks](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=18m15s) 18:15-19:45
================================================
FILE: lesson_05.md
================================================
# Lesson 0.5: Coordinate system
The lesson is important to cover if students have not learned the concept of the coordinate system and plotting (x,y) coordinates.
## Learning objectives
Students will be able to...
* Recall the Cartesian coordinate system.
* Implement the coordinate system to position a sprite using coordinates.
## Materials and preparation
* [0.5 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%200.5.pptx)
* [Unit 0 tips](unit_0_tips.md)
* [Do now: Draw the coordinate system](do_now_05.md)
* [Lab 0.5 handout (Getting to know coordinates)](lab_05.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_05.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%200/lab_05.pdf)).
* Familiarize yourself with this [Coordinate system](https://www.desmos.com/calculator/ui4klsjued) tool.
* Students will be entering coordinates on the left side of the screen
* The points will plot on the graph.
* Familiarize yourself with this [Snap! template](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Snap%20Coordinate%20System%20Intro).
* Familiarize yourself with the [Peabody test](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=PeabodyTest).
* Here is a place to print [Graph Paper](https://free-printable-paper.com/graph-paper/) in case it is necessary to print graph paper for the class.
### Video resources
* [https://youtu.be/5ctsUsvIp8w](https://youtu.be/5ctsUsvIp8w)
## Pacing guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Do Now |
| 10 minutes | Introduce Coordinate System |
| 15 minutes | Integrate Coordinate Concept |
| 15 minutes | Lab Activity |
| 5 minutes | Debrief and wrap-up |
## Instructor's notes
### Introduce activity
Explain to students the coordinate system using the grid they have drawn from the dow now.
Define the origin and that its center is (0,0).
Define the grid limits of positive and negative 240 on the x-axis and positive and negative 180 on the y-axis.
### Classroom activity
(_This classroom activity is optional - use it if you think your class could use the additional scaffolding._)
Together as a class, practice plotting a few points on the Coordinate System.
Use [this coordinate tool](https://www.desmos.com/calculator/ui4klsjued) to have the students plot points.
* This has been pre-configured with the dimensions of the grid so they can see the points being graphed.
* Have students enter the points on the left side of the tool and the points will be plotted on the graph on the right.
* Note that the grid lines are set to 10 unit increments.
* Have them plot the following points.
* (0, 0)
* (50, -50)
* (100, 0)
* (50, 100)
Ask students if they connect the dots, what shape would the points make? (Answers may vary: kite, diamond, quadrilateral, polygon, etc).
### Integrate
Explain to students that this is how the stage is setup but it doesn't have a grid to view.
The origin (0,0) is the exact center of the grid.
Have students enter the following points into the **go to x: y:** in the [template](https://snap.berkeley.edu/snap/snap.html#present:Username=aspiece%40gmail.com&ProjectName=Snap%20Coordinate%20System%20Intro)
* (0, 0)
* (50, -50)
* (100, 0)
* (50, 100)
Have students click the green flag to see the sprite draw the shape.
Instruct the students to use the block template to draw at least two shapes of their own.
### Lab activity
Introduce the lab activity to students by explaining the instructions and getting them started with the activity.
### Debrief
Can you think of any other technologies that use a coordinate system to display graphics?
Are there any blocks that you have discovered that have helped you draw shapes faster?
## Accommodation and differentiation
Kinesthetic learners could use graph paper to draw the shapes with a writing utensil.
Challenge students who understand this challenge them to draw more complex figures and allow them to explore other blocks that may be useful to do this faster. (i.e repeat blocks, etc).
Students will have different levels of prior knowledge on this topic. The objective of this lesson is to level set students to ensure they all have an understanding of coordinates. There may be students seeing coordinates for the first time that may need more 1 on 1 support to move through this lesson.
================================================
FILE: lesson_11.md
================================================
# Lesson 1.1: Welcome to Snap!
## Learning objectives
Students will be able to...
* Define and identify _blocks_, _scripts_, _sprites_, and _the stage_.
* Write simple scripts.
* Describe what simple scripts do without executing the script.
## Materials and preparation
* [1.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.1.pptx)
* [Unit 1 Do now](do_now_11.md)
* [Lab 1.1 - Welcome to Snap!](lab_11.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.1%20Welcome%20To%20SNAP.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.1%20Welcome%20To%20SNAP.pdf))
* [Helping trios activity](helping_trios.md)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://www.youtube.com/watch?v=b-EWj7xN90U](https://www.youtube.com/watch?v=b-EWj7xN90U)
* Video quiz - See additional curriculum materials accessed from the TEALS dashboard.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| _Day 1_ | |
| 10 minutes | Welcome, attendance, do now, announcements |
| 10 minutes | Introductory discussion |
| 10 minutes | Lab walkthrough |
| 20 minutes | "Welcome to Snap!" lab activity |
| 5 minutes | Demonstrate turn-in procedures and wrap-up |
| _Day 2_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review from yesterday |
| 30 minutes | Continue lab |
| 10 minutes | Debrief, turn-in, and wrap-up |
## Using zoom blocks

Zoom blocks are a useful tool to increase the readability of script in Snap!. To access the zoom blocks feature, simply go up to settings in the upper left, and select the second option in the list, zoom blocks. Once selected, an interface pops up which allows you to increase the zoom on your script and shows you a preview.
## Instructor's notes
### Day 1
#### Introductory discussion
Review the definitions of _algorithm_ and _program_ developed in lesson 0.2.
* **Algorithm:** a complete, well-defined sequence of steps for completing a task or solving a problem.
* **Program:** a sequence of instructions or steps, written in a language that can be understood by a computer, that will be used by the computer to complete a task or solve a problem.
#### Activity walkthrough
Work through [Welcome to Snap!](lab_11.md) lab through part 3 as a class.
Point out key aspects of Snap! in each section, including:
* Part 1 - the sections of the window.
* Part 2 - block shapes and color-coding of pallettes
* Draw attention to the different shapes. Their meanings will be covered as each block type is introduced.
* The "drag-and-drop" nature of the language.
* Running blocks/scripts by clicking on them.
* Ensure that all students can create an account and save their work.
* Allow students a few minutes to develop their own answers to each of the questions and activities before discussing as a class.
#### Activity
Individually or in pairs, have students continue working through the [Welcome to Snap!](lab_11.md) lab activity.
* Students should answer all questions and complete all activities and turn them in using your chosen turn-in procedure.
* For programs, including the kaleidoscope program, students should save the project to the cloud and share a link with you.
#### Turn-in procedures
Remind students of the turn in procedures introduced in Unit 0.
### Day 2
#### Review
Go over answers to the questions from the parts of the lab completed on day 1.
#### Discussion
Consider the following questions:
* Can you name the different parts of the browser window?
* Can you define _block_, _reporter_, and _script_ ?
* Can you Describe, in your own words, the coordinate system?
#### Continue lab
As before, students should turn in all answers using your chosen turn-in procedure.
Judge the appropriate time based on observing student progress.
#### Debrief and wrap-up
Discuss the challenges in the Kaleidoscope program.
* If time allows, ask one or two students to demonstrate and describe their programs.
Remind students of the turn-in procedures discussed yesterday and ensure all students can turn in their work.
## Accommodations and differentiation
For students that finish the lab early, encourage them to add more advanced features to their Kaleidoscope program, exploring parts of Snap! not covered in the lab.
Students that are struggling with the lab can be paired and receive individual instruction to help them through the activity. You can also use [helping trios activity](helping_trios.md).
No parts of this lab can be easily skipped without impacting learning objectives, so provide as much support or scaffolding as you can to ensure all students can complete the lab. Add days to the lesson if needed.
## University of California - Berkley teacher support resources
[BJC Lecture 2: 3D Graphics](http://www.youtube.com/watch?v=q2UMQaoW30U&t=16m50s)
[Procedural Based Motion](http://www.youtube.com/watch?v=q2UMQaoW30U&t=16m50s)
* Lab 1.1: 16:56-20:00
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_12.md
================================================
# Lesson 1.2: Building blocks
## Learning objectives
Students will be able to...
* Identify the pallettes of blocks.
* Describe the function of several common blocks.
* Be able to use common blocks to build simple scripts.
## Materials and preparation
* [1.2 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.2.pptx)
* [Do now 1.2](do_now_12.md)
* Picture of [Admiral Grace Hopper](https://upload.wikimedia.org/wikipedia/commons/2/21/Grace_Murray_Hopper%2C_in_her_office_in_Washington_DC%2C_1978%2C_%C2%A9Lynn_Gilbert.jpg) or her Mark II [notes](https://upload.wikimedia.org/wikipedia/commons/8/8a/H96566k.jpg) that show the bug she found in the computer.
* [Lab 1.2 - Scavenger hunt](lab_12.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.2%20SNAP%20Scavenger%20Hunt.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.2%20SNAP%20Scavenger%20Hunt.pdf)).
* [Helping trios activity](helping_trios.md)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://youtu.be/u80WYSNxRjM](https://youtu.be/u80WYSNxRjM)
* Video Quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
### Who is Grace Hopper? video
## Pacing guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion |
| 25 minutes | Scavenger hunt activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
#### Do now debrief
Tell the story of [Admiral Grace Hopper](https://en.wikipedia.org/wiki/Grace_Hopper) who originated the term "debugging".
* You could also use this _Who is Grace Hopper?_ video: [https://youtu.be/Fg82iV-L8ZY](https://youtu.be/Fg82iV-L8ZY)
Review concepts from the previous lesson.
* Ensure that students can:
1. Define _block_ and _script_.
2. Review snapping blocks together to make a script.
3. Review how blocks are executed in order.
Introduce the concept of block pallettes.
* Ask students to consider why pallettes are helpful as opposed to having a simple list of blocks.
### Activity
Individually or in pairs, have students work through the [scavenger hunt](lab_12.md) activity.
Students should turn in answers to all questions and scripts for the final problems.
Consider gamifying the worksheet or debrief as an online poll and/or quiz.
### Debrief
Go through each question or prompt in parts 1 and 2 and ask students to share their answer.
> **Cold calling alternative:** Write each student’s name on an index card and shuffle the cards. Next, ask a few “review” questions to set the stage that ask for application (or creativity, or evaluation) and have no single “right answer.” Give students 30 to 60 seconds to formulate an answer. You can have them talk in pairs or groups for a few minutes as well if you prefer. It’s only after students have been thinking that you take the top card to see who answers. Sometimes you can say something like, “If you don’t know, make something up like you would on a mid-term, and then we’ll all help you develop better answers.” The student takes their best shot, knowing that others will help if necessary.
At that point you have lots of options: You can ask a follow-up to the same student, pick another card and have somebody else answer the follow-up, or simply have students volunteer to expand on the first answer.
>**Remote cold calling adaptation**
>Consider using this [Random name generator](Excel-Randomizer.xlsx) to select a student in a remote setting.
Point out the color coding for each pallette.
Emphasize important details in some of the blocks listed in part 2, such as:
* The **think** block will leave the bubble on the stage until something else is thought.

* the **go to xy** block and **glide** block blocks require explicit _x_ and _y_ coordinates.
 
Call on a few student responses for each pallette before commenting yourself.
* Try to guide students to discuss with each other and settle on a description for each pallette with minimal instructor intervention.
Discuss one or two student solutions to each of the programming problems.
* Point out differences between student solutions and call attention to the fact that there is more than one way to solve a problem.
## Accommodations and differentiation
Colorblind students may not be able to identify the block colors, but can still recognize the organization of pallettes. Be sensitive to this, but no modifications are likely required.
Students that are struggling with the lab can work with another student or receive individual instructor attention to help them through the activity. Consider using [helping trios](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Helping%20Trios.pdf) if appropriate.
The bonus assignment should be used for students who finish quickly.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_13.md
================================================
# Lesson 1.3: Drawing Shapes
## Learning objectives
Students will be able to...
* Construct simple algorithms to draw shapes.
* Convert algorithms into scripts.
## Materials and preparation
* [1.3 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.3.pptx)
* [Do now 1.3](do_now_13.md)
* [Lab 1.3 - Squares, triangles and stars](lab_13.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.3%20Squares%20Triangles.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.3%20Squares%20Triangles.pdf)).
* [Exterior angles review](Geometry_Exterior_Angles.pdf)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://www.youtube.com/watch?v=qLU3PtaG3ww](https://www.youtube.com/watch?v=qLU3PtaG3ww)
* Video quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
## Pacing guide
| Duration | Description |
| :--------- | :-------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review and introduce activity |
| 25 minutes | Shape drawing activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Review the pallettes of blocks and what each is for.
* Put emphasis on motion and drawing pallettes.
* Remind students about the iterative process of programming.
* Students may get frustrated throughout this activity. Remind them that requiring multiple attempts to find the right solution is normal.
### Introduce the following blocks
| Block name | Block image | description |
| :--- | :--- | --- |
| **clear** |  | Clears all pen marks from the stage. |
| **pen up** |  | Picks up the pen from the stage. |
| **pen down** |  | Puts down the pen on the stage. |
| **set pen color to** | | Sets the pen color to the indicated color. |
| **set pen size to** || Set the pen thickness to 1. |
| **change pen size by** |  | Changes the pen size by 1. |
| Block name | Block image | description |
| :--- | :--- | --- |
| **Show** |  | Shows the sprite on the stage. |
| **Hide** |  | Hides the Sprite from the stage. |
### Scaffolding
Review [exterior angles of regular polygons](Geometry_Exterior_Angles.pdf) with the class.
* Focus on the shapes on this document and the formula used to determine the angle.
* This will help them determine find the angles of any regular shape.
### Activity
Students should complete the ["Triangles, squares, and stars"](lab_13.md) activity individually.
* This will give them the tools they need to figure out the angles they need for any shape they would like to draw.
When students finish, have them turn in their project using whatever procedures you have set up.
### Debrief
Have students switch seats with a nearby classmate and review each other's work.
* If one in a pair student was able to complete a program and the other was not, have the student who was successful walk his/her partner through.
* If neither student in a pair was able to complete a program, encourage them to work together to figure out what they were missing.
Ask students to share what they learned from looking at their partner's projects.
Point out that there is more than one way to solve a problem and two programs that are both correct might not look the same.
## Accommodations and differentiation
Advanced students can attempt the five-pointed star. If students finish that shape, encourage them to try more advanced shapes.
* Examples: kite, smiley face, student's initials
Struggling students can either be paired or allowed to not complete certain shapes.
Students who have not yet learned the skills necessary in determining the correct angles. Point out to them that geometric understanding is not necessary and the angles can be determined using trial and error.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_14.md
================================================
# Lesson 1.4: Animation
## Learning objectives
Students will be able to...
* Animate sprites using costume changes and movement.
* Trigger action in other sprites using broadcasts.
* Implement scripts for multiple sprites.
## Materials and preparation
* [Do now 1.4](do_now_14.md)
* [1.4 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.4.pptx)
* [Do now 1.4](do_now_14.md)
* [Lab 1.4 - Sprites in action](lab_14.md)([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20Word/Lab%201.4%20Sprites%20in%20Action.docx)) ([blocks](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%201%20PDF/Lab%201.4%20Sprites%20in%20Action.pdf)).
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
* Video resource: [https://youtu.be/3x5ZI-mKc44](https://www.youtube.com/watch?v=3x5ZI-mKc44)
* Video quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
* Changing costumes video: [https://youtu.be/kgqi7CQLgJU](https://youtu.be/kgqi7CQLgJU)
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 10 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Lecture and introduce activity |
| 25 minutes | Animation activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
_Note: The [Lesson 1.4](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%201.4) project has examples of all the concepts covered in this lesson._
### Warm-up
* Students should complete [Do Now 1.4](do_now_14.md) individually.
### Lecture
#### Broadcasting
Introduce students to the **Costumes** tab and show them how to import costumes to a sprite.
* Point out that, while a sprite's costumes can be anything, most often the different costumes of a single sprite will be somehow related.
Demonstrate how to use the **next costume** and **switch to costume** blocks to change the appearance of a sprite.


* Emphasize that costumes will cycle and that switching to the costume a sprite is already "wearing" is OK.
* Combine costume switching with movement and other actions to show that blocks of different pallettes can be combined in the same script.
Introduce the **broadcast** and **when I receive** blocks and show how they can be used to coordinate action between sprites


* Point out that all sprites "hear" a broadcast and any sprite with a corresponding **when I receive** block will react.
Discuss the difference between **broadcast** and **broadcast and wait** blocks and ask students to come up with ideas for when each would be useful.

It's worthwhile to introduce the rotate buttons. These buttons allow you to Snap your rotation, allowing you to lock rotation, allow free rotation, or allow only left/right rotation.

#### Adding more sprites
Introduce students to adding more sprites to their script using the **add a new turtle sprite** button.

When clicked, the students will notice a new sprite is created with a different color.
Have them select the new sprite, then click on `file` > `costumes` > import > Have them select a sprite of their choice.
Show them how they can now write a script for this second sprite that is only for that Sprite.
### Activity
Students should complete the [Sprites in Action](lab_14.md) lab individually.
* Ensure that students create two different sprites for parts 1 and 2 so they do not get the costumes mixed up.
Students can submit the assignment using your turn-in procedures or you can check off the work as students complete it.
### Debrief
Ask a student to show their solution to each part. Call on a different student (either a volunteer or via cold calling) for part 1 and part 2.
* Note any places in which there may be multiple possible approaches. Ask for volunteers to describe differences in their script.
## Accommodations and differentiation
Students that finish quickly can be encouraged to add more detail to their animations, such as sounds, **say** blocks, and/or more costumes.
Especially advanced students can be encouraged to create their own costumes for a new animation that does not use any built-in sprites.
With struggling students, re-emphasize the fact that each sprite can have different costumes and that changing costumes is very much like changing position by moving. Get students to be able to change costumes on a key press before moving on to the animation aspect.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_15.md
================================================
# Lesson 1.5: Storytelling project
## Learning objectives
Students will be able to...
* Apply programming skills to create an animated movie, play, nursery rhyme, or other scene.
* Practice good debugging skills to correct issues as they arise while programming.
## Materials and preparation
* [1.5 Slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%201.5.pptx)
* [Do now 1.5: Day 1](do_now_15.md)
* [Do now 1.52: Day 2](do_now_152.md)
* [Do now 1.53: Day 3](do_now_153.md)
* [Project 1 - Storytelling](project_1.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%201%20Storytelling.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%201%20Storytelling.pdf))
* [Most popular plays and musicals](http://www.npr.org/sections/ed/2015/07/30/427138970/the-most-popular-high-school-plays-and-musicals)
* [Wikipedia](https://en.wikipedia.org/wiki/List_of_nursery_rhymes)
* [Planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx)
* [Snap! tips][]: 0, 1, 2, 3, 4, 5, 6, 8, 11, 12, 13, 23
## Pacing guide
| _Duration_ | _Description_ |
| :------------- | :--------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit concepts |
| 20 minutes | Introduce project |
| _Days 2-5_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review
Play a review game to remind students of the skills and concepts that have been learned in this unit.
* **Movement**
* **Drawing**
* **Hide/Show**
* **Costumes**
* **Broadcasting**
Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks.
### Introduce project
Walk students through project specification, pointing out important details, potential pitfalls, and specific requirements.
1. The words to the story must appear on the screen.
* This can be as a sprite, as a part of the background, or "said" by a narrator
2. Sprites must act out the story line by line.
3. The action must be dynamic. A series of static images is not sufficient.
4. The action and words should advance automatically, but at a slow enough pace that the viewer can follow.
5. The user must be able to restart the animation (in a manner other than pressing the green flag again) after it has concluded.
6. At least two sprites must act during the animation, and the sprites must collectively meet the requirements on page 2.
Encourage students to look at the grading rubric on page two repeatedly throughout the project to ensure they are meeting all the requirements.
### Project
This project is a summative assessment for the unit and students should be demonstrating mastery of all the skills covered. Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete projects, tracking questions asked during lab time, and/or utilizing peer reviews. See the standard [Lab Day Lesson](lab_day_lesson.md) for detailed plans for lab days.
* Most students will require roughly 4-8 hours of total work time to complete the project.
* Adjust the amount of time allowed for the project to fit the needs of your students.
* If most students have the ability to work on assignments at home, the amount of class time provided can be reduced.
* If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
* Ensure that students are able to ask questions in class throughout the project.
## Accommodation and differentiation
Instead of a scene from a play or a nursery rhyme, students can recreate a famous scene from a movie, depict lyrics from their favorite song, or develop their own unique animations. Feel free to modify the specification for whichever version will appeal most to your students.
Advanced students can be encouraged to add detail and/or complexity to their project for possible extra credit.
For ELL students or students from other cultures, offer the opportunity to choose an animation subject familiar to them rather than requiring a traditional English nursery rhyme or play.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_21.md
================================================
# Lesson 2.1: Loops
## Learning objectives
Students will be able to...
* Define **loop** in a programming context.
* Explain why loops are useful.
* Implement simple repeat and forever loops.
* Apply loops to reduce redundancy in scripts.
## Material and Preparation
* [Do now 2.1](do_now_21.md)
* [2.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.1.pptx)
* [Exterior angles review](Geometry_Exterior_Angles.pdf)
* [Lab 2.1 - Squares and triangles Redux](lab_21.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.1%20Triangles%20and%20Squares%20Redux.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.1%20Triangles%20and%20Squares%20Redux.pdf)).
* Looping real world examples
* [Water cycle](https://pmm.nasa.gov/education/water-cycle)
* [Still I Rise](https://m.poets.org/poetsorg/poem/still-i-rise)
* [Happy](https://genius.com/Pharrell-williams-happy-lyrics)
* [Example](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%202.1%20Example)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resource: [https://youtu.be/XbZqfRGPom0](https://youtu.be/XbZqfRGPom0)
* Video quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and examples |
| 25 minutes | Squares and Triangles Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
Introduce and discuss concepts of code redundancy and readability. Remind students that a program can be written in many different ways that are functionally equivalent.
* Ask students to speculate as to why one version of a program might be better or worse.
* Possible answers: more efficient (in time or space), shorter code, more elegant/readable code.
Show [this example](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Lesson%202.1%20Example) to demonstrate unreadable program and give examples on how the **repeat** blocks (loops) can help make more concise scripting.
* Show students the script, ask what it does, then ask if they can think of ways to improve it.
* Attempt to get students to realize that the script is _redundant_ and could be simplified if there were a way to execute a block of script more than once.
#### Introduce loops
Begin with general definition: _A type of block that causes other code to run multiple times in succession_.
Use real world loops to introduce the concept:
* [Water cycle](https://pmm.nasa.gov/education/water-cycle)
* [Still I Rise](https://m.poets.org/poetsorg/poem/still-i-rise) by Maya Angelou
* [Happy](https://genius.com/Pharrell-williams-happy-lyrics) by Pharrell Williams
#### Introduce specific loops
The **repeat** block runs the body of the loop the specified number of times.

* Number of iterations can be a value, variable, or reporter.
The **forever** block runs the body of the loop nonstop until the script is ended.

It can be stopped either by clicking the stop sign or by any version of **Stop** Block.

The **repeat until** runs the body of the loop until the specified condition becomes true.

Save detailed discussion of this loop until conditionals are introduced.
Walk through [examples](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%202.1%20Example) of **repeat** Block and **forever** Block
* Emphasize usefulness in reducing redundancy and complexity, especially for repetitive tasks.
### Activity
Direct students to complete ["squares and triangles redux"](lab_21.md) individually.
* If available, students should use their solutions to Lab 1.3 as a starting point. Ensure students "Save as..." before starting on the new lab to not overwrite their original project (part 1.1).
* If student solutions for Lab 1.3 are not available, or are not correct, provide a correct implementation (the solution to Lab 1.3 can be found on the TEALS Dashboard under Additional Curriculum Materials).
Encourage students to try to use as few blocks and have as little script duplication as possible to draw each shape while still creating understandable scripts.
* Once students complete part 2.1, the remaining parts should go much more quickly as they all follow the same basic pattern.
### Debrief
Discuss one or two student solutions to part 2.2. Ask students to think about what the script would look like without loops.
Discuss one or two students solutions to part 3.1. Point out how unwieldy the script for these two shapes would be without loops.
## Accommodation and differentiation
More advanced students can add additional shapes, including a five-pointed star without interior lines.
Particularly advanced students can be encouraged to build pictures by combining multiple shapes (e.g. a house built of squares of various sizes).
For students struggling with the mathematics, make the [exterior angles review](Geometry_Exterior_Angles.pdf) available showing various shapes and their respective angles as a reference for students through unit 2.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_22.md
================================================
# Lesson 2.2: Nested loops
## Learning objectives
Students will be able to...
* Apply nested loops to solve programming problems.
## Materials and preparation
* [Do now 2.2](do_now_22.md).
* [2.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.2.pptx)
* [Lab 2.2 - Yellow brick road](lab_22.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.2%20Yellow%20Brick%20Road.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.2%20Yellow%20Brick%20Road.pdf)).
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resources
* [https://youtu.be/bons028VLEU](https://youtu.be/bons028VLEU)
* [https://youtu.be/Y5lZQRawsFk](https://youtu.be/Y5lZQRawsFk)
* Video Quiz - See Additional Curriculum Materials accessed from the TEALS Dashboard.
## Pacing Guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Review, lecture, and examples |
| 25 minutes | Yellow brick road Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Prompt students to restate the definition of **loop**.
* A type of block that causes other code to run multiple times in succession.
Prompt students to explain why loops are useful in programming.
* To reduce code redundancy and increase readability when dealing with repetitive tasks.
Ask for examples of problems that can be solved with loops.
* Drawing polygons, repeating an action, etc..
Ask students how their scripts to draw shapes improved when they introduced loops.
* Code became shorter and more readable.
* Small changes, such as altering the size of the shape, became simpler.
### Lecture
Ask students to consider the problem of drawing two squares next to each other. Work through writing a script to do this. The likely result will duplicate the script to draw a single square:

* Remind students to remember what they previously learned and use loops.
* Once the script is complete, ask students if there are ways they could improve it.
Discuss what would happen if you needed to draw 10 squares, or 100, or an unknown number.
* If students seem capable, you can allude to user input for the unknown number example, but do not get into details at this point.
Ask if loops can somehow be applied to reduce redundancy even further in the script to draw two squares.
#### Introduce the concept of nested loops
Define **nested loop:**
* A loop used inside the body of another loop.
Point out that there is nothing particularly special happening here
* The body of a loop can contain any script, including another loop.
* Emphasize that the inner loop will run all its iterations _each time_ the outer loop runs.
* Walk through rewriting the script to draw multiple squares to use nested loops:

Ask how many total times the sprite will move 50 steps.
* The sprite will move 50 steps 8 times (4 * 2).
Show that the number of squares drawn can be easily changed by simply changing the number of times the outer loop iterates.
### Activity
Direct students to complete the [Yellow Brick Road](lab_22.md) activity individually or in pairs. Try to pair students that have not previously interacted.
* Remind students to continue using the principles learned with basic loops.
Encourage students to write scripts that are as short and succinct as possible while still being functional and readable.
### Debrief
Show a student's solution.
* Either request a volunteer.
* Point out uses of nested loops.
Ask students to describe how loops, specifically nested loops, made the assignment easier.
* Each brick, or at least each row, would have needed to be scripted separately creating much longer scripts.
Ask students to think about what part of the script would need to change to alter the size of each brick or the size of the road and how that was made easier with loops.
* Size of road: number of iterations in one or both loops.
* Size of brick: one or both move blocks **and** number of iterations in one or both loops.
* Without loops, the change would have been needed in many different places.
## Accommodation and differentiation
Not all students will recognize all the possible places to use nested loops in the final program. Encourage students to find as many places to use a nested loop as possible, but allow struggling students to focus on just one or two uses.
Advanced students can be encouraged to change the size of the bricks, which will require not only altering the number of steps moved but also the number if iterations in the loops. You can also ask students to draw a building/house using only squares. For example, they can be instructed to draw where they live, favorite building, or school.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_23.md
================================================
# Lesson 2.3: Inputs and conditionals
## Student objectives
Students will be able to...
* Apply **ask** and **receive** blocks.
* Apply simple conditional, **if** and **if-else** blocks, to alter control flow in a program.
## Materials and preparation
* [Do now 2.3](do_now_23.md).
* [2.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.3.pptx)
* [Lab 2.3 - What shape is that?](lab_23.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.3%20What%20Shape%20Is%20That.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.3%20What%20Shape%20Is%20That.pdf))
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resource - [https://youtu.be/t3k3wOxO1xI](https://youtu.be/t3k3wOxO1xI)
* Video quiz: See additional curriculum materials accessed from the TEALS dashboard.
* [Flocabulary](https://www.flocabulary.com/unit/coding-conditionals/)
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 20 minutes | Lecture |
| 20 minutes | Lab activity |
| 10 minutes | Debrief and wrap-up |
_Note: This lesson may cover too much material for some classes to handle in one day. Feel free to spill over into a second day, splitting the material however works best for your class._
## Instructor's notes
### Lecture
Point out that, so far, our scripts have had minimal interactivity. There was _some_ user interaction in the shape drawing labs, but no back and forth. Just pushing a key to trigger an action.
* This is not normally how scripts work.
Ask students for examples of interactive computer programs.
Ask students for suggestions for making previous labs or activities more interactive. There are no right or wrong answers here. The goal is to get students thinking about interactivity.
Introduce the **ask_and wait** block.

Demonstrate that it functions similar to the **say** block but waits for a response from the user.

The response is stored in the **answer** block and can be referenced later.

Variables will not be introduced until unit 3, so this block will be somewhat magical for now. You should judge your students' preparedness to handle the details and act accordingly.
* Emphasize that only one input is stored at a time, and that asking a new question deletes the previous answer.
* For example, the following script, intended to draw a bunch of squares where the user specifies both the size and the number of squares, will not work as intended:

#### Introduce conditional statements
Define **conditional** - a block used to make a choice between executing two different chunks of script.
You can also use this [video on conditionals](https://www.flocabulary.com/unit/coding-conditionals/) by Flocabulary.
* Point out the differences between **if** and **if/else** block.


* Namely, if-else provides a choice between two script paths, whereas if simply chooses between executing script or not
* Emphasize that **only one** of the bodies, either the if or the else, will ever be executed.
Show students the relational operators (<, >, and =).



### Activity
Direct students to complete the [What shape is that?](lab_23.md) activity individually or in pairs.
### Debrief
Discuss one or two students solutions.
* Point out differences between the approaches of different students and lead discussion about advantages and disadvantages.
* Place particular emphasis on the choice between if and if-else blocks.
Explain that, when conditions are mutually exclusive (as in part 2.1), a series of if vs. if-else blocks can be functionally equivalent.
* When the conditions are not mutually exclusive (as in part 2.2), the choice matters more.
## Accommodation and differentiation
Advanced students can be encouraged to add extra functionality, such as attempting to draw the shape the user is specifying or identifying types of triangles (equilateral, isosceles, scalene)
Students who are struggling can be allowed to skip some parts of the tables in 2.1 and 2.2, focusing on just a few cases
## University of California - Berkley teacher support resources
[BJC Lecture 13: Mislabeled as 14) Human-Computer Interaction Bjorn Hartman](https://www.youtube.com/watch?v=3VZ7D01T2Yc)
* Bjorn Hartman Background 0:00-3:30
* Human Computer Interface(HCI) 3:45-6:00
* HCI: Design, Computer Science, Applied Psychology 6:00-8:00
* Iterative Design Cycle 8:00-10:30
* Understanding Users 10:35-11:35
* Prototype Interface Examples 11:40-14:00
* Evaluation (Formative, Summative) 14:50
* [Why Study User Interfaces](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=15m0s)
* Ex:Mouse Xy axis, Sketchpad, PC, Tablets 15:00-25:00
* What had changed? Research: Mainframe to Ubiquitous Computing 25:00-29:30
* [Example Project: Using Dexterity for Computer Interface Video](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=28m30s) 28:30-29:30
* Zipf/Power Law Distribution 30:00-32:00
* HCI Research at Berkeley 32:10-46:25
* [Multi Touch Apps and Toolkits](http://www.youtube.com/watch?v=3VZ7D01T2Yc&t=32m0s) 32:00-End
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_24.md
================================================
# Lesson 2.4: Variables
## Learning objectives
Students will be able to...
* Apply variables to track values throughout a script or program.
## Materials and preparation
* [2.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.4.pptx)
* [Do now 2.4: Debugging](do_now_24.md)
* [Lab 2.4 - Guessing game](lab_24.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.4%20Guessing%20Game.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.4%20Guessing%20Game.pdf))
* [The Box Variable Activity](https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-box-variable-activity/) materials (Optional)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resources
* [https://youtu.be/YMVo9Wdpv5s](https://youtu.be/YMVo9Wdpv5s)
* [https://youtu.be/ps8tc0cQsGg](https://youtu.be/ps8tc0cQsGg)
* Video Quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and introduce activity |
| 25 minutes | Lab Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Debrief
Go over all of the bugs in the Do Now script with students? (There are at least six.)
1. In order to control Alonzo's movement with the arrow keys, the if statements need to be in a forever loop; otherwise, the script will run once and complete. Alonzo never moves!

2. Likewise, the script checking for the _W-A-S-D keys_ to move the Blue Dog need to be in a loop or they will also only check for a key press one time and complete. The blue dog never moves, either.

3. In Alonzo's script, the conditional checking for the left arrow key is inside of the conditional checking for the right arrow key, so Alonzo can never move to the left.
4. The **if on edge, bounce** block in Alonzo's script is inside of the conditional checking for the left arrow key, so Alonzo will run off every edge of the screen, except the left.
5. The fifth bug is more subtle. After the bugs preventing the movement of Alonzo and the Blue Dog have been fixed, the blue Dog says "I got you!" when touched by Alonzo. Since the Blue Dog is supposed to be running away from Alonzo, it doesn't make sense for the Blue Dog to say that when caught.
6. The sixth bug is just good coding style. The Blue Dog has an unused **say** block in the scripting area that should be deleted.
Did the students have any suggestions about ways to improve the game?
Here are some possible improvements they might have thought of:
* Have a score counter that increments when the _reset_ message is sent. (After Alonzo catches the blue dog.)
* Since Alonzo starts on the left of the screen and the Blue Dog starts on the right, have Alonzo be controlled by the _W-A-S-D_ keys and the Blue Dog by the **arrow** keys. That way, the **control** keys are on the same side of the keyboard as the sprites they are controlling.
* Have the computer control the Blue Dog using random movements.
* Have the computer control the Blue Dog by always moving in the opposite direction from Alonzo.
* Have the players choose which sprite is being chased at the beginning of the game.
### Lecture
Review user input, specifically the **answer** block.

Ask students to speculate about how the **answer** block works.
* Students should recognize that the block must be storing a value somehow and remembering it for later.
Ask students whether that type of functionality might be useful in other cases.
#### Introduce variables
Define and explain the concept of a **variable:** _a location in memory to store a value for retrieval and use later_.
Consider introducing variables with an interactive physical demonstration by modifying the [The Box Variable Activity](https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-box-variable-activity/) for your students.
Demonstrate creating, assigning, and accessing a variable.
* Point out that a variable can only hold one value at a time.
* When a new value is assigned, the old value is lost and cannot be recovered.
* Emphasize the importance of descriptive, readable names for variables.
* Show that variables are independent.
One variable's value can be assigned to another, as in **set var1 to var2** Block, but changing the value of **var2** later will not update the value of **var1**.

### Activity
Briefly demonstrate the **pick random 1 to 10** block which will be used in the lab.
Direct students to complete [Guessing Game](lab_24.md) individually or in pairs.

### Lesson debrief
Discuss and demonstrate one or more students' submissions.
Ask students for commentary on usage and naming of variables throughout script.
## Accommodation and differentiation
Advanced students can be encouraged to implement statistics (best score, average guesses/game, number of time each secret number chosen, etc.).
Struggling students can be given script that completes part 1.1, and possibly also part 1.2, to get them started.
Students who are particularly overwhelmed should focus only on parts 1.2 and 2.2.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_25.md
================================================
# Lesson 2.5: Boole in the house
## Learning objectives
Students will be able to...
* Define and identify Boolean expressions and operators.
* Evaluate Boolean expressions.
* Utilize Boolean operators, `and`, `or`, `not`, to create compound conditions.
## Materials and preparation
* [Do now 2.5](do_now_25.md)
* [2.5 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%202.5.pptx)
* [The box variable activity](https://teachinglondoncomputing.org/resources/inspiring-unplugged-classroom-activities/the-box-variable-activity/)
* [Lab 2.5 - Triangles of all kinds](lab_25.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20Word/Lab%202.5%20Triangles%20of%20All%20Kinds.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%202%20PDF/Lab%202.5%20Triangles%20of%20All%20Kinds.pdf))
* [Exterior angles review](Geometry_Exterior_Angles.pdf)
* [Heron's formula](https://en.wikipedia.org/wiki/Heron%27s_formula)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
* Video resource - [https://youtu.be/XXS9aDlN14s](https://youtu.be/XXS9aDlN14s)
* Video quiz: See Additional Curriculum Materials accessed from the TEALS dashboard.
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 20 minutes | Review and lecture |
| 20 minutes | Triangles activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Remind students about conditional statements, and ask what the blocks that can go in the holes in if blocks have in common.
Blocks are "pointy" and all are "yes/no" or "true/false" questions.
### Lecture
Define **Boolean expressions** as expressions that evaluate to true or false.
* If desired, explain that the term "Boolean" is derived from [George Boole](https://en.wikipedia.org/wiki/George_Boole).
Present the three Boolean operators: `and`, `or` and `not`.
* Define the operators and describe when each will return true.
* Show the truth tables for each operator and explain how to read them (see below for truth table example).
* Truth tables are simply one way of expressing how the Boolean operators work; if students are struggling, other depictions (such as an exhaustive list of all possible results) can be substituted.
* Emphasize that since Boolean operators are themselves Boolean expressions, they can be nested.
Practice evaluating Boolean expressions, starting simple and moving to more complex nested operations.
* Start with simple expressions:

* Introduce the variable _x = 7_:

* Nest operations operations using _x = 4, y = -3_:

* Discuss short-circuiting in evaluation of Boolean expressions.
* Discuss situations in which the Boolean operators might be needed.
### Activity
Students should complete the [Triangles of all kinds](lab_25.md) activity individually or in diverse pairs (students who have not interacted previously, by ability, etc.).
A number of geometric concepts (Triangle Inequality Theorem, Pythagorean Theorem, etc.) are used in this lab, but students need not have a deep understanding of them. The necessary points are explained in the lab.
Encourage students to think about whether an "and" or an "or" is appropriate in each case. Draw out truth tables if necessary.
As done previously in the unit, you can make the [Exterior angles review](Geometry_Exterior_Angles.pdf) available to students.
### Debrief
Walk through a student's response.
* Point out uses of Boolean operators.
Discuss how nested or chained if blocks could potentially be used to obtain the same behavior, but would result in longer, less-readable programs.
## Logical _and_ truth table
| p | q | p and q |
| ----- | ------| ------- |
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
## Logical _or_ truth table
| p | q | p or q |
| ----- | ------| ------ |
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
## Logical _Not_ truth table
| p | not p |
| ----- | ------|
| true | false |
| false | true |
## Accommodations and differentiation
Students that have not taken Geometry made be intimidated by some of the concepts in the lab. Deep understanding of the theorems is not necessary; encourage the students to simply focus on the equations and inequalities presented.
If the students continue to struggle, help them build the necessary expressions, but encourage them to assemble them into the full condition on their own.
Advanced students, especially those who have taken higher levels of math, can be encouraged to add additional functionality, such as using [Heron's formula](https://en.wikipedia.org/wiki/Heron%27s_formula) to calculate the triangles area or using trigonometry to attempt to draw the triangle.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_26.md
================================================
# Lesson 2.6: Pong project
## Learning objectives
Students will be able to...
* Implement a well-written version of the pong game.
* Practice good style and conventions to create readable and maintainable script.
## Materials and preparation
* [Do now 2.6: Bouncing ball](do_now_26.md)
* [Pong project](project_2.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%202%20Pong.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%202%20Pong.pdf))
* Pong planning worksheet: ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project_2_Pong_Planning_Worksheet.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project_2_Pong_Planning_Worksheet.pdf))
* [Lab day lesson](lab_day_lesson.md)
* [Snap! tips][]: 0, 3, 7, 9, 10, 14, 15, 16, 17
## Pacing guide
| Duration | Description |
| :------------- | :--------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit concepts |
| 20 minutes | Introduce project |
| _Days 2-9_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review and introduction
* Play a review game to remind students of the skills and concepts have been learned in this unit.
* Variables
* Operators
* Remind students of the skills and concepts they have learned in previous lessons.
### Introduce project
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements.
If students are unfamiliar with the concept of the Pong game, spend a couple minutes demonstrating one for the class. Here is an [online game](http://www.ponggame.org/) of Pong.
### Project
This project is a summative assessment for the unit. Students should be demonstrating mastery of all the skills covered.
* Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete scripts, tracking questions asked during lab time, and/or utilizing peer reviews.
Most students will require roughly 6-10 hours of total work time to complete the project.
* Adjust the amount of time allowed for the project to fit the needs of your students.
* It is vital that nearly all students complete the project before moving forward in the course.
If most students have the ability to work on assignments at home, the amount of in-class time provided can be reduced if necessary.
* If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
Ensure that students are able to ask questions in class throughout the project.
See the standard [lab day lesson](lab_day_lesson.md) for detailed plans for lab days.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to add a single-player mode with a computer-controlled opponent, recreate the original mechanic in which the ball’s angle depends on where it hit the paddle, add different “levels” with obstacles or differently shaped fields, or any other extension.
Struggling students can be exempted from certain features (such as ball speed or scoring) or given starter script.
* If students need significant assistance, focus them on the ball’s movement, as it is both the most computationally interesting part of the assignment.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_31.md
================================================
# Lesson 3.1: Abstraction and generalization
## Student objectives
Students will be able to...
* Define the terms **abstraction** and **generalization**.
* Recognize opportunities to improve algorithms by abstracting or generalizing parts into sub-procedures.
## Materials and preparation
* [Do now 3.1](do_now_31.md)
* [3.1 slide Deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.1.pptx)
* [Lab 3.1 - Drawing shapes again](lab_31.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.1%20Drawing%20Shapes%20Again.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.1%20Drawing%20Shapes%20Again.pdf))
* [Snap! tips][]: 0, 4, 8, 16
* Video resources
* [https://youtu.be/Dxw9cIbzaLk?t=681](https://youtu.be/Dxw9cIbzaLk?t=681)
* Video Quiz - See additional curriculum materials accessed from the TEALS dashboard.
* [https://youtu.be/AighCB14bNw](https://youtu.be/AighCB14bNw)
* [https://www.youtube.com/watch?v=K0yReJ9T600](https://www.youtube.com/watch?v=K0yReJ9T600)
## Pacing guide
| Duration | Description |
| :---------| :---------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introduce terminology, demo, introduce activity |
| 20 minutes | Draw Shapes (Again) activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Define and discuss the following terms:
* **Abstraction:** removing the specifics that are not relevant in each context.
* e.g. being able to drive a car without understanding how an internal combustion engine works.
* **Generalization:** combining a group of related concepts or processes into a single category.
* e.g. spreading any condiment or ingredient onto a slice of bread (butter, jam, peanut butter, mayo, etc.).
Demonstrate constructing a custom command block.
### Drawing shapes (again)
Students should complete the [drawing shapes again](lab_31.md) activity individually or in diverse pairs.
Work with students to be certain that they are using custom blocks and variables as described by the activity.
Point out places where a script can be abstracted and generalized.
Emphasize conciseness into a program.
### Debrief
Discuss one or two student submissions.
Point out differences between different student solutions.
Point out missed opportunities for abstraction (if any).
Discuss how this custom block can be useful.
## Accommodation and differentiation
In addition to attempting the bonus in the lab, advanced students can be encouraged to write a new custom block that draws a specified number of the given shape (for example, 2 squares or 5 hexagons). The number of shapes should be taken as user input.
Struggling students can be given solution scripts for all of section 1. Work with these students to answer the questions in part 1.5 so that they are prepared to attempt the custom block authoring.
## University of California - Berkley teacher support resources
[BJC Lecture 1: Abstraction](https://www.youtube.com/watch?v=Dxw9cIbzaLk)
* Abstraction: 11:40-15:40
* Generalization: 15:50-20:00
[BJC Lecture 4: Functions](https://www.youtube.com/watch?v=_uKCBmQEf5w)
[MIT Scratch --> BYOB Snap!](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=10m0s) (Development of Snap!, Demo) 10:00-11:30
[BYOB-Custom Blocks](http://www.youtube.com/watch?v=_uKCBmQEf5w&t=11m30s) (Explains functions with examples) 11:30-14:50
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_32.md
================================================
# Lesson 3.2: Combining loops and conditionals
## Learning objectives
Students will be able to...
* Combine loops with conditionals to create models with repeated but conditional behavior.
## Materials and preparation
* [Do now 3.2](do_now_32.md)
* [3.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.2.pptx)
* [Lab 3.2 - What goes up...](lab_32.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.2%20What%20Goes%20Up.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.2%20What%20Goes%20Up.pdf))
* [Snap! tips][]: 0, 4, 8, 16
* Video resources:
* [https://youtu.be/MegYWakO1yw](https://youtu.be/MegYWakO1yw)
* Video quiz: See additional curriculum materials accessed from the TEALS dashboard.
## Pacing Guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review, lecture and introduce activity |
| 30 minutes | Gravity activity |
| 10 minutes | Review and wrap-up |
## Instructor's notes
### Review and lecture
#### Review loops and conditionals
Ask students what loops do, when they are useful, and what blocks exist.
* Loops cause code to execute multiple times.
* Loops can help reduce redundancy and increase readability.
There are three types of loops: _repeat_, _forever_, and _repeat until_.
Ask students what conditionals are for and when they are useful.
conditionals are used to execute a block of code only under certain circumstances.
Encourage discussion about previous activities.
Fill in understanding gaps when necessary.
#### Demonstrate combining loops and conditionals
Present **repeat until** and **forever if** blocks.


Ask students to suggest when these constructs might be useful.
* **repeat until** is useful when a loop needs to run not for a set number of iterations, but until some situation occurs.
* **forever if** is useful when a script should execute _any time_ a condition is true, for the duration of the program.
* Point out that the condition in **repeat until** is a termination condition, while in **forever-if** it is a continuation condition.
#### Introduce the concept of modeling
**Modeling:** building a system to simulate the behavior of a real-life phenomenon by simplifying or ignoring certain details.
Ask students to suggest systems or concepts that might need to be modeled.
Discuss important considerations when designing and implementing a model.
Lead students to realize that most sacrifice some amount of accuracy or realism for simplicity.
### Activity
Students should complete "What Goes Up..." lab individually.
Mention that the program written in this lab will be helpful for the end of unit project.
### Debrief
## Accommodations and differentiation
Take care to ensure that all students have a functional program by the end of the lab to avoid putting some students at a disadvantage starting the project.
If many students struggle, consider releasing your own solution after the lab has been completed in class.
Ask the more advanced students to assist struggling students. It is vital that all students complete this lab in advance of starting the project.
Advanced students can consider increasing the realism of their gravity model by adding acceleration and/or beginning to implement jumping.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_33.md
================================================
# Lesson 3.3: Customization I: parameters
## Learning objectives
Students will be able to...
* Build custom blocks that take parameters.
## Materials and preparation
* [Do Now 3.3](do_now_33.md)
* [3.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.3.pptx)
* [Lab 3.3 - Let me check my calendar](lab_33.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.3%20Let%20Me%20Check%20My%20Calendar.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.3%20Let%20Me%20Check%20My%20Calendar.pdf))
* [parameters example](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%203.3)
* [Snap! tips][]: 0, 4, 8, 16
* Video resources:
* [https://youtu.be/ZLxql1kLvCw](https://youtu.be/ZLxql1kLvCw)
* Video quiz: See Additional Curriculum Materials accessed from the TEALS Dashboard.
## Pacing guide
| Duration | Description |
| ---------- | --------------------------------------------- |
| 5 minutes | Welcome, bell work, announcements |
| 15 minutes | Lecture and introduce activity |
| 20 minutes | Custom block parameter activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
#### Introduce block parameters
Define **parameters:** An parameter is any area in a block that accepts user input, or another block. It could be a Boolean Block or a value placed inside of a variable or block.
Ask students to speculate on risks of relying on variables instead of parameters.
* Variables could be changed by a script other than the custom block, variable names could be changed causing errors, etc.
* Emphasize importance of custom blocks being self-contained.
* Custom blocks should continue to function correctly independent of any other changes in the script.
* Custom blocks should work correctly anywhere in the script and not require specific setup or cleanup.
Point out how complicated a script would be if blocks like **move 10 steps** required setting a variable with a specific name to work.

#### Demonstrate declaration and usage of parameters
Point out that parameters are very similar to variables, except their values come outside the block.
Explain parameter types.
* Only discuss text, numbers, and Booleans.
* Other types can be mentioned, but won't be used in the course.
Ask students to describe why restricting types is important.
* Point out that parameters are passed by value.
* Specifically, changing the value of an parameter inside a custom block will typically not change the value at the call site.
* Basic parameter in pen pallette.
* Pass by value example in "Variables" pallette.
### Activity
Students should complete the [Let Me Check My Calendar](lab_33.md) activity individually or in pairs.
This lab consists of a series of independent custom blocks. The blocks need not necessarily be completed in the order given, but are roughly in order of difficulty.
* The bonus requires implementing a fairly complex formula.
### Debrief
Ask a different student to provide their solution to each part. If time allows, discuss multiple solutions to each part. Emphasize differences and encourage discussion about advantages and disadvantages.
Point out corner cases and cases where typed parameters are particularly helpful.
* For example, avoiding try to find out whether "bubblegum" is a leap year.
## Accommodations and dfferentiation
Part 3.4 is a fairly complex formula and should be a challenge for advanced students.
Struggling students should focus on section 1. The problems in section 2 represent more complex algorithms, but not necessarily any more difficult usage of parameters.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_34.md
================================================
# Lesson 3.4: Customization II: Reporters and predicates
## Learning objectives
Students will be able to...
* Build custom reporter and predicate blocks.
## Material and preparation
* [Do now 3.4](do_now_34.md)
* [3.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%203.4.pptx)
* 2 Labs to choose from:
1. [Lab 3.4 - If my calculations are correct...](lab_34.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.4%20If%20My%20Calculations%20Are%20Correct.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.4%20If%20My%20Calculations%20Are%20Correct.pdf))
2. Lab 3.4 - The technicolor window ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.4%20The%20Technicolor%20Window.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.4%20The%20Technicolor%20Window.pdf))
* [Snap! tips][]: 0, 4, 8, 16
* Video resources
* [https://youtu.be/6gT91ltwM1Q](https://youtu.be/6gT91ltwM1Q)
* Video quiz: See additional curriculum materials accessed from the TEALS dashboard.
## Pacing Guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Lecture and introduce activity |
| 25 minutes | Custom reporter activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
#### Introduce reporter blocks
Ask students to find blocks with the reporter shape (round) and speculate as to what they do. Point out familiar examples, such as:
* 
* 
* 
Explain the concept of reporting (returning) a value, and how reporter blocks are used to provide values to commands.
Emphasize that reporters do not (and should not) perform any action. They are used to compute values which are used by commands.
#### Introduce predicate blocks (as a special case of reporter blocks)
Emphasize that predicates must return true or false. Point out examples, such as:
* 
* 
* 
Ask students why it might be useful to differentiate predicates from other reporters.
* Only predicates can be used in a conditional.
### Activity
Students should complete the ["If my calculations are correct..."](lab_34.md) activity individually. We have an optional lab available for this lesson, the technicolor window ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20Word/Lab%203.4%20The%20Technicolor%20Window.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%203%20PDF/Lab%203.4%20The%20Technicolor%20Window.pdf))
This lab consists of a series of independent custom blocks. The blocks need not necessarily be completed in the order given.
Work with students to ensure they are testing their blocks properly and reporting correct values.
### Debrief
Ask a different student to provide their solution to each part. If time permits, go over multiple students' work for each part.
Point out differences and discuss advantages and disadvantages to different approaches.
Emphasize that custom blocks do not have to be long and complicated to be useful.
## Accommodations and differentiation
Struggling students should focus on just the first 2 or 3 parts of the lab. Even if they cannot move on to the more difficult problems, getting used to defining custom reporters is helpful and important.
Advanced students who finish quickly can be utilized to assist other students or they can be challenged to complete the bonus problem using the distance formula.
If most students are not equipped to handle this math, a simpler computation, such as area of a triangle or average of three numbers, can be substituted.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_35.md
================================================
# Lesson 3.5: Platform game project
## Learning objectives
Students will be able to...
* Apply loops, variables, and Boolean expressions to implement a Super Mario Bros. style platform game.
* Practice good debugging skills to correct issues as they arise while programming.
## Materials and preparation
* Platform game project: [Platform game](project_3_platform_game_easy.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%203%20Platform%20Game%20Easy.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%203%20Platform%20Game%20Easy.pdf)).
* Advanced version of the project: [Advanced platform game](project_3.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%203%20Platform%20Game.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%203%20Platform%20Game.pdf))
* [Platform game planning worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Platform_Game_Planning_Worksheet.docx)
* A few suggested themes available for students who may struggle to come up with their own.
* Suggestions for characters, power-ups, goals, etc.
* [Snap! tips][]: 0, 4, 8, 16
## Pacing guide
| Duration | Description |
| :------------ | :-------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit topics |
| 20 minutes | Introduce project |
| _Days 2-9_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review and introduction
Play a review game to remind students of the skills and concepts have been learned in this unit.
* Basic loops
* Nested loops
* User input
* Conditional blocks
* Advanced (conditional) loops
* Boolean logic
Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks.
### Introduce project
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements. If students are unfamiliar with the concept of a platform game, spend a couple minutes demonstrating one for the class. Discourage students from simply recreating a game they are already familiar with (and using copyrighted assets) and encourage them to be creative and design their own characters and world instead. Static screens are somewhat easier to implement than smooth scrolling, but scrolling is doable with some scaffolding.
### Project
This project is a summation of the unit. Students should be demonstrating mastery of all the skills covered.
* Most students will require roughly 6-10 hours of total work time to complete the project. Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete programs, tracking questions asked during lab time, and/or utilizing peer reviews. Adjust the amount of time allowed for the project to fit the needs of your students. It is vital that nearly all students complete the project before moving on.
If most students have the ability to work on the project at home, the amount of in-class time provided can be reduced if necessary. If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
Ensure that students are able to ask questions in class throughout the project.
See the standard [lab day lesson](lab_day_lesson.md) for detailed plans for lab days.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to extend their games beyond the minimum required number of screens, add more features (power-ups, "boss" enemies, secret screens, etc.), create multiple "levels" that must be worked through, or any other extension.
Struggling students can be exempted from certain requirements or given a starter project.
If scaffolding this project, provide a script to perform some of the various actions required in the game (changing screens, moving the character, defeating enemies, etc.) and ask the students to fill in the triggers and conditions for using these routines.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_41.md
================================================
# Lesson 4.1: Introduction to lists
## Learning objectives
Students will be able to...
* Explain the concept of a `list` in a programming context.
* Identify scenarios in which lists are useful.
## Materials and preparation
* [4.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.1.pptx)
* Paper/writing implements for each group of students
* Large poster paper and markers will allow for display of the algorithms, but standard paper will work fine.
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion |
| 10 minutes | Students write Solar System algorithm |
| 10 minutes | Debrief |
| 10 minutes | Translate algorithms into pseudocode |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Describe the solar system and hook your students by explaining a way to collect and store new information and discoveries.
### Activity
In small groups,
1. have students write an algorithm for adding new Solar System discoveries to a collection of older ones. The process should be complete and detailed so that a person can unambiguously follow the steps.
2. The process itself will seem relatively simple. Ensure students think not only about the steps to be taken but the necessary materials and resources.
3. Ensure that the algorithm would work for any discovery of any name size and does not make assumptions. e.g SUPER MEGA COOL ASTEROID, etc.
* Pay particular attention to when the various materials are needed.
* The key here is that the student will need to constantly be referencing this same pool of discoveries e.g. Pool, Pool + 1 discovery, Pool + 1 discovery + another etc. etc.
Instruct students to think about how they would write a script to complete this task. They need not write actual script, but should write pseudocode to attempt to solve the problem.
After groups have finished, explain to them that usually scientists organize their discoveries alphabetically not by recently discovered. Challenge them to create an algorithm that organizes their new discoveries with their old discoveries alphabetically.
The ultimate conclusion should be that they need a way to store the entire collection of discoveries, and operate on individual parts of the collection.
### Debrief
In attempting to write pseudocode, students should realize that they need variables to store the discoveries, but do not know ahead of time how many variables will be necessary. Clever students may want to simply store the message in a single variable using the **join** block. This approach can work if they choose an unambiguous delimiter (space won't work if there are multi-word sections of the message), and is effectively the same as using a list.
Point out that, thus far, they have not seen a way to store an arbitrary number of data values. They have needed a separate variable for each value, which must be created ahead of time.
Briefly introduce the concept of a list as a means of storing multiple values in a single location. Lists have the useful property of not having a static size, so any number of values can be added at any time.
## Accommodations and differentiation
As in the peanut butter and jelly activity, discourage stronger students from dominating the conversation and instead ask them to take on a leadership role and help other group members find issues.
Struggling students can be given permission to use a higher level of abstraction, ignoring certain details that other students will attend to.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_42.md
================================================
# Lesson 4.2: Static lists
## Learning objectives
Students will be able to...
* Create static lists.
* Access elements of a list.
* Add and remove elements from a list.
## Materials and preparation
* [Do now 4.2](do_now_42.md)
* [4.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.2.pptx)
* [Lab 4.2 - You talkin' to me?)](lab_42.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.2%20You%20Talkin%20To%20Me.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.2%20You%20Talkin%20To%20Me.pdf))
* [List Components](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/SNAP%20Lists%20Components.docx?raw=true) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/SNAP%20Lists%20Components.docx?raw=true)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/SNAP%20Lists%20Components.pdf))
* [Context - Free grammars for English](http://www.cs.uccs.edu/~jkalita/work/cs589/2013/12Grammars.pdf)
* [Context - Free grammars](https://www.cs.rochester.edu/~nelson/courses/csc_173/grammars/cfg.html)
* [Woodward English](https://www.woodwardenglish.com/wp-content/uploads/2018/01/parts-of-speech-english.jpg)
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and introduce activity |
| 25 minutes | Grammar Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
#### Review the concept of a list from the previous lesson
Ask students to brainstorm examples of when lists could be useful.
* To store an unknown number of values (e.g. a bunch of student test scores, shopping list, the songs of your favorite music artist).
* To store a collection of related values as one entity (e.g. the number of absent students each day over a week, how often a video on YouTube in a week).
#### Demonstrate creating lists
Use the [List Components](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/SNAP%20Lists%20Components.docx?raw=true) file to demonstrate the list structure.
Use the **list** block to create a simple list.
* Point out the format in which lists are displayed (gray box with red elements).
* Show that lists can be assigned to variables like other values.
* Emphasize that the list is considered a single value, even though it consists of multiple values.
* Point out and explain basic list operations blocks.
The **item**, **add**, and **delete** blocks will be most important. The **length** block will be useful as well.
* Point out that these blocks all take a list as an argument.
### Activity
Students should complete the [You Talkin' to Me?](lab_42.md) activity individually or in pairs.
Encourage students to be creative with their word lists.
Don't allow students to fixate on the exact grammatical correctness of generated phrases and sentences.
If this is a major concern, choose words for the lists such that generated phrases will always be grammatically correct.
### Debrief
Ask a student to present and discuss their solution to each step.
Emphasizes uses of lists and encourage students to discuss and think about why lists were necessary.
Ask students to consider if the tasks would have been doable without lists.
## Accommodations and differentiation
In addition to the bonuses in the lab, advanced students can attempt further extensions of the grammar, including conjunctions, non-transitive verb phrases, and/or recursive rules (e.g. multiple adjectives).
A more complex context-free grammar for English sentences can be found [here](http://www.cs.uccs.edu/~jkalita/work/cs589/2013/12Grammars.pdf)
Struggling students should focus on generating a noun phrase from only a few words. The other parts of speech and phrase types can be omitted without losing the key learning objectives.
Non-native English speakers or those with low literacy may struggle with the grammatical concepts here. Since the grammar is not the key objective, feel free to scaffold liberally and/or substitute a different type of grammar.
You can also provide a grammar supplement with [example sentences](https://www.woodwardenglish.com/wp-content/uploads/2018/01/parts-of-speech-english.jpg).
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_43.md
================================================
# Lesson 4.3: List practice I
## Learning objectives
Students will be able to...
* Traverse a list, accessing each element one at a time.
* Perform operations combining all elements in a list.
* Select defined subsets of elements in a list.
## Materials and preparation
* [Do now 4.3](do_now_43.md)
* [4.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.3.pptx)
* [Lab 4.3 - Guess who](lab_43.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.3%20Guess%20Who.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.3%20Guess%20Who.pdf))
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and demonstration |
| 30 minutes | Lab activity |
| 5 minutes | Wrap-up |
## Instructor's notes
### Lecture
In small diverse groups, ask students to consider how to count the number of students with July birthdays in the room.
* Provide only a few minutes to work through this-- students need not write full, formal algorithms, but simply describe an approach.
Have groups share with each other and work together to come up with a single approach, hopefully settling on asking each student if s/he has a July birthday and counting the number of yeses (or something similar).
Define _traversal_ as the process of accessing each element of a list in order and performing some operation. Explain that the operation can be anything, and may not actually be performed on every element.
Provide a few examples of possible operations (say each person's name, count the number of females, add up the total number of siblings, find the average GPA, etc.)
Explain that traversing is how many problems involving lists are solved.
As a group, develop sample script for a simple list traversal, such as the following:

Ask leading questions to help students write each line of the script, one a time, then gradually put the pieces together ("build up" approach).
* Point out that the **say** block can be replaced by any script (including larger blocks of scripting for more complex operations), but that the rest of the script will typically be the same.
* Emphasize that the _index_ variable is keeping track of where we currently are in the list, and can be used in the traversal operation if wanted, as in:

### Activity
Students should complete the [guess who](lab_43.md) activity individually or in pairs.
Students will be performing several traversal operations, some of which simulate mapping, filtering, or reducing/folding the list. You can discuss these operations if you feel the class can handle it.
Part 1.3 requires use of the **join** block. Be sure that the students are comfortable using this block.
### Wrap-up
Ask students to briefly describe how the various parts of the lab were similar or different.
* Hopefully the students find that the scripts were quite similar for each part.
Ask students to describe something they found challenging about the lab.
* You will go over the correct solutions to the lab in the next lesson.
## Accommodations and differentiation
Advanced students can attempt more complex filters in part 2.3 (such as finding all names that contain at least two vowels) and/or more advanced maps in part 1.3 (such as greeting each person by first initial).
Struggling students should focus on parts 1.2, 2.1, and select items from part 2.3. Partial script can be provided.
## University of California - Berkley teacher support resources
[BJC Lecture 9: Recursion](https://www.youtube.com/watch?v=JKn3nsfzBdA)
* Recursion 0:50-1:40
* Recursion Demo in Snap! 1:40-17:00
* Overview 17:00-21:00
* Definition of Recursion 21:00-24:30
* Examples of Recursion (You Already Know It!) 24:30-26:20
* Trust the Recursion 26:22-29:40
* Summary of Recursion 29:40-End
[Snap! Tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_44.md
================================================
# Lesson 4.4: List practice II
## Learning objectives
Students will be able to...
* Traverse a list, accessing each element one at a time.
* Perform operations combining all elements in a list.
* Select defined subsets of elements in a list.
## Materials and preparation
* [Do now 4.4](do_now_44.md)
* [4.4 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.4.pptx)
* [Lab 4.4 - Number cruncher](lab_44.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.4%20Number%20Cruncher.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.4%20Number%20Cruncher.pdf))
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review and debrief lab 4.3 |
| 25 minutes | Number Cruncher Activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Review
Ask students to define _traversal_ and outline the basic script pattern.
* Have students mention the key points (index variable, use index to access each item, repeat length of list, etc.).
#### Review solutions to lab 4.3
Ask a student to provide their solution to each part.
Discuss errors or flaws in each solution.
Point out similarities between each part, emphasizing that the basic script pattern is the same each time with only the operation performed on each item changing.
Further classify various traversals (maps, filters, folds).
* If necessary, provide the basic script pattern for a traversal again:

### Activity
Students should complete the [Number Cruncher](lab_44.md) lab individually.
The operations in this lab are similar to those in lab 4.3, but work with lists of numbers instead of names. As a result, students should progress more quickly.
As in lab 4.3, help students realize that the basic script pattern in each part will be the same.
### Debrief
Ask one or two students to share their solution to each part of the lab.
If all students seem to grasp the concept, not all parts need to be reviewed.
* If skipping some parts, be sure to review at least parts 1.1 (a fold), 2.1 (a map) and 2.2 (a filter).
Point out that the solutions from labs 4.3 and 4.4 will look quite similar, even though in lab 4.3 the lists contained names in in lab 4.4 they contained numbers.
The traversal script pattern is the same regardless of the type of elements in the list.
## Accommodations and differentiation
Advanced students should complete both bonus parts of the lab (1.5 and 2.3) and then assist struggling students.
Students who need more assistance should focus on parts 1.3, 2.1, and 2.2. Ensure that all students are able to complete at least these three parts before concluding the lesson.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_45.md
================================================
# Lesson 4.5: Sequential search
## Learning objectives
Students will be able to...
* Explain the sequential search algorithm.
* Implement several variations of sequential search.
## Materials and preparation
* [Do now 4.5: List tracing](do_now_45.md)
* [4.5 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%204.5.pptx)
* [Lab 4.5 - It's around here somewhere](lab_45.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20Word/Lab%204.5%20Its%20Around%20Here%20Somewhere.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Lab%204.5%20Its%20Around%20Here%20Somewhere.pdf))
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Lecture and demonstration |
| 25 minutes | It's Around Here Somewhere Activity |
| 10 minutes | Debrief and wrap-up |
## Instructor's notes
### Lecture
Ask students to consider how to determine if a particular person is in the room or not. At first, you will likely get answers like "call out the person's name" or "look around." Press the students to come up with a method that will always work, including when the person is not present. If necessary, ask them to pretend they are a computer. Point out that solutions like "look around" are too high-level, and in reality, there is a lot more going on (such as looking at each person individually).
Guide students to the process of checking if each person is the one they are seeking, in some deterministic order, until they have either found the person or checked everyone. Emphasize that the absence of the person is only confirmed when everyone has been checked, but that the presence is known as soon as the person is found.
Ensure students recognize that this process is a traversal of the people in the room. Explain that the process of traversing a list looking for a particular item is known as a "sequential search."
Ask students to think about the efficiency of this algorithm. Emphasize best, worst, and average cases (both what those cases are and how long they take). Students should have a basic understanding of the fact that the speed of the search is dependent on the size of the list. If students seem prepared, ask them to speculate under what circumstances you might be able to do better (eventually leading to binary search).
Show the script for a basic sequential search:

Point out that this script is another variation of a traversal.
Emphasize that this is only one variant of sequential search. The specifics of what to report can vary (true/false, index in list, item itself, etc.).
### Activity
Students should complete the [It's around here somewhere](lab_45.md) activity individually or in pairs.
* Each part asks students to write a slightly different sequential search. In all cases, make sure students are clear on what they should be reporting, both when the desired item is found and when it is not.
### Debrief
Ask one or two students to provide their solutions to each part.
Point out the similarities in each solution, emphasizing that the algorithm remains constant and only the value that is reported changes.
## Accommodations and differentiation
Advanced students can be encouraged to explore more efficient searching algorithms (specifically binary search).
Struggling students should focus on just parts 1.1 and/or 2.1 of the lab. Remind these students that they are starting with a traversal and simply changing what happens to each item.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_46.md
================================================
# Lesson 4.6: Guess my word project
## Learning objectives
Students will be able to...
* Apply lists to implement a complete version of _Guess my word_.
* Exercise good programming practices to produce a program that is not only functional but also elegant and well-written.
## Materials and preparation
* [Do now 4.6: Spaceman](do_now_46.md)
* Download [Spaceman template](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/spaceman.pptx)
* [Spaceman instructions](https://tekhnologic.wordpress.com/2017/03/01/spaceman-an-alternative-to-hangman/)
* Watch Spaceman [template tutorial](https://videopress.com/v/Fk5cYswc)
* Prepare two or three rounds of Spaceman to play with the class as the Do now.
* [Project 4 - Guess my word](project_4.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%204%20Word/Project%204%20Guessmyword.docx?raw=true)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%204%20PDF/Project%204%20Guessmyword.pdf))
* Guess my word planning worksheet: ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project_4_Guessmyword_Planning_Worksheet.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project_4_Guessmyword_Planning_Worksheet.pdf))
* Word Lists to use for Spaceman and Guess My Word Game
* [Starter code](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Project%204.6_starter)
* Randomly generated [Word list][]
* [Countries and states](Country-n-State.txt)
* A word list from which words can be selected for the game, such as [Word list][]
* [Snap! tips][]: 0, 19
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Review and introduce project |
| As needed | Lab time for Guess My Word project |
## Instructor's notes
### Review and introduction
Review the various skills and concepts have been learned so far in the unit. Consider using some of the tools you learned about in Summer Training. (Kahoot, Quizziz, Socrative, Plickers).
* Put particular emphasis on the maintenance of lists and traversals.
* Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks.
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements.
* Focus students' attention on the checkpoints to help them avoid becoming overwhelmed.
Help students import the word list into a list, either by right-clicking on the list view and selecting "import" or by parsing the online list directly using the **http://** block. This is not one of the objectives of the project, so feel free to provide starter project if you prefer.
* Emphasize that generating the "word pattern" or "blanks" and keeping that sequence up-to-date with each guess is the hardest part of the assignment, and should not be overlooked.
* Remind students that it will be important to keep straight what each variable and list in the script is used for. Each variable or list should have a single purpose, and those purposes should never be conflated.
### Project
This is a summative assessment project. Students should be given at least a few days in class to work on the project. The exact schedule should be determined by your teaching team based on overall class capability and other factors. Here is some [starter code](https://snap.berkeley.edu/snap/snap.html#present:Username=andrewspiece&ProjectName=Project%204.6_starter) to have students start with the list already populated.
* If most students have the ability to work at home, you can consider reducing the amount of in-class time provided and requiring students to spend time working at home.
Provide a means for students to ask questions throughout the project and provide assistance as needed.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to add extensions such as:
* Enabling guessing of the entire word.
* Allowing the user to specify the length of the word to be guessed.
* Keeping statistics (win-loss record, fewest guesses, etc.) across games.
Struggling students can be given a starter project or exempted from certain features.
* Though it is the most difficult part of the assignment, tracking the "blanks" is the best practice working with lists and should be preserved.
* The requirements to display a graphical figure, track repeated guesses, and specifically recognize a win can be removed for students in need of significant simplification.
[Word list]: wordlist.txt
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_51.md
================================================
# Lesson 5.1: Intro to cloning
## Learning objectives
Students will be able to...
* Explain why prototyping and clones can be useful.
* Describe how complex goals can be accomplished using cloning.
## Materials and preparation
* [5.1 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%205.1.pptx)
* [Lab 5.1 - Connect the dots](lab_51.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20Word/Lab%205.1%20Connect%20the%20Dots.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20PDF/Lab%205.1%20Connect%20the%20Dots.pdf))
* If possible, create large poster-sized versions of the dot grids (each grid is 12 x 3).
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introduce activity |
| 25 minutes | Activity |
| 15 minutes | Debrief and wrap-up|
## Instructor's notes
### Introduce activity
Inform students that they will be drawing some figures by following specific instructions.
Emphasize that students must follow all instructions in the lab carefully.
Throughout the activity, ask students to think about other ways they could accomplish the same goals and the advantages and disadvantages of each approach.
### Activity
Split students into diverse groups of at least six. If the number of students is not an exact multiple of six, create a few groups of seven and have students take turns being "active".
* Students should follow the steps in the lab, being careful to act as a group.
In each part, the group will draw the letter 'C' six times, using slightly different instructions.
* Students should, hopefully, notice that in part 3, they are able to achieve similar but not exactly the same results by all following the same instructions. (Though each student draws a 'C', they are not all in the same location.) In each part, they were able to improve the efficiency and clarity of the instructions.
### Debrief
Ask each group to share their answers to the questions at the end of each part.
Discuss how this approach could be applied to programming.
Introduce the terms _prototyping_ and _cloning_ as synonyms:
_Prototyping:_ creating a single "master" entity that defines the behavior for a group of objects, then creating many copies of the prototype to duplicate the behavior.
## University of California - Berkley teacher support resources
[BJC Lecture 11:Recursion II Alijia Yan](https://www.youtube.com/watch?v=w2d_snYBLeY&index=11&list=PLA4F0F0CA4A3EE7F4)
* Mobile World Congress 0:00-2:15
* Recursion:Factorials (Factorial (n)+ n! 2:30-7:40
* [Fibonacci and Fibonacci Series Video](http://www.youtube.com/watch?v=w2d_snYBLeY&t=7m45s) 7:45-11:45
* Fibonacci Ex: fin(n) Math and Snap! blocks 11:50-13:15
* Example of Recursion: Counting Change 13:20-17:30
* Call Tree for “Counting Change” with Snap! example 17:35-22:50
* Summary of Recursion 25:40-26:21
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_52.md
================================================
# Lesson 5.2: Cloning sprites
## Learning objectives
Students will be able to...
* Demonstrate the difference between sprite and global variables.
* Explain how cloning and prototyping simplify similar sprites in the same script.
* Create prototype sprites and clones of the prototype sprite.
* Explain the difference between a "master" sprite and a "clone" sprite.
## Materials and preparation
* [Do now 5.2](do_now_52.md)
* [5.2 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%205.2.pptx)
* [Lab 5.2 - Lots of balls](lab_52.md)([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20Word/Lab%205.2%20Lots%20of%20Balls.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20PDF/Lab%205.2%20Lots%20of%20Balls.pdf))
* Test out the lab on student machines before class (cloning can bring the web browser to a crawl on some machines).
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introductory discussion |
| 30 minutes | Lab activity |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
#### Example game
Show students a brief video demonstrating space invaders.
#### Discussion
Ask students to think about how we create all the “invaders”?
* Answer with current knowledge: make one invader sprite, and copy it many times while adjusting the copies as necessary.
Ask what might go wrong or be bad about this approach.
* If anything in an invader changes, it will need to be changed many times.
* Lots of sprites clogging up the program that are all basically doing the same thing.
#### Demonstration
Introduce cloning as the automated way of doing the manual copying.
Demonstrate how to create a clone using:

Point out that clones inherit all aspects of the "master" or "prototype" sprite, including scripts.

### Activity
Students should complete the [Lots of balls](lab_52.md) lab.
* This lab will be repeating much of what was in the lesson. This is intentional.
* Students should focus on ensuring they are differentiating between "master" sprites and "clone" sprites, and that the stage is serving as the main "driver" for the program.
## Accommodations and differentiation
Advanced students can attempt to assign properties to clones (color, size, etc.) so that not all clones look alike. To do this, they will need to use a global variable to temporary hold the value that can be "claimed" by the clone.
Struggling students should focus on just creating a single clone from the prototype and not worry about creating multiple clones.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_53.md
================================================
# Lesson 5.3: Communicating with clones
## Learning objectives
Students will be able to...
* Pass information from the master to individual clones.
* Delete clones when they are no longer needed.
## Materials and preparation
* [Do now 5.3](do_now_53.md)
* [5.3 slide deck](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/slidedecks/TEALS%20SNAP%205.3.pptx)
* [Lab 5.3 - Fewer balls](lab_53.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20Word/Lab%205.3%20Fewer%20Balls.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Unit%205%20PDF/Lab%205.3%20Fewer%20Balls.pdf))
* [Helping trios activity](helping_trios.md)
* Test out the lab on student machines before class to ensure the machines can handle the number of clones.
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :---------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Introductory discussion |
| 30 minutes | Fewer Balls lab |
| 15 minutes | Debrief and wrap-up |
## Instructor's notes
### Introductory discussion
Review the lab from yesterday again, focusing on the identical nature of the clones.
Ask students to describe how (or if) the prototype communicates to the clones.
Ask students how they might remove balls if they decide there too many.
* Students should ultimately realize that there is no way to destroy only some clones.
Introduce the distinction between "global variables" and "sprite variables".
* Global variables ("for all sprites") are visible to and usable by all sprites in the program.
* Sprite variables ("for this sprite only") are only visible to and usable by a single sprite.
Emphasize that, when cloning is used, each clone gets its own copy of any sprite variables inherited from the prototype.
Ask students to brainstorm situations in which each type of variable is appropriate.
* Global variables are best for application-level data, such as sprite counts, game level number, score, etc.
* Sprite variables are best for properties that may be specific to each sprite, such as speed, id #, etc.
### Activity
Students should complete the [fewer balls](lab_53.md) lab.
* Students will likely have difficulty isolating the uses for each variable. Remind them that each variable serves a specific purpose, and that they should focus on keeping straight what variable does what.
* Currently, the lab is written to use global variable "id" to talk to one sprite at a time. If not used carefully, this design pattern has the potential for race conditions. If you believe students are capable, you can have a discussion about race conditions and concurrency and the problems that can arise.
### Debrief
Have students pair up and review each other's script. Encourage students to discuss differences in their approaches and try to understand why each wrote the script as they did.
If students have struggled with the lab, consider implementing [Helping trios activity](helping_trios.md).
Ask a few students to share difficulties they or their partner had and/or different approaches they took the problems.
## Accommodations an differentiation
For faster students, explaining and demonstrating race conditions would be valuable. Instructors could also give out project with a "simple race condition" (if such a thing exists) and ask the students to fix it.
Advanced students can also try to implement features giving them additional control over clones, such as changing a specific clone's speed or direction.
Struggling students can ignore the requirement to be able to create new sprites after some have been deleted and just focus on deleting clones one at a time.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_54.md
================================================
# Lesson 5.4: Space Invaders project
## Learning objectives
Students will be able to...
* Use cloning to implement a complete version of _Space Invaders_.
* Exercise good programming practices to produce script that is not only functional but also elegant and well-written.
## Materials and preparation
* [Project 5 - Space Invaders](project_5.md) ([docx](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20Word/Project%205%20Space%20Invaders.docx)) ([pdf](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/Projects/Projects%20PDF/Project%205%20Space%20Invaders.pdf))
* Example of [Space Invaders](http://www.pacxon4u.com/space-invaders/)
* [Lab Day Lesson](lab_day_lesson.md)
* [online game](http://www.pacxon4u.com/space-invaders/)
* [GrudgeBall](http://toengagethemall.blogspot.com/2013/02/grudgeball-review-game-where-kids-attack.html)
* [Snap! tips][]: 0, 3, 5, 9, 12, 17
## Pacing guide
| Duration | Description |
| :------------- | :--------------------------------------------- |
| _Day 1_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 30 minutes | Review unit concepts |
| 20 minutes | Introduce project |
| _Days 2-12_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10-15 minutes | Review |
| 30-35 minutes | Lab time |
| 5 minutes | Exit ticket |
## Instructor's notes
### Review and introduction
Play a review game (such as [GrudgeBall](http://toengagethemall.blogspot.com/2013/02/grudgeball-review-game-where-kids-attack.html)) to remind students of the skills and concepts have been learned in this unit.
* Definition of "prototyping"
* Creating clones
* Using a master sprite
* Modifying clone behavior
* Passing information from the master to clones
* Deleting clones
Remind students that their solutions to previous assignments are an excellent resource when trying to accomplish similar tasks
### Introduce project
Walk students through the project specification, pointing out important details, potential pitfalls, and requirements.
If students are unfamiliar with Space Invaders, spend a couple minutes demonstrating one for the class. IHere is an [online game](http://www.pacxon4u.com/space-invaders/)s.
Remind students that their version of the game does not need to exactly mimic the classic version. In particular, they need not have quite as many invaders, create barriers for the player to hide behind, or duplicate invader movement or firing patterns exactly.
### Project
This project is a summative assessment for the unit. Students should be demonstrating mastery of all the skills covered.
* Most students will require roughly 10-15 hours of total work time to complete the project.
* Assess the progress of your students regularly using such techniques as asking them to demonstrate their incomplete programs, tracking questions asked during lab time, and/or utilizing peer reviews.
* Adjust the amount of time allowed for the project to fit the needs of your students.
* It is vital that nearly all students complete the project before moving on.
* Ensure that students are able to ask questions in class throughout the project
* See the standard [lab day lesson](lab_day_lesson.md) for detailed plans for lab days.
If most students have the ability to work on assignments at home, the amount of in-class time provided can be reduced if necessary.
* If this approach is taken, be sure to make accommodations for students who are _not_ able to work at home, such as after school lab hours.
## Accommodations and differentiation
If any students do not have the ability to work at home, ensure enough in-class time is provided to complete the assignment, offering extensions if necessary.
Advanced students can be encouraged to add different types of invaders that behave differently, implement a Galaga-style "swoop" behavior from the invaders, add player power-ups (such as advanced weapons), or any other extension.
Struggling students can be exempted from certain features (such as levels or invader firing) or given starter script.
If students need significant assistance, focus them on the invaders. Getting a set of invaders created and moving properly will best target the vital objectives from this unit.
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_61.md
================================================
# Lesson 6.1: Design basics
## Learning objectives
Students will be able to...
* Identify the key considerations when designing a piece of software.
* Describe methods for prioritizing features, use cases, and/or scenarios.
* Explain why design and planning are necessary steps in the software engineering process.
## Materials/Preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :-------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 15 minutes | Introduce final project, demo examples |
| 25 minutes | Sample Design activity |
| 10 minutes | Debrief and wrap-up|
### Understanding context, defining, ideating
In this course, we are not actually typing out any script. In our case, "coding" would refer to the stage where we actually drag-and-drop in the design environment. Later when we learn other languages, "coding" would refer to when we start typing out script in a specific language like Java or Python.
When we first learn computer scripting, it may seem fun to dive right into coding. Resist the urge to do so! Software development is a process. It begins with carefully thinking about, and planning out, your design. This includes envisioning what the final product might look like, and planning out the steps needed to implement it. Remember, "design then script".
## Instructor's notes
### Introduce project
Talk about how far students have come this semester. Ask students to think back to the start of the semester and remember how little they knew about scripting. Briefly list a bunch of the things they've learned (drawing, animation, variables, loops, conditionals, loops, etc.). Show a lab or assignment from early on and remind them that, not that long ago, this was challenging, whereas it now seems nearly trivial.
Explain that, for their final project, the students will get to design and build a script of their own choosing. Point out that this will involve more than just writing script. There will be planning, design, scheduling, and other project management tasks. Emphasize that students will be graded on not only the script they produce, but the process they used to design, plan, and implement it.
Demonstrate a few example projects (with as much variety as possible). Try to hit a bunch of different types of scripts. Many students will gravitate towards games, but other options include simulations, productivity tools, musical projects, animations, and more.
Distribute the project rubric and point out key aspects of the requirements. Point out the steps in the process and that each one is equally important. Specifically mention the large number of points for things _not_ related to coding. Remind students that, as they are now experts, there are high expectations for the depth, complexity, and completeness of their projects.
* What are the different categories of software applications?
* When looking at an application, what type of functionality does it have?
* Who are the end users, or target audience?
* What do you like, or not like, about it?
* What do other users/reviewers say about it?
* How does it compare to, or stand apart from, other similar apps?
As we study and analyze sample applications, we gain experience that will help us design our own.
### Sample design activity
Tell students that, as a class, they will now practice some of the design and planning tasks for the project on a well-known app. Pick an app that both you and most of your students have a deep familiarity with, but that is not too complex. Twitter, Instagram, Pinterest, or other relatively small-scope social media work well here. If necessary, scope down the app by focusing on only the core features (e.g. only consider public, text-only Tweets to start). In this step, try to keep students from fixating on making their app look _exactly_ like the existing app.
Walk through each of the design steps in the project rubric for the chosen app:
* **Pitch** - describe the basic functionality of the app in one paragraph of less.
* **Define** - List the features/scenarios the app will support.
* **Sketch** - Draw a very basic wire frame sketch of the main "screens" of the app.
#### Expand
Build a spec using the [Final Project Plan Organizer][]. In this step, emphasize completeness and detail. Leaving out steps or requirements will make it difficult to plan effectively and will likely force major changes or cuts later.
#### Plan
Based on the feature list and spec, create a full development plan using the [Final Project Development Plan][]. As tasks and costs are listed, remind students to keep an eye on the total amount of time required and to include buffer for things going wrong. Be sure to prioritize tasks so that cuts can be made if necessary.
### Debrief
Once all documents have been created, ask students what the next steps should be. Students should be focused on the highest-priority tasks and should understand the plan for evaluating progress throughout the project. Preserve the documents created in the activity to give to students as examples when planning their own projects. Emphasize that both the spec and the plan are "living documents" and should be updated as the project progresses (when new features are thought of, tasks are cut for time or complexity, priorities are reorganized, etc.).
## Accommodation and differentiation
This lesson could easily take two or even three days depending on the class. Take as long as is necessary to ensure students have a complete understanding of the steps necessary to create their final project, but try not to get too bogged down in the details of the sample app.
For classes with a large number of self-sufficient students, consider having students complete this activity in small groups rather than as a full class. Along the way, have groups share their progress and provide feedback to each other.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_62.md
================================================
# Lesson 6.2: Research and ideate
## Learning objectives
Students will be able to...
* Identify potential users, intended impact, and possible unintended negative consequences.
* Generate ideas to create range of possibilities using a brainstorm technique.
* Conduct user-centered research to understand design opportunities and barriers.
* Critically analyze factors when choosing between project ideas.
* Prioritize proposed project ideas using the identified factors.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review process and identify first steps |
| 5 minutes | Brainstorming |
| 10 minutes | Pitch writing |
| 15 minutes | Peer review |
| 5 minutes | Prepare interview or survey questions
| 5 minutes | Debrief and wrap-up|
### Personal design interests and project goals
When coming up with ideas, personal interests are considered. The final product often reflect the "heart and soul" of the designers behind the product. If you are working in a group, each person should be willing to see the project through to completion.
### Product life cycle
The design of a new software product progresses through a sequence of stages called the "life cycle", and is often associated with changes in the marketing situation. The first step of introducing a product involves getting to know the market, or in other words, the users or potential customers out there.
### Understanding context, defining, ideating
When coming up with a great product idea, it is important to conduct user-centered research to understand the needs of the client/customer/end-user. This research helps us understand design opportunities and barriers. This research could be done as a survey or interview, given to random people, to people in your friends or family circle, or to a specific population of people (like customers of a supermarket, or members of a soccer club, for example).
## Instructor's notes
### Review
Ask students to identify the steps in the design and planning process as discussed in [Lesson 6.1](lesson_61.md). Remind students that all steps are vital, and that thorough and thoughtful planning and design can make the coding phase much easier. Inform students that today they will take the first steps in designing their final project.
### Brainstorming
Give students 3-4 minutes to brainstorm and write down as many project ideas as they can. This should be done mostly in silence. At this point, there should be minimal detail, no evaluation or rejection of ideas, and no discussion. In particular, students should not think about the difficulty or "coolness" of the project yet. Just write down ideas. Have each student share one idea. Do not allow discussion, criticism, or explanation. Each idea should be summarized in only a few words or a single sentence.
### Pitch writing
Have students look at their list of ideas and spend a few minutes thinking about them. Then, each student should pick their favorite ideas and write a "pitch" for the project. A pitch should be no more than a short paragraph and should describe the basic, high-level features of the project. The pitch should _not_ include any implementation details (scripts, sprites, etc.).
Pitches should include a moderate level of specificity. Enough for someone to imagine how the app will work, but not so much to get bogged down. Enforce the "one short paragraph" restriction. If a student is having difficulty developing a pitch for an idea, that might be a sign that the idea is not fully-formed enough to be a final project. If a student is having trouble keeping the pitch short, the project may be too complex to complete in the available time.
### Peer review
Pair students up and have students take turns reading one of their pitches to their partner and asking for feedback. Partners should ask questions to help identify both the best and worst parts of each pitch. Remind students to keep all feedback constructive, respectful, and professional. Students should not criticize each other's ideas, but can point out potential concerns.
Students should take notes during their conversations and refine their pitches based on their partner's feedback and their own realizations. If time allows (or over the course of multiple days), repeat this process with new partners.
### Prepare interview questions, and evaluate
At this points, students should have between one and three pitches that are well-defined and reasonably well fleshed-out. Overnight, students should do some research, re-consider their pitches and rank them in order or which they would most like to pursue as their final project. Make sure students don't just pick the "coolest" sounding idea, but also consider the technical challenges, amount of time available, and their own interest in and willingness to see the project through to completion.
As homework, students may create a simple survey or a list of questions to ask friends or relatives to help refine ideas, and subsequently, decide on the final project. Make changes to the project pitch based on these recommendations.
Software design is a process that takes time. Conducting user-centered research helps narrow down and refine ideas.
* What do potential users think?
* For example, what components are necessary?
* What components are nice to have?
* Is it easy to use?
## Accommodation and differentiation
If students are having difficulty coming up with project ideas, encourage them to think about existing software. While simply recreating an existing app should be a last resort, thinking about applications they already know can help students come up with functionality they might like to include.
If your class is fairly self-sufficient and mature, you can consider allowing students to "borrow" an idea from a classmate if they find one they like better than any of their own. Make sure the person who had the idea is OK with it being borrowed, and emphasize that the students must each build their own version.
This can be a bit dangerous, as it puts the student somewhat behind in the process right from the start, since they won't have as much context having not written the pitch themselves. Consider carefully whether this is a good idea.
Encourage each student to pick a project that fits his or her level of technical skill. Make sure students are not over committing and choosing projects they do not have the skills to complete. Also try to discourage stronger students from choosing simpler projects in an effort to do less work.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_63.md
================================================
# Lesson 6.3: Defining requirements
## Learning objectives
Students will be able to...
* Define key _user-scenarios_ for a project and the features required to implement each scenario.
* Explain the importance of wire framing when designing an application.
* Capture key scenarios using _sketches_ - (hand drawn, or with drawing tool).
* Refine design based on user centered research.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review pitches |
| 20 minutes | Scenario definition |
| 15 minutes | Wire framing |
| 5 minutes | Debrief and wrap-up|
### Prototype, test, and make
From Lessons 6.3 to 6.5 you will be doing this type of iterative and incremental work. Lesson 6.3 does not involve any "coding" yet. You will start with sketching things down with pencil-and-paper, or with a drawing tool. Use the handouts to help you. You may revise some sketches later on, after you have started implementation (ie, "coding") and testing.
## Instructor's notes
### Review pitches
Have students look at their revised pitches from yesterday. Tell them that they will be choosing _one_ to pursue as their final project. If desired, give students a few minutes to rework their pitches or get more feedback from a classmate or instructor. Ask students to choose which idea they want to pursue, and write it down on the top of their [Final Project Plan Organizer].
### Defining scenarios
Defining the term "scenario" for students:
* _Scenario: a description of a set of interactions and/or tasks that describe a start-to-finish example of how a user might want to use the application_.
Explain that defining scenarios helps a programmer focus on what features are actually necessary to enable the key user interactions for their application. Instruct students to write down at least **3** scenarios for their project describing, from start to finish, interactions a user might have with their script to accomplish a specific goal. The scenarios should have a moderate level of detail in the description of the user interaction (e.g. "push a button," "type in their name," etc.) but should not include any design or implementation details. Once students have written their scenarios, they should review them and develop a list of the necessary features to enable each scenario. Again, there should be minimal technical detail in these descriptions, instead focusing on details of the user experience. The feature lists should be more about _requirements_ than implementation.
### Wire framing
Define the term _wire frame_ for students: a high-level sketch of an application's user interface intended to help visualize layout, interactions, and transitions_. Explain that wire frames do not include any details (such as specific graphics or text), but instead provide a broad impression of what an application will look like to aid in design and planning.
Students will complete page 1 of the organizer by sketching or wire framing the important screens for their project. If you have one available, a wire framing tool such as [Balsamiq](https://balsamiq.com/) can be used instead of sketching by hand. As with all wire framing, students should not focus on the specific details of the sprites, images, etc. that will appear, but instead design the basic layout and main components of each screen. Encourage students to reference their feature lists to ensure they include _all_ necessary screens for their project, including simple things like a splash screen, help screen, or exit ("game over") screen.
### Debrief
As class ends, ensure students retain their work as they will use it to construct a detailed specification and implementation plan tomorrow.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=tru
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_64.md
================================================
# Lesson 6.4: Building a plan
## Learning objectives
Students will be able to...
* Break down, and identify the main technical components needed for the functional project specifications (scenarios).
* Explain the purpose of each technical component.
* Develop the project idea into a full, detailed specification.
* Create a plan that includes specific steps or a list of bite-sized tasks.
* Estimate time required for tasks.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing Guide
| Duration | Description |
| :--------- | :--------------------------------------------- |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Review feature lists and wire frames |
| 20 minutes | Spec writing |
| 15 minutes | Building implementation plan|
| 5 minutes | Debrief and wrap-up|
### Prototype, test, and make
From Lessons 6.3 to 6.5 you will be practicing an iterative and incremental project management work flow. In Lesson 6.3 you identified user scenarios. Now in Lesson 6.4 you identify what technical components are needed for each scenario, and define all the tasks that need to be done. You are not "coding" yet.
Each defined task, or step, should be bite-sized, and specific enough to do. This plan should include testing done by you, as the developer, and by other users. As you progress, gather feedback from users/testers over time, and make changes to your design, and plan, as needed.
#### Applied technologies
Your classroom may have a diverse student population, and include English Language Learning (ELL) students. Following a project management flow helps ensure that the development process is simple, clear to follow, well documented, and easy to share and evaluate. Practicing these skills will help students collaborate and share their work in diverse classrooms. These skills prepare students to engage more successfully in an increasingly global technology industry.
## Reference
[English Language Learning](https://www2.gov.bc.ca/gov/content/education-training/k-12/teach/teaching-tools/english-language-learning)
## Instructor's notes
### Review
Ask students to take out their feature lists and wire frames from [Lesson 6.3](lesson_63.md). They will be using these to develop a more detailed specification and plan for their project today. If time allows, ask one or two students to share their feature list and/or wire frame and discuss with the class. Ensure that students have an understanding of the proper level of detail at this point.
### Spec writing
Using the details from their pitch, their feature lists, their wire frames, and the feedback they've received, students should fill out the rest of the [plan organizer][]. It is vital at this stage that students be as detailed and thorough as they can. Any missing information will complicate the process later when they realize what was left out. Encourage students to take their time and make sure they hit everything.
While this process is happening, instructors should circulate through the class and check-in with student. Verify that they have a complete, well-thought out idea that is feasible to complete in the available time. If you have concerns about a student's ability to complete the proposed project, help them scope down by removing or simplifying features.
### Implementation plan
Students should use the details built in their plan organizer to list the tasks necessary on their [Final Project Development Plan][]. Emphasize to students that tasks should be at a very low level of granularity (hence the time requirement being specified in minutes). If a single task has a time estimate of more than a few hours, the student should try to break the task into smaller pieces. Ensure that students do not skip "trivial" or "simple" tasks (such as building a script they have written before) or non-coding tasks (such as developing graphics) in their plan.
### Debrief
As class ends, remind students that their spec and implementation plan will be their guides throughout the process. They should update them each day and keep them with them at all times. Ideally, anytime there is a question about the requirements or scope of the project, the spec should have the answer. If not, it's a new idea and the spec needs to be updated accordingly.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_65.md
================================================
# Lesson 6.5 - Project implementation
## Learning objectives
Students will be able to...
* Apply the skills developed throughout the course to implement a medium* to large-scale software project.
* Realistically evaluate progress during software development and identify when cuts are necessary.
* Prioritize features and scenarios and choose which should be eliminated or modified if/when resources and/or time become limited.
* Record time taken for tasks, and lessons learned in the process, to help refine estimates.
* Record iterations of prototyping.
## Materials and preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing guide
| Duration | Description |
| :------------- | :--------------------------------------------- |
| _Days 1-15_ | |
| 5 minutes | Welcome, attendance, bell work, announcements |
| 10 minutes | Check-in |
| 30 minutes | Lab time |
| 10 minutes | Exit ticket |
### Prototype, test, and make
From Lessons 6.3 to 6.5 you will be practicing an iterative and incremental project management workflow. Now it's time to start following your plan. You can finally start "coding", and testing! Remember that not all tasks involve coding. Take note of the time it takes you to complete each task (this will help you make better estimates in the future). Estimating time for tasks can be difficult to do. This will get better with experience.
## Instructor's notes
### Check-in
Remind students daily to keep their planning documents up-to-date and make edits as necessary. Point out how many days remain and have students check their implementation plan to ensure they do not have more work than time remaining. If they do, they will need to create a tentative cut list in case they don't catch up.
Using previous days exit tickets, questions from students, instructor awareness of trouble points in the project, and/or any other resources to determine what needs covering. Use this time as an opportunity to remind students of previous labs or activities that may be applicable to their project, and/or how far along they should be by the end of the day
### Lab time
Allow students to work on their project at their own pace. Provide a mechanism for students to ask questions of course staff as needed. Simply having students raise hands often does not work well, as it can be hard to keep track of in what order hands were raised; consider a queue of some kind where students write their names when they have a question
When there are no current questions, circulate and observe progress, stepping in if students appear stuck but are not asking for help
### Exit ticket
Before students leave, have them answer the following questions on a small piece of paper, or in their daily journal notebook:
1. What was the last thing you accomplished on the project today?
2. What is the first thing you will work on tomorrow?
3. Are you currently ahead, behind, or on track with your schedule? If you are behind, what tasks will you cut to get back on track? If you are ahead, what are some extra features you can add?
4. What is the riskiest remaining task for your project?
These answers will help you determine which students to visit first the next day. Any student who indicates they are behind should get a consult with an instructor the next day to help get them back on track. Encourage students to save each day's version of their planning documents with a new name so they can track progress and recover cut tasks if they make up time.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: lesson_66.md
================================================
# Lesson 6.6 - Project sharing
## Learning objectives
Students will be able to...
* Share their progress, invite feedback, collaboration, and if applicable, prepare a marketing pitch.
* Decide on how and with whom to promote and share their project.
* Critically evaluate the design process, their ability to work effectively, including the ability to implement project management processes.
* Identify new design issues, including how they or others might build on their concept.
* Identify and evaluate their skills, and things to learn in the future.
* Analyze the role and impact of their project idea, and similar technologies, in societal change.
* Consider how cultural beliefs, values, and ethical positions affect the development and use of technologies.
## Materials and Preparation
* [Final project specifications][] ([docx][])([pdf][])
* [Final project plan organizer][]
* [Final project development plan][]
* [Examples of TEALS final projects](https://youtu.be/aV6LFVXxd34)
* [Snap! tips][]: 0, 21, 23
## Pacing guide
| Duration | Description |
| ------------- | --------------------------------------------- |
| _Sharing Day_ | |
| 5 minutes | Welcome, introduction |
| 40 minutes | Project sharing (Format defined by teacher) |
| 10 minutes | Concluding thoughts |
### Share, applied Skills, applied Technologies
At the end of the day, software must connect with people. Now it's time to share your project with others! It's also fun, and helpful, to see what others have been doing. Furthermore, it's time to reflect on the whole development process, and share what you have learned from this experience.
Invite questions and feedback from peers and guests. Celebrate your achievement. Consider ideas for improvement and future work. Think about how you could do things differently using other tools/strategies. Think about how this project might be adapted for, or influenced by, another culture, social situation, or target user group.
## Instructor's notes
### Preparation
Choose a date for project sharing ahead of time, and inform students of the format. Check that each student's planning documents, and or daily journal notes, are up to date. Some possible formats (depends on the size of your class):
* 40 minutes for individual presentations, followed by 10 minutes of "open-floor" time where students can roam around the classroom and look at each other's work science-fair style, and answer questions;
* Prepare a Project Walk-through video ahead of time, showcasing their project;
* Share in pairs, and then shift to the next table/chair round-robin, or jigsaw style;
* Conduct an interview of a few projects at the beginning of class over a period of time.
This may be a good opportunity to invite guests or visitors to your classroom. Peer feedback is valuable. It helps us grow. This can be done by having a few minutes for Q&A after the presentation. Or, peers can be invited to complete a short survey. Remember to put any emotions or hard feelings aside.
### Sharing Content
Inform students that their sharing should include: pitch or poster (highlight key features); demo (how it works); reflections on their development process (what went well? what didn't go well); lessons learned; ideas for future work.
Other questions to consider:
* What skills did you use to complete this project?
* What other skills do you wish you had?
* How does your project/product compare to other ones that you have seen?
* How does a project/product like yours impact societal change?
* Do you foresee any unintended, or negative consequences, of it's use?
* How might someone of a different culture, value or ethical position view your project/product?
### Concluding thoughts
Congratulate students on completion of project. Emphasize that while having a fun final product to show others is great, this Unit is also about practicing a project management flow, where learning from self-reflection and experience (both good and bad - even mistakes) is invaluable.
## Accommodation and differentiation
Students who are shy and afraid of public speaking may be given the option of preparing a "walk-through" video to show-case their project experience.
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
[Final Project Specifications]: project_6.md
[docx]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20Word/Project%206%20Final%20Project.docx?raw=true
[pdf]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Projects/Projects%20PDF/Project%206%20Final%20Project.pdf?raw=true
[Snap! tips]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true
================================================
FILE: markdeep-footer-tocstyle-none.txt
================================================
================================================
FILE: markdeep-footer.txt
================================================
================================================
FILE: markdeep-header.txt
================================================
**TEALS Program**
Home |
Curriculum Map |
Discussions |
Change Log
================================================
FILE: master_vocab.md
================================================
# Master Vocabulary List
## Unit 0 Beginnings
| Word | Definition |
| --- | --- |
| Algorithm | A complete, well-defined sequence of steps for completing a task or solving a problem. |
| Computer | An electronic machine that can solve different problems, process data, store & retrieve data and perform calculations. |
| Computer Science | The study of the principles and use of computers. |
| Computer Program | A sequence of instructions or steps, written in a language that can be understood by a computer, that will be used by the computer to complete a task or solve a problem.|
| Debug | A process of locating and removing computer program bugs, fixing errors or abnormalities. |
| Programming Language | A vocabulary and set of grammatical rules for instructing a computer or computing device to perform specific tasks. |
| Cartesian coordinate system | A system in which the location of a point is given by coordinates that represent its distances from perpendicular lines that intersect at a point called the origin. |
| x-axis | The axis along which values of x are measured and at which both y equal zero. |
| y-axis | The axis along which values of y are measured and at which both x equal zero. |
| Origin | A fixed point from which coordinates are measured, as where axes intersect. |
## Unit 1 Basics
| Word | Definition |
| --- | --- |
| Block | Puzzle-piece shapes that are used to create code. |
| Script | Different types of blocks linked together. |
| Sprite | An object which performs functions controlled by scripts. |
| Stage | The background of a project, performs functions through scripting. |
| Costume | A costume is one out of possibly many "frames" or alternate appearances of a sprite. |
| X Position | The position that a sprite or the mouse is at along the horizontal axis. |
| Y Position | The position that a sprite or the mouse is at along the vertical axis. |
## Unit 2 Loop-de-Loop
| Word | Definition |
| --- | --- |
| Loop | A type of block that causes other code to run multiple times in succession. A control flow statement that allows code to be executed repeatedly based on a given Boolean condition. |
| Nested Loop | A loop used inside the body of another loop. |
| Conditional | A block used to make a choice between executing two different chunks of code."If" statements. |
| Variable | A placeholder for some value. Types of variables: Global variables - apply to all sprites Sprite variable - applies to one sprite Script variable - parameter that applies to one script |
| Boolean Expression | A value (text, number, picture, etc.) that evaluate to true or false. |
| Boolean Operators | Boolean expressions that can be nested. |
| Function/Methods | Other programming languages, like Python or Java, use these terms to refer to the same idea as a custom block is reusable. |
| Truth Tables | A tool for evaluating the possible inputs and outputs of a Boolean expression. |
| Modeling |Building a system to simulate the behavior of a real-life phenomenon by simplifying or ignoring certain details. |
## Unit 3 Variables and Customization
| Word | Definition |
| ------------- | --------------------------------------------- |
| Abstraction | Removing the specifics that are not relevant in a given context. |
| Generalization | Combining a group of related concepts or processes into a single category. |
| Custom Blocks | Allow for one to make their own programming blocks. |
| Command Block | Puzzle-piece shaped block that executes a command (it causes an effect). |
| Reporter Block | Report a value, usually for use in another block's input slot. |
| Predicate Block | A hexagonal block that always returns a Boolean value (true or false). |
| Argument | Any area in a block that accepts user input, or another block. It could be a Boolean Block or a value placed inside of a variable or block. The value that is "passed into" a parameter of a custom block. |
| Say Block | The block gives its sprite a speech bubble with the specified text — the speech bubble stays until an another speech or thought block is activated, or the stop sign is pressed. |
## Unit 4 Lists
| Word | Definition |
| --- | --- |
| Programming List | Called an 'array' in most programming languages, this holds lots of values. |
| Lists Block | A block which controls a list. |
| Operator Block | A block that performs math functions and string handling. |
| List Element | A part of a list. |
| Traverse | Go through or travel across an item/list. |
| Transform | Create a new list based on the values of the old list. |
| Sequential Search Algorithm | A method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched. |
| Index Variable | Keeps track of where you currently are in a list. |
| Join Block | Links two values together and reports the result. |
| Contains Block | Checks an operator block for a particular variable. |
## Unit 5 Cloning
| Word | Definition |
| --- | --- |
| Cloning | A feature that allows a sprite to create a clone, or semi-duplicate, of itself, while the project is running. Clones of a sprite will be the same as the original or parent sprite but as a separate instance. Clones inherit the parent's scripts, costumes, sounds, and properties, yet they can then be modified.
| Global Variable | A variable that can be used by all of your sprites. |
## Unit 6 Final Project
| Word | Definition |
| ------------- | --------------------------------------------- |
| Scenario | A description of a set of interactions and/or tasks that describe a start-to-finish example of how a user might want to use the application |
| Wireframe | A high-level sketch of an application's user interface intended to help visualize layout, interactions, and transitions |
================================================
FILE: md-to-markdeep.cmd
================================================
@echo off & setlocal
echo %time%
robocopy /E .\ .\docs /XD %CD%\docs
cd .\docs
set sed="C:\Program Files\Git\usr\bin\sed.exe"
@REM -- Convert files at the root of the repo.
for %%f in (*.md) do (
@echo %%f
type >%%f.html markdeep-header.txt
%sed% >>%%f.html "s/\.md/.md.html/g" %%f
type >>%%f.html markdeep-footer.txt
del "%%f"
)
MOVE /Y README.md.html index.html
echo %time%
Exit /B
================================================
FILE: project_1.md
================================================
# Project 1: Animated storytelling
Students will use programming basics to implement an animated version of a story.
## Overview
Storytelling is a great way to convey culture. Some examples of storytelling are plays and nursery rhymes. Famous plays like those of William Shakespeare have been performed over centuries. Some have been adapted for modern times like West Side Story. A nursery rhyme is a short poem or song written for children. Though the term is typically applied to British or other English language poems, similar concepts exist in many world cultures. These short stories are generally meant to entertain and/or calm young children. Some are believed to have a hidden moral or meaning related to historical events, but many of these meanings are questionable.
### Emphasize with students
Digital tools and technologies can help capture stories in our own heritage, especially ones that might otherwise be lost, or difficult to write down.
In North America there are over 1000 indigenous communities, speaking more than 300 distinct languages, and a multitude of dialects. Students may be familiar with many places in North America that have been given names adapted from the original aboriginal language spoken in the area, such as Alaska ("peninsula"), or Ontario ("beautiful lake"), or Minnesota ("cloudy water"), or Seattle ("named after a Native American Chief"). Traditionally indigenous peoples relied on storytelling instead of the written language to pass down information and history.
Many other communities have used storytelling as a method to pass down history. And these stories were often shared from generation to generation by word of mouth from a relative or elder.
For this project, student may be encouraged to portray an animation that depicts some aspect of their own heritage, especially stories that have been passed down by word of mouth. Some ideas:
* Animation of how a city/town name came to be
* Animated map of an immigration journey
* A personal family story
## Reference
* [Traditional plays](http://www.npr.org/sections/ed/2015/07/30/427138970/the*most*popular*high*school*plays*and*musicals)
* [Nursey rhymes](http://en.wikipedia.org/wiki/Nursery_rhymes)
* [History of immigration to the US](https://www.youtube.com/watch?v=Fe79i1mu-mc)
* [Welcome to Canada: 150 years of immigration](https://www.youtube.com/watch?v=cX02bJ1pyw4)
## Details
### Behavior
You will create a short animation depicting a story of your choice.
* Whenever the green flag is clicked, your animation should display your chosen story line by line somewhere on the stage. (This should work correctly even if the last run was interrupted and restart.)
* As each line is shown, sprites should act out the story.
* The animation should advance on its own, but should do so at a pace that allows each action to complete and the viewer to read the line before the next line is shown and new action begins.
* In addition, the sprites must act out the story; you should not simply create a series of static backgrounds or costumes that show a stop*motion version of the story.
* Each line must be readable and must stay shown while the corresponding action is occurring.
* When the story ends, there should be a way for the user to replay the entire animation from the beginning.
* You are free to be as creative as you like with your choice of sprites and actions.
You may choose from the provided sprites or create your own. (You will not be graded on your artistic skills.) You may interpret the story literally or be clever with your depiction (but don't go too far). However, all sprites, behaviors, words, and animations must be school*appropriate.
If you choose a particularly long story, you may not need to animate the whole thing. Please check with your teacher if you think your idea is long enough for this.
### Implementation details
Fill out a [Planning Worksheet](https://github.com/TEALSK12/introduction-to-computer-science/raw/master/SNAP%20Program%20Design%20and%20Planning%20Worksheet.docx) for the above script. Make sure you consider all aspects of the script carefully.
As mentioned above, your animation must display the text and animate each line. Action must be performed by sprites and must consist of more than simply changing costumes. You must include the following components in your animation:
* At least two sprites that act in some way to contribute to the depiction of the story
* At least one sprite that moves
* At least one sprite that rotates
* At least one sprite that changes costume
* At least one sprite that is both hidden and shown at some point
Note that multiple of these requirements may be satisfied by the same sprite (e.g. the same sprite can both move and change costume), but you must have at least two separate sprites that act in the animation.
### Sharing
Stories are meant to be shared. Prepare to demo your animation with a partner, in front of the whole class, or with your family members. See if your audience can understand the meaning of your animation, and be prepared to provide some background information associated with the story. The animation can also be video captured and shared online.
### Emphasize with students (Continued)
### Curriculum competencies - Design sharing
As you create software, you will need to keep the end user, or final audience, in mind. Be thinking of what you are hoping to achieve or communicate when you are creating a piece of work, and be prepared to explain your thoughts behind the ideas.
## Grading rubric
| **Functional Correctness (Behavior)** | Points |
|:--|--|
| Animation depicts a story | 2 |
| Story is shown one line at a time | 2 |
| Each line is accompanied by sprites depicting the story, and all action is related to the current line | 3 |
| Clicking green flag starts animation from the beginning | 1 |
| Animation progresses at a reasonable pace | 2 |
| User is able to restart animation when it concludes | 2 |
|**Total** | **12** |
| **Technical Correctness (Implementation)** | |
| script shows good creativity and effort | 2 |
| At least two sprites participate in the action | 2 |
| At least one sprite moves | 1 |
| At least one sprite rotates | 1 |
| At least one sprite changes costume | 1 |
| At least one sprite hides and/or appears | 1 |
| **Total** | **8** |
| **Project total** |**20** |
|
================================================
FILE: project_2.md
================================================
# Project 2: Pong
Students will implement a well-written and engineered version of the classic arcade game Pong.
## Overview
In 1972, when video games were still very new and relatively unknown, a new game took the world by storm. A simple simulation of tennis using two-dimensional graphics, minimal sounds, and extremely basic controls, Pong became the first arcade game to achieve widespread popularity and is credited as the genesis of the modern video game industry. Today, the game has been played, remade, spun-off, and referenced innumerable times and it remains, to many, the single most identifiable and recognizable game in the history of video games.
## Details
### Behavior
#### Gameplay
Pong is played by two players each controlling a paddle with the goal of defending their end of the "field." A ball begins play in the middle of the screen and, at the start of each round, moves in a random direction. The ball bounces off the upper and lower edges of the field and the players' paddles. Each time the ball bounces off a paddle, its speed increases by a small amount. When the ball bounces off a paddle, its direction is reversed with a small random variation to add unpredictability to the game.
#### Scoring
If the ball touches the left or right edge of the field, a point is scored for the opponent of the player who was defending that edge and the ball resets to the middle of the field. When one player reaches 5 points, the game is over and that player is the winner. The winner is announced on the screen and the players are given the opportunity to start a new game.
#### Player control
Paddles are positioned a short distance away from the side they are defending, and can only move up and down, not side to side. Each player should have two keys to control the movement of their paddle: one for up, and one for down. Paddles move at a set speed that is the same for both players. The player on the left will control their paddle with the 'w' and 's' keys. The player on the right will use the up arrow and down arrow keys.
### Required checkpoints
#### Checkpoint 1
Players can control paddles; the ball starts in the middle, moves in a random direction, and bounces
#### Checkpoint 2
The ball speeds up when it hits a paddle, and resets to the middle when it hits the left or right edge
#### Final due date
A point is scored when the ball hits the edge on the opponent's side of the field; the game ends when one player reaches five points; players can start a new game after the game ends
## Planning worksheet
Part of the design process is planning. The Pong planning worksheet is an example of how to plan. Fill out the planning worksheet first before writing any scripts.
## Grading rubric
| Functional correctness (behavior) | Points |
| :------------------------------------------------------------------------------------ | :--------- |
| Players can control paddles with required keys | 2 |
| Ball begins play at middle of field at start of game and after each point | 3 |
| Ball bounces correctly off upper and lower edges and paddles | 4 |
| Ball increases in speed each time it bounces off a paddle | 3 |
| A point is scored for the opponent each time the ball touches the left or right edge | 3 |
| Game ends when one player reaches five | 2 |
| Winning player is shown when game ends | 1 |
| Players can begin a new game | 1 |
| **SubTotal** | **19** |
| **Technical correctness** (implementation) | |
| Gameplay is smooth, polished, and intuitive | 3 |
| Program shows good creativity and effort | 2 |
| Program is well-documented and exhibits good style | 2 |
| **Checkpoint** 1 | 4 |
| **Checkpoint** 2 | 4 |
| **Sub Total** | **15** |
| **Total** | **34** |
================================================
FILE: project_2_alternative.md
================================================
# Project 2: Pong remix
Students will implement a well-written and engineered to the Pong Project.
## Learning Objectives
Students will be able to ...
* Research, ideate, and apply personal interests to an application that includes:
* 1 or more moving sprites
* 2 or more user keyboard controlled sprites
* The sprites should interact in a way that allows the users to accumulate a score or value.
* Practice good style and conventions to create readable and maintainable program.
## Overview
Read over Lesson 2.7 and the pong project (project_2.md) file.
Your challenge is to create a project of your own that contains similar elements.
## Possible ideas
### Jurassic world
The Stegosaurus lived in the Upper Jurassic period around 155 to 145 million years ago. It is one of the most easily recognized dinosaurs, with its distinctive double row of kite-shaped plates on its back, and the long spikes on its tail. The armor was necessary as it lived with such meat-eaters as Allosaurus and Ceratosaurs. Learn more about dinosaur's [here](https://en.wikipedia.org/wiki/Category:Late_Jurassic_dinosaurs_of_North_America):
Imagine that a few Jurassic era dinosaurs are living in Alaska and now being endangered by our changing climate which has caused melting glaciers and sharp icebergs. These beautiful creatures roam around randomly, unaware of impending threats to their survival. Your goal is to move your truck (user-controlled-sprite1) to catch a dinosaur, so they can be safely transported to another habitat where they are safe to roam and survive. Meanwhile a moving iceberg (user-controlled-sprite2) is endangering the animals. When the dinosaur comes in contact with the iceberg, it is injured, and it's movement is affected...
### Penny catcher
The Penny, also called a one-cent piece, is a coin worth one one-hundredth of a dollar. Learn more about the Penny [here](https://en.wikipedia.org/wiki/Penny_(United_States_coin)):
Imagine that the Penny has been discontinued and after many years, hardly any young person has seen a penny. You go to your grandfather's attic to look for something, and by accident, spill several baskets of coins. Coins are flying around randomly. Your job is to catch the pennies with your basket as fast as possible. Some coins are falling into cracks in the wood. Some coins are not pennies (and you don't care about them). To complicate matters, a window washer pops by and he happens to be a numismatist (pronounced `noo-miz-ma-ticks`) someone who collects coins. He is also trying to catch the pennies, thus competing with you...
### On your own
Come up with your own creative idea!
## Required checkpoints
1. Create 2 or more user controlled sprites; Create 1 or more randomly moving sprite.
2. When the random-sprite touches certain wall/object it changes movement and/or direction.
3. Final due date: When the user-controlled sprite and random-sprite touch, something happens to the score or counter. When the score or counter reaches are certain value, or condition, the animation or game is over.
## Planning worksheet
Part of the design process is planning. The "pong planning worksheet" is an example of how to plan. Create a similar planning worksheet first before writing any script. Describe your own "game play" or animation rules using 1-2 paragraphs.
## Grading rubric
| **Functional Correctness (Behavior)** | Points |
| :-------------------------------------------------------- | :--------- |
| Players can control sprites with required keys | 2 |
| Random-sprite begins from a fixed location and returns there after certain event(s) | 3 |
| Random-sprite bounces correctly and moves within the window space | 4 |
| Random-sprite's movement changes after certain event(s) | 3 |
| Score is changed when some interaction happens between sprites | 3 |
| Animation ends when some score is achieved | 2 |
| Winner or conclusion is announced when animation ends | 1 |
| Users can begin a new animation | 1 |
| **Total** | **19** |
| **Technical Correctness (Implementation)** | |
| Animation or game logic is smooth, polished, and intuitive | 3 |
| script shows good creativity and effort | 2 |
| script is well-documented and exhibits good style | 2 |
| Checkpoint 1 | 4 |
| Checkpoint 2 | 4 |
| **Total** | **15** |
| **Project total** | **34** |
================================================
FILE: project_3.md
================================================
# Project 3: Advanced platform game
**Students will implement a side scrolling platform game, example Super Mario Bros.**
## Overview
Platform games are among the most widely recognized types of video games. Composing about one third of all console games at the peak of their popularity, platform games are characterized by their relative simplicity and by the common game play element of jumping across suspended platforms (hence the name) to avoid falling into a hazard. Platform games also typically include enemy characters, items that grant the hero special abilities ("power*ups"), and a "checkpoint" system that allows the player to restart from partway through a game or level when he or she dies.
### Big ideas
Personal design interests require the evaluation and refinement of skills; Tools and technologies can be adapted for specific purposes
Consider using the familiar platform game concept to not only entertain, but also educate or bring awareness to social concerns, an environmental issue, or some other context.
*Example 1:* In Pacific Northwest, there are many efforts exist to promote and guide a sustainable future of wild Pacific Salmon and their [habitat](https://www.fisheries.noaa.gov/species/chinook*salmonStudents). Students can create a game where the player can help salmon swim back to the stream where they were born, jumping upstream through ladders and fishways, battling hazards and enemies (predators, fishermen). Game play can introduce elements of education and awareness.
*Example 2:* The West Coast has been battling with more Wildfires than ever in [history](https://www.fireweatheravalanche.org/fire/). Students can create a game where a traveler drives through different towns, parks, and highways in your area, extinguishing hazards (cigarette butts, campfires), battling enemies (fires out of control, irresponsible tourist), enforcing fire bans, reporting fires, being a good neighbor, implementing home prevention, rescuing animals, and so on. Game play can introduce elements of geography (parks and forests, lakes and waters) and climate and terrain (temperature, animal habitats). Read more about wildfires in [here](https://fsapps.nwcg.gov/afm/activefiremaps.php):
How can the classic platform game be adapted to a specific purpose, cause, or context that interests you, or impacts your community?
## Behavior
### Game play
In a platform game, the player controls a hero who moves throughout the world attempting to reach an endpoint and/or accomplish a goal. Along the way, the hero encounters hazards such as pits (into which he or she can fall) and enemies (which can either move or be stationary). The hero has a finite number of chances (known as "lives") to achieve his or her objective. Each time the hero succumbs to a hazard, a life is lost and the player must try again.
#### The hero
The hero moves around the world under the player's control. The hero can perform three basic actions: move left and right (controlled by the arrow keys) and jump (by pressing the space bar). As the hero moves throughout the world, he or she is subject to gravity. This means that when the hero jumps or moves off the edge of a platform, he or she should return quickly to the ground (or another platform). The hero should never fall through a platform or the ground.
#### Screens
Your platform game will be a side*scrolling game. In this style of game, the scenery changes as the player moves horizontally across the screen. While many modern side*scrollers (including Super Mario Bros.) scroll smoothly as the player moves, our game will use a simpler system and consist of screens. Each screen represents one section of the overall world in which the game takes place. The hero should be able to move freely around each screen, but when the hero reaches the far right edge of a screen, the next screen should appear and the hero should be placed on the far left edge at the same height. Your game must include three distinct screens, and each screen must have one hazard.
#### Hazards and lives
Your script should include one of each of the following types of hazards:
* A falling hazard (a hole, pit, or other opening) into which the hero can fall if he or she does not jump to avoid it. Falling to the bottom of this hazard causes the hero to die.
* A stationary enemy that does not move, but that causes the hero to die if it is touched.
* A moving enemy that also causes the hero to die if it is touched, but that moves in some way.
Note that an enemy can be either a character (like Goombas in Super Mario Bros.) or an environmental hazard (such as spikes). When the hero dies by either falling down a falling hazard or touching an enemy, he or she loses a life. If the hero has lives remaining, one should be lost, used power*ups and defeated enemies should be reinstated, and the hero should be placed back at the left edge of the current screen. Otherwise, the game is over and a suitable message should be displayed.
#### Power Ups
While moving through the world, the hero may obtain power*ups that grant him or her special abilities. Examples can include increased jumping power, invulnerability, or the ability to destroy enemies. These abilities should be temporary, and there should be some visual indication when the hero has access to them. A power*up should appear as an item (sprite) in the world. The hero will obtain the abilities by touching the power*up sprite, at which point the power*up should disappear. Your game should include two distinct power*ups, one of which is required for the hero to win the game.
In addition, one of your power*ups should be hidden, meaning that the player must take some action before he or she can obtain its abilities. For example, in Super Mario Bros., Mario must jump into a special block to make many power*ups appear. A hidden power*up should not be visible until it is triggered by the hero, and the hero should not be able to obtain the abilities until the power*up is revealed.
#### Winning the game
There should be some clear end goal that, when achieved by the hero, ends the game in victory. This victory condition should be obvious even to a new player. You need not (and probably should not) provide written instructions to the player about this condition. Make sure to use easily identifiable visual indicators such as flags, doors, etc.
#### Reset button
At any point during game play, if the player presses the 'z' key, the game should reset to its initial state. The game state after pressing the 'z' key should be indistinguishable from when the game first begins. This means, among other things, that:
* the hero should return to the left edge of the first screen, lose all special abilities, and be given back all his or her lives
* any destroyed enemies should be reinstated and replaced in their original positions
* obtained power*ups should become available and revealed power*ups should be hidden
## Implementation details
### Design and creativity
Your script should be well designed and have a unifying theme, characteristic, or style. This can be a particular style of artwork, common colors, and/or related types of characters. In addition, you should show some effort and creativity in your design. Do not simply recreate an existing game or use only ideas put forth in this spec. Come up with some original concepts for characters, backgrounds, power ups, etc. and utilize them in your game. If you make us say "Wow!" it may even be worth some extra credit. Using copyrighted assets (including characters or artwork from an existing game), even with modification, is not allowed.
### Custom blocks
Throughout your script, you should use custom blocks to generalize common operations and increase the readability and maintainability of your script. Your script must include at least three custom blocks, at least one of which must take arguments. Do not limit yourself to just three blocks: use custom blocks (including arguments and reporters) anywhere you feel it will help your script. Part of your grade will be based on not only meeting the minimum usage requirement but also on your decisions of when, where, and how to use custom blocks.
### Documentation
In addition to functioning well, your script must be well documented and readable. This includes, but is not limited to, things such as:
* organizing your scripts so that they can be read and comprehended easily
* giving your sprites meaningful names
* naming and using your variables well
* including comments to describe the structure of your script and any particularly complex or unintuitive pieces of script
### Required elements
Your script must include, at a minimum, the following script elements:
* At least two variables
* At least one conditional (if or if-else) statement
* At least two messages, one of which must be received and responded to by multiple sprites
### Peer feedback
As part of the software development experience on this project, you will participate in a peer review with one or more of your classmates. Near the end of the project, you will play another student's game and provide him or her with notes and comments. Your partner(s) will also play your game and offer the same feedback. Describe to your partner what parts of the game you liked. You should offer suggestions for features that could be improved or changed as well as look for bugs in the script you are reviewing. Keep your comments constructive and professional! Don't just point out things you don't like—explain your thinking and propose solutions. Also, restrict your comments to things that can be reasonably addressed. Do not tell your partner that he or she made a poor choice of theme and should start over, for example.
After receiving your peer feedback, you should consider the comments carefully and respond. You will be expected to turn in the feedback provided to you and identify ways in which you modified your game in response to the feedback you received.
#### Curriculum competencies - design sharing
As you create software, you will need to put yourself in the end*user's position, and imagine yourself using the software. At the same time, providing objective, critical analysis and feedback of other people's work will not only benefit others, but also help you in your own design work. Being able to welcome, and provide, feedback are essential skills for a software developer.
### Required checkpoints
1. Screens should be designed; the hero should be able to move and jump; gravity should work; reset button should be functional
2. Hazards and enemies should be present; death should work properly.
3. Lives, power*ups, and victory should be implemented; all other required script components must work
## Grading rubric
| **Functional correctness (behavior)** | **Points** |
| :-- | :-- |
| Left arrow, right arrow and space bar control hero's movement. Hero does not move through walls. | 2 |
| Hero is subject to gravity, and does not fall through platforms. | 2 |
| Game consists of three screens. | 1 |
| Game contains One falling hazard (pit), one stationary enemy, and one moving enemy. | 3 |
| Player loses a life when falling down the falling hazard or touching an enemy. Hero restarts on current screen after death. | 2 |
| Player starts with three lives and game ends when player is out of lives. | 2 |
| Game contains two power-ups, one of which is hidden and one of which is necessary to win the game. | 3 |
| Hero has a clear goal to win the game. | 1 |
| Game play is clear and intuitive, even to a brand new player. | 1 |
| Game resets when the 'z' key is pressed. | 2 |
| **Total** | **19** |
| **Technical Correctness (Implementation)** | |
| Well designed visually and has a consistent theme. | 2 |
| Shows good creativity and effort. | 2 |
| Well documented and exhibits good style. | 2 |
| Includes at least two variables. | 2 |
| Includes at least two messages, at least one of which is received and reacted to by multiple sprites. | 2 |
| Includes at least one conditional statement. | 1 |
| Includes at least three custom blocks, at least one with arguments. | 4 |
| Custom blocks are used where appropriate. | 2 |
| Provide valuable test feedback to at least two other students. | 2 |
| Test feedback from at least two other students. | 2 |
| **Checkpoint 1** | **2** |
| **Checkpoint 2** | **4** |
| **Total** | **27** |
| **Grand total** | **46** |
================================================
FILE: project_3_platform_game_easy.md
================================================
# Project 3: Platform game
Adapted from Forest Ridge High School's Mario project.
**Students will implement a side-scrolling platform game For Example, Super Mario Bros.**
## Overview
Platform games are among the most widely recognized types of video games. Composing about one third of all console games at the peak of their popularity, platform games are characterized by their relative simplicity and by the common gameplay element of jumping across suspended platforms (hence the name) to avoid falling into a hazard. Platform games also typically include enemy characters, items that grant the hero special abilities ("power-ups"), and a "checkpoint" system that allows the player to restart from partway through a game or level when he or she dies.
## Details
### Controllable sprite
Your script should have a "Mario" sprite. It does not necessarily need to look like Mario (a simple stick figure will suffice). Mario should respond to user input. Specifically:
* Mario should clearly “face” the right when you push the right arrow key
* Mario should clearly “face” the left when you push the left arrow key
* Mario should perform an animated "in-place" walk when you hold left or right arrow key
* Mario should jump based on some input (you can decide the key or mouse click)
### Moving scenery sprites
You should have scenery sprites that move based upon Mario’s traveling on the level. It is up to you to decide the level scenery, but you should meet the following requirements:
* There should be at least two scenery sprites (Example: A mountain and a tree)
* You should layer these sprites relative to Mario and each other. For example, Mario should always be “in front” of any background scenery sprites
* Scenery sprites move relative to Mario as he moves. For example, when you hold down the right arrow key, the background sprites should move from right to left in the stage.
* Following with the layers, scenery sprites should move at different speeds so that one seems farther away. For example, a faraway mountain should move more slowly than a nearby tree.
* Scenery sprites should roll over/re-appear when they hit the edge of the stage. For example, when Mario is walking to the right, the scenery Sprites should re-appear on the right side of the stage when they roll off the left.
### On-ground enemy
There should be an on-ground enemy for Mario to contend with. Specific criteria here include:
* There is at least one on-ground enemy.
* The enemy sprite moves towards Mario, independent of whether Mario is moving (e.g. regardless of whether the user is pressing an arrow key).
* The enemy sprite reappears/rolls-over when he hits the edge of the stage.
* The enemy sprite is animated when he is moving towards Mario.
* If Mario does not jump he runs into the enemy and the game ends with an appropriate message Hint: you can use the `stop all` block to end all scripts.
* It should be possible for Mario to jump over the enemy.
## Programming habits
We will again look for you to incorporate good programming habits in your script:
* Using Start and Stop blocks.
* Making sure you initialize state appropriately so that your script is repeatable.
* Add comments to your script so it is easy to understand.
* Always keep in mind all Good Programming Skills you’ve been taught.
## Additional extensions
Once you complete the above, you can extend your script. Some suggestions:
* Include flying enemies for Mario to dodge or duck
* Keep score based on how many objects Mario gets by [Hint: Use a variable and show it on the screen]
* Have Mario jump to ‘grab’ an object that offers Mario extra points or more powerful abilities (such as jumping higher or not being killed when he runs into an enemy). The objects must appear at random times and move smoothly as Mario runs
**We will demo the most interesting projects in class, so be creative!**
## Grading rubric
The detailed list for what we will use to grade your projects is below. Please review your projects before submitting to be sure you meet all of them. If you have any questions on whether you meet a requirement, please ask us!!
|Requirement | Points |
|:------------|:-------|
| Mario turns to the right on right arrow key | 5 |
| Mario turns to the left on left arrow key | 5 |
| Mario performs an in-place animated walk if you hold down either arrow key | 5
| Mario jumps based on some input | 5 |
| There are least two scenery sprites | 5 |
| Scenery sprites are layered with Mario (e.g. appropriate layering blocks are in your script) | 5 |
| Scenery sprites move based on Mario’s movement | 5 |
| Scenery sprites move at different speeds (e.g. far away versus near) | 5 |
| Scenery sprites roll over when the fall of the stage | 5 |
| There is at least one on-ground enemy | 5 |
| Enemy sprite always moves towards Mario | 5 |
| Enemy sprite re-appears/rolls over correctly | 5 |
| Enemy sprite is animated when it moves | 5 |
| If Mario does not jump, he runs into the enemy and the game ends nicely and properly | 10 |
| Mario can jump over the enemy | 5 |
| *Good programming #1:* script has clear start and stop | 5 |
| *Good programming #2:* script is repeatable and initializes state correctly | 5 |
| *Good programming #3:* Use of comments in your script | 5 |
| *Good programming #4:* General skills you’ve been taught | 5 |
| *Good programming #5:* Custom blocks used to break down script into logical parts | 5 |
| **Extra Credit:** Include flying enemies for Mario to dodge or duck | 5 |
| **Extra Credit:** Keep score based on how many objects Mario gets by | 5 |
| **Extra Credit:** Have Mario jump to ‘grab’ an object that offers Mario extra points or more powerful abilities. The objects must appear at random times and move smoothly as Mario runs | 10 |
| **Extra Credit:** Create Your Own Extension | 0-10 |
| **TOTAL POINTS** | **105** (135 Possible with all the extra credit) |
================================================
FILE: project_4.md
================================================
# Project 4: Guess my word
Students will implement a "Guess my word" word game.
## Overview
In Guess My Word, one player (the "chooser") chooses a secret word and another player (the "guesser") attempts to guess the word one letter at a time. If a guessed letter appears in the word, all instances of it are revealed. If not, the guesser loses a chance. If the guesser figures out the secret word before he or she runs out of chances, he or she wins. If not, the player who chose the word wins. Chances are tracked using a figure drawing of your choice. You can build a bear or build an ice cream cone, or disassemble a snowman, be creative. The figure is drawn one part at a time, and the guesser loses when the entire figure has been drawn or disappears. This game is also the basis for the TV game show Wheel of Fortune.
### Behavior
#### Game play
In this implementation of Guess my word, the computer will take on the role of the "chooser" and the human player will be the "guesser." The computer will secretly choose a word from a list (see below) and show the player how many letters are in the word by displaying a sequence of blanks (underscores). Then, the computer will begin asking for guesses. If the player guesses a letter that is in the secret word, all blanks representing an instance of that letter should be replaced by the letter. If the guessed letter is not in the word at all, the player should lose a chance and a new part of the figure being built should appear or disappear if figure is being disassembled. If the player guesses a letter he or she has already guessed, he or she should not lose a chance, even if that letter is not in the word. If the player guesses all letters in the word, he or she wins. If the figure being built is completed, the player loses. In either case, the secret word should be revealed after the game is over.
#### Sprites
Your game will need to include at least three sprites: the figure being built or disassembled, a "host" sprite that asks the player for a guess and informs him or her whether the guess is correct, and an "assistant" sprite that tells the player the status of the secret word. You may use more sprites if you think they are appropriate. The host and assistant should have clear roles and should never do each other's job.
#### Word status
As the game is played, the player should be shown the current guessed status of the secret word. Letters that have been correctly guessed should be shown in the correct locations. Unguessed letters will appear as blanks. At the beginning of the game, no letters will have been guessed, and the only information shown to the player will be a sequence of blanks, with one blank for each letter in the secret word. As the player guesses letters correctly, blanks representing guessed letters should be replaced by those letters. So, for example, if the secret word is "screwdriver" and the player has guessed `e`, `s`, `r`, and `d`, the current word status would be: `s _ r e _ d r _ _ e r`.
#### Chances
The player will have six "chances" to guess the word. Guessing a correct letter does not cost a chance. Each missed chance will cause a new piece of the figure being built to appear or disappear if figure is being disassembled. The six pieces will depend on the figure you choose. Example 1, a snowman can have the following parts: head, eyes, left arm, right arm, middle snowball, and bottom snowball. Example 2, a bear can have the following parts: head, body, left arm, right arm, left leg, and right leg. Example 3, an ice cream cone can have the following parts: cone, 2 scoops of ice cream, fudge, sprinkles, and a cherry. If you would like to be more creative with the appearance, feel free to do so. No matter what your figure looks like, though, it should include these six pieces and no more.
#### Game end
The game can end in one of two ways:
* If the player has guessed the complete secret word, he or she wins.
* Otherwise, if the player has run out of chances and the complete figure has been drawn, or disassembled as in the Snowman sample solution the player loses.
In either case, when the game ends the host should stop asking for guesses. The host should inform the player whether he or she won or lost, and the assistant should reveal the entire secret word.
#### Video example
Here is a sample of a simple version of the game being played - [https://youtu.be/H3djon837cc](https://youtu.be/H3djon837cc)
### Implementation details
#### Word list/secret word
You will be provided with a list of words from which the secret word should be chosen for each game. Instructions for importing the word list:
* To import the list, set a variable "imported words" to be a list.
* [Download and save](wordlist.txt) as a text file on your computer.
* Click the checkbox on the "imported words" variable so that it is visible on the stage.
* Right click on the stage image to find the 'import...' command. Select the correct file to import.
* Set another variable to be a list of words by splitting the imported words by line.

#### Documentation
In addition to functioning well, your script must be well-documented and readable. This includes, but is not limited to, things such as:
* organizing your scripts so that they can be read and comprehended easily
* giving your sprites meaningful names
* naming and using your variables, lists, and custom blocks well
* including comments to describe the structure of your script and any particularly complex or unintuitive pieces of script.
#### Required elements
Your script must include, at a minimum, the following script elements:
* At least two lists, once of which must be used to track guessed letters
* Custom blocks as appropriate, including arguments and reporters
## Required checkpoints
1. Be able to select a secret word, keep track of which letters have been guessed, determine if each letter guessed is in the secret word or not
2. Be able to announce the current status of the word, showing letters that have been guessed and blanks for other letters.
3. Be able to play a full game of Guess My Word, identify correct and incorrect letters, display the figure, and inform the player whether they have won or lost.
## Grading rRubric
| Functional correctness (behavior) | Points |
| :------------------| :---------- |
| Computer randomly chooses a secret word | 1 |
| Host repeatedly asks for a letter and announces whether that letter is in the secret word | 2 |
| Assistant displays the correct secret word status after each guess | 4 |
| Player loses a chance and a piece of the figure appears when a guess is incorrect | 3 |
| Host informs player when he or she guesses a letter that has already been guessed; player does not lose a chance | 2 |
| Game ends with player victory if the entire secret word is guessed | 2 |
| Game ends with player defeat if the player runs out of chances | 2 |
| Secret word is revealed when game ends | 1 |
| **Subtotal** | **17** |
| Technical correctness (implementation) | |
| script is well-designed visually and has a consistent theme | 2 |
| script is well-documented and exhibits good style | 2 |
| script shows good creativity and effort | 3 |
| script includes at least two lists | 2 |
| script uses custom blocks with arguments and reporters appropriately | 2 |
| script tracks guessed letters using a list | 2 |
| Obtain and respond to playtest feedback from a parent or guardian | 2 |
| Checkpoint 1 (4/30) | 4 |
| Checkpoint 2 (4/30) | 4 |
| **Subtotal** | 19 |
| **Total** | **40** |
================================================
FILE: project_5.md
================================================
# Project 5 - Space Invaders
Students will implement a version of the classic arcade game _Space Invaders_.
## Overview
Originally released in 1978, Space Invaders was one of the modern video games and is often credited with popularizing the video game industry. In addition to being a vastly popular arcade game, the 1980 version for an early Atari system helped game consoles achieve the mainstream status they maintain today. Because of this, the characters and gameplay style of Space Invaders are often used to represent the video game industry as a whole. You can play an [online version](https://www.classicfreearcade.com/flash-game/21755/space-invaders.html). Our game will have some differences from the classic version, but will maintain the key aspects of gameplay.
## Behavior
### Sprite
Your implementation of Space Invaders will include at least three main sprites: the **player**, **invaders**, and **projectiles**.
* The **player** moves along the bottom of the stage attempting to destroy invaders by firing projectiles. The player can move left and right only (controlled by the arrow keys), not up and down. The player fires when the space bar is pressed. The player begins with three lives and loses a life each time an invader touches him or reaches the bottom of the stage.
* **Invaders** begin at the top of the stage and slowly move towards the bottom in a grid formation. Invaders move from side to side across the stage, bouncing off the left and right edges. Each time an invader bounces off an edge, it should move down by the height of one invader. When an invader is hit by a projectile, it is destroyed, and should disappear from the stage.
* **Projectiles** are fired by both the player and the invaders. The player fires a projectile when the user presses the space bar, while the invaders fire randomly. A projectile should originate at the position of the sprite that fired it and move quickly up or down the stage until hitting either an invader, the player, or the edge of the stage. If the projectile hits an invader or player, that invader or the player should be destroyed. Upon hitting either an edge of the stage or another sprite, the projectile should then disappear. Only one invader may fire a projectile at time, and another invader may not fire until the projectile has disappeared. The player has an unlimited supply of projectiles, but may only shoot _three_ at a time.
### Starting the game
When the green flag is clicked, the game should initialize and a welcome screen should be displayed to the user (think of this as inserting a coin into an arcade machine). The welcome screen should include a “Start Game” button that, when clicked, begins the actual game. The welcome screen should also display some basic information about the game.
### Lives and game over
The player begins the game with three lives, and loses a life each time an invader either touches the player or reaches the bottom of the stage. When the player loses a life, the game should halt momentarily. All invaders and projectiles should disappear, and there should be a visual indication that the player has lost a life (message, change in costume, etc.). After a brief delay, the game should restart with all invaders at the top of the stage and the player having one fewer life. When the player loses its final life, the game ends and a “Game Over” message should be displayed. A “New Game” button should then be displayed that, when click, restarts the game from the beginning.
### Levels
Each time the player manages to destroy all the invaders on the screen, he or she completes a level. When a level is completed, a “Level Cleared” message should be displayed. Then, after a brief delay, the next level should begin. Each successive level should be made more difficult by increasing the speed at which the invaders advance down the stage and the frequency at which they fire projectiles.
### Score
Each time the player destroys an invader, points should be earned. Scoring should start at 100 points per invader in the first level, and increase by 50 points per invader in each successive level. So, for example, each invader in level 2 is worth 150 points, each in level 3 is worth 200 points, at so on. The player’s score should be displayed on the stage throughout the game and be featured on the “Game Over” screen.
### Implementation details
#### Documentation and style
As with all previous projects, your script must be well-written, well-documented, and readable. This includes, but is not limited to:
* organizing your scripts so that they can be read and comprehended easily.
* giving your sprites meaningful names.
* naming and using your variables, lists, and custom blocks well.
* including comments to describe the structure of your script and any particularly complex or unintuitive pieces of script.
* separating master sprites from clones, and cleaning up clones that are finished (see below).
#### Cloning
The invaders and the projectiles should be implemented using prototyping. A single master sprite should be implemented for each type and clones should be created each time a new instance of the sprite is needed. The master sprites should be hidden throughout the script and should not take part in gameplay.
#### Required elements
Your script must include the following elements:
* At least three variables
* At least two custom blocks, at least one of which must take an argument
## Required Checkpoints
1. Have the player and a single invader moving correctly.
2. Be able to clone invaders and have the entire group move correctly.
3. Be able to fire projectiles from both the player (when the space bar is pressed) and the invaders (randomly).
## Grading rubric
|Functional Correctness (Behavior)| Points |
|:--|:--|
|Welcome screen containing game info displayed green flag clicked| 1 |
|Start button displayed and game starts when clicked |1 |
|Keyboard control of player (including shooting) |1 |
|Multiple invaders |2 |
|Invaders attack in formation |2|
|Invaders die when hit by projectile |1 |
|Player earns s when an invader is killed |1 |
|Player fires projectiles correctly |2 |
|Invaders fire projectiles correctly | 3 |
|Player loses life and level resets when player or bottom of stage touched by invader |2 |
|Game ends and new game screen appears when player is out of lives |1 |
|Level changes when all invaders are destroyed |1 |
|Invaders speed up in each level |1 |
| values increase each level |1 |
|**SubTotal**| **20** |
|**Technical Correctness (Implementation)** | |
|script is well-documented and shows good style |2 |
|script shows creativity and effort |2|
|Invaders and projectiles are implemented using cloning | 3 |
|script operates correctly under all normal conditions (aka “No bugs”) |3 |
|script uses at least three variables |2 |
|script includes two custom blocks, one of which accepts arguments |3 |
|Check 1 | 5 |
|Check 2 | 5 |
|Check 3 | 5 |
|**SubTotal**| **30** |
|**Total**|**50**|
================================================
FILE: project_6.md
================================================
# Project 6 - Final project
Students will design, plan, and implement a medium- to large-scale final project of their own choosing.
## Overview
During this course, you have learned a huge amount about computer science and scripting in general. In this project, you will put all of that knowledge, along with some new skills you will develop around design, planning, and project management, to build a relatively large and complex application that _you_ choose. You can create almost anything you want and should ultimately produce a project that is interesting, useful, and challenging.
## Details
### Project phases
This project will be significantly larger in scope than any of your previous assignments, so there will be more design and planning than before. More importantly, though, rather than be given a well-defined specification, _you_ will be setting the requirements for your project by coming up with an idea, fleshing out the details, and defining the steps necessary to complete your script.
To help you through this process, there will be several steps to this project. You must complete **all** of the steps **in order** for your project to be successful. In fact, _half_ of your grade will be based not on how well your script works, but on how well you completed the design and planning process.
The phases of the project will be:
* _Brainstorming_ - coming up with as many possible project ideas as you can.
* _Pitching_ - choosing a few ideas and developing a short description of what the project will entail.
* _Review_ - getting feedback from your peers and instructors on your pitches and choosing one.
* _Scenario Definition_ - listing out the features the project will need and what they will look like.
* _Wireframing_ - drawing simple sketches of what the various "screens" in your script will look like.
* _Specification_ - fleshing out all the specifics of how the project will work.
* _Scheduling_ - listing the programming tasks necessary to complete your project and estimating how long each will take.
* _Development_ - writing the script for your project by following the spec and schedule created in the previous steps.
### Progress tracking
In phase vi, you will complete a [final project plan organizer][] and in phase vii you will complete a [final project development plan][]. These documents will be your guides in the development phase and will help you stay on track and aware of your progress. Throughout the development phase of the project, you will be expected to keep your spec and plan up-to-date and make adjustments as you get ahead or behind, as requirements change, or as tasks or features get prioritized. At the end of each coding day, your spec and plan documents should be updated to reflect the current state of your project, and you will check in with an instructor at least once a week to make sure things are on track.
### Implementation requirements
#### Complexity and creativity
Your final project should be sufficiently complex and large-scale to push your limits as a programmer, but not so sophisticated that you are not able to complete it in the time allotted. The complexity in your project should come from the _design_ and the _algorithms_ and not from the _script_. (That is, you cannot meet the complexity requirement simply by writing a lot of script. Your script must be challenging or interesting in some meaningful way.) In addition, you should not add complexity by introducing peripheral elements, such as graphics or sound effects. In addition, one of the main goals of this project is to allow you to unleash your creativity and allow you to create something of interest to you. To achieve this, your project must show some level of creativity or personalization that makes it your own. Simply creating your own version of some existing application will not fully meet this requirement. For both the complexity and creativity requirements, you should talk to the instructors early and often to ensure your project is in line with our expectations.
#### Documentation and style
As with all previous projects, your script must be well-written, well-documented, and readable. Writing script with good style is always a good idea, but in a project of this size and scope, following style guidelines will help you keep your thoughts organized and make it easier to keep track of your progress, pick up where you left off each day, and find and fix bugs. In particular, though this is certainly not a comprehensive list, pay attention to the following:
* Organizing your scripts so that they can be read and comprehended easily.
* Giving your sprites, variables, lists, and custom blocks descriptive and meaningful names.
* Using the right type of variable (global, local, sprite) for each situation.
* Including comments to describe the structure of your script and track your progress.
* Avoiding redundancy with good use of loops, custom blocks, and/or lists.
* Practicing good procedural decomposition and abstraction .
#### Required elements
In order to show that you have fully mastered all the skills from the course, you project must include at least the following:
* A clear way to start the script, and clear prompts or instructions for any user interaction.
* At least one loop, variable, custom block, and list, and more as necessary or appropriate.
* Each these must be used correctly and meaningfully (creating a list that contains a single element just to meet this requirement will not earn points).
* At least one user interaction
* This can be prompting for information using ask, responding to key presses or mouse movements, or any other action that keeps the user involved.
#### Required Checkpoints
At least three times during the project period, and at least once each week, you should check in with an instructor to ensure that your project is on track, that you are meeting the project requirements, and that you have the answers to any questions that might have arisen during your work. The course staff will work with you to set up a schedule for these checkpoints, but it is your responsibility to ensure that the meetings take place.
## Grading rubric
|Design Phases| Points |
|--|--|
|Brainstorming| 2 |
|Project Pitches |6 |
|Feature List |4 |
|Wireframes/Sketches |4 |
|Project Organizer (Specification) |8 |
|Implementation Plan |8 |
|Spec and plan are updated throughout project |8 |
|**Total** | 40 |
|**Implementation** | |
|Project is appropriately complex and creative |8 |
|script is well-documented and shows good style |4 |
|script uses elements effectively, including all required elements | 8 |
|Final product meets all requirements and goals laid out in spec |8 |
|Checkpoint 1 | 4 |
|Checkpoint 2 | 4 |
|Checkpoint 3 | 4 |
|_Total_ | 40 |
|**_Total_**|**80**|
[Final Project Plan Organizer]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Plan%20Organizer.docx?raw=true
[Final Project Development Plan]: https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Unit%206%20Word/Final%20Project%20Development%20Plan.docx?raw=true
================================================
FILE: quiz_1.md
================================================
# Unit 1 Quiz Basics
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md) for further instructions.
================================================
FILE: quiz_2.md
================================================
# Unit 2 Quiz Loops
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md) for further instructions.
================================================
FILE: quiz_3.md
================================================
# Unit 3 Quiz Customization
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md) for further instructions.
================================================
FILE: quiz_4.md
================================================
# Unit 4 Quiz Lists
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md) for further instructions.
================================================
FILE: quiz_5.md
================================================
# Unit 5 Quiz Cloning
## Learning Objectives
Formative assessment on student progress: To gauge student understanding, the addition of Unit quizzes has been added. These are intended as low stakes formative assessments that allow students to visit topics at the end of the unit to reinforce learning. They are open book giving students incentive to take good notes. Ideally the quizzes are non-graded and students would reflect on the answers they got wrong in order to learn from their mistakes.
## Materials/Preparation
- TEALS Classes can access the Quizzes by logging into the TEALS Dashboard and navigating to "Additional Curriculum Materials" -> "Intro CS Curriculum".
- You will need to log in using incognito mode on the browser.
- See [Additional Curriculum Resources](additional_curriculum_resources.md) for further instructions.
================================================
FILE: startercode.md
================================================
# Lesson Starter Code
## Unit 1
## Unit 2
[Lesson 2.1](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%202.1%20Example)
## Unit 3
Lesson 3.3 - [Arguments example](http://snap.berkeley.edu/snapsource/snap.html#present:Username=brettwo&ProjectName=Lesson%203.3)
## Unit 4
## Unit 5
## Unit 6
================================================
FILE: student_notes_01.md
================================================
# Student notes: The First Day
================================================
FILE: student_notes_02.md
================================================
Student Notes: Algorithms
================================================
FILE: styles/curriculum.css
================================================
body#md {
position: absolute;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
text-align: left;
left: 200px;
right: 0px;
margin: 0;
padding: 20;
max-width: none;
color: #555;
font-size: 15px;
padding-right: 20px;
overflow-x: hidden;
text-overflow: ellipses;
text-align: left;
}
.md .longTOC {
width: 200px;
display: block;
border-right: 3px solid #008575;
overflow-y:scroll;
font-size: 15px;
font-family: inherit;
background: #FFF;
position: absolute;
top: 90px;
left:-190px;
bottom:0px;
margin: 0px;
padding: 0px;
}
.scrolled .md .longTOC {
position: fixed;
left: 0px;
top: 0px;
border-left: 10px solid #fff;
}
/* no numbering of headings */
.md h1:before, .md h2:before, .md h3:before, .md h4:before, .md h5:before, .md h6:before { content: none; }
.md .longTOC a {
color: #000;
}
.md .tocHeader, .md .tocNumber {
display: none;
}
.md a,
.md div.title, contents, .md .tocHeader,
.md h1, .md h2, .md h3, .md h4, .md h5, .md h6,
.md .nonumberh1, .md .nonumberh2, .md .nonumberh3, .md .nonumberh4, .md .nonumberh5, .md .nonumberh6,
.md .shortTOC, .md .mediumTOC, .md .longTOC {
font-family: inherit;
}
.md div.title, .md h1, .md h2, .md h3, .md h4 {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-weight: 800;
}
.md h1, .md h2, .md h3, .md h4, .md h5, .md h6 {
color: #008575;
border-color: inherit;
}
.md h2, .md h3, .md h4 {
border: none;
line-height: 0%;
}
.md .tocTop {
display: inline;
}
.md div.title, .md div.subtitle {
text-align: left;
}
.md div.title {
position: absolute;
top: -14px;
left:-200px;
right: 0px;
font-weight: 900;
padding-left: 10px;
padding-top: 20px;
padding-bottom: 20px;
text-shadow: 0px 0px 3px #008575;
background-color: #008575;
background-repeat: no-repeat;
background-position: top right;
background-size: contain;
color: #fff;
font-size: 45px;
z-index: 10;
}
.md div.afterTitles {
height: 90px;
}
/* tables; use fainter colors than regular markdeep style */
.md table.table {
font-size: 90%;
margin-right: 20px;
margin-left: 20px;
}
.md table.table th {
border: none;
background-color: #ccc;
color: rgba(0,0,0,.6);
}
.md table.table tr, .md table.table td {
border-color: #eee;
}
.md table.table tr:nth-child(even) {
background-color: #f4f4f4;
}
================================================
FILE: styles/pdf.css
================================================
/* CSS for pdf */
================================================
FILE: tools/create-book-Pandoc.cmd
================================================
@echo off
setlocal
REM -- Create output directory and set up target output file name
mkdir 2>nul build
set targetBook=intro-book-complete.md
REM -- We need the `sed.exe` tool; grab it from the user's Git install.
if not exist "%ProgramFiles%\Git\usr\bin" (
echo ERROR: Unable to find Git install for `sed.exe` tool.
exit /b 1
)
path %ProgramFiles%\Git\usr\bin;%path%
type >%targetBook% SUMMARY.md
REM -- For each file referenced in SUMMARY.md, add it to the target output Markdown file.
REM -- The following sed command extracts the file name from inside parentheses, and reverses path
REM -- slashes.
for /f "delims=" %%t in ('findstr -c:"(" SUMMARY.md ^| sed -e "s/^ *\* *\[.*\](\(.*\))$/\1/"
-e "s/\//\\\/g"') do (
echo %%t
echo.>>%targetBook%
type >>%targetBook% %%t
)
REM -- Normalize line endings to newlines.
move /y >nul %targetBook% %targetBook%.tmp
eol "\n" <%targetBook%.tmp >%targetBook%
del %targetBook%.tmp
echo.
echo Finished. You can find the resulting unified book in `intro-book-complete.md`.
================================================
FILE: tools/create-book.cmd
================================================
@echo off
setlocal
set sed="C:\Program Files (x86)\GnuWin32\bin\sed"
set chrome="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
for /r . %%f in (*.html) do (
%chrome% --headless --print-to-pdf="%%~pf%%~nf.pdf" --no-margins "%%f-md.html"
)
================================================
FILE: unit_0.md
================================================
# Unit 0
================================================
FILE: unit_0_tips.md
================================================
# TEALS Unit 0 Tips
## Snap! Tips
[Tip Numbers from Tips Document:](https://github.com/TEALSK12/introduction-to-computer-science/blob/master/Snap%20Tips.docx?raw=true) 0, 16, 23
================================================
FILE: unit_2.md
================================================
# Unit 2
================================================
FILE: unit_3.md
================================================
# Unit 3
================================================
FILE: unit_4.md
================================================
# Unit 4
================================================
FILE: unit_5.md
================================================
# Unit 5
================================================
FILE: unit_6.md
================================================
# Unit 6
================================================
FILE: wordlist.txt
================================================
abandon
ability
able
about
above
abroad
absence
absolute
absolutely
absorb
abuse
academic
accept
access
accident
accompany
accomplish
according
account
accurate
accuse
achieve
achievement
acid
acknowledge
acquire
across
action
active
activist
activity
actor
actress
actual
actually
adapt
addition
additional
address
adequate
adjust
adjustment
administration
administrator
admire
admission
admit
adolescent
adopt
adult
advance
advantage
adventure
advertising
advice
advise
adviser
advocate
affect
afford
afraid
after
afternoon
again
against
agency
agenda
agent
aggressive
agree
agreement
agricultural
ahead
aide
aircraft
airline
airport
album
alive
alliance
allow
ally
almost
alone
along
already
also
alter
alternative
although
always
amazing
among
amount
analysis
analyst
analyze
ancient
anger
angle
angry
animal
anniversary
announce
annual
another
answer
anticipate
anxiety
anybody
anymore
anyone
anything
anyway
anywhere
apart
apartment
apparent
apparently
appeal
appear
appearance
apple
application
apply
appoint
appointment
appreciate
approach
appropriate
approval
approve
approximately
architect
area
argue
argument
arise
armed
army
around
arrange
arrangement
arrest
arrival
arrive
article
artist
artistic
aside
asleep
aspect
assault
assert
assess
assessment
asset
assign
assignment
assist
assistance
assistant
associate
association
assume
assumption
assure
athlete
athletic
atmosphere
attach
attack
attempt
attend
attention
attitude
attorney
attract
attractive
attribute
audience
author
authority
auto
available
average
avoid
award
aware
awareness
away
awful
baby
back
background
badly
bake
balance
ball
band
bank
barely
barrel
barrier
base
baseball
basic
basically
basis
basket
basketball
bathroom
battery
battle
beach
bean
bear
beat
beautiful
beauty
because
become
bedroom
beer
before
begin
beginning
behavior
behind
being
belief
believe
bell
belong
below
belt
bench
bend
beneath
benefit
beside
besides
best
better
between
beyond
bike
bill
billion
bind
biological
bird
birth
birthday
bite
black
blade
blame
blanket
blind
block
blood
blow
blue
board
boat
body
bomb
bond
bone
book
boom
boot
border
born
borrow
boss
both
bother
bottle
bottom
boundary
bowl
boyfriend
brain
branch
brand
bread
break
breakfast
breast
breath
breathe
brick
bridge
brief
briefly
bright
brilliant
bring
broad
broken
brother
brown
brush
buck
budget
build
building
bullet
bunch
burden
burn
bury
business
busy
butter
button
buyer
cabin
cabinet
cable
cake
calculate
call
camera
camp
campaign
campus
cancer
candidate
capability
capable
capacity
capital
captain
capture
carbon
card
care
career
careful
carefully
carrier
carry
case
cash
cast
catch
category
cause
ceiling
celebrate
celebration
celebrity
cell
center
central
century
ceremony
certain
certainly
chain
chair
chairman
challenge
chamber
champion
championship
chance
change
changing
channel
chapter
character
characteristic
characterize
charge
charity
chart
chase
cheap
check
cheek
cheese
chef
chemical
chest
chicken
chief
child
childhood
chip
chocolate
choice
cholesterol
choose
church
cigarette
circle
circumstance
cite
citizen
city
civil
civilian
claim
class
classic
classroom
clean
clear
clearly
client
climate
climb
clinic
clinical
clock
close
closely
closer
clothes
clothing
cloud
club
clue
cluster
coach
coal
coalition
coast
coat
code
coffee
cognitive
cold
collapse
colleague
collect
collection
collective
college
colonial
color
column
combination
combine
come
comedy
comfort
comfortable
command
commander
comment
commercial
commission
commit
commitment
committee
common
communicate
communication
community
company
compare
comparison
compete
competition
competitive
competitor
complain
complaint
complete
completely
complex
complicated
component
compose
composition
comprehensive
computer
concentrate
concentration
concept
concern
concerned
concert
conclude
conclusion
concrete
condition
conduct
conference
confidence
confident
confirm
conflict
confront
confusion
congressional
connect
connection
consciousness
consensus
consequence
conservative
consider
considerable
consideration
consist
consistent
constant
constantly
constitute
constitutional
construct
construction
consultant
consume
consumer
consumption
contact
contain
container
contemporary
content
contest
context
continue
continued
contract
contrast
contribute
contribution
control
controversial
controversy
convention
conventional
conversation
convert
conviction
convince
cook
cookie
cooking
cool
cooperation
cope
copy
core
corn
corner
corporate
corporation
correct
correspondent
cost
cotton
couch
could
council
counselor
count
counter
country
county
couple
courage
course
court
cousin
cover
coverage
crack
craft
crash
crazy
cream
create
creation
creative
creature
credit
crew
crime
criminal
crisis
criteria
critic
critical
criticism
criticize
crop
cross
crowd
crucial
cultural
culture
curious
current
currently
curriculum
custom
customer
cycle
daily
damage
dance
danger
dangerous
dare
dark
darkness
data
date
daughter
dead
deal
dealer
dear
death
debate
debt
decade
decide
decision
deck
declare
decline
decrease
deep
deeply
deer
defeat
defend
defendant
defense
defensive
deficit
define
definitely
definition
degree
delay
deliver
delivery
demand
democracy
democratic
demonstrate
demonstration
deny
department
depend
dependent
depending
depict
depression
depth
deputy
derive
describe
description
desert
deserve
design
designer
desire
desk
desperate
despite
destroy
destruction
detail
detailed
detect
determine
develop
developing
development
device
devote
dialogue
diet
differ
difference
different
differently
difficult
difficulty
digital
dimension
dining
dinner
direct
direction
directly
director
dirt
dirty
disability
disagree
disappear
disaster
discipline
discourse
discover
discovery
discrimination
discuss
discussion
disease
dish
dismiss
disorder
display
dispute
distance
distant
distinct
distinction
distinguish
distribute
distribution
district
diverse
diversity
divide
division
divorce
doctor
document
domestic
dominant
dominate
door
double
doubt
down
downtown
dozen
draft
drag
drama
dramatic
dramatically
draw
drawing
dream
dress
drink
drive
driver
drop
drug
during
dust
duty
each
eager
early
earn
earnings
earth
ease
easily
east
eastern
easy
economic
economics
economist
economy
edge
edition
editor
educate
education
educational
educator
effect
effective
effectively
efficiency
efficient
effort
eight
either
elderly
elect
election
electric
electricity
electronic
element
elementary
eliminate
elite
else
elsewhere
embrace
emerge
emergency
emission
emotion
emotional
emphasis
emphasize
employ
employee
employer
employment
empty
enable
encounter
encourage
enemy
energy
enforcement
engage
engine
engineer
engineering
enhance
enjoy
enormous
enough
ensure
enter
enterprise
entertainment
entire
entirely
entrance
entry
environment
environmental
episode
equal
equally
equipment
error
escape
especially
essay
essential
essentially
establish
establishment
estate
estimate
ethics
ethnic
evaluate
evaluation
even
evening
event
eventually
ever
every
everybody
everyday
everyone
everything
everywhere
evidence
evolution
evolve
exact
exactly
examination
examine
example
exceed
excellent
except
exception
exchange
exciting
executive
exercise
exhibit
exhibition
exist
existence
existing
expand
expansion
expect
expectation
expense
expensive
experience
experiment
expert
explain
explanation
explode
explore
explosion
expose
exposure
express
expression
extend
extension
extensive
extent
external
extra
extraordinary
extreme
extremely
fabric
face
facility
fact
factor
factory
faculty
fade
fail
failure
fair
fairly
faith
fall
false
familiar
family
famous
fantasy
farm
farmer
fashion
fast
fate
father
fault
favor
favorite
fear
feature
federal
feed
feel
feeling
fellow
female
fence
fewer
fiber
fiction
field
fifteen
fifth
fifty
fight
fighter
fighting
figure
file
fill
film
final
finally
finance
financial
find
finding
fine
finger
finish
fire
firm
first
fish
fishing
fitness
five
flag
flame
flat
flavor
flee
flesh
flight
float
floor
flow
flower
focus
folk
follow
following
food
foot
football
force
foreign
forest
forever
forget
form
formal
formation
former
formula
forth
fortune
forward
found
foundation
founder
four
fourth
frame
framework
free
freedom
freeze
frequency
frequent
frequently
fresh
friend
friendly
friendship
from
front
fruit
frustration
fuel
full
fully
function
fund
fundamental
funding
funeral
funny
furniture
furthermore
future
gain
galaxy
gallery
game
gang
garage
garden
garlic
gate
gather
gaze
gear
gender
gene
general
generally
generate
generation
genetic
gentleman
gently
gesture
ghost
giant
gift
gifted
girl
girlfriend
give
given
glad
glance
glass
global
glove
goal
gold
golden
golf
good
government
governor
grab
grade
gradually
graduate
grain
grand
grandfather
grandmother
grant
grass
grave
gray
great
greatest
green
grocery
ground
group
grow
growing
growth
guarantee
guard
guess
guest
guide
guideline
guilty
habit
habitat
hair
half
hall
hand
handful
handle
hang
happen
happy
hard
hardly
hate
have
head
headline
headquarters
health
healthy
hear
hearing
heart
heat
heaven
heavily
heavy
heel
height
helicopter
hell
hello
help
helpful
here
heritage
hero
herself
hide
high
highlight
highly
highway
hill
himself
hire
historian
historic
historical
history
hold
hole
holiday
holy
home
homeless
honest
honey
honor
hope
horizon
horror
horse
hospital
host
hotel
hour
house
household
housing
however
huge
human
humor
hundred
hungry
hunter
hunting
hurt
husband
hypothesis
idea
ideal
identification
identify
identity
ignore
illegal
illness
illustrate
image
imagination
imagine
immediate
immediately
immigrant
immigration
impact
implement
implication
imply
importance
important
impose
impossible
impress
impression
impressive
improve
improvement
incentive
incident
include
including
income
incorporate
increase
increased
increasing
increasingly
incredible
indeed
independence
independent
index
indicate
indication
individual
industrial
industry
infant
infection
inflation
influence
inform
information
ingredient
initial
initially
initiative
injury
inner
innocent
inquiry
inside
insight
insist
inspire
install
instance
instead
institution
institutional
instruction
instructor
instrument
insurance
intellectual
intelligence
intend
intense
intensity
intention
interaction
interest
interested
interesting
internal
international
interpret
interpretation
intervention
interview
into
introduce
introduction
invasion
invest
investigate
investigation
investigator
investment
investor
invite
involve
involved
involvement
iron
island
issue
item
itself
jacket
jail
join
joint
joke
journal
journalist
journey
judge
judgment
juice
jump
junior
jury
just
justice
justify
keep
kick
kill
killer
killing
kind
king
kiss
kitchen
knee
knife
knock
know
knowledge
label
labor
laboratory
lack
lady
lake
land
landscape
language
large
largely
last
late
later
latter
laugh
launch
lawn
lawsuit
lawyer
layer
lead
leader
leadership
leading
leaf
league
lean
learn
learning
least
leather
leave
left
legacy
legal
legend
legislation
legitimate
lemon
length
less
lesson
letter
level
liberal
library
license
life
lifestyle
lifetime
lift
light
like
likely
limit
limitation
limited
line
link
list
listen
literally
literary
literature
little
live
living
load
loan
local
locate
location
lock
long
look
loose
lose
loss
lost
lots
loud
love
lovely
lover
lower
luck
lucky
lunch
lung
machine
magazine
mail
main
mainly
maintain
maintenance
major
majority
make
maker
makeup
male
mall
manage
management
manager
manner
manufacturer
manufacturing
many
margin
mark
market
marketing
marriage
married
marry
mask
mass
massive
master
match
material
math
matter
maybe
mayor
meal
mean
meaning
meanwhile
measure
measurement
meat
mechanism
media
medical
medication
medicine
medium
meet
meeting
member
membership
memory
mental
mention
menu
mere
merely
mess
message
metal
meter
method
middle
might
military
milk
million
mind
mine
minister
minor
minority
minute
miracle
mirror
miss
missile
mission
mistake
mixture
mode
model
moderate
modern
modest
moment
money
monitor
month
mood
moon
moral
more
moreover
morning
mortgage
most
mostly
mother
motion
motivation
motor
mount
mountain
mouse
mouth
move
movement
movie
much
multiple
murder
muscle
museum
music
musical
musician
must
mutual
myself
mystery
myth
naked
name
narrative
narrow
nation
national
native
natural
naturally
nature
near
nearby
nearly
necessarily
necessary
neck
need
negative
negotiate
negotiation
neighbor
neighborhood
neither
nerve
nervous
network
never
nevertheless
newly
news
newspaper
next
nice
night
nine
nobody
noise
nomination
none
nonetheless
normal
normally
north
northern
nose
note
nothing
notice
notion
novel
nowhere
nuclear
number
numerous
nurse
object
objective
obligation
observation
observe
observer
obtain
obvious
obviously
occasion
occasionally
occupation
occupy
occur
ocean
odds
offense
offensive
offer
office
officer
official
often
okay
once
ongoing
onion
online
only
onto
open
opening
operate
operating
operation
operator
opinion
opponent
opportunity
oppose
opposite
opposition
option
orange
order
ordinary
organic
organization
organize
orientation
origin
original
originally
other
others
otherwise
ought
ourselves
outcome
outside
oven
over
overall
overcome
overlook
owner
pace
pack
package
page
pain
painful
paint
painter
painting
pair
pale
palm
panel
pant
paper
parent
park
parking
part
participant
participate
participation
particular
particularly
partly
partner
partnership
party
pass
passage
passenger
passion
past
patch
path
patient
pattern
pause
payment
peace
peak
peer
penalty
people
pepper
perceive
percentage
perception
perfect
perfectly
perform
performance
perhaps
period
permanent
permission
permit
person
personal
personality
personally
personnel
perspective
persuade
phase
phenomenon
philosophy
phone
photo
photograph
photographer
phrase
physical
physically
physician
piano
pick
picture
piece
pile
pilot
pine
pink
pipe
pitch
place
plan
plane
planet
planning
plant
plastic
plate
platform
play
player
please
pleasure
plenty
plot
plus
pocket
poem
poet
poetry
point
pole
police
policy
political
politically
politician
politics
poll
pollution
pool
poor
popular
population
porch
port
portion
portrait
portray
pose
position
positive
possess
possibility
possible
possibly
post
potato
potential
potentially
pound
pour
poverty
powder
power
powerful
practical
practice
precisely
predict
prefer
preference
preparation
prepare
prescription
presence
present
presentation
preserve
president
presidential
press
pressure
pretend
pretty
prevent
previous
previously
price
pride
priest
primarily
primary
prime
principal
principle
print
prior
priority
prison
prisoner
privacy
private
probably
problem
procedure
proceed
process
produce
producer
product
production
profession
professional
professor
profile
profit
program
progress
project
prominent
promise
promote
prompt
proof
proper
properly
property
proportion
proposal
propose
proposed
prosecutor
prospect
protect
protection
protein
protest
proud
prove
provide
provider
province
provision
psychological
psychologist
psychology
public
publication
publicly
publish
publisher
pull
punishment
purchase
pure
purpose
pursue
push
qualify
quality
quarter
quarterback
question
quick
quickly
quiet
quietly
quit
quite
quote
race
racial
radical
radio
rail
rain
raise
range
rank
rapid
rapidly
rare
rarely
rate
rather
rating
ratio
reach
react
reaction
read
reader
reading
ready
real
reality
realize
really
reason
reasonable
recall
receive
recent
recently
recipe
recognition
recognize
recommend
recommendation
record
recording
recover
recovery
recruit
reduce
reduction
refer
reference
reflect
reflection
reform
refugee
refuse
regard
regarding
regardless
regime
region
regional
register
regular
regularly
regulate
regulation
reinforce
reject
relate
relation
relationship
relative
relatively
relax
release
relevant
relief
religion
religious
rely
remain
remaining
remarkable
remember
remind
remote
remove
repeat
repeatedly
replace
reply
report
reporter
represent
representation
representative
reputation
request
require
requirement
research
researcher
resemble
reservation
resident
resist
resistance
resolution
resolve
resort
resource
respect
respond
respondent
response
responsibility
responsible
rest
restaurant
restore
restriction
result
retain
retire
retirement
return
reveal
revenue
review
revolution
rhythm
rice
rich
ride
rifle
right
ring
rise
risk
river
road
rock
role
roll
romantic
roof
room
root
rope
rose
rough
roughly
round
route
routine
rule
running
rural
rush
sacred
safe
safety
sake
salad
salary
sale
sales
salt
same
sample
sanction
sand
satellite
satisfaction
satisfy
sauce
save
saving
scale
scandal
scared
scenario
scene
schedule
scheme
scholar
scholarship
school
science
scientific
scientist
scope
score
scream
screen
script
search
season
seat
second
secret
secretary
section
sector
secure
security
seed
seek
seem
segment
seize
select
selection
self
sell
senator
send
senior
sense
sensitive
sentence
separate
sequence
series
serious
seriously
serve
service
session
setting
settle
settlement
seven
several
severe
shade
shadow
shake
shall
shape
share
sharp
sheet
shelf
shell
shelter
shift
shine
ship
shirt
shock
shoe
shoot
shop
shopping
shore
short
shortly
shot
should
shoulder
shout
show
shower
shrug
shut
sick
side
sigh
sight
sign
signal
significance
significant
significantly
silence
silent
silver
similar
similarly
simple
simply
since
sing
singer
single
sink
sister
site
situation
size
skill
skin
slave
sleep
slice
slide
slight
slightly
slip
slow
slowly
small
smart
smell
smile
smoke
smooth
snap
snow
soccer
social
society
soft
software
soil
solar
soldier
solid
solution
solve
some
somebody
somehow
someone
something
sometimes
somewhat
somewhere
song
soon
sophisticated
sorry
sort
soul
sound
soup
source
south
southern
space
speak
speaker
special
specialist
species
specific
specifically
speech
speed
spend
spending
spin
spirit
spiritual
split
spokesman
sport
spot
spread
spring
square
squeeze
stability
stable
staff
stage
stair
stake
stand
standard
standing
star
stare
start
state
statement
station
statistics
status
stay
steady
steal
steel
step
stick
still
stir
stock
stomach
stone
stop
storage
store
storm
story
straight
strange
stranger
strategic
strategy
stream
street
strength
strengthen
stress
stretch
strike
string
strip
stroke
strong
strongly
structure
struggle
student
studio
study
stuff
stupid
style
subject
submit
subsequent
substance
substantial
succeed
success
successful
successfully
such
sudden
suddenly
suffer
sufficient
sugar
suggest
suggestion
suicide
suit
summer
summit
super
supply
support
supporter
suppose
supposed
sure
surely
surface
surgery
surprise
surprised
surprising
surprisingly
surround
survey
survival
survive
survivor
suspect
sustain
swear
sweep
sweet
swim
swing
switch
symbol
symptom
system
table
tablespoon
tactic
tail
take
tale
talent
talk
tall
tank
tape
target
task
taste
taxpayer
teach
teacher
teaching
team
tear
teaspoon
technical
technique
technology
teen
teenager
telephone
telescope
television
tell
temperature
temporary
tend
tendency
tennis
tension
tent
term
terms
terrible
territory
terror
terrorism
terrorist
test
testify
testimony
testing
text
than
thank
thanks
that
theater
their
them
theme
themselves
then
theory
therapy
there
therefore
these
they
thick
thin
thing
think
thinking
third
thirty
this
those
though
thought
thousand
threat
threaten
three
throat
through
throughout
throw
thus
ticket
tight
time
tiny
tire
tired
tissue
title
tobacco
today
together
tomato
tomorrow
tone
tongue
tonight
tool
tooth
topic
toss
total
totally
touch
tough
tour
tourist
tournament
toward
towards
tower
town
trace
track
trade
tradition
traditional
traffic
tragedy
trail
train
training
transfer
transform
transformation
transition
translate
transportation
travel
treat
treatment
treaty
tree
tremendous
trend
trial
tribe
trick
trip
troop
trouble
truck
true
truly
trust
truth
tube
tunnel
turn
twelve
twenty
twice
twin
type
typical
typically
ugly
ultimate
ultimately
unable
uncle
under
undergo
understand
understanding
unfortunately
uniform
union
unique
unit
universal
universe
university
unknown
unless
unlike
unlikely
until
unusual
upon
upper
urban
urge
used
useful
user
usual
usually
utility
vacation
valley
valuable
value
variable
variation
variety
various
vary
vast
vegetable
vehicle
venture
version
versus
very
vessel
veteran
victim
victory
video
view
viewer
village
violate
violation
violence
violent
virtually
virtue
virus
visible
vision
visit
visitor
visual
vital
voice
volume
volunteer
vote
voter
vulnerable
wage
wait
wake
walk
wall
wander
want
warm
warn
warning
wash
waste
watch
water
wave
weak
wealth
wealthy
weapon
wear
weather
wedding
week
weekend
weekly
weigh
weight
welcome
welfare
well
west
western
what
whatever
wheel
when
whenever
where
whereas
whether
which
while
whisper
white
whole
whom
whose
wide
widely
widespread
wife
wild
will
willing
wind
window
wine
wing
winner
winter
wipe
wire
wisdom
wise
wish
with
withdraw
within
without
witness
woman
wonder
wonderful
wood
wooden
word
work
worker
working
works
workshop
world
worried
worry
worth
would
wound
wrap
write
writer
writing
wrong
yard
yeah
year
yell
yellow
yesterday
yield
young
your
yours
yourself
youth
zone