The following are links to my course Web pages for 1995-96 through the present. I expect that the most reusable parts of these pages are the assignments and lab exercises. I would be delighted to discuss anything you find here. If you have questions or comments, please let me know. If you use any of these materials, please write and tell me how it went. Thanks.

Carleton's academic calendar consists of three 10-week terms. The standard load for students is three courses per term. The courses are intended to be the equivalent of semester courses rather than quarter courses (on typical quarter systems, standard load is four courses per quarter).

Carleton had a Computer Science major in the Mathematics and Computer Science Department between 1988 and 2006. In 2006, the Computer Science Department became a separate entity. The major was originally structured to conform more or less to ``Model Curriculum for a Liberal Arts Degree in Computer Science," Norman Gibbs and Allen Tucker, Communications of the ACM, 29(3), March 1986, pp. 202-210. Though naturally we've made many changes since 1988, we have stayed largely consistent with that original model, which in our view focused on making sure students learn ideas of enduring value, while also providing flexibility to provide students with up-to-date practical skills.

In the mid-90's we graduated 10-20 CS majors per year. During the 2000's, we averaged about 15 majors per year. From 2010-2014, we averaged about 25 per year. And between 2015 and 2020, we have averaged about 60 (yes, 60) per year (about 12% of Carleton's graduating class). As of 2018, about 60% of all Carleton students take at least one CS course (mostly CS111), and 180-200 take CS201 Data Structures.

From Fall 1997 through Spring 2001, we used C++ in Introduction to Computer Science (CS 117) and in Data Structures (CS 127). From Fall 2001 through Spring 2003, we used Java in 117 and C++ in 127. From Fall 2003 through Spring 2007, we used Java in both courses.

After CS became a department separate from the Math department, we redesigned our course numbering system (e.g. 117 became 111, and 127 became 201). At the same time, we began using Python in CS 111. In Winter 2008, we began using Python in CS 201, and then switched back to Java in CS 201 in 2012.

I'm moderately happy with the look of the pages since Fall 2014, and the pre-2006 pages have a certain Spartan acceptability about them. But for the horrific appearance of Fall 2006 through Spring 2014, I request your forgiveness.

- Not a course
- CS 100 Network Security (first-year seminar)
- CS 107 The Structure of the Internet
- CS 117/111 Introduction to Computer Science.
- CS 127/201 Data Structures
- CS 177/202 Mathematics of Computer Science (fka CS 223 Discrete Mathematics, and briefly as Algorithms I)
- CS 207/208 Computer Organization & Architecture
- CS 227/252 Algorithms
- CS 231 Computer Security
- CS 237/254 Computability & Complexity (formerly Automata & Computability, and before that Theory of Computation)
- CS 257/204 Software Design
- CS 307/332 Operating Systems
- CS 337/331 Computer Networks
- CS 341 Cryptography
- CS 342 Mobile Application Development
- CS 395/357/322 Natural Language Processing
- CS 395 Compiler Design
- Math 111 Calculus
- Math 215 Introduction to Statistics

I had no web pages for my courses until Fall 1995. Here's a list of courses I taught at Carleton between 1991 and 1995 before I started building web pages.

- Calculus 1 (1991)
- Calculus 3 (1992)
- Linear Algebra (1991-1993)
- Linear Algebra With Applications (1992)
- Ordinary Differential Equations (1992)
- Partial Differential Equations (1995)
- Introduction to Computer Science (1992-1995)
- Data Structures (1992-1995)
- Computer Organization & Architecture (1992-1994)
- Theory of Computation (1994)
- Numerical Analysis (1992)
- Computational Geometry (1993)

And here's what I think I remember teaching at St. Olaf College, 1989-1991.

- Calculus 1
- Calculus 2
- Calculus 3
- Linear Algebra
- Real Analysis
- Differential Geometry
- Data Structures