This course has two complementary innovative aspects:
The content of the course represents a major curricular shift for introductory computer science:
Introductory computer science education is entrenched in an outdated computational model. Although it corresponds neither to our computing environments nor our work, we teach our students a single-thread-of-control problem-solving view of the role of the computer program: computation as calculation. In this model, the job of a computer program is to start with a problem, calculate its answer, return that answer, and stop. We can dramatically improve this situation -- and, as a corollary, all of undergraduate computer science -- with a model of computer programs as simultaneous ongoing entities embedded in and interacting with a dynamic environment: computation as interaction; computation as it occurs in spreadsheets and video games, web applications and robots.
The style of the course represents a significant departure from traditional computer science classes:
A major component of the class will be a weekly three hour in-class laboratory. While such sessions are common in the laboratory science, this in-class hands-on experience is largely missing from computer science. Much of this laboratory will be spent in collaborative work on program development, with an emphasis on student-student interaction and student-student teaching, facilitated and enriched by the course staff. In addition, design and implementation work will be supplemented with observational laboratory assignments, inviting students to consider not only how to build a program, but how to anticipate its behavior and how to modify that behavior. This experience is largely missing from traditional approaches to CS. Understanding the interactions between program and behavior is critical in many modern applications.
I believe that this course has the potential to change the way that computer science in general is taught at MIT and on a national and international level. Indeed, this shift in curriculum is overdue. I also feel that the pedagogic style of this course will make a significant difference in the quality of life of its students.
I have written a paper which goes into more details of the curriculum proposed here. That paper takes robotics as its central motivating idea. It is my intention instead to focus on the on-line world -- Java programs and the world-wide web -- in the first version of this course. While I believe that robots would be an excellent addition to this class, I do not anticipate the resources required to develop both the curriculum and the tools simultaneously; the state of on-line tools is much closer to what I need, and much of the curricular development would transfer to robots should they become available.
In developing this course, I plan to rely heavily on undergraduate assistants. This merits some explanation. I believe that the large reliance on undergraduate assistants is an essential part of building a student community around this material. I believe strongly that students learn best by teaching others, and I want this course to embody that idea both for the students currently enrolled and through the continuing involvement of upperclass assistants. I would hope that the undergraduates involved would benefit in much the way that I feel that I did as an undergraduate teaching assistant, or that the existing 6.270 organizers' community does.
This course will be taught as a special subject to a small group of undergraduates (presumably freshmen) in the fall of 1996. A significant curriculum development effort will take place prior to that term. After teaching the course in the fall term, the course materials will be revised and prepared for distribution to other campuses.
Back to CS101 Home Page
Back to Lynn Andrea Stein's Home Page