Monday, June 5, 2017

Physical Computing Meets AP CSP - Arduinos Part 1

This is part of a 2 part post on using Arduinos in AP CSP.  

Last year I borrowed a SparkFun Inventor Kit from KSTF's Tech Lending Library.  I was curious.  I also was low on time, so a few days before I need to return it, I threw it at some students in my CS class.  They dug in and LOVED it.  They showed me what they were able to do in a few hours so I decided to learn more.

The PD
Learning more took me to SparkFun's HQ in Boulder, CO for a week long workshop in Microcontrollers for Educators.  I would HIGHLY recommend this PD.  It was one of the top 3 PDs I have ever attended as a teacher.  There was so many great things that happened that it is impossible to summarize them all here, but the best thing they did was give us a chance to CREATE with the materials.  In a lot of ways, the workshop was run much like you would run your class.  We didn't just talk about projects, we DID the projects.  We even did a hackathon, which, not to brag, our team won with our voting climate system.  It was pretty awesome.



But, from this I saw first hand how "low floor, high ceiling" problems could be implementeed in a CS classroom.  Thanks to our fearless leader, Brian Huang, I decided to have a "movable light sculpture" project for my CS students after the AP exam that would be a final project for a physical computing unit.

Materials
From there, I wrote a hefty materials proposal for a grant.  It included a lot of things.  The biggest chunk of money came from ordering the Sparkfun Inventor Kits.  But along with that I ordered maker materials that I had seen used most frequently in the workshop.  This included polyfill, tissue paper, cardstock, hot glue guns, rubber cement, tape, duck tape, fun duck tape, extra LEDs, extra M/F extender cables, more user-friendly motors, a lot of stuff.  I also stock piled any box that came to our apartment so students could use them in their project later.

Introducing it to Students
I'll admit that the Inventor Kit can be a bit intimidating.  There are wires, lot of tiny pieces that look the same, it is hard to know how much attention to detail you need when putting pieces on the board.  Sure, some students feel really comfortable diving in, but even I was a bit intimidated when I first got the kit.

You know what's NOT intimidating?  play dough.

I saw this done at the MN Coding in the Classroom Summit with Professor AnneMarie Thomas and then once again modeled at the Sparkfun Workshop, but essentially there are two different recipes for conductive and "insulative" (or lower conductivity) play dough.  From there you can make circuits with battery packs and LEDs.

I loved how this was a hands-on, low risk way for students to play with circuitry.  I turned my kitchen into a Play Dough factory and made massive amounts of play dough.

I wanted students to be able to make a basic circuit so they would get the general idea of how electricity needs to go in a loop and will find the path of least resistance and also see how LEDs work with their positive and negative ends.  Realistically, I knew that the lesson would take 10 minutes tops, so I decided to add the idea of logic gates with circuits.  Students had to create a total of 6 different circuits with the play dough and then sketch what it looked like next to the directions.  They had to create an AND gate, OR gate, NOT gate and (as a challenge) an XOR gate.  Here is the handout.

Interestingly enough, some of my physics high-flyers were too cool for play dough and just sketched out the diagrams on the sheet of paper.  When I challenged them to actually make it with play dough, it took them a while to translate their diagram into the real world.  Overall though, it was a hit.



Introducing The Arduino
Play dough day took about one hour class period, but I could have even introduced the Inventor Kit in class that same day.  I start with giving each group or pair of students a kit and putting their name on the outside - from an organization standpoint, this was huge!  I didn't do it the first time around and then all the kits were mixed up with people not really caring where they put pieces.  I had students open up the kit and poke around to see what they find out.  I gave them 3 minutes to take things out and explore before we shared out as a class as to what they found.

Then we made the most basic circuit which is a blinking light.  We used codebender's EDU site on the chromebooks for the code which worked out pretty well.  Keep in mind you need to install the chrome extension and the server was down for two days, but other than that it worked great.  From there, I told students that we were going to take the next few days to explore the features of the tools... and of course, if you're going exploring, you cannot leave without your passport.

