I am currently teaching two sections of COMP 123: Core Concepts in Computer Science. This is an introductory computer science course teaching programming skills and concepts using Python.
Below are some of the techniques that I am presently using in my courses to facilitate students learning at different stages of their learning cycles. Learn more about my flipped classroom here.
Before Class: Kickstart Students' Learning of New Material
Interactive Textbook Readings for Computer Science ClassesFor Comp 123 at Macalester this term, one of the textbooks is Think Python: How to Think Like a Computer Scientist an online interactive text book that allows students to both read course material and try implementing the material in small scripts embedded in the pages of the book. This book has multiple choice and true/false questions to check students conceptual understanding of the material. There are also excerises that allow students further programming practice.
During Class: Deepen Understanding & Build Confidence
Individual In-Class Labs & Activities for Computer Science ClassesIndividual in-class activities for computer science courses aim to deepen and hone students understanding of course material by encouraging students to experiment in an actual programming environment. During these activities, students are directed and encouraged to try various approaches to problems. By explicitly encouraging experimentation, students discover organically programming principles, common syntax issues, and how to address avoid programming missteps. This organic process naturally deepens students understanding of the course material. Additionally, this experimentation based activities also strengthen students' confidence both in their programming skills and in their programming process.
Paired-Programming LabsIn addition to developing students' skills and confidence, the paired-programming labs emphasize students' ability to effectively communicate with others about code. In pairs, students act as either the navigator, dictating how a particular program should work, or the driver, typing the actual code as well as asking the navigator for further clarifications. In this restricted environment, students are challenged to discuss code in less technical language and are encouraged to learn from each other's programming styles.
Reflective Activities: Supporting the Learning Cycle
Code Books for Computer Science CoursesStudents in my computer science courses are expected to maintain a code book throughout the course. This bounded notebook should contain all their reading notes, notes from class meetings and in-class activities, as well as all their scratch work for homework and in-class activities. The purpose of the code book is to give students a place to put all their ideas, questions and thoughts about the material for the course. These code books also give students permission to take notes that facilitate and support their unique learning. I collect the code note books a few times per term to gain further insight into my students' learning and coding process.
Computer Scientist of the weekFor both my computer science courses, my students play a weekly game that challenge the notion that one's mathematical or technical abilities are innate. With a chocolate bar as the prize, students could have fun without having the game being tied to their grades. The first student who identifies a computer scientist from an image, identifies a contribution to computer science made by that person, and shares a fact about that person wins the game for that week. One goal for this version of the game is to show that computer science is a very young field that is still rapidly growing and evolving. Additionally, students learn some context that has led to the technology that they are learning in my course and the technology that we all rely on in our daily lives.