www.cs.berkeley.edu/~bh/61a.html
During that time, 61B (our data structures course) has gone through three programming languages and even more textbook changes; That's no surprise in a fast-moving field like computer science. So how come 61A is still using, with fairly minor changes, a 27-year-old curriculum? Well, there are two possible answers to that: Certain old fogies on the faculty just aren't keeping up with the times. Even though the details have changed, in very dramatic ways, the central ideas of computer science, as highlighted in SICP, remain unchanged. To be honest, there's definitely some truth to the first one. I could never in a million years program the slick web apps that our undergraduates put together overnight at the CSUA Hackathons. Before SICP, introductory CS courses were an unending sequence of programming language details. Instructors tried to invent entertaining program examples to illustrate these fundamentally boring details. SICP highlights the idea of abstraction as the fundamental principle of computer science, and brilliantly illustrates this principle with a series of mind-blowing examples from the functional, object-oriented, and declarative programming paradigms. Each abstraction is presented both from the user's point of view and from the implementor's, so that nothing feels like magic beyond the student's abilities. Every six or seven years, this question comes up at a faculty meeting. The young turks propose to replace 61A with something more modern. Until now, after each discussion, the faculty has voted to keep SICP.
I'm retiring, and there has to be a plan for how 61A will continue after that. In fact there are two such plans, mine and the other one. Starting with the latter, in 2011-12, 61A will be taught by John DeNero (fall) and Paul Hilfinger (spring) using lecture notes based on SICP (since its text is now available on the web with a Creative Commons license that permits such use) but with the program examples recoded in Python. Scheme and SICP build on each other's strengths and programming in Python as if it were Scheme will surely result in some of the examples looking unlike the way a native Python speaker would code them. But the long-term plan is that over time, the 61A curriculum will gradually change to include "more modern" ideas, leaving out some of the SICP ones to make room; because of its huge collection of application libraries, the new ideas will be more easily expressed in Python than in Scheme. Also, there is currently a vibrant open-source project community using Python, and 61A students can be introduced into that community.
CS 10, leading to a de facto four-course lower division CS sequence. This has been especially problematic for EECS students more interested in EE than in CS. John and Paul assure me that they value SICP and that changes will be slow, incremental, and small enough so that the spirit of SICP will remain. Earlier in the planning process, there was a proposal to dump the 61A curriculum altogether and start from scratch, but that was rejected by the lower division task force organized by the CS Chair. And the reason the Python version of the course is being introduced at scale in fall 2011, rather than as a small pilot section as in past reforms, is my own decision not to teach in 2011-12. Nevertheless, I prefer my own proposal for how to preserve 61A after my retirement: a self-paced version, CS 61AS. For one thing, I'm skeptical about the "more modern ideas" claim. The various faculty members who take that view don't agree about what the new ideas should be; among the more popular ones are web programming and querying large online databases. Those are important applications, but central ideas in computer science? Also, among trendy languages, Python isn't the best choice, I think, because its version of lambda is deficient in various ways. But, as I keep saying, the choice of programming language isn't the main point. I get upset when students, even the students who like 61A, refer to it as "the Scheme course." MIT, where SICP was written, no longer includes that course in its lower division core sequence, not because they wanted to change programming languages, but because they changed the entire sequence from courses organized around big groups of ideas to courses organized around application areas: first "let's build and program a robot" and then "let's build and program a cell phone." That's a brave and thoroughgoing attempt to, among other things, attract non-nerds to computer science. To say, as some people do here, "MIT switched from Scheme to Python" completely misses the point of what MIT did; nobody is proposing any change half as profound at Berkeley. So, the rest of this page is the proposal I wrote for 61AS. I'm offering a pilot section in fall 2011 (not really an exception to my no-teaching-in-2011-12 rule because a self-paced course doesn't require actual faculty teaching) under the course number CS 194-18 and if all goes well I'll propose to offer it at scale in 2012-13. Proposal for self-paced/lab-based 61A The proposed course, CS 61AS, would be run in a way combining elements of our current lab-based and our current self-paced courses: Like a lab-based course, it will schedule students into six hours/week of scheduled lab time with a TA present, and will present assignments via Moodle. Like a self-paced course, it will offer variable credit, frequent small quizzes with mastery learning (repeating the course assignments until the quiz is passed, with a different version of the quiz each time), and several paths through the material. Rationale for new course: 1 Many faculty are concerned about a perceived de facto prerequisite of CS 3 (or now CS 10), even though most of our students do arrive having met the programming prerequisite in high school or community college. instead, it offers different starting points for students based on an initial online placement quiz. The variable credit means that a student with absolutely no programming background will spend the first month of the course doing CS 3-level assignments and then has the choice of catching up (because of the self-paced structure) or finishing the last unit the following semester in parallel with 61B. Also, we will require only three units, not four, both as a graduation requirement and as a prerequisite to any courses now requiring 61A. Those students will complete the early units very quickly and will be offered optional material along the way (the "example" sections of SICP that we now mainly skip) and at the end (Chapter 5, compilers and garbage collection). Students who choose enough of this extra material will be given five units of credit in CS H61A, Honors Structure and Interpretation of Computer Programs. The online course materials available through Moodle will include edited (average 15 minutes) excerpts from my recorded lectures, appropriate to each lab assignment, as an optional component of the course. The job of the faculty member assigned to the course will be like that of the present SP faculty: supervision rather than direct instruction. With a standard course, we are constantly having to choose what to leave out, eg, because of the recent shift from 15 to 14 weeks in the semester. A self-paced format with variable credit allows us to have our cake and eat it too.
Course Format: Six hours of scheduled lab time per week. Students are expected to complete about three additional hours of online assignments per week on their own. Prerequisites: Mathematics 1A (may be taken concurrently). Programming experience equivalent to that gained in CS 10 or the Advanced Placement Computer Science A course is recommended, but is not essential; students without this experience will begin at an earlier point in the online course. Credit option: Students will receive no credit for 61A after taking 47A. Students completing unit 5 and with excellent performance in units 1-4 will receive 5 units of credit in CS H61A, Honors Structure and Interpretation of Computer Programs. Later courses that list CS 61AS as a prerequisite require only 3 units. Description: Introduction to programming and computer science. Th...
|