Teaching Programming to Reluctant Students

Jeremy A Riousset, APSS, Florida Institute of Technology-Melbourne

I usually introduce my teaching philosophy on the first day of class via the following phrase: Science has not changed as much as the tools to perform it.

Through that simple sentence, I hope to instill the idea that the concepts that my students have learned in their undergraduate courses remain utterly relevant. However, this knowledge can tremendously benefit from advances in technology. I encourage them to compare the technologies behind Buzz Aldrin's first steps on the Moon in 1969 and the future Artemis mission. Dr. Aldrin is the second man to walk on the Moon and the founder of the Aldrin Space Institute at Florida Institute of Technology. For these two reasons, he remains a source of inspiration for our students. I wish for my students to realize the importance of computational methods, especially among students that find the prospect of coding and programming daunting.

Then comes the second step, namely, deconstructing the prejudice. For many, programming, scripting, and coding are synonymous, and mastery belongs to an exclusive crowd: the geeks. Therefore, I typically spend about 10 to 15 minutes of the first lectures explaining what I expect from them and how learning with MATLAB is different from "programming" as they may conceive it. My class will not dwell on mathematic proofs (to my frustration sometimes). It focuses instead on the mechanics of programming, the commonality of all languages: the algorithms. Paradoxically, it is not how I learned, but it is how I teach. I insist that programming is learned rather than taught. The only way to become proficient is through trial and error. Whiteboard demonstration of an algorithm is meaningless until the students experience the frustration and pleasure of finding the bug that caused their code to crash. GRADER lets the students submit a buggy code with no penalty. It encourages multiple attempts and alleviates the pressure of the grade. It becomes a game for the student to reach a solution and develop their skills in a playful setup.

Playful does not mean trivial. To anchor the need for modern tools in science, the students work on a semester-long project that requires learning outside the classroom. For example, one of the projects requires single value decomposition and principal component analysis. Ultimately, I aim to build the foundations so that the students no longer dread programming. Instead, they should leave my class confident in their adaptability and ability to build on their knowledge to solve complex problems. In a mere semester, they have learned to program and understood the similarities between languages. Furthermore, they can implement a known or unknown method and solve both short and long problems.

Overall, I found the students very responsive to this approach. Some even contacted me afterward to express their appreciation of the class. These remain my proudest moment as an instructor and as an individual.

Downloadable version of this essay

Teaching Programming to Reluctant Students (Acrobat (PDF) 130kB Sep9 21)