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.

CS Teacher First: I made my own lesson!

I suppose this is not the first lesson I have made for my CS classes but it was by-far the most extensive one I had made myself.  Here is how it went:

In a previous lesson, I had the class incrementally develop a ColorSleuth App.  I really liked the format of the lesson.  It was a bit of brainstorming, it was a bit of independent work, a bit of full-class work, and then students could decide how to enhance the app even further.  I liked the discussions that took place and the problem solving.  Students liked making a game (they all love games)!

I was looking for a similar project but couldn't really adapt anything from the progression of CSP to fit my needs.  I wanted students to get comfortable with using arrays, having keyboard data, and also testing out their code.  Maybe I am the only person who programs with an obnoxious amount of "console.log" statements, but to me, console.log's are to computer science as checking your answer is to math.  YET many of my students would code up a huge section of code, run it, and then get mad when it didn't work.  I wanted students to be able to identify how/when to test things.

While brainstorming for this project, I knew I wanted to figure out a way to make the end project a game.  Initially I thought about doing a "memory" game which would have the added benefit of allowing students to find images that they liked themselves.  The UI seemed a little clunky for something like that, and I wasn't exactly sure how I would use arrays, but I would like to re-visit this idea a little later - or maybe challenge a student to figure it out.

After searching around, I decided to try and make a "Simon" type game.  I thought of using colors, but wanted to incorporate the keyboard element so I changed it to arrows.  I wanted a game where arrows would flash on the screen and you had to repeat that sequence with the keyboard.  When I showed this idea to students, they thought of it more as DDR, which totally worked too.

I was able to get the UI set up, and the arrays in place and understood how I could code up the logic.  It seemed so close to being "there" but animating was a bit more than I was ready for.  Thankfully I was also able to get some support from GT at to help me understand the "setTimeout" command and then applied it into the code.

THEN I took it to the students...

Sunday, January 8, 2017

Concept Mapping after Break

Coming back from break is hard for everyone.  Instead of jumping back into the Harkness methods I had been using, we took the first day to develop a concept map of ideas around quadratics.  We had to do a little skill building behind what is a concept map or what makes a concept map good.

Each student was given a different colored marker in their team so each person had to contribute a equal amount (in a visible way).  At the end, we did a gallery walk of the posters which was rough.  I think I needed some sort of activity guide for the gallery walk - students didn't really know what they were supposed to be doing despite being asked to add to posters there was no real accountability for that portion of the class.

However, it was a good way to refresh vocabulary and reconnect ideas that they learned about before break.  Below is one group's work.

Monday, November 21, 2016

Using QFT to prepare students for new experiences

I first learned about Question Formulation Technique (QFT) when I attended the Exeter conference in the summer of 2015 and then was re-introduced to it at the Knowles fall meeting 2015.  QFT is a process that encourages students to ask many questions, categorize the questions, improve the questions, and then rank the importance of these questions.  QFT was developed in the medical field to help patients ask better questions, however since questions are valuable in many contexts, QFT has been modified for many different contexts.  

I have struggled to find a way to incorporate QFT into my teaching routines especially when the learning targets for a specific day in my geometry classroom are so specific - there is just not a lot of room for a wide open exploration of ideas.  However, in my computer science classroom, part of the goals each day is to increase student interest in the topic matter.  When an opportunity came along to have students visit Target HQ in Minneapolis to work with the engineers and scientists there in their technologies departments, I needed a way to get students ready to engage with these engineers.  Enter QFT.

For a starting point for students, I put together a short paragraph of text from e-mails I had exchanged with my partner at Target as well as snippets from his team members’ LinkedIn profiles.   Students were given 5 minutes to read the paragraph of text and then 2 minutes to summarize what they read or pull out key pieces of information in that text.  From there students were put into groups of 4 students and then were given 12 minutes to generate questions.  12 FULL minutes.  One person documented these questions in a google doc while (in small groups) while their team continued to ask questions.  While some of these questions got off task in unproductive ways, other questions showed how students were making connections to the work Target was doing and their own learning or lives.  

At the end of this time we discussed the difference between open ended and closed questions and students color-coded their questions based on these two distinctions and changed two of their closed questions to be open-ended.  Finally they prioritized their questions to determine what their top 3 questions were and I sent the list of questions to my partner at Target to help him understand what my students were already thinking about before the trip.

At the field trip, students met 5 individuals who worked in different roles related to technology in Target stores.  These people shared their paths to where they were (from planning on being a pilot to a nurse, etc.) and why they like their job that they have now.  Then students broke up into two groups and saw new technologies Target was using (or hoping to use) in their stores to improve the guest experiences.  At the end of the time, students engaged in a short brainstorming activity with the Target engineers who used the student ideas to generate more ideas.  While the experience was fast, because we had gone through the QFT process before the trip, students were ready to hear what the engineers were sharing and students were ready to ask questions throughout the experience.

