# lesson plan

## Agenda
1. Introduction
1. Motivation
1. Practice
1. Review framework

### Introduction

- I'm Ryan
- I grew up in a small rural community
- I've been volunteering and working in informal computer science education 
  since 2021 in San Diego
    - hackathons, workshops, classes
- I'm a master's student in Curriculum and Instruction at UW-Madison
- I used to competitively eat lettuce

### Motivation

- Tutorial hell
- Learning can be tough. 
  - But we spend out whole lives learning. 
  - Many ways to learn.
- Intersections are tough. 
  - Trasnitioning between identities is tough.
- Learning to build by yourself is really difficult. 
- Define expertise
  - routines and frameworks help with cognitive load
- other things to help with the journey
  - portfolios are helpful for professional but also 
  - wip montages are helpful for emotion
- Working with code, you'll often be starting with someone else's code
  - ex: llm, tutorials, follow-mes, starter-code, books
  - we'll learn how to make sense of existing code
  - then we'll learn how to make it our own

### Framework

Very loose framework. We'll be following the Use-Modify-Create framework. [^10]
Depending on your familiarity, you may spend more time in any of these 
components. Today, we'll focus on the Modify portion and how to move on the 
spectrum from mine to not mine.

![alt text](./assets/image-3.png)

> Absorb what is useful, discard what is useless and add what is specifically 
> your own. Bruce Lee

Most of it comes from learning to think creatively.
Remember that creativity and coding are two individual skills and thus can grow
at diffrent rates.

- methods of coming up with mod ideas
  - aesthetics -> inspiration
  - bugged by -> improvements
  - confused by -> build an example
- methods of implementing and troubleshooting mod ideas
  - whiteboard: frame by frame and relative positioning
  - debugging: print statements, frame by frame

### Practice
- [Read along](https://natureofcode.com/forces/)
- [Exercise follow-along](https://editor.p5js.org/natureofcode/sketches/LSXJ6-VziJ)
- [One completed exercise example](https://editor.p5js.org/totally-not-frito-lays/sketches/hL-dDsQle)
- [Whiteboard](https://www.tldraw.com/p/R7-I8eK3gqSzJ3TuLaVUG?d=v0.0.945.1034.page)

## Appendices

These are material that isn't necessarily explicitly mentioned in but here's 
some resources and citations if you want to learn more or dig into the 
theoretical grounding of this workshop.

### Useful vocabulary

- Tutorial hell [sic]: cycle of following tutorials but not actually building 
  anything with it leading you to forget what you learned!
- Cognitive load: the amount of things that your brain can handle at a time.

### Good programming habits 

1. avoiding deeply nested code with inversion[^1]
1. extracting logic into functions or variables
1. have good naming conventions
1. avoiding magic numbers[^2]
1. self-documenting code
1. avoiding too many function parameters

### Learning Theories at play
- creativity scaffolding matrix[^3]
  - ![Process artifact creativity landscape](./assets/image-2.png)
- aesthetics and ownership[^4]
- PBL [^5]
  - ![PBL design](./assets/image.png)
  - bare bones framework: define problem, brainstorm, solve, evaluate
- Productive Failure [^5]
  - ![productive failure design](./assets/image-1.png)
  - even if you don't fully succeed, there is still value in trying!
  - close the feedback loop
  - treat it as exploration
- Tenets of Maker Movement [^6]
  - Designing as learning
  - Creating and sharing artifacts
  - Attending to process and product as outcomes (iterations)
- Cognitive load theory [^8]
  - 4-7 items
  - searching and processing are hard work
- Expertise [^9]
  - experts encode and organize "schemas" more efficiently
  - experts have strong mental models


---
[^1]: [YT/Kantan Coding/3 laws of writing readable code](https://www.youtube.com/watch?v=-AzSRHiV9Cc)
[^2]: [YT/Kantan Coding/3 more laws of writing readable code](https://www.youtube.com/watch?v=8sWDThdFFyI)
[^3]: [Scaffolding Creative Programming Projects](https://dl.acm.org/doi/10.1145/3677619.3677634)
[^4]: [Electronic Textiles as Disruptive Designs: Supporting and Challenging Maker Activities in Schools](https://doi.org/10.17763/haer.84.4.46m7372370214783)
[^5]: [Learning through problem solving](https://www.taylorfrancis.com/chapters/edit/10.4324/9781315617572-21/learning-problem-solving-cindy-hmelo-silver-manu-kapur-miki-hamstra)
[^6]: [The Maker Movement and Learning](https://www.taylorfrancis.com/chapters/edit/10.4324/9781315617572-28/maker-movement-learning-erica-halverson-kylie-peppler)
[^7]: [YT/bigboxSWE/How to get out of tutorial hell](https://www.youtube.com/watch?v=343EWZS9O88)
[^8]: [Cognitive Load During Problem Solving: Effects on Learning](https://doi.org/10.1207/s15516709cog1202_4)
[^9]: [How People Learn](https://www.nationalacademies.org/projects/DBASSE-BBCSS-13-06/publication/24783) and [YT/Veritasium/The Expert Myth](https://www.youtube.com/watch?v=5eW6Eagr9XA)
[^10]: [Use Modify Create](https://textbooks.cs.ksu.edu/tlcs/4-designing-cs-lessons/04-use-modify-create/)