*Ideas in Mathematics* is a liberal-arts mathematics course at the University of Pennsylvania, taken by many humanities, nursing, and elementary education majors to satisfy a distribution requirement. Over the last several semesters, I have been teaching two versions of the course. The first is a regular, "in-class" version for Penn undergraduates. The other is an online "distance learning" course for a varied audience consisting of high school students, adult continuing education students, Penn alumni, and a few regular Penn students. The online version involves weekly webcasts in place of regular class sessions and features chatroom-based office hours. Both versions rely on a suite of web-based courseware for student collaboration, communication, and assessment. For the in-class version I have relied on the Blackboard system, and for the distance learning version I have been using software developed by eCollege.

Dennis DeTurck is Professor of Mathematics at the University of Pennsylvania.

The goal of the course is to get every student excited about and involved in at least one aspect of the mathematics that we do. The curriculum of the course is loosely based on the COMAP textbook, For All Practical Purposes, involving strands that include

- graph theory,
- number theory,
- combinatorics,
- probability and statistics,
- geometry and fractals,
- game theory,
- voting and apportionment,
- data encoding, and
- encryption.

Often two or more of the strands are running simultaneously, in an effort to appeal to most of the students at least some of the time -- and to address the related issues of impatience and short attention spans! For example, the course begins with graph theory -- which is covered in the COMAP book -- and number theory -- which is not.

The point of this article is not to describe the distance learning or e-communication aspects of the course, but rather to describe one of the strands that runs through and supports the entire course, simultaneously providing a medium for experimentation with various concepts and, more importantly, a framework for mathematical thinking. The advertised purpose of this strand is to teach a little web-based programming in HTML and Javascript. The deeper purpose is to involve students in the highly mathematical activity of programming and -- as a subconscious byproduct -- proving theorems.

Throughout the course, students engage in activities that simultaneously

- prepare them to write their own programs,
- teach the mechanics of web-based programming, and
- force them to think algorithmically and/or reinforce or extend mathematical concepts from other strands of the course.

This is done in several "phases" in the course of the semester. In the following sections, I describe each phase, together with the corresponding activities.