In my graduate education as a biomedical engineer, I have had the opportunity to both teach and develop material for a biomedical simulations course with an emphasis on high performance computing. I find that a key part of learning for an engineer is putting abstract concepts into practice—and the lab component of a course is the perfect place to do that. Students are happy to spend additional time outside of the lecture format if it is an engaging environment where we can all troubleshoot together. It is my aim to create a collaborative environment and always connect concepts to either students’ other work or a realistic example they might encounter later in their careers.
Having served as teaching assistant for a biomedical simulations course, I have experience teaching a course that blends concepts from both computer science and engineering. The activities and problems I developed incorporate applied computer science concepts, such as parallel computing, to traditional engineering problems such as fluid dynamics, genome subsequence searches, or solving Poisson’s equation. As engineers continue to incorporate simulation into part of their development processes, helping students to bring this part of their outside work or research to the class and apply high performance computing and software engineering concepts to their research has been a fulfilling process.
Active Problem Solving in the Class
In both Fall 2017 and Fall 2018 I served as the teaching assistant for Computational Foundations of Biomedical Simulations. The course had a mix of senior undergraduate students and graduate students. Teaching the lab section of the course for two semesters afforded me the opportunity to incorporate feedback of both my teaching and the material I developed in the subsequent year. For example, students in the first year of the course indicated to me in self-administered surveys that the fact that the lab material was not in sync with the lecture did not enhance their learning. Therefore, the next year I built off their feedback and re-arranged the lab sections and content within the labs to more closely follow the lectures. Students received a topic or toy problem that was introduced in the lecture, that became the initial learning problem in the lab section later in the week or the subsequent week.
One aspect of my teaching that I found successful was that I engaged with the class directly by doing a modified version of individual activities. Initially, I would instruct the class to work individually and then in small groups on a parallel computing problem, such as computing summary statistics of a large dataset with distributed parallelization. Finally, I started to work the solution out on the board. At key decision points of the problem I solicited the class for what the next step should be and facilitated discussion between groups on which of their approaches might be the most apt for the problem at hand. Allowing the students to come to a consensus of what was the correct approach rarely called for my intervention and allowed the class to naturally arrive at the solution. In this way, students are able to share their knowledge with each other and to fill in each other’s gaps. Due to this more organic approach, there were more than a few instances where the students developed a more efficient solution than was anticipated.
When working on coding and interactive problems together, it was easy at first to project my code onto the board and type the solution we developed. However, one thing I quickly realized was that my typing is too fast, even if I wasn’t presenting a prepared solution. As I switched to writing code on the board, I realized that this was more effective as the pace of this approach allowed the class time to type up their own versions and test their own code as I wrote. Additionally, by removing the computer the students had to interpret the program on their own and simulate what they thought would happen before guessing and checking.
In post-semester surveys, students have said that they enjoy the active and group problem solving in the labs that I developed and when asked whether they would like more of a recitation-type lab or an active lab they overwhelmingly asked for more active problem solving. As a result of this type of teaching and the class emphasis on projects of importance to the students—there have been several example of class projects turning up in poster sessions around campus.
Daniel was super helpful, and always made extra time to help with the homework when needed. He was super responsive on piazza and in person, and was a great resource for the class. He definitely helped me grasp the concepts very well, and was friendly and just a great teacher overall!
Through my experiences teaching in the classroom and mentoring outside of the class, I have realized that teaching is an incredibly challenging, but also rewarding experience. I strive to be aware of the needs of my students, respond to their feedback, and proactively adapt because each group of students can be quite different (undergraduate vs graduate, etc.). The rewarding part comes from seeing the growth in the students throughout the semester and after.