Enter the Arduino Passport.




Ahead of time I had identified key "labs" in the Sparkfun guide that I wanted students to experience.  For better or worse, most of the labs come with all of the code they need, so students don't need to read the code at all.  However, for the "kinetic light sculpture" project, students would need to wire and code their own inventions.  I used the labs provided as a jumping off spot and had students modify the code or the circuit and then write about how they did this in their passports before I would stamp them for completion.

The first time I did this, I didn't have students jump off from the labs enough.  So when it got to the final project, students were unproductively frustrated.  The second time, I added more space for students to modify code or add components and the project went a lot better.

And then I introduced the project...


Saturday, June 3, 2017

MakerSpace Projects - 3D printing and Laser Cutting

Our school is lucky enough to have three 3D printers and one Laser Cutter.

I also appreciate how these resources are available to EVERYONE in the school.  There is no special permission needed to use it at all and the woman who runs the whole thing is always willing to help and is SO patient (with teachers AND students).  We have great resources.

But, I have noticed it is the same few students who use these pieces of equipment and often they use them to create something that they found on Thingiverse - most students aren't creating their own plans from scratch.

To me this is inequity, there are students who feel like they "belong" in the space and students who don't.  After the AP test, my goals were 1) to ensure all students could use the equipment, 2) to have students create (not copy) with the equipment.

From there I went to Twitter in search of ideas.

Laser Cutter
The blog A Recursive Process was instrumental as he talked  about using Desmos to create art to cut out on the laser cutter.  This was perfect since it allowed students to take something cool they made in Desmos and bring it to the real world.  Additionally, students could engrave their design on their TI calculator if they wanted too also.

Here is what some students did:










It wasn't all smooth sailing.  I needed to create very careful directions for students which I created collaboratively with our tech person (you can find them here).  The program sometimes had trouble seeing the piece as one connected line which caused some people's pieces of art to fall apart in their hands.  My hope is that students will be able to use this for future Desmos creations as well.

3D printing
For 3D printing, fellow CS teacher Eileen King also suggested doing a 3D printing project around having students design their own monopoly piece.  This was a GREAT idea since the laser printers take a while so doing something small was really the only way to ensure that all students would get to use them.

I decided to use BlocksCAD who also recommended that students try some design challenges before diving in to make their own monopoly piece.  I had students show me that they could create a torus cage, a block of cheese, and a ring of cubes just to get familiar with working in 3D space.  I stamped each of these off as they created them and showed them to me.




To be honest, while most students designed a monopoly piece, not everyone got to print.  And some students decided they wanted to create something else.  I also suggested that students who were already familiar with the 3D printers do something around volume of solids and curves since the 3D printers can be a powerful tool to help visualize that method in Calc. 



What I would do differently:
  • Rent out a space in the library for my class to be so I could float more easily between the MakerSpace and the classroom.  I am so thankful for students I can trust that I could leave my students in either place without worrying about unacceptable behavior.  BUT being closer would make it easier to support all students during class.  There was a few times where a student in the classroom would come to me with a text message from a student in the MakerSpace that said they needed help. 
  • Make a schedule.  Timing was still an issue to get all students through the equipment.  Next time I would make a schedule with different students signed up each day to ensure we were on track. 
  • Fix timing.  Even with a schedule, it takes too long for every student to 3D print.  Especially when they are prone to breaking or other students starting projects on them who are not in my class.  Also, when students come up with a really cool new idea, it usually takes longer than 30 minutes to print.  At most I could get 6 students though the 3D printers in an hour - and that is even optimistic.  I let students watch Hidden Figures while other students were printing this year, but I don't love that solution.  Next year I will need to think of a different project that students could do while others are printing.


Celebrating Successes:
  • I saw all students using the equipment.  I saw more girls in that room than I had ever seen before which was a huge win in my book.
  • Students were creating things. They would always proudly show me the thing they just made which means that the work was meaningful to them.




