Mike Coyner
Compuer Science teacher, facilitator, and mentor
Queen Anne's County Public Schools
What goals do you set for yourself as a CS teacher now that you've been teaching AP CS for a number of years?
I use the AP CS-A exam pass rate to gauge my effectiveness as a CS teacher. It's a little mind game that I use for personal motivation. If the AP exam class pass rate average exceeds the state and global average, then I consider that a "successful" year in objective terms. That's what drives me, for better or worse.
As an experienced CS teacher, how has your teaching changed over time?
There are soft skills that are not explicitly written into CS curricula. Students need well-developed problem-solving skills and the ability to focus for extended periods of time, especially at the AP level. About a third of the students arrive with those skills. Another third has some, or part of, the soft skills needed but the final third comes with an underdeveloped soft skill set. In general, I observed that the top third usually scored in the 4-5 score range, the middle third scored a 2-3, the lower third a 1-2.
The top third is the easy group. All I have to do is teach them the code part. Early in my teaching career, I found it disappointing (more so than discouraging) that I was unable to get the other two-thirds over the hump to get a passing AP score. I had a solid understanding of the content, and I covered all the units, but still no significant change in the overall pass rate.
How have you grown as a CS teacher?
It finally dawned on me that a key area I was lacking in was the Pedagogical Content Knowledge (PCK) area, the pedagogical skill specific to each content area. PCK is not spelled out in curricula nor directly covered in PD. Why? IMO it's because PCK is a by-product of one's effort to master their craft. It evolves over time with no plateau except those that are self-imposed.
In my case, the PCK that my lesson plans lacked was the development of abstract thinking, problem-solving, and the focus ability needed for the AP CS-A exam. For a long time, I held the mindset that there wasn't much one could do to develop these soft skills. How can I possibly teach the content, cover all the unit work, and still find time/ways to develop the soft skills?
Well, I'm happy to report that it is possible. It takes a conscious effort to incorporate the soft skills into your lesson plans. In the early stages, it is more work to come up with ways to build these into your lessons but, like anything, once it becomes part of your mindset it naturally becomes part of your prep routine. As my PCK skill set evolved, so too did the student pass rates improve. Given that most HS CS teachers come with little to no background experience in CS, there's a good chance you too may need to develop your PCK.
What are important skills that you help students to develop?
Here's a description of the soft skills in my words as I see them:
Abstract thinking: The ability to see the general nature of things. When you take attendance you call out or scan the classroom. You are utilizing iteration to check each student in your roster(list). Marking present or not is a boolean operation, either the student is present or not. A while or for loop in which each student's boolean variable for present is set to true or false. In coding, abstraction helps you apply the tools and algorithms necessary to answer the question. For example, whether the question asks to find the most expensive car or the student with the highest gpa or the best selling product, the abstraction is that they are all examples of a max algorithm. If they don't see the abstraction, then each problem is unique. A student who sees the abstraction understands it requires the use of the max algorithm, for example.
Classroom Implementation: I assign a Hangman project once the class as a whole has a good understanding of the programming concepts. This project requires the students to "bring it all together". I start with a picture of The Wheel of Fortune game board and a hangman game board to discuss the common traits the two games share, the abstraction in the two games. Both require the user to guess one letter at a time for a certain number of times in order to identify the word. When the user guesses a letter in the word it's displayed. When the user guesses a letter not in the word, there's a penalty (ie: lose turn in Wheel of Fortune or draw body part in hangman). The letters are hidden from the user. The display is used to show how many letters are in the word. This is where abstraction comes into play. How to pick a random word from a list, store and manipulate a string, determine if the letter is in the word, etc. are fundamental concepts. The objective is to help them see they know how to do each aspect on its own. This is a project-level example. I do the same for fundamental concepts, find real world examples of concepts that the students already understand and relate it to the programming fundamental concept. For 'Loop,' say my name N times; 'While Loop,' say my name until told to stop; 'Variables,' storage devices like a shoe box.
Problem solving: The ability to read a problem and break it down into discrete steps. We problem solve without consciously thinking of each step involved in the process. If you line up students in front of the classroom and have a student sort them by age or by gpa they would be able to do so with ease. Ask that same student to document the discrete steps they used to sort the students and you get a perplexed look. The top third have mature problem solving skills b/c it's an often used skill in higher level math for which they've had ample practice. But the other 2/3's need practice breaking down problems b/c it's an underdeveloped skill.
Classroom Implementation: Pseudocode is the short answer. Assign the pseudocode as a pre-assignment. Break the problem down into discrete steps before writing any code. If they can't map it out on paper (in their heads), it won't magically come to them while coding it. Instead you end up with spaghetti code or nothing at all b/c they get frustrated. Their thoughts are all over the place with no defined direction. Pseudocode helps define the direction. This can be done individually, in pairs, in small groups, or as a class. Pros and cons to each grouping type.
Focus: How do you get a kid who is naturally active to sit and focus when their mind is in constant 'wandering' mode? This was me in high school so I empathize. Asking the students to stay focused each minute of each day will wear on even your best students. The high flyers have more tolerance for the daily grind b/c they're accustomed to it.
Classroom Implementation: Proximity, patience, and persistence. Stay on top of them as best you can to refocus them w/o causing irritation. Offer words of encouragement b/c they're probably frustrated more with themselves than the problem itself. Use abstract examples to reduce the complexity in their mind. "If I give you a list of numbers, you can find and report the largest number in the list. How does the code do it?". Hold them to a high standard day in and day out.
The implementation of the soft skills in my lessons has raised the exam scores across the board. I used to leave the lower thirds behind not because I didn't care but because I didn't know how to help them. Now I realize that this subgroup is a true measure of my teaching ability, not the high flyers. Don't get me wrong- I like the high flyers, but they don't test my teaching ability as much as the lower third. The epiphany that covering the unit content is only one piece of the puzzle and that the CS soft skills are equally important to success in the classroom was both enlightening and daunting. Each year I try to do better. If you do the same, I believe you will be pleased with the results in due time.