Throughout my years as a college student and subsequently in the field of academia (in a position that puts me “on the other side of the podium”), I have observed that research and teaching are viewed by many as two separate entities bearing no connection to one another. I personally believe, however, that they naturally belong together as two sides of the same coin, as it were. As a researcher in computer science, it is my responsibility to discover new knowledge in my field. Furthermore, it is my obligation to take the knowledge that I have discovered and, in turn, pass it on to others. In a sense, this is a much greater responsibility. I believe that teaching forms the basis that keeps me grounded and realistic, while the research process helps keep me current in my field. Teaching promotes the discipline to which I have devoted a significant portion of my life. It allows me to show people the beauty of computational science.
From my experience, there are a great many educators that employ the use of teaching methods that prompt a memorization strategy. In my opinion, this is ineffectual as it leads to superfluous regurgitation of the memorized material on tests, quizzes, and so on. This does not cultivate an understanding of the material, in my opinion a much more important and idealistic goal. Instead, it engenders a temporary knowledge that is often forgotten soon after an examination. I believe that teaching should employ the use of methods that prompts an understanding of the material. I also believe that just reaching an understanding is often not enough. Encouraging students to come up with their own questions that drive the discovery of new knowledge is crucial. I also believe that the material itself may influence teaching style. For example, theoretical concepts that form the basis for other important ideas in computer science should be presented in such a way as to motivate independent research in order to encourage the discovery of what these concepts are used for and why. Ultimately, enthusiasm in the material presented, in computer science, and in teaching promotes an environment rich in knowledge discovery opportunities for the student.
But how do people learn? This is indeed a perplexing question that, as a teacher, I often ask myself. Although I have no straightforward answer (yet – and I am also realizing that this changes as new generations of students appear in my classes), my experience suggests several factors that influence how people learn. First, the independent fabrication of new knowledge by a student fosters opportunities to find answers to new questions by conflating seemingly disparate ideas. Second, and more importantly, the students' motivation to participate in this construction leads to an elemental confidence in their understanding of the material. This confidence propels further interest which subsequently motivates students to work harder. Assignments can then be made more challenging, yielding more knowledge discovery for the student, more confidence, and a more successful learning experience. Ultimately, I believe that this facilitates the learning process.
There are several specific goals that, through productive teaching, I believe students should achieve. The mindset of lifelong learning is a critical element in a student's “bag of tricks,” particularly in the constantly-changing field of computer science. Through active engagement in the teaching process, students should develop critical thinking and problem solving skills and be capable of using the tools they have been taught to solve problems they have never seen before. Students should be challenged to discover new knowledge and raise their own questions.
My methods of teaching specifically seek to prepare students for real-world problems by providing challenging projects that offer practical solutions. It is typical in an academic setting to set limits thereby trapping the process inside a “box” of sorts, thus promoting a perception that what students do has no consequences. In reality, what we do as computer scientists has consequences; quite often tragic ones. I plan extensively and work diligently. I tend to ask questions without necessarily knowing the answers so as to promote collaborative work in order to find the coveted answers. I tend to put more weight on research papers, projects, and presentations than on rudimentary tests, although I do recognize their importance. I also steadfastly believe that I, as a teacher, have as much to learn from my students as they do from me.
I often mention the adage, “Jack-of-all-trades, master of none.” I alter it slightly to, “Jack-of-all-trades, master of one” in order to emphasize the importance of the journey they are on as students. I use it to emphasize the importance of understanding the “how” and “why” behind the “what.” I find that students who have taken my classes become more inquisitive about computer science and about the world around them. It does not satisfy them anymore to live life using things without understanding how they work. Although I cannot prove it, this inquisitiveness seems to propel a shift in the way students approach class material that leads to more successes and less failures. That is great for production-oriented disciplines like computer science. Furthermore, I find that they accomplish more in less time. This sometimes confuses my colleagues who think that our computer science students have too much to do already and believe that we must abstract away a number of things to make it simpler for them. I vehemently disagree and in my experience have found that, by using a combination of teaching style and providing students with useful tools, they will willingly and gladly follow you as you raise the bar.
Teachers learn from their own teaching. Teachers learn from their mistakes. Teachers learn from their successes. I believe that I am a better teacher because of the research that I perform, and that I am a better researcher because I teach. It is my desire that students who take my classes leave them as better computer scientists; more importantly, however, I hope that they leave my classes as better learners and as better people. The fact that I play a significant role in the development and cultivation of knowledge, comprehension, creative and critical thinking, and judgment is a responsibility that I take very seriously and that I will always be very proud of. Perhaps one day I will be considered a great teacher as defined by William Ward: “The mediocre teacher tells. The good teacher explains. The superior teacher demonstrates. The great teacher inspires.” I want to inspire.
In 2007 while searching for a way to understand how it is that we learn and how I could better teach, I stumbled upon Bloom's Taxonomy of Learning. It begins with knowledge. Knowledge is interesting in that, alone, it does not imply understanding; that is, it is simply information that has to be digested in order to be understood and become meaningful. For example, my Amazon Yellow-Naped parrot has knowledge, but it has absolutely no understanding of the short phrases it utters on occasion. But once we have an understanding of knowledge, its application to new situations results in creative thinking (analysis) that leads to critical thinking (the synthesis of new knowledge) that is subject to judgment. If it passes the test and is therefore relevant, new knowledge is created and the process iterates.
In my teaching, I choose to implement Bloom's Taxonomy of Learning by virtue of a simple feedback loop: input → process → output. To better apply to the classroom, in my practice as teacher I have transformed it to a learning loop: introduce → experiment → debrief. My philosophy begins with the introduction of knowledge. I like to say that, at this point, the students know just enough to be “dangerous” in that they have a thorough understanding of the problem (the main goal) but a limited understanding of its solution(s). A discussion then occurs wherein students are intellectually challenged to come up with possible solutions to the problem. This “back-and-forth” business (with careful direction as teacher) often results in the students themselves discovering tactics that approach the best solution. The selection of a real-world problem that manages to be meaningful to the students is crucial. This makes it personal to them and identifies why it matters. The idea of textbook problems that remove the material from the real world is ludicrous to me, at least in the domain of computer science. At the conclusion of the class, the students work on solving the problem on their own. They are encouraged to discuss generalities so long as the work they ultimately submit is their own. The students experiment. They try and fail many times. Sometimes, they even succeed. But this process of trying, failing, and trying again leads to important discoveries and intuition. The students think critically and creatively. When the class resumes, we debrief and discuss their varied approaches to solving the problem. I encourage the discussion of failures as well because, often, we learn just as much from them as we do from our successes. More importantly, we learn from working through our failures by trying again. In the end, we discuss a “formal” solution and bring it back full circle to show how it functions as a foundational concept of computer science.