Teaching Computer Science

Demonstrate and Guide, Teach and Inspire

computer science textbooks on a library shelf

As a professor in York University’s Department of Electrical Engineering and Computer Science, I taught various subjects to students from many disciplines and at each of the four undergraduate levels. In these roles I honed my pedagogical skills to facilitate asynchronous learning and developed my teaching philosophy: demonstrate and guide, teach and inspire.

To tailor my teaching methods for a wide variety of students, I used Neil Fleming’s VAK model, which posits three learning styles: visual, auditory, and experiential (kinesthetic). Although the theory of learning styles is disputed, I still believe presenting concepts in multiple forms increases students’ chances of learning and retaining the material. Students have many demands on their time and attention. In addition to traditional slide decks, I recorded my lectures and developed online videos to demonstrate applied concepts. This allowed for asynchronous learning. Students had flexibility in when and where they chose to learn and review course topics. The online videos are narrated for auditory learners, and fully captioned for visual learners and those viewing in extremely quiet or noisy environments. Experiential learners can follow along with the videos on their own computer, or pause the video to explore ideas on their own.

In Planning and Implementing Assessment (1998), Freeman and Lewis posit that timely feedback benefits learning. In Formative assessment and self-regulated learning (2006), Nicol and Macfarlane-Dick propose that “good quality external feedback… helps students take action to reduce the discrepancy between their intentions and the resulting effects”. Thus, I always returned tests and assignments to students in as timely a manner possible with constructive feedback. This way, students could adjust their programming or study approach and learn for next time.

Students often sought ways to test their understanding of course concepts. In addition to providing review exercises, I suggested that they take the role of the instructor: either “How would explain this concept to a friend?”, or “If you were the instructor, what questions would you ask to evaluate someone’s understanding of the topic?” This encouraged deep reflection on the concept and self reflection on their learning. For students who sought guidance on researching ideas and applying their knowledge, I pointed them to various scholarly databases for journal articles and conference papers — ones that I had often used. As educators, we do not always have the answers, but we have a lot of experience finding answers. Conveying these skills is integral to fostering life-long learners.

My teaching philosophy caters to students of various learning styles and experience levels. I approached teaching with dedication and enthusiasm to inspire the same commitment in my students, and to help them succeed in their academic and professional endeavours.

Computer Fundamentals

This computer science course presented an introduction to computer technology for non-majors. It was required by Biology, Chemistry, Kinesiology, and Psychology departments for their undergraduate programs, and was a popular elective in others. Thus, the student population was very large (approximately 800 per term), with a diverse knowledge background.

I redesigned this course to update its content and produced a series of videos to facilitate asymmetric learning. The videos (linked below) teach spreadsheets, presentation skills, advanced word processing, file systems and organization, and image editing. Students could view and review the videos on their own time on campus, during their commute, or at home. Additionally, they could pause the videos to try out the demonstrated activity, and replay segments, as needed. All videos are closed captioned, and bookmarked with each topic. A detailed description of the redesign is a case study on this website.

In addition to conveying my own interest in the subject being taught, it is also important to relate concepts to students’ daily lives. When presenting the history of computing module, I highlighted the contribution of women to appeal to female students, who comprise the majority of the course. When discussing computer hardware, I had students pretend that they were buying a new computer. On the topic of wireless communication, I outlined threats to information security and how to protect their personal data. My redesign was well-received by students. Participation increased 47%, and exam scores increased 12%.

 Course Videos,  Women in Computing History

Object Oriented Programming using Java

Aimed at students majoring in computer science or engineering, this course introduced Java and object-oriented programming (OOP). It focused on reading and using application programming interfaces (APIs), such as utility classes and the Collections framework (sets, maps, and lists). Students learned about data types, objects, and how objects are created and accessed in memory. The course also taught control flow (if-statements and loops), performing input from and output to files, regular expressions, and exception handling.

The course was updated to include circuit-building lab exercises. These exercises required using LEDs, wires, breadboards, and writing Java code to handle input events from sensors and triggering output to activate actuators.

Algorithms and Data Structures

Building upon the introductory course on OOP and using APIs, this course focused on implementing APIs. We discussed the OOP concepts of aggregates versus compositions, inheritance hierarchies (attribute visibility, overriding methods, abstract classes versus interfaces, and inner classes), generics, and building graphical user interfaces using the Model-View-Controller (MVC) design pattern. This course also introduced recursion (both implementation and informal proofs of correctness), searching and sorting algorithms (including quicksort and merge sort), implementing linked lists, stacks, queues, and binary trees, and informal analysis of algorithm complexity using big-O notation.

Towards the end of the course, I added the “Maze Solver” lab exercise to demonstrate traversal of linked data structures. It also has the side effect of illustrating depth-first search in an acyclic and then cyclic graph, even though these topics would not be formally introduced until upper-year courses. I wanted to pique students’ interest, so I highlighted some real-word applications of such algorithms (e.g., route determination in GPS navigation devices, and optimal path calculation for air travel).

Professional, Legal, and Ethical Issues

In a departure from the technical aspects of computer science, this course discussed the professional, legal, and ethical issues in the development, deployment, and use of computer systems. Specific topics included ethical theories, the impact of computing technology on society, privacy and security, computer crime, malware, intellectual property, legal issues, and professional responsibilities.

This course invited guest lectures to highlight the application of course topics to industry. The guest lecturers I recruited included Fred Carter (Senior Policy and Technology Advisor, Office of the Information and Privacy Commissioner of Ontario) and Daniel Tobok (CEO of Cytelligence Inc.).

Human-Computer Interaction

This cross-disciplinary course began by presenting the evolution of HCI from the human factors area of psychology, with a focus on empirical study and the scientific method. This included discussions on the development and evaluations of input devices (e.g., mouse) and interaction techniques (e.g., direct manipulation of graphical objects, such as icons, windows, and menus). After summarizing human perception, we discussed design guidelines (e.g., Norman’s Principles and Shneiderman’s Golden Rules) and heuristics that highlight human perceptual tendencies (e.g., Gestalt principles), cognitive limits (e.g., Hick-Hyman Law), and physical limits (e.g., Fitts’ Law).

The primary learning objective of this course was for students to design, conduct, and write-up a quantitative empirical user study. To that end, we discussed forming a testable research question, design considerations for a user study, recording observations, performing and interpreting ANOVA and post hoc comparisons, and writing a research paper based on the ACM SIGCHI paper format.

The course finished with a discussion on interaction paradigms, including time sharing (e.g., cloud computing), personal computing (e.g., graphical user interfaces), information access (e.g., the Web), computer-supported cooperative work (e.g., simultaneous editing of a collaborative document), agent-based interfaces (e.g., Amazon’s Alexa), ubiquitous computing (e.g., smartphones, tablets, and smartwatches), and context-aware (e.g., collision avoidance systems in vehicles).

Student Feedback Comments

Awards and Nominations