Thursday, May 18, 2017

What is the purpose of PD?

This week I led a session at the Coding in the Classroom Summit.  The session was titled.  "So you've got data. Now What?!".  If there is one thing I have learned about session titles, they need to have a "Click Bait" type of name.  But essentially the session was about looking at the data side of computer science.  I ended up doing a "Teacher-Learner-Observer" type of session which featured one of code.org's Computer Science Discoveries lessons.

That's not really the most important part of this post or what motivated me to think-out-loud-via-blog.  Really what interested me was the fact that the session went exactly as I had hoped it would, BUT I am not sure if it was what the audience wanted.  I am not sure if the audience would have considered it a "success".

Code.org has totally got me drinking the kool-aid of using the "Teacher Learner Observer" model to create meaningful PD experiences for teachers.  However, at this conference, many of the sessions felt a bit like an information dump.  I suppose there is a time and a place for an information dump, and I usually get my information from Twitter or other blogs/social media - if we are meeting in person, I don't really want a list of all the things you do.  I mean, I want that list, but written down, as a one pager, I don't want you to read it to me.  I am going to google everything on that list later any way.

This made me think about what teachers expect to get out of PD. Each format is a bit different, what you expect to get at a keynote.  Dan Meyer also has a great post about how he presents.

Here are my ideas about how I want to run my PD:

  1. I want it to tell a story.  People like stories.  Stories can captivate.  I want my story to have a beginning, middle, and end.  Just like all stories, I want the middle to be the bulk of the story.
  2. I want attendees to have an experience.  Just like how I strive to teach math and how I teach CS, I want attendees to remember the experience of participating in something meaningful.  I want them to have an "a-ha".   
  3. I want the PD to be either be immediately applicable or be a hook for some big idea.  I want people to leave thinking that what they just experienced will be useful to them in some way.  It might be something they can do tomorrow in their classrooms or maybe a summer research project that they do. 

These are just initial ideas of mine but I wonder what other teachers think of as successful PD?  What is the best PD you have ever attended and what made it that way?

Saturday, April 1, 2017

Getting More Students Engaged with Programming

I love the new project that I gave students on this Typing Game.  I love that every student is doing the "same" thing but it is different.  My students who were doing Python can do it, my students who were doing C can do it, and the students using App Lab can do it.  It's awesome.

There are 3 things I did that I think helped with student engagement here:

  1. Shake up the group dynamics.  I forced all students to show their thinking on a white board space first.  It made students formulate a plan, got students off their seats, and ensured that everyone had access to the ideas.  There is something about physically re-arranging spaces that causes a disruption in student's actions.  By making them move, I could shake up the dynamic.
  2. Create a space that promoted collaboration.  I was able to bring in larger monitors.  Thanks to a colleague who wasn't using them, this was HUGE at the end of the project when students are combining code and working out kinks.  I had students who worked on a larger display in the library the whole time which worked for them.  Ideally, I think if every group had that opportunity each day that would have been best, but it worked for now.


  3. The prompt.  Students had so much space to make it their own AND since it was a game, they wanted to make sure they could be fun.  One group got "done" with theirs and then started racing each other for who could get the highest score.  One person in the group said "We could add more words, or make it so that there was sound also, or a high score board, or... There is SO much more we can do with this!".  When two of them were racing, one student said "that's not fair 'remote control' came up like 3 times for me, and you had the word 'kid' and 'hat' pop up a ton, 'remote control' is WAY harder to do".  It's these sort of problems that now students WANT to resolve to make the game better. 
I gave students a week to do this and one thing that has come up is, when do you want students to have a "finished" project and when is it ok to be in more of a prototype format?  Up to now, much of the Apps students have created have been a bit more prototype-y.  I am still trying to figure out what the pros and cons are for each.  What happens to engagement?  How does it help them with programming content knowledge?  How does it change the UI part of the app?  What value is there in making sure that users actually know how to use the app? Etc.