While I know funds and enthusiasm for field trips is limited, I do see a few opportunities to use QFT in my classroom in the future.
  1. In preparation for any guest speaker.  Guest speakers can be a very valuable part of a course and this is especially true in my computer science class where I am trying to get students to see the many different options a career in technology has to offer.  While I do my best to prep guest speakers, I should also prep my students as much as possible.  Furthermore, it can be difficult to know exactly what points the speakers are going to want to touch on more than others.  By preparing students, students can contribute more to the presentation and perhaps guide it with their questions.  With Target, I shared the questions ahead of time with the presenters but in the future, I don’t know if that is necessary or if it takes away some of the authenticity of the experience.
  2. Last time I struggled with finding a “data source” for these questions to be generated from.  The paragraph from e-mails I pieced together was a good start.  However, the data source was a bit contrived since I picked what information was shared with students.  I think I could have students look at other data sources more broadly.  For example, I could have students look at a company’s website to generate questions or view a guest speaker’s LinkedIn profile.  Since websites and social media are something that students are accustomed to consuming, so generating questions around these data sources may be a good practice for students to build.

Sunday, November 20, 2016

Data isn't so bad after all!

I'll be honest, I wasn't looking forward to the data unit.  Students generally don't take computer science to learn or think about data.  Honestly, a lot of the material felt pretty common sense-y.  I wanted it to be more math-y.  I wanted students to have more skills to create visualizations that were more impressive.  I wanted to make it more focused on social justice.  But, I went with it... surprisingly, it turned out well!

First of all common sense, is never very common.  By the end of this unit, I came to understand that the real learning was about being a critical viewer of data.  My goal for this unit is to build student capacity to generate knowledge from data but also question how visualizations or data collection might have a bias.  This unit certainly provided ample opportunities to build those student skills.

I was able to bring in a lot of real life articles and have a short discussion about them in class.  One of my favorites was about non-voters which as super relevant to the content for the following reasons:

  • It told an excellent story and used visualizations to support the story.  
  • It used a variety of visualizations (Bar charts, pie graphs, stacked bar graphs)...
  • It showed how different visualizations could be used to lead to different recommendations
  • The data collection methods and "cleaning" of data was similar to how we cleaned our own in-class data (free-response and then categorized). 

In reality, I think I could have used this as an example of what students could do for our final project in the unit - use several different visualizations to tell your story.

As I graded student work it was clear that next year I need to do more with "story" development.  I should use different articles that tell a story with data and have students read/analyze those.

Additionally, there is still a lot of opportunity for sense-making.  Several projects have severe gaps in sense making.  For example, they made a chart, but it isn't clear what the data actually is about.  I could even do a whole lesson on "naming charts" since a lot of students left of titles or had titles that didn't make sense.  I could give them a bunch of title-less charts and have them come up with the names.

Finally, I tweaked the original project to allow students to explore other data sets that they felt were interesting and relevant to their interests.  I actually had most students take this option which was exciting.  It helped bring out student personalities and also gave them a glimpse into big data - some data sets were QUITE large!  Overall, it turned out well, and I am thinking about how to improve upon it for next year.

For next year, I am still fooling around with these ideas:

  • Making it more social justice focused - this is always a goal of mine in math, it seems like here is a great place to do it too.
  • Talk more about the use of story in data
  • Make more interactive visualizations either with programming or with Google fusion tables
    • This would take more programming experience or we would want to walk through one together as a class in google fusion tables before setting students free.
    • I could move this to the end of the year and do more in-depth applications if there is time
  • Tie this into big data with's data sets - it actually has a lot of great resources to use!

Wait... is that a learned skill?! Student Share-outs

When a manager or colleague asks me to share out something I am working on, I am able to determine the following:

  • What is important to the audience that I need to share
  • What is important to me that I want to get across
  • What information is helpful and what information is not
What I learned last year (and am re-learning this year) is that knowing this is a learned skill.  I asked students to share out their projects about telling a story with data.  It was amazing to see how many blank stares I was getting.

Students seem to be so used to having a rubric or pseduo-script for presentations that this idea of casually sharing out their learning was not something most students were able to do. 

Ultimately I gave them this (below) guide.  I stressed that this was just the three most important things I thought they should talk about, but it might be different for their project.  It was interesting to see which students stood at the front and answered each question out loud and which ones were able to pull out the big ideas themselves.  

Here is what students were given:

Your presentation should...
Tell us about your data:
  • What data did you choose?
  • Why did you choose it?
  • What was difficult about finding, choosing, or working with your data?

Tell us about the process:
  • What did you expect to find?
  • What was your process to explore your data?  What different things did you try?  Did you filter your data, use a pivot table, try different visualizations, etc?

Tell the story:
  • What story does your data tell?
  • What questions does this raise for you?
  • What other data would be helpful in telling your story or answering your questions?
  • Why is this important/interesting to you?