Natural law is about change. The change in the height of a glider is proportional to the angle of attack of its wings. The change in the speed of cars on a road is proportional to the number of cars. We understand nature in terms of flux and fluctuations. The language needed to describe this change is that of differential equations, which are notoriously difficult to solve. They are so difficult, in fact, that the vast majority of them must be solved by computer.
Practical Numerical Methods with Python teaches you how to do exactly that. The course gives students the tools to examine a real-world problem and solve it using a computer. In the process, students learn the fundamentals of programming, scientific computing, and the open-source world.
A LITTLE ABOUT ME
I’m a Ph.D. student studying numerical relativity (i.e., how to solve the equations of general relativity using computers) at the Perimeter Institute for Theoretical Physics. To help educate our fellows at the Perimeter Institute, my Ph.D. supervisor and I organized an informal weekly seminar to teach our fellow researchers about using numerical methods in Python. We organized our curriculum around Numerical Methods With Python and had our attendees enroll in this MOOC as well.
The course is team-taught by three different instructors across the world.
In the collaborative spirit that permeates Numerical Methods With Python, the course is team-taught by three different instructors across the world. All three are numerical-method experts who push the envelope of what problems can be solved using these techniques. They are Professor Lorena Barba, Dr. Ian Hawke, and Professor Carlos Jerez. (Professor David Ketcheson of King Abdullah University also contributed to course planning, but ended up not teaching the course because his local numerical methods course was cancelled.)
Professor Lorena Barba is an associate professor of engineering and applied science at George Washington University. She leads a research group that studies computational methods with a focus on problems in physics and biology. Her group has studied topics as disparate as molecular dynamics, the aerodynamics of flying snakes, and using graphics cards to accelerate computational problem solving. Professor Barba won the “Rising Star Teaching Award” from the University of Bristol in 2008 and the NSF Early Career Faculty award in 2012, and she is currently an NVIDIA CUDA Fellow. She is also increasingly interested in education; Numerical Methods in Python contains many of the elements that she has advocated for, in particular interactive learning through the IPython notebooks.
Dr. Ian Hawke is a researcher and instructor at the University of Southampton. Dr. Hawke is a leading expert in my own field, numerical relativity. He uses computers to study the catastrophic astrophysical events that create gravitational waves, such as black holes and neutron stars. In particular, Dr. Hawke is an expert in the computational relativistic fluid dynamics required to study these extreme objects. Dr. Hawke is a developer and maintainer of the Whiskey Code and Carpet Mesh Refinement Code for the Einstein Toolkit, which is a large numerical relativity codebase used by hundreds of researchers around the world.
Professor Carlos Jerez-Hanckes is a professor of electrical engineering at Pontifical Catholic University of Chile. He is a leading expert in numerical methods for electromagnetism and he simulates phenomena like laser light passing through a crystal or the electromagnetic field inside a piezoelectric speaker. Professor Jerez-Hanckes has authored chapters in textbooks such as Integral Methods in Science and Engineering.
Professor Barba proposed Numerical Methods in Python as a new kind of MOOC. Most online courses have many video lectures, which often have high production value. Numerical Methods in Python has almost none of that (Editors Note: Read Professor Barba’s Why My MOOC is Not Built on Video). Over the course of the class, there were a total of two video lectures, which were simply some hand-drawn slides on a tablet with a voice-over by Professor Barba. Instead, the bulk of the class material is presented through IPython notebooks. (IPython is currently in the process of rebranding into Jupyter.)
The bulk of the class material is presented through IPython notebooks
IPython notebooks are interactive documents. You can put anything into them: nicely formatted text, pictures, even videos. But most importantly, they’re executable. You can type a snippet of Python code into an IPython notebook and run it. This means that the instructors can explain a problem, describe the numerical method to solve it, and offer an example that the student can play with and extend—all in the same document. A piece of an IPython notebook from the first lesson is included below.
The IPython notebooks are motivated by a rejection of the traditional model of education—one that arguably still guides most MOOC’S—where instructors transmit information and students receive it. Instead, the instructors prepare an IPython notebook for students to play with, explore, and expand upon. The result is something much more interactive than traditional coursework, despite the large student to professor ratio. And for me, at least, it worked incredibly well. I found working through IPython notebooks much more fun than watching video lectures, and I think my fellows and I at the Perimeter Institute retained much more information than if we had absorbed it passively from a video.
The instructors are all incredibly responsive to questions. Students could reach them on the course forum, which by the end of the course was a thriving community where students helped each other, and on social media, especially Twitter. In a course with over ninety active participants, it’s easy to feel left out, but the instructors did a fantastic job of making everyone feel included and heard.
CURRICULUM: BREADTH VS. DEPTH
As the name implies, Practical Numerical Methods With Python aims to be practical. It assumes no prior programming experience and it covers a broad variety of topics, including simple ordinary differential equation methods, to computational fluid dynamics, reaction-diffusion problems such as one might encounter in computational biology or chemistry, and boundary value problems such as one might encounter in electrical engineering.
There is a price to such breadth, however, and that price is depth. Many times, I felt the presentation was a little too mathematically simplistic. All of the numerical methods covered are deeply interconnected by a number of mathematical formalisms (such as finite differences or functional analysis), but this interrelatedness was not explored. Instead, the methods are motivated and described on a case-by-case basis. The result is that the field feels a bit disconnected and disjointed, especially in the computational fluid dynamics section. Some of my fellows at the Perimeter Institute felt confused by this picture. There is a more unified picture, and I wish it were presented.
However, I think the instructors did the best possible job considering their constraints. This course seeks to give as many people as possible the foundations they need to solve difficult problems numerically. And in this goal, it succeeds admirably. So although I would have liked to see some topics covered in more depth, I think the instructors struck the right balance.
A student’s success on each section of the course is evaluated by one multiple-choice test and one programming assignment. The multiple-choice bit isn’t hard…you’ll pass if you were awake when you read the IPython notebooks. The programming assignments can be quite a bit harder, and you’re expected to struggle with them. They usually force you to take the examples presented in the lessons and build on them to solve a related, but new problem. I recommend trying them blind and then going to the class forum to ask for help when you get stuck.
The course website states that “[we] assume only a background in vector calculus, linear algebra, and differential equations…[and no] more than a beginner’s programming experience”. This is pretty accurate. Indeed, one really only needs to understand what a differential equation is, not how to actually solve one, in order to participate in this course. A typical university course in differential equations is an overview of techniques to solve differential equations by hand, and none of those techniques are relevant here. As far as programming experience goes, I’d recommend you know what functions and for-loops are…but pretty much everything else is introduced in the coursework.
The class is very much self-paced and the online course never officially ended, so you can devote as much or as little time as you like per week.
The class is very much self-paced and the online course never officially ended, so you can devote as much or as little time as you like per week. Indeed, the course material was released quite slowly; I often found myself waiting for new material to be released. On the other hand, you need to devote a certain amount of time each week to the material or you’ll start to forget. I think it’s reasonable to expect to spend a minimum of three hours per week and get everything you want out of the course.
Practical Numerical Methods With Python doesn’t just teach its students numerical methods—it also teaches them how to be good scientists and netizens. Open-source and scientific ethics permeate the course structure. All of the IPython notebooks are housed on the collaborative website GitHub and distributed through the Git version control system, which is exactly how the open-source and scientific communities collaborate among themselves.
Practical Numerical Methods With Python doesn’t just teach its students numerical methods—it also teaches them how to be good scientists and netizens
And the commitment to open-source ethics is more than skin-deep. The instructors make a serious effort to treat the course itself as an open-source project—more than once, a student has found an error in the course materials and submitted a correction through a “pull-request” on GitHub. The instructors also encourage and publicize efforts that build on their lessons. For example, they have created a “project repository” on GitHub where students can submit code that they’ve written based on the techniques they learned in the course. In other words, the instructors are teaching by example how an open-source or scientific project should be managed.
Of course, this structure has educational benefits. In her talk at the 2014 OpenEdX conference, Professor Barba said, “The people who benefit the most from open educational resources are those who create them.” Therefore, if students are encouraged to create their own teaching materials, they will learn more. This isn’t a new idea, of course. We’ve known since Roman times that we learn by teaching. So in many ways, open-source ideals and educational techniques are a match made in heaven.
Practical Numerical Methods With Python must have gotten something right, because it’s started its own minor movement. Inspired by this course, Professor Phillip B. Stark at U.C. Berkeley has converted his course on the statistics of auditing and litigation into IPython notebooks and placed them on a repository on Github. Dr. Juan Klopper has converted Professor Gilbert Strange’s MIT course on linear algebra into a set of IPython notebooks. And a section on the numerical convergence in Practical Numerical Methods with Python has inspired a community discussion that eventually resulted in the beginnings of a whole open-source textbook on testing scientific code. Practical Numerical Methods with Python has been so successful in improving the broader community precisely because the creators have embraced the open-source ethics I describe above. Now it’s part of something bigger, and that’s exciting.
Overall, I found Numerical Methods with Python to be practical, educational, fun, and innovative. The IPython notebooks make working through the material a blast, and I think I retain it better. Although the course doesn’t cover its many topics as deeply as I would like, the depth is sufficient enough that a student can walk away and solve a new problem not covered in the class. The course teaches not only numerical techniques but open-source and scientific sensibilities, indoctrinating students into the open-source community.
In summary, the course name is slightly wrong. It should be called Practical Numerical Methods and Open-Source/Scientific Ethics from the Ground Up with Python. But I guess that’s a mouthful.
Review by Jonah Miller. Jonah is a Ph.D. student studying numerical relativity at the Perimeter Institute for Theoretical Physics. In his spare time, he tries to make physics and math accessible for everyone on his blog. You can also find Jonah on Google+ or Twitter.
Class Central is looking for reviewers and regular contributors. If you’ve ever finished a MOOC and want to write a critique to help future students considering taking that course, we want to hear from you. Drop us a mail.