Also, now I need to figure out a way to structure the share-out.  I think I want students to demo it for students and then also play each others and give feedback.

A New Project - typing game

I had an extra week of time for my AP CSP students this year.  I wanted them to explore the Post-AP database unit, but I knew doing more "stages" wasn't the right approach.  The stages are a little too quiet, not enough collaboration, and students aren't always super motivated to get it right.  They are good, but I didn't want to come back from spring break and put them on that.  

Instead, I decided to have students make a game that would have a high scoring screen which would force them to get used to creating and reading a database.   This would get at the database content without forcing all students to do all stages of the database unit.  Realistically, I think most students would need to do the stages to be successful in the task, but by giving them the task first, they had a motivation for wanting to learn how databases work.  Additionally, students LOVE making games.  Games usually have winners or losers, so a winner board screen is a not a "forced" concept.

The difficult piece is that students just finished an independent open-ended project. SO there were TONS of games that students had already made so I needed to find a new type of game that the project revolved around.

After brainstorming with KSTF's POET (Principal Officer of Educational Technology), I decided that a "typing game" would be a good vehicle for students.  Thinking of the "learn to type" games out there, students could design a game that tested how well someone could type and then score that person's abilities. 

I started looking into creating the database, I felt a little unprepared myself and a little concerned that one week wouldn't be enough time for students... SO... this was the prompt I gave students:

