I taught my first CS class in 1984. Since then my teaching has slowly transitioned from a "sage on the stage" to a "guide on the side" approach. The following is a snapshot of my views, on how to be an effective CS educator, as of March 2008. These views are dynamic—they change and adapt as I grow and learn more about teaching and learning:
- I believe that computer scientists should be prepared for change. Our field evolves very fast compared to other disciplines—it practically "redefines" itself every 5-10 years, in terms of development paradigms, programming languages, hardware, and software. This has implications for both teachers and students:
- Teachers should prepare their students for life-long learning. This is difficult to do if teachers do not practice life-long learning themselves. Therefore, CS educators should stay current, possibly by attending conferences, reading professional journals, or contributing to the field’s evolution—through research, scholarship, and service. A teacher is a scholar.
- Students should learn how to learn. This cannot be taught directly. It has to be acquired experientially, hopefully through exposure to a well-designed curriculum and progressive challenges. Students have to be self-motivated and hard-working. Moreover, they must understand that when a teacher challenges, it is not for challenge's sake, but to help them reach their potential. A student is an apprentice scholar.
- I believe CS educators have an ethical obligation to produce competent professionals—professionals with a strong technical foundation who can deal with the complexity of today’s software development. Our graduates need to know how to pay attention to detail and be able to deal with all aspects of software development—specification, design, implementation, testing, documentation, and maintenance.
- I aim to teach long-term concepts as opposed to the programming languages and technology du jour. Although students should be exposed to state-of-the-art tools, this should be done in the context of theoretical concepts. Tools become obsolete within a few years, but concepts last a lifetime.
- I am a strong advocate of collaborative learning.
- (The following quote captures part of the inspiration:) "For collaborative learning to be effective, the instructor must view teaching as a process of developing and enhancing students' ability to learn. The instructor's role is not to transmit information, but to serve as a facilitator for learning. This involves creating and managing meaningful learning experiences and stimulating students' thinking through real world problems." (from A.A. Gokhale, "Collaborative Learning Enhances Critical Thinking," Journal of Technology Education 7(1), Fall 1995.)
- Collaborative learning should be done carefully and progressively, as students must develop their own skills and be protected from the "leader-follower" syndrome. Otherwise, weaker students tend to follow the ideas of one or two stronger students without really thinking (and learning) for themselves.
- I assign in-class collaborative exercises in all my courses. I ask students to work in groups of two or three towards a common goal, such as tracing a challenging algorithm, or commenting on a reading assignment. I find that this helps students master new concepts better than if they worked on their own.
- Collaborative learning improves retention of underrepresented students since such experiences break down communication barriers and introduce mutual respect and camaraderie.
- Starting in the first programming course, I like to introduce pair-programming exercises to expose students to group dynamics and help improve communication and people skills (e.g., see Laurie Williams, "Lessons learned from seven years of pair programming", ACM SIGCSE Bulletin 39(4), Dec. 2007.)
- I am exploring inquiry-based learning in the classroom.
- (The following quote captures some of the inspiration:) "Will you ever just walk into class and ask, 'Okay, what do you want to study today?' Of course not. Inquiry-based learning is founded on students taking the lead in their own learning, but it still requires considerable planning on your part. Projects must fit into your larger program structure, goals and plans, but the students will be actively involved in planning the projects with you and asking the questions that launch their individual inquiries." (from "How to Develop an Inquiry-based Project", EDC YouthLearn Initiative.)
- I believe that CS educators should try to incorporate results from their scholarship into the classroom, whenever possible, through lecture, assignments, special project courses, and curriculum development. This makes them look relevant to their students and can be very motivating - it shows that, after all these years, teachers are still learners themselves (see item 1 above).
- I make myself available on campus during office hours and beyond, as well as via email communication. I provide needed support to all students. Sometimes I use the Socratic approach—I ask questions to help students find the answers they seek. Manytimes, they are surprised to see that they already knew the answer, they just had to piece it together - the "Aha!" moment.
In closing, I try to maintain high standards for my students. I try to challenge them in ways that benefit and provide a sense of accomplishment. It takes very little time to develop trivial or impossible assignments—good assignments require creativity, sensitivity to student capabilities, and observance of learning objectives as identified in the course syllabus.
What makes my work as a teacher meaningful over the years is the hope that my colleagues and I (through our individual and perhaps complimentary teaching styles) are helping produce competent computer scientists—individuals who are valuable contributors to the profession and society. Given that computing permeates and shapes society, this hope is not a small thing.