Photo 1
Philosophy Teaching Training

Teaching Philosophy

The task of being an instructor in Computer Science, for me, falls into two categories: establishing the requisite knowledge to be competitive in the fast-evolving field of Computer Science and developing the necessary skills and critical thinking patterns that will help a student excel in the career they choose. I know that, as time goes on and the field changes, the task of education is not a unidirectional exchange of information, but a learning experience in which the teacher molds their techniques to the student.

The educational experiences of programming and theoretical courses are very different in nature. In a pragmatic sense, programming courses should be taught with a hands-on approach, similar to other successful engineering efforts. I believe in exhaustive exploration of problem domains that have multiple solutions, to challenge the notion of finite, discrete answers to difficult engineering tasks. While quizzes on the definition of a particular topic works well for an algorithms course (or other fundamental and theoretical topics), a coding task utilizing a particular API is much more useful for programming topics. Lectures with illustrative problem domains and intermittent question and answer sections are an excellent forum for theory-heavy academic information, while I prefer the group-work and in-class live coding approaches to programming coursework.

While both topic genres above (theoretical and strict programming) are indelible to the fundamental requirements of a Computer Science education, there is an essential task I feel an educator has to their students, one that reflects in my lecture style and coursework. For each generation of coders, considering the evolution of Computer Science as a field, the fundamental assumptions they learn as young academics are challenged quickly after their education. As an important aspect of my teaching, I make it a point to heavily involve contemporary efforts and programming techniques into my regular lectures. Education is about setting the student up for success, and that involves cursory knowledge in new topics such as scalable and distributed computing, social networking, and new languages that gain popularity. These tools, in conjunction with classic topics in Computer Science, are necessary to maintain the relevance of new Computer Scientists.

In the end, education is about preparing the newest generation of researchers and engineers for a lucrative and successful career in Computer Science. That involves fundamental knowledge, effective techniques, and relevancy in their field. To this end, I have specific approaches to different problem domains within Computer science in order to give my students the best chance of succeeding in a rapidly evolving field