Wednesday, July 27, 2016

Computational Thinking and Advanced Algebra

Before attending Code Camp, I planned on finding specific lessons where I would integrate Computational Thinking (CT) into the content.  However after attending Code Camp, I am realizing that Computational Thinking is EVERYWHERE in mathematics.  While some units (like our data unit) lends itself very concretely to computational thinking, nearly all math has an opportunity to incorporate CT practices depending on how it is taught.

Below is the list of topics I had planned on integrating CT:

  • Sequences
  • Probability
  • Systems and inequalities 
  • Data analysis
Now I really think you can incorporate CT everywhere depending on how you teach content.  Teaching students to think and create IS teaching CT.   For example, algorithmic design could be nearly everywhere in our teaching.  If I can provide students with an experience that leads them to develop their own algorithm for a task in math, then they are practicing algorithmic design.  For example, giving students an open ended problem to find the equation of a parabola given specific information can lead to students developing their own algorithm for this task.  I believe the two keys to this are A) providing student with this opportunity and B) making it explicit with students that they are engaging in algorithmic design when they do this.  To do this, I want to provide students with an experience the first week of school where they write their own algorithm for sorting cards and then translate this into a fake assembly language.  This will introduce students to the idea of "Algorithmic Design" without adding stress associated with content or assessment.  With thinking more intentionally about algorithmic design, I would like students to program some key algorithms that we use in class (like finding the vertex of a parabola, or finding the number of zeros of a parabola) using Scratch to do so.  

In addition to algorithm design, I realized a lot of the teaching I already do deals with CT practices of Pattern Generalization and Pattern Recognition.  Every time I ask student to explore a Desmos graph with sliders or Geogebra project with sliders, I ask them to notice patterns or trends in the graphs as they change the slider.  When they make a conjecture, they are generalizing the pattern they notice.  This a-ha moment for me made me realize the true importance of teaching students to THINK above all else.  Any computer can follow an algorithm more quickly and accurately than any human - but to be able to design an algorithm and recognize/generalize patterns are a uniquely human trait.  



Finally, attending Code Camp encouraged me to think about my Advanced Algebra unit in data from a CS perspective.  I will plan on being more explicit when we are engaging the the CT practices of data analysis, data collection, and data representation. By making this more explicit with students, I will be able to highlight CT practices everyday in class. 



Continuing Code Camp work in the 16-17 school year

Attending Code Camp gave me some directed time to think about CS in school.  While I initially attended code camp to develop some ideas for my Adv. Alg. class, perhaps the most helpful thing about code camp has been looking at a lot of different applications of coding and then trying them out.

Here's where I want to go from here:

  • I still want to incorporate CT into my Adv. Alg curriculum.  I think I am going to focus on algorithm design as a CT idea.  To do this, I am going to start with a task that I will borrow from teacherCon to build class culture and the idea that thinking is really important in my classroom.  From there, I am going to do Bootstrap to give students a solid background in order of operations and functions.  It will be important for me to highlight where we use algorithm design in this process.  Finally, I am still going back and forth between doing Exeter style math in the class and doing more experience-based math in the classroom OR even doing more Interactive Note Books.  Regardless, I think I will end the units/weeks with having students design their own algorithm for some of the "big ideas" of the week.  We will put these algorithms into an interactive note book at the end.  I also liked Thach's idea of having a student DO a problem and then state what they did in each line to the side.  I think this would be another way to bring CT into the classroom.  I also will focus on stats on the computer in google sheets.
  • For my CS class...
    • I need to have them document their learning in one place (INB)
    • I need to have them read about the impact of CT in society (ACM - summarize them in INB)
    • I need them to keep an idea journal where they think of things they want to make (I need to do this myself AND I think it will help them keep track of their goals.
    • I will use the basic challenges (BELOW) to give my more eager students additional challenges. 
    • I will FORCE my students to document their code.
  • I also think I need to enhance my own programming experience.  I need to do some HTML tutorials and learn some CSS.  I think if I can commit to doing 3 hours of each of these I should be able to apply this to JavaScript.  I want to use all of this information to write my own google extension program OR make my own web page.  I need to develop a specific plan for what I want to create since once I know what I want to create, I will be more motivated to learn what I need to accomplish that goal.  Some ideas I currently have include:
    • A google extension that highlights the word "math" on a web page
    • A google extension that allows a user to enter words they want to have highlighted
    • A to-do manager in codePen (via advice from Eric).  Things to consider:
      • If I click on it it cancells out
      • Make it look nice (challenge with CSS)
      • Add things to a list [array of items] 
        • Learn about dynamically adding things to the JS
        • Look into lists in js
        • Do all CSS stuff and then do java script
      • Move into angular later
Programming challenges:

  • http://codekata.com/