I view education as a collaborative effort among teachers and students, as both groups strive to learn about unfamiliar subjects and to gain new insights about familiar ones. Within this collaboration, my role as a teacher involves facilitating student learning at many levels. Although my end-of-course evaluations are consistently quite positive, I try to become ever more effective in this role by continually experimenting with new pedagogies and with new combinations of proven techniques. To be effective in my style of teaching, I believe a teacher must build an extensive repertoire of teaching approaches, develop a keen sense of what approaches connect best with specific groups of students, and forge a shared sense of purpose that both instructor and students are working toward common goals. I also find it very helpful to ground my teaching on various basic educational principles.
Since 1997 I have tried to provide practical perspectives and suggestions in my columns, first in the SIGCSE Bulletin and now in ACM Inroads. In these and other articles and books, I draw from numerous books, articles, presentations, and conversations that discuss pedagogies and educational theories, typically focusing on down-to-earth ideas that I can apply in designing curricula and in classroom teaching. Through 2017, I had written 56 columns, which now are being collected, updated, and expanded into a book on the teaching of computing. The book, which is based on extensive experience and informed by computing-education research, is expected to be published by Taylor and Francis in about March 2018. 
In what follows I have selected four illustrative themes which I believe are vital for effective teaching: Bloom's Taxonomy of Education Objectives , active learning, accommodation to diverse learning styles, and listening. I hope that this limited discussion will provide some general insights about my perspectives on teaching and my work with students, both in and out of the classroom.
Although it is easy to state that "student mastery is a goal" for virtually any course, careful consideration is needed to determine just what such mastery might mean. In this regard, I have found the work of Benjamin Bloom  to be quite helpful. Bloom identified six components of understanding, each of which are important for student mastery of a subject [2, pp. 201-207]:
CS2013  from ACM/IEEE-CS merges these levels into three categories, but I find Bloom's full Taxonomy particularly helpful. Bloom's categorization highlights that a full understanding of a topic involves many elements. In addition to knowing terminology and facts, one must be able to apply the material and appreciate how the topic relates to other ideas. In my classes, Bloom's Taxonomy reminds me that I need to encourage students to view a subject from several perspectives, practice with ideas at various levels, and strive to integrate topics.
At a practical level, I want students to tackle a wide range of problems. Simple exercises (e.g., statement of definitions, paraphrasing arguments) may be necessary when a subject is first introduced, but such exercises are not sufficient. I also need to require students to use ideas to solve broader problems and to ask higher-order questions.
In addition, when considering an entire course, I find it worthwhile to consider the overall shape of assignments given. Simple exercises often are easy to write, and they are important to begin the learning process. However, I regularly check that over a semester I have asked students to address questions at the higher levels of Bloom's Taxonomy as well.
To extend this perspective somewhat, computer scientists commonly promote the view that computer science is not the same as programming. However, it often is startling to observe that, in some courses, all exercises are programming assignments. While this might be appropriate in some situations, I think it important that assignments reflect the breadth and depth of a subject, not just activity from a narrow perspective or from just one or two understanding levels.
Much educational research shows that students learn most when they are actively engaged in the subject. For example, passive learning (e.g., lecturing) is much less effective than activities that require students to interact with ideas and techniques. Thus, over the years, my perspective of teaching has evolved, so that I no longer base a course on the amount of material I will discuss during a semester. Rather, I focus on how much students will learn. My goal is to find ways to encourage the students to take initiatives in the learning process.
In some settings, I still use a lecture format as a way to outline or review a subject in a relatively short amount of time. However, I also look for ways that promote active student learning. The following list mentions four of the approaches I use regularly. My columns in the SIGCSE Bulletin and ACM Inroads highlight numerous other possibilities.
Collaborative Learning: Students work through exercises or labs in groups. For most purposes, I encourage groups of size 2 or 3, as such small groups encourage discussion, but make it difficult for a student to hide.
Projects: Working either in groups or individually, students apply ideas to solve a specific problem. For integrative exercises, the resulting work may be 5 or more pages in length.
Discussion Questions: For some courses involving significant reading assignments, students sometimes must submit 2 or 3 questions to be addressed during the next class. Submission is via e-mail, and questions are due at least 6 hours before the class time. I then compile the questions, distribute them to the class (sometimes anonymously, sometimes with attribution), and these questions form the basis for the class itself.
Picking Students Randomly: After giving an assignment, I sometimes tell students that the next class will begin with students presenting answers. To guarantee fairness (and to encourage all to be prepared), the student is chosen (in real time during a class discussion) by a program utilizing a random number generator.
While some of these emphasize large- or small-group work, other techniques require students to work individually. At the same time, I strive to provide considerable encouragement and help.
For example, when my colleague, John Stone, and I developed a lab-based, introductory computing course in 1997, we designed lab exercises for almost every class meeting (e.g., 45-50 labs per semester) — building on pedagogy I had adopted as early as Fall 1992. As I continue to develop this approach, I now begin many class sessions with clicker questions to help students focus on the material at hand. My students then spend most of each class working collaboratively on a series of on-line questions and exercises. I move throughout the classroom answering questions and offering help; my goal is to talk with each group twice during the 50-minute class. When a common difficulty arises in several groups, I lead a group discussion or mini-lecture on that point. Overall, I lecture roughly 4 hours per month; coursework also includes in-class tests and individual programming assignments for homework, but the in-class work focuses on labs done in pairs.
For the past seven years, I have used this type of lab-based course with collaborative learning with a course that introduces imperative problem solving and data structures — supported by C. In this course, material is divided into about 8 modules, each of which starts with introductory material, includes 3-5 labs, and concludes with an integrative project.
Two observations provide insight on the effectiveness of this approach. First, I began this approach in 1992, when I changed the separate, weekly labs (which coordinated with lectures) of the previous semester to daily labs (without lecture). In the new format, the class easily covered about 20% more material than the earlier version. Second, when I began this approach, I typically introduced material during the first part of a class, and students completed lab work for the second part. While I enjoy lecturing and students rated my lectures highly, students quickly learned that they could come to class unprepared. When I reduced lectures to almost zero, students did more homework and were ready to tackle the work at hand. Some additional details of this course are given in [4, 5].
Overall, by placing responsibility for class preparation and lab completion on the students, they had to actively engage the material, they learned more, and their strong ratings for the course moved even higher. In addition, the attrition rate for the course decreased.
Sheila Tobias  and others have observed that different people learn in different ways and respond best to different pedagogical approaches. On a practical level, this suggests that classes should use a variety of formats and pedagogies, so that each student will find activities that fit particularly well with her or his learning style. Thus, in my own classes, I utilize several types of activities aimed to accommodate varying learning styles, including the following:
Use of Text, Diagrams, and Charts: In collaborating with a colleague to develop and revise materials over the years, I have learned that we process information differently. My colleague finds text – sentences and paragraphs – most helpful in communicating ideas. For him, a clear, clean verbal statement is almost always more helpful than a presentation emphasizing diagrams, charts, lists, and tables. My preferred learning style is the opposite; I generally learn best when material is placed within a graphical context. Applying this experience to my classes, I find it often best to present material to students using both a textual and graphical format, or by varying the format. One approach may work better for some students than others, and highlighting both perspectives provides active support for multiple learning styles.
Mix of Group and Individual Assignments: Some students seem to thrive when they can interact with others in a group, while others much prefer an environment where they have the time to work through material on their own. Similarly, within the computing industry, companies often cite the need for computer scientists to be able to work in groups, although sometimes individual effort is essential. To accommodate both learning styles and to prepare necessary communication and work skills, I try to include a mix of both group and individual work within a class. For example, in the introductory computing courses described above, students work collaboratively on labs, but also complete 5-8 programming assignments and take three tests individually.
Mix of Lecture, Individual Activities, and Small Groups: Many of my upper-level courses include a variety of formats. For example, lecturing may provide an introduction to a new subject, students may work individually on some assignments, groups may develop and present talks on specific subjects, and neighbors may work on in-class problems to motivate discussions that follow. By varying the types of activities, I hope that each student will find some class work particularly stimulating and helpful, while no student will find any format unduly tiring or bothersome.
Mix of Oral and Written Activities: As I believe communication skills are vital to professional success in any aspect of computer science, I include written assignments for all courses, and most of my upper-level courses require some oral presentations. At all levels, students write paragraphs to answer discussion questions, make comparisons, and explain results. In collaborative settings, students also must communicate with peers. At the upper levels, students make more formal oral presentations, sometimes giving answers to specific homework questions, lecturing on a section of the textbook, or talking about readings they have done on their own. Occasionally, formal presentations are planned for a full class period, but more commonly the material can be covered in a few minutes. In addition to the merits of gaining experience with technical presentations, students usually are highly motivated to make a clear and careful presentation in front of their peers.
During high school, I became actively involved in the school's plays and musicals -- both as an actor and a technician. During an effective theatrical production, the stage company forms a bond with the audience to create an atmosphere and to reinforce themes. Actors use such techniques as pace, intonation, facial expressions, and stage presence for dramatic effect. Technicians work with such elements as stage design, lighting, and color. As part of this activity, both actors and technicians must pay attention to audience reactions to learn how viewers react and why. Playing to the audience has its risks (individual actors may draw undue attention to themselves and ruin an overall effect), but an effective actor or technician must be aware of the audience and make adjustments as appropriate.
While I certainly do not consider teaching as a subcategory of entertainment, I think my style of teaching does have some elements in common with good theater. During lecture times, I try to read the faces of students to assess reactions, and I worry about pace, intonation, and expressions. At times, I may try a demonstration or other device for to make a point dramatically.
Similarly, during lab times and when reading papers, I pay attention to what students are really thinking. To put this in perspective, when I graded calculus tests during my first years of teaching, I might see a pattern of errors, but it was tempting to dismiss misguided approaches as being the result of time pressures induced by testing situations. However, as I included more labs and had increasing contact with students, I found that some errors might be related to conceptual misunderstandings which I had dismissed earlier. Usually, by responding relatively quickly, invalid suppositions can be reworked before a student has built on a shaky foundation. Once I found new ways to listen, I have heard a remarkable range of surprising ideas. In many cases, when the ideas had serious flaws, I could take advantage of my listening to address the errors. In some cases, I found marvelous new insights.
In addition to lab discussions and assignments, I continue to try a variety of mechanisms to obtain on-going feedback throughout a course. For example, I may ask students to fill out mid-semester evaluations as well as the end-of-course ones required by the institution. Similarly, I may ask students to send me comments through e-mail, or all students in a class may be required to come talk to me during office hours. Such feedback provides valuable information about topics where I should focus class time. I also learn that some topics are understood well, and there is little need to continue to discuss them.
Throughout my teaching, I have found that listening and watching have been vital qualities that have made me a better teacher.
ACM/IEEE-CS Joint Task Force on Computing Curricula, Computer Science Curricula 2013, ACM and the IEEE Computer Society, December 20, 2013.
Benjamin S. Bloom, et al, Taxonomy of Educational Objectives: Handbook 1: Cognitive Domain. Longmans, Green and Company, 1956.
Sheila Tobias, They're Not Dumb, They're Different: Stalking the Second Tier, Research Corporation, Tuscon, AZ, 1990.
Henry M. Walker, "Collaborative Learning: A Case Study for CS1 at Grinnell College and UT-Austin", SIGCSE Bulletin, Vol. 29, No. 1, March 1997, pp. 209-213
Henry M. Walker, "A lab-based approach for introductory computing that emphasizes collaboration", CSERC '11 Computer Science Education Research Conference, Open Universiteit, Heerlen, The Netherlands, April, 2011, ISBN: 9789035819870, pp 21-31.
Henry M. Walker, Teaching Computing: A Practitioner's Perspective, Taylor and Francis, in production Winter 2018; planned publication March 2018.
This document is available on the World Wide Web as
created 23 February 2000|
revised 23 March 2009
updated 1 February 2016
last revised 22 January 2018
|For more information, please contact Henry M. Walker at firstname.lastname@example.org.|