About this course
Why this course?
As the needs of our students evolve—there is, for example, increasing focus on early readiness for research—the Physics faculty are obliged to adjust both what we teach, and how we teach.
There is a rich tradition of innovation in engineering pedagogy at Illinois. Fifty years ago UIUC became the first school to teach its undergraduates to design computers. More recently, our colleagues have become national leaders in successful efforts to improve instructional outcomes in elementary physics. We intend to continue this Illinois tradition by incorporating computational literacy into the set of core competencies to be mastered by our students.
Just as we require physics majors to enroll in courses taught by Mathematics, but teach the applications of mathematics to physics in our own courses, we hope to do the same with programming. We will continue to require that our students take an introductory course in Computer Science, while incorporating into our own courses machine-based approaches to problems that cannot be solved analytically. Examples include chaos and nonlinear phenomena; fluid dynamics; real-world electrodynamics; quantum mechanics of multi-electron atoms.
This course is a first step. From it, we expect that students will come away with a better grasp of complex phenomena and will be prepared to engage with research experiences that would otherwise have been inaccessible. This will bring to the department's scientific efforts the collateral benefit of an enlarged pool of competent research assistants. If we are successful, our methods should generalize to other disciplines in science and engineering.
The technical foundation for physics majors includes material in physics, mathematics, computer science, and chemistry. But though the courses taught outside the Physics Department provide an excellent introduction to important subjects, they are insufficiently dense in application to specific physics topics to stand on their own. We find this to be especially true in mathematics and computer science. Consequently, the Physics Department offers undergraduate and graduate courses on mathematical methods for physics, as well as a graduate course in computation.
In the past we have not offered an undergraduate course on numerical/computational methods in physics, though a few professors have occasionally included computer problems in their classes. For a number of reasons, we believe it is appropriate to change this state of affairs. By simulating physical systems and observing their (simulated) behaviors, students can more efficiently grasp concepts that might be otherwise obscured by mathematical equations. By developing their computational skills, students are better prepared to assist in data acquisition and analysis tasks in a research setting. In addition, about half of our graduating majors choose employment over graduate study; they often report that prospective employers are seeking to hire employees with computational skills.
We will assess the value of this first course on computational methods before embarking on the more ambitious project of incorporating machine-based techniques into the rest of the physics curriculum.
This is a two-hour standalone course that does not assume any pre(co)requisites other than Physics 211, Physics 212, Math 231, and Physics 225. We will not assume prior enrollment in a Computer Science course and will emphasize the use of software in a physics, rather than coding-best-practices context. To allow for portability, we will minimize the use of locally built development tools. This course is a first step in a planned longer-term effort to integrate increasingly sophisticated computational material into the advanced physics courses, perhaps as preparation for a senior-level course in advanced computational techniques.
Our preference is for students to work directly with files holding executable code, using an integrated development environment to create, edit, execute, and debug their programs. We find that Continuum Analytics' Anaconda platform, a free, open source system that includes CA's "Spyder" Scientific Python Development Environment as well as a local iPython notebook server, works nicely. We want our implementation to accommodate stand-alone work by students, e.g., while not connected to an external server.
Most classroom time is spent on group work in which students collaborate in two-person teams, sharing snippets of code so that both members of a team will develop and debug a common program on two laptops.
There will be a machine-based problem set for each unit, one in-class quiz, and a final exam.