You are here

Teaching Philosophy

I am a dedicated computer science educator with more than five years' experience designing and delivering effective curriculum.  Through mindful practice and refinement, I have developed a proven teaching philosophy that is active, inclusive, and research-based.

Active Learning

Ken Bain [1] pointed out that one of the common values among top college professors is that knowledge is constructed, not received.  In computer science, we help students construct their knowledge through practice in assignments and lab exercises.  I believe this is necessary, but not sufficient — active learning should extend to lectures as well.

In small group settings, such as outreach and professional workshops, incorporating active learning techniques is straightforward.  I commonly plan workshops that intersperse short bursts of lecture with opportunities to actively think.  For some topics, this means introducing a single concept, then asking students to complete a related exercise. For example, I might illustrate to beginners how a loop works with an analogy and simple code example, and then ask them to accomplish something specific with a loop of their own.  Hands-on activities, such as those from CS Unplugged [2], also provide an effective structure for explanation and practice.

It is more challenging to incorporate active learning in the larger lectures that are typical of lower-year computer science courses.  However, I have successfully implemented several active learning techniques for classes with as many as 440 students.  The most obvious technique is live coding: I write code at the front of the room, and students are asked to guide me in the next steps I take.  Live coding is especially effective when students code along, experiment, and ask lots of questions.  However, many students choose to watch passively or are too shy to participate in class discussion.

To provide more opportunities for everyone to think actively, I use polling and peer instruction [3, 4].  I present a multiple-choice question that tests conceptual understanding, and ask students to vote for the correct answer on their own.  After looking at voting results, I then ask students to discuss their answers, ideally with somebody that answered differently.  If a student is confident in their answer, they can help others improve their understanding.  Confident or not, students benefit from the opportunity to organize their thoughts and practice articulating the lecture’s concepts.

Some active learning techniques, such as physical activities, may seem uncommon in computer science, but have been employed successfully for many years [5, 6].  Even in large classrooms, I have used guided activities with physical manipulables.  For example, I have used cards to teach binary numbers and small group games to teach algorithms.

Inclusive Classrooms

It is particularly important to me that my classrooms are welcoming and inclusive.  My goal is to ensure that all students, particularly women and other underrepresented groups, feel like they belong and can succeed.  Achieving inclusivity means being mindful of both course content and classroom practices.

Presenting course content in an interesting context is a known way to improve retention and increase students’ sense of relevancy [7].  The choice of context is important.  Though men are often interested in computers and programming specifically, some men and many women prefer to view them as tools to accomplish something. Meaning is often found in the connection between computing and other fields [8].  Based on this, I try to create problem contexts that connect to something students would enjoy regardless of their interest in computing, such as interactive stories and animations.  I also aim to avoid examples that may not have broad appeal, such as those based on professional sports [8].  I often use games as a context, and must be careful to choose games that everyone would understand and enjoy.  In the future, I would like to poll students to discover what real-world issues they care about, and design examples and assignments based on the results.

The classroom environment can also affect inclusivity.  I aim to make everyone comfortable asking or answering questions in class, and I never treat any question or answer as unintelligent.  However, members of underrepresented groups are often too shy or afraid to speak up during class, so I try to provide opportunities for everyone to speak in smaller groups using the polling and peer instruction techniques discussed above.  I am mindful of stereotype threat [9, 10], and emphasize a growth mindset [11].  I have grown to believe that anyone can learn about computing if they are willing to put in the effort; it just takes longer for things to “click” for some students.  I often remind students that some of the best programmers I know today failed at least once.

Research-Based Practice

It is not enough for me to believe that a particular approach to education works.  As much as is possible, I try to base my practice on research in both learning and computer science education research.

For instance, the efficacy of polling and peer instruction has been shown more than once [3, 4, 12].  Further to this, guessing on a multiple choice question will actually help students learn better [13].  Some of my concept questions include information requiring a guess, and I often remind students that research shows guessing first helps to encourage them to participate when their confidence is low.

My course designs are also based on research.  I have drawn inspiration from the Guidelines on Learning that Inform Teaching at MIT [14], a handbook that provides actionable summaries of learning research ranging from inclusivity to engagement.  Although not geared toward post-secondary education, the U.S. Department of Education’s handbook on Organizing Instruction and Study to Improve Student Learning [15] also contains valuable ideas.  For example, the report suggests there is strong evidence that multiple quizzes are effective.  As a result, I use at least three quizzes throughout a semester instead of one midterm.  Work on applying Bloom’s taxonomy to computer science education [16, 17] has also influenced how I organize my assessment.  On every quiz, for instance, I start with written conceptual questions followed by code reading and then code writing.

