name: inverse layout: true class: center, middle, inverse --- # Programming Problem Solving Walkthrough ## Mini-Sprint ###
PyCon 19 - Education Summit #### Shlomi Hod
### https://walkthrough.problemsolving.io --- ## Who are we? --- ## Why are we here? --- layout: false .left-column[ ### Learning Programming ] .right-column[ ### Working definition .center.middle[ #### Write, read and modify #### a computer program #### to solve a problem ] ### Learners - Computer Science major students - Coding bootcamp students - Data scientists - Computational scientists - Kids and teenagers ] --- layout: false .left-column[ ### Learning Programming ### "First Order" Challenges ] .right-column[ - Technical barriers - How to edit a code file? How to run it? - Concepts - what are conditional? - Syntax - How to write an `if` statement? - Notional machine - What will be the result after running the program? ] ??? "A set of abstractions that define the structure and behavior of a computational device. A notional machine includes a grammar and a vocabulary, and is specific to a programming paradigm. Itβs consistent and predictive β given a notional machine and a program to run on that machine, we should be able to define the result. The abstract machine of a compiler is a possible notional machine." - [Mark Guzdial](https://computinged.wordpress.com/2016/03/07/notional-machines-and-misconceptions-in-cs-developing-a-research-agenda-at-dagstuhl/)] --- .left-column[ ### Learning Programming ### "First Order" Challenges ### Some Common Mistakes ] .right-column[ - Copy-paste programming / "Stack Overflow syndrome" - Programming by debugging / Programming by coincidence ] --- .left-column[ ### Programming Learning ### "First Order" Challenges ### Some Common Mistakes ### "Second Order" Challenge ] .right-column.center.middle[ # How to solve # a programming problem # *end-to-end* ] ??? - Can you came up with the steps of programming problem solving? --- class: center, middle, inverse ## Can we teach it? --- layout: false .left-column[ ### Model ] .right-column[ > *"All models are wrong but some are useful."* - George Box 1. Reinterpret the Problem
2. Design a Solution
3. Code
4. Test
5. Debug
6. Evaluate & Reflect
7. Repeat & Improve
] --- .left-column[ ### Model ### Phases and Roles ] .right-column[ | Phase | Role | |:------------------:|:---------------------:| | Problem | .red[?] | | Design | Architect | | Code | Engineer & .red[?] | | Test | .red[?] | | Debug | Detective | | Evaluate & Reflect | .red[?] | | Repeat & Improve | Boss | .footnote[ Based on [Eric Roberts](https://cs.stanford.edu/people/eroberts/) version. ] ] --- .left-column[ ### Model ### Phases and Roles ] .right-column[ | Phase | Role | |:------------------:|:---------------------:| | Problem | Lawyer | | Design | Architect | | Code | Engineer & Lawyer | | Test | Vandal & Hacker | | Debug | Detective | | Evaluate & Reflect | Critic & Coach | | Repeat & Improve | Boss | .footnote[ Based on [Eric Roberts](https://cs.stanford.edu/people/eroberts/) version. ] ] ??? - Distribute the cheatsheet cards --- .left-column[ ### Model ### Phases and Roles ### What to Teach? ] .right-column[ - Learning the model explicitly - End to end programming problem solving - Separate deliberate practice of each phase in the model - Mastery of the "first order" challenges .footnote[ If you want references, come and talk with me after the mini-sprint.] ] --- .left-column[ ### Model ### Phases and Roles ### What to Teach? ### How to Teach? ] .right-column[ - Model - .red[Straightforward] - End to end - .red[Walkthrough] - Phases - .red[Γtude] - "First order" challenges - .red[Out of scope, but for example, the mini-sprit [*Syntax worksheets*](https://us.pycon.org/2019/schedule/presentation/361/) by Elizabeth Wickes] .footnote[ If you want references, come and talk with me after the mini-sprint.] ] --- class: center, middle, inverse ## What is a Walkthrough? --- layout: false .left-column[ ### Walkthrough ] .right-column.middle.center[ ### A written guided description ### of the journey ### from a problem to a solution ![CC BY 4.0](https://i.creativecommons.org/l/by/4.0/80x15.png)
https://walkthrough.problemsolving.io ] --- .left-column[ ### Walkthrough ### Conceptual Roots ] .right-column[ 1. **Worked examples** from comptuer sciende education research - A step-by-step demonstration of how to solve a problem - Evidence-based technique! ] --- .left-column[ ### Walkthrough ### Conceptual Roots ] .right-column[ 1. **Worked examples** from comptuer sciende education research - A step-by-step demonstration of how to solve a problem - Evidence-based technique! 2. **Literate programming** by Donald E. Knuth - Programming paradigm - In which a program is written as interspersed snippets of executable code and text - Thus a program is perceived much more like an essay ] --- .left-column[ ### Walkthrough ### Conceptual Roots ] .right-column[ 1. **Worked examples** from comptuer sciende education research - A step-by-step demonstration of how to solve a problem - Evidence-based technique! 2. **Literate programming** by Donald E. Knuth - Programming paradigm - In which a program is written as interspersed snippets of executable code and text - Thus a program is perceived much more like an essay ] .center.middle[ ### Medium: Jupyter Notebook ] --- class: center, middle # Demo! ## [Harry Potter and the Telephone Game](https://walkthrough.problemsolving.io/export/harry-potter-and-the-telephone-game.zip)
via [giphy](http://giphy.com) --- .left-column[ ### Walkthrough ### Conceptual Roots ### Notes on Walkthroughs ] .right-column[ 1. Structured according to the model phases 2. Prompting self-explanation 3. Consists of active learning activities 4. Designed to achieve teachable moments 5. "Better version of reality" 6. "Stream of consciousness" 7. Using a real-world problem or a cover story 8. Having learning objectives .footnote[More can be found here: https://handbook.problemsolving.io/05-how-to-teach/walkthrough.html] ] ??? - My experiences have led me to believe that a person reading a program is likewise, ready to comprehend it by learning its various parts in approximately the order in which it was written.* - Donald E. Knuth - Learning objectives: Simplification and generalization design strategy set, files and string manipulations --- .left-column[ ### Walkthrough ### Conceptual Roots ### Notes on Walkthroughs ### In Class ] .right-column[ 1. Integrated from the first programming course 2. "CS150" - The second CS/programming course https://problemsolving.io 3. 2-3 days workshop ] --- class: center, middle, inverse ## What are we going to do today? --- layout: false .left-column[ ### Goal ] .right-column[ .middle.center[ ## We have eight walkthroughs ### in different stages ] β Done - one π§ Work in progress - four π‘ New idea - three .middle.center[ ## Pick up one and make some progress! .red[*] ] #### For example: π§ Solving the world's hardest sudoku π§ Resolving dependencies (topological sorting) π‘ Writing a spelling corrector .footer[.red[*] No worries, we'll make it more concrete soon!] ] ??? Another goal is to get **familiar** with the model and developing a walkthrough --- .left-column[ ### Goal ### Not Goals ] .right-column[ - To make a complete walkthorugh from scratch - To finalize the work-in-progress ones - To become a master of walkthroughs development ] --- .left-column[ ### Goal ### Not Goals ### Tasks & Deliverables ] .right-column[ 1. Setting the **learning objectivs** using the model terminology .red[*] 2. Form a **problem** - algorithmic one or real-world 3. Solve the problem and **document** your process 3. **Reflect** on the process and distill it into steps and **teachable moments** 4. **Refactor** your code and remove clutter 5. Write an **outline** and embed your code 6. Choose **learning activities** 7. Write the complete **text** of the walkthrough 8. Run a **pilot** 9. Repeat and improve! ] --- .left-column[ ### Goal ### Not Goals ### Tasks & Deliverables ### Schedule ] .right-column.middle.center[ ### Intro - 20 minutes ### Sprinting - 70-100 minutes ### Wrap-up - 10 minutes ] --- .left-column[ ### Goal ### Not Goals ### Tasks & Deliverables ### Schedule ### Instructions ] .right-column[ 1. Tell me your GitHub user or write it here (I'll delete it later): https://etherpad.net/p/pycon-19 2. Go to https://walkthrough.problemsolving.io, download "Harry Potter and the Telephone Game", and skim it through 3. Check your email or go to the project GitHub repo: https://github.com/ProblemSolvingIO/walkthrough-dev 4. Fork and clone 5. Choose one walkthrough to work on I would recommend the π§ WIP ones - and don't overthink! 6. Open the Handbook https://handbook.problemsolving.io/ at the "Walkthrough" chapter - it is your reference (especially "Tips for Developing a Walkthrough") 7. Decide what is the task, make a plan and write it down at the top of the Jupyter Notebook 8. Sprint! ] --- .left-column[ ### Goal ### Not Goals ### Tasks & Deliverables ### Schedule ### Instructions ### Wrap-up ] .right-column[ 1. Commit and create a pull request 2. Reflection and feedback 1. What you did you like about this mini-sprint? 2. What didn't you like? 3. What did you learn? 4. Would you like to use walkthroughs in your teaching? If yes, how? If not, why? ] --- .left-column[ ### Goal ### Not Goals ### Tasks & Deliverables ### Schedule ### Instructions ### Wrap-up ### What's Next? ] .right-column[ 1. I encourage you to contribute - open issues or submitting improvements with pull requests 2. Write to me if you are using the materials in your teaching 3. I will keep working on finalizing more walkthroughs in the upcoming months 4. Spread the word: https://walkthrough.problemsolving.io ] --- name: last-page template: inverse ## That's all folks (for now)! # Thank you!