To get a C it MUST:
- Be play-able
- Have scoring mechanism
- Have a way to "end" the game (you shouldn't be able to play forever)
- Use two functions that are used to create a third algorithm*

Anything else - is the Razzle Dazzle Factor.  Consider:
- Top scorers screen
- Different ways to check if the input is correct
- Animation of the words
- Using colors to describe if a person got something right or wrong
- Timers
- Different levels

The starred requirement was just so students get a feel for how they need to write up their "Create" task and to force them into using functions a bit more.  

This "rubric" was intentionally designed to give students freedom and encourage divergent thinking between groups.  The "rubric for a C" idea was something I learned from  Rebecca at a code.org conference.  I actually really like it, especially for this class there is no "cap" to student creativity AND it keeps my trolls going.  It ensures that students are constantly working in class and pushing themselves. 

Students needed to work with at least three other people for this project.  I am excited to see how all of their projects will be "the same but different" when we are all done and I think students themselves might be surprised to see how other teams solved the same problem as themselves. 

Saturday, February 18, 2017

What does a good CS class look like?

This question came up in a meeting I had with someone from the Upperline School in NY.  Really it is what I have continued to struggle with since transitioning to teach more CS than math.

When I think about teaching math, I know what a good math lesson looks like.  It has all students collaboratively solving problems.  But when it comes to CS, I haven't necessarily seen a lot of "WOW! that was a good CS lesson" in other classes - in fact, I've only observed one other person's CS class, and it seemed like an average class.  Nothing I was dying to replicate in my own class.

In my class, so much of the programming tasks are pretty individual - people working by them selves to learn a new aspect of programming.  They talk to one another when they run into problems, but I don't see students wrestling with content the same way I see students in math wrestle with content.

Our class-code-alongs provide a bit of a glimpse into that, but still there is this awkward timing thing that I don't have quite down.

Where I did see collaborative problem solving in my CS class recently was when we did the brainstorming for our Simon game.   I think that can be expanded on to give students a task and see what they come up with.

Next, I want to give students a challenge to make another game - maybe 2048 the game, or a memory game?  I think this could be a fun, collaborative, and rigorous challenge for students.  I could even create my own code to give students who need a bit more scaffolding after they struggle a bit.

I keep coming back to the question of "who is learning in my class, when, and how do I know?"  Here's  how I have identified my "learners" in my class thus far:

  • I have a few students who are constantly asking questions - it shows that they are thinking about processing what they are taking in and making sense of it.  
  • My students who "go rogue" and decide to do their own projects are other students I would identify as my "learners" also - they are creatively arriving at solutions.
  • My students who can look at someone elses' code and troubleshoot it.
  • My students who create things they are proud of... you can see it on their face - they are happy and satisfied with their work.
  • Students who see the need to define the problem - again, they are asking questions and keeping the big picture and the small picture in mind.
  • My students who re-read their code before asking me - have looked at the errors and tried to make sense of them.  I have noticed a gap between students who know how to read code and those who don't.  This was especially true when we took a break from programming and then came back to it.  Some students were writing some funky things like if (x = 6 or 7) - logically I know what they were trying to do, but they were pretty far off the mark from a syntax perspective.  I suppose this is much like PEMDAS in math - they might be capable of thinking about a problem from a big picture, but when it comes to computation, it can be rough.  

When looking at this list, I am noticing that a lot of these things are happening when we do projects - not just the little stages in CodeStudio.  It is so hard to see the learning when they are "plugged" in to the computer...  obviously there is a time and a space for this type of learning, but I am wondering if I need to move to peer programming models or replace it with some more open ended-esque projects.

I really wish there was someone out there doing CS education research much like Jo Boaler is doing maths education research.

Friday, February 17, 2017

DDR re-make - brainstorming and a gallery walk

I started this lesson by having students brainstorm how they would build the app.  In groups they had to answer the questions:

  1. What would the UI include?
  2. What variables do you think you will need?
  3. What functions will you need?
In my first hour, I had them do this as a table on mini-whiteboards, but inevitably one person did the majority of the writing and the other students couldn't really see what was being written since the board was the opposite direction of them.  SO, I moved to a "Harkness" style method and had students in my next class do their work on the whiteboards around the room which got more students involved in the brainstorming process.  Then we did a gallery walk so they could look at other students's work.  

Here is some of the work:





I actually loved this structure.  All students were up and engaged, they were making sense of eachothers' ideas, and problem solving.   I had created a UI for all students to start with along with comments for what the code should include.  I found this structure useful during the ColorSleuth app so we all had the same ID names while we were programming.  I had also seen this commented out skeleton in some of the MOOCs I have been exploring and found it to be a good way to almost literally put in scaffolding in place.  I didn't show this to students ahead of time, but I almost wish I would have given them a screen shot of the UI so they could focus a bit more on logic during this time.  Here is what the starter document looked like.




Taking time to do the gallery walk was important for the class, too.  Doing this I learned, from a teacher perspective, that the problem needed to be well defined if we were going to do this as a class.  Things like, how scoring would work, does the pattern get longer over time, etc. are all questions for which we needed to agree on answers.    I think the brainstorming may have been even more useful had we developed these answers before going to the whiteboards.  BUT, I also think we could have introduced the big problem of "make a Simon game", had students develop these answers and questions themselves, worked for a few days, and then done a reveal of the different approaches to the problem.  For the stuff we were doing together though, we wanted to have the same vision.

A lot of students also brainstormed things that I had decided we wouldn't focus on together (like score, for example).  It was helpful to write these down as "possible extensions" inside the code so students could work on that extension at the end of our time together.  By the end of two days, this is what our program looked like.

Our possible extension list got quite long too, including:

// - Make it auto-check the solution after you are done hitting the keys
// - Make the "Play Again" button work
// - Make a cooler "you win/lose" screen
// - Make the pattern longer as the game goes on
// - Keep a score
// - Add other possible key presses
// - Add sounds
// - Make the pattern go faster as the game goes on
// - Make it wait for the series to play BEFORE someone can enter arrows
// - Protect against trolls so that they cannot "check your work" BEFORE pressing the "start" button (since both arrays are empty, it will say the won)


I also learned that by brainstorming with other people, students developed some creative and elegant solutions, solutions that I hadn't considered when developing the code myself.  This makes me even more excited to try the "big problem" approach later on in the course.

Next, I want to use this problem we did together as a lens for the writing involved with the Create task for CSP.  We should be able to answer a lot of the questions about abstraction and development with what we have done here.