Finally, I not only make use of existing research, but contribute my own as well.  I have several publications related to teaching, learning, and outreach [18, 19, 20, 21], and recently began a project to compare the long-term effectiveness of Python and Processing as languages in our CS1 course.


[1] K. Bain, What the Best College Teachers Do, Harvard University Press, 2004.

[2] T. Bell, M. Fellows and I. Witten. [Online]. Available: [Accessed February 2015].

[3] E. Mazur, "Peer instruction: Getting students to think in class," in AIP Conference Proceedings, 1997.

[4] D. Zingaro and L. Porter, "Peer Instruction in computing: The value of instructor intervention," Computers & Education, vol. 71, pp. 87-96, February 2014.

[5] J. J. McConnell, "Active learning and its use in computer science," in Proceedings of the 1st conference on Integrating technology into computer science education (ITiCSE '96), 1996.

[6] S. Pollard and R. C. Duvall, "Everything I needed to know about teaching I learned in kindergarten: bringing elementary education techniques to undergraduate computer science classes," SIGCSE Bull., vol. 38, no. 1, pp. 224-228, March 2006.

[7] M. Guzdial, "Does contextualized computing education help?," ACM Inroads, vol. 1, no. 4, pp. 4-6, December 2010.

[8] J. Margolis and A. Fisher, Unlocking the Clubhouse: Women in Computing, The MIT Press, 2003.

[9] National Center for Women & Technology, "Talk with Faculty Colleagues About Stereotype Threat," February 2013. [Online]. Available: [Accessed February 2015].

[10] A. E. Bell, S. J. Spencer, E. Iserman and C. E. Logel, "Stereotype Threat and Women's Performance in Engineering," Journal of Engineering Education, vol. 92, no. 4, pp. 307-312, 2003.

[11] M. Guzdial, "Anyone Can Learn Programming: Teaching > Genetics," 14 October 2014. [Online].

[12] B. Simon, M. Kohanfars, J. Lee, K. Tamayo and Q. Cutts, "Experience report: peer instruction in introductory computing," in Proceedings of the 41st ACM technical symposium on Computer science education (SIGCSE '10), New York, 2010.

[13] R. Potts and D. R. Shanks, "The benefit of generating errors during learning," Journal of Experimental Psychology: General, vol. 143, no. 2, pp. 644-667, 2014.

[14] Teaching and Learning Laboratory, "Guidelines on Learning that Inform Teaching at MIT," 2008. [Online]. Available:

[15] H. Pashler, P. Bain, B. Bottge, A. Graesser, K. Koedinger, M. McDaniel and J. Metcalfe, "Organizing Instruction and Study to Improve Student Learning," National Center for Education Research, Institute of Education Sciences, U.S. Department of Education, Washington.

[16] U. Fuller, C. G. Johnson, T. Ahoniemi, D. Cukierman, I. Hernán-Losada, J. Jackova, E. Lahtinen, T. L. Lewis, D. M. Thompson, C. Riedesel and E. Thompson, "Developing a computer science-specific learning taxonomy," SIGCSE Bull, vol. 39, no. 4, pp. 152-170, 2007.

[17] C. W. Starr, B. Manaris and R. H. Stalvey, "Bloom's taxonomy revisited: specifying assessable learning objectives in computer science," SIGCSE Bull, vol. 40, no. 1, pp. 261-265, 2008.

[18] G. Carmichael and C. Stewart-Gardiner, "Gram’s House: Encouraging Girls to Consider Computer Science Through Games," in Grace Hopper Celebration of Women in Computing, 2013.

[19] G. Carmichael, K. Compton, E. Gee, G. Smith and C. Stewart-Gardiner, "New Perspectives on Gender-Inclusive Game Design," in Grace Hopper Celebration of Women in Computing, 2014.

[20]  G. Carmichael, R. Biddle and D. Mould, "Understanding the Power of Augmented Reality for Learning," in Proceedings of World Conference on E-Learning in Corporate, Government, Healthcare, and Higher Education 2012, 2012.

[21] G. Carmichael, "Girls, computer science, and games," SIGCSE Bull, vol. 40, no. 4, pp. 107-110, 2008.