Programming for Scientists is a course that was founded by Carl Kingsford and that I have adapted greatly over the past several years. It provides a practical introduction to programming for students with little or no prior programming experience who are interested in scientific applications of programming, especially those taken from computational biology.
Programming topics are motivated from the ground up using scientific problems, so that the course never loses sight of an application. For example, a transition to object-oriented programming is motivated by building a gravity simulator, which we then apply to the moons of Jupiter (see animation above). Homework assignments are also scientific in nature. The only other course I am aware of that attempts to teach programming from the ground up from within a scientific discipline is the CS5 green project at Harvey Mudd College.
Since 2015, I have taught a graduate version of the course that is largely taken by MS students in the Computational Biology Department. From 2016 to 2018, I also taught an undergraduate version of the course for students in Carnegie Mellon’s Mellon College of Science.
I have enjoyed teaching this course so much that it inspired me to build an online course for learners who are interested in learning how to program while seeing programming applied to scientific examples. That online course grew into the Programming for Lovers project.
In the past, I taught the course without any prerequisites, but I noticed that students who had not previously programmed tended to be overwhelmed with the start of the course, when they are learning to think computationally for the first time. Yet many of these students managed to perform very well in the latter half of the course. At the same time, students who had programmed previously were bored to tears with the first month of the course, which covered programming basics.
To help reconcile these two groups and provide a gradual on-ramp for students, I now require students taking the course to complete the first four modules of Programming for Lovers as part of a “programming bootcamp” that they can complete at their own pace over a few months in advance of the course. This ensures more of a level playing field at the start of the course, alleviates boredom, and allows us to delve into deeper and more fun topics in the course itself.
“It’s the most interesting and helpful programming course I’ve ever taken. Phillip demonstrated the materials in a very clear and inspiring way which helped us have a good understanding. The recitation sessions provided by the TAs were also helpful.”
“Great instructor to introduce new concepts to people from non-coding background. He shoots to rewire our brains to think computationally and HE SCORES! Dr. Phillip Compeau is hands down the best professor that I have ever had. I knew him from his coursera course before I got here. I really appreciate his passion for teaching. How many people do you know of, that don’t mind dressing up in costumes (KILLER costumes, by the way) to peak students’ interest in topics that matter? One of the tiny but significant reasons I did the course was to find out what new costume and concept he had in store for us and how he would tie them together. He is brilliant at tying things together. He leaves no loose ends. If I ever find anything that I am half as passionate about as he is about his work, and half as good at it, I know I’ll fare well in life. Thank you, Dr. Compeau. More than you can comprehend.”
“[I have] taken a few ‘intro to programming’ courses, really think this is the way programming should be taught to anyone looking to start programming.”
“Phillip is one of the best professors I’ve had. He was part of the reason I chose to come to CMU, and I’m now all the happier I did. Have to admit, he’s a bit intimidating, but that’s probably just the combination of his height and his IQ.”
“Class has been so much fun – I’ve definitely never been taught programming in such a novel but effective way. Thank you!!”
“I really enjoyed the passion behind each lesson, and especially the contextualization as to how we should use these skills for good (e.g. being wary of algorithmic bias).”
In the course, we approach many different real-world questions taken from different scientific disciplines with a computational slant. Here is a sampling of potential current topics.
Biology:
|
Mathematics:
|
|
Chemistry:
|
Physics:
|
|
Computer Science:
|
Social Science:
|