CS 106A June 20, 2011
Course Placement Information
Computers are everywhere in today’s world. The more you know about computers, the
better prepared you will be to make use of them in whatever field you choose to pursue. Learning to program computers unlocks the full power of computer technology in a way that is both liberating and exciting. At the same time, programming is an intellectually challenging activity that comes easily to very few people. Taking a programming course requires a great deal of work and commitment on your part, but you will not be able to master programming without putting in that level of work somewhere along the way. The payoffs, however, are quite real. If you make the effort and keep up with the demands of the material, you will be able to make computers do amazing things.
What introductory programming course should I take?
The Computer Science Department offers several different introductory classes: • CS 105—Introduction to Computing. This course is designed as a general-education
introduction to what this rapidly expanding field of computer science is all about. It attracts an audience of approximately 250 students a year, most of whom take the course primarily to meet the Stanford General Education Requirement in category DB-EngrAppSci (formerly GER:2b). If your only interest is in meeting that requirement, CS 105 is likely to be the most appropriate course. Like any programming course, CS 105 requires a reasonable amount of work, but not as much as CS 106A. CS 105 is not offered this summer, but likely will be offered in the fall. • CS 106A—Programming Methodology. This course is the largest of the introductory
programming courses and for the period from 1998 to 2001 was the largest course at Stanford. CS 106A is explicitly designed to appeal to humanists and social scientists as well as hard-core techies. In fact, most CS 106A graduates end up majoring outside of the School of Engineering. The course requires no previous background in programming, but does require considerable dedication and hard work. This quarter, CS 106A meets MTWTH at 1:15P.M. in Gates B01.
• CS 106B—Programming Abstractions. This course is the natural successor to
CS 106A and covers such advanced programming topics as recursion, algorithmic analysis, and object-oriented design. It uses the programming language C++, which is relatively easy to learn from a background in either C or Java. While CS 106B is designed primarily to serve as a follow-on to CS 106A, it also makes a good entry point into the sequence for students who have taken AP Computer Science A or some comparable course in high school. (If you’ve taken the Computer Science AB course
and done well, you should consider skipping CS 106 altogether as described in the following section.) CS 106B is offered this quarter MTWTH at 4:15P.M. in Gates B03.
• CS 106X—Programming Methodology and Abstractions (accelerated). This course
combines 90 percent of the material in CS 106A and CS 106B into a single course. In order to get through that much material in a quarter, CS 106X moves at an incredible pace. If you’ve had previous programming experience, this class is an excellent way to
– 2 –
learn C++ and brush up on your skills. If you haven’t done much programming before,
you should take the CS 106A/B sequence instead. Don’t let anyone tell you that ―real
engineers take CS 106X.‖ These days, most computer scientists and engineers start
with CS 106A, where they do just fine. The last thing you want to do is get in over your head. CS 106X is not offered this Summer, but will be likely offered in the fall. I already know how to program—shouldn’t I skip the intro courses altogether?
Many students entering Stanford today have had considerable programming experience in high school or from their own independent work with computers. If you are in that position, the idea of starting with a beginning programming course—even an intensive
one like CS 106X—seems like a waste of time. Your perception may in fact be correct. In my experience, there are at somewhere between 15 and 20 students in each entering class who should start at a more advanced point in the sequence. For most of you, however, the right place to start is with the CS 106 series. Most high-school computing courses are quite weak and provide very little background in modern software engineering techniques. By taking CS 106X, you will learn how the CS department at Stanford approaches programming and get a solid foundation for more advanced work. If you’re unsure as to where you should start the programming sequence, please talk to the CS 106 course staff.
CS 106A June 20, 2011
CS 106A — General Information
Lecturer: Osvaldo Jimenez
Office: Gates 160
Google Talk IM: cs106a
Office hours: Mondays and Wednesdays, 4:00-5:30 P.M.
Lecturer: Brandon Burr
Office: Gates 160
Google Talk IM: cs106a
Office hours: Tuesdays and Thursdays, 2:15-4:00 P.M.
Lectures are scheduled for Monday, Tuesday, Wednesday, and Thursday at 1:15P.M. in
Gates B01. The schedule for individual lectures is given on the accompanying syllabus. Discussion sections
In addition to lecture, you must also sign up for a weekly 50-minute section. In order to take CS 106A, you must sign up for a section between 5:00P.M. Friday, June 24 and
5:00P.M. Sunday, June 26. Starting this Friday, the signup form will be available on the web at the URL http://cs198.stanford.edu/section/.
If you are an undergraduate, you are required to take CS 106A for 5 units of credit. If you are a graduate student, you may enroll in CS 106A for 3 units if it is necessary for you to reduce your units for administrative reasons. Taking the course for reduced units does not imply any change in the course requirements.
You may not add a new course to your study list and may not drop a course after Friday, July 1, without having that course appear on your transcript with a notation indicating that you have withdrawn from the course. The last day to change your status to CR/NC is Friday, July 29.
The web page for CS 106A is http://www.stanford.edu/class/cs106a/. All the
materials and course announcements will be posted here, so be sure to check it frequently. Texts and handouts
There are two required texts for this class, both of which are available from the Stanford Bookstore. The first is Karel the Robot Learns Java—a 35-page tutorial that introduces
the major concepts in programming in the context of an extremely simple robot world. The second is the textbook, The Art and Science of Java. In addition to these texts, we
– 2 –
will also distribute additional material in the form of class handouts. After class, any extra copies of the handouts will be placed in the handout bins in the entryway to the Gates B-wing. The handouts are also available in PDF? format on the CS 106 web site.
If you miss a handout in class, you can print your own copy from the web. Examinations
The midterm examination will be administered on Wednesday July 13 from 7:00 P.M. to
8:30 P.M. The final examination will be on Friday, August 12 from 12:15–3:15P.M. All
examinations are open-book, and you may use any notes or materials from the class. Programming assignments and problem sets
CS 106A requires six programming assignments, which are due on the dates given in the syllabus. Except for the last assignment (which is due at the very end of the quarter), each assignment is graded during an interactive, one-on-one session with your section leader, who rates it according to the following scale:
++ An absolutely fantastic submission of the sort that will only come along a few times during the quarter. To ensure that this score is given only rarely, any grade of ++ must be approved by the instructor and TA. Since your section leader would almost certainly want to show off any assignment worthy of a ++, this review process should not be too cumbersome.
+ A submission that exceeds our standard expectation for the assignment. The program must reflect additional work beyond the requirements or get the job done in a particularly elegant way.
+ A submission that satisfies all the requirements for the assignment—a job well
A submission that meets the requirements for the assignment, possibly with a few small problems.
– A submission that has problems serious enough to fall short of the requirements for
– A submission that has extremely serious problems, but nonetheless shows some effort and understanding.
–– A submission that shows little effort and does not represent passing work. From past experience, we expect most grades to be + and . Dividing the grades into categories means that your section leader can spend more time talking about what you need to learn from the assignment and not have to worry about justifying each point. For each assignment, you must make an appointment with your section leader for an interactive-grading session. Your section leader will explain in section how to schedule these sessions and go over the grading process in more detail.
Each of the assignments is due on the day specified in the syllabus. The assignment code must be submitted electronically as described in an upcoming handout. All assignments – 3 –
are due electronically at 1:00P.M. sharp on the dates indicated on the assignment handout.
Anything that comes in after 1:00P.M.will be considered late.
Because each of you will probably come upon some time during the quarter where so much work piles up that you need a little extra time, every student begins the quarter with three free ―late days.‖ To avoid any ambiguity, a ―day‖ is defined as a 24-hour day and
includes weekends and holidays. Thus, if your assignment was due on Friday but turned in the following Monday, that assignment would be three days late. After your late days for the quarter are exhausted, programs are assessed a late penalty of one category point per late day used (a + turns into a , and so forth). Late days are valuable, and it pays to keep some around for the harder assignments toward the end of the quarter. In all cases, assignments must be turned in within a calendar week of their published due date. In special circumstances (such as extended medical problems or other emergencies), extensions may be granted beyond the late days. To request an extension, send e-mail to Osvaldo no later than 24 hours before the program is due. Only Osvaldo is authorized to approve such extensions. In particular, do not ask your section leader. Grading
Final grades for the course will be determined using the following weights: 45% Programming assignments and problem sets
30% Final examination
15% Midterm examination
10% Section participation
As in any programming course, the assignments in CS 106A require extensive hands-on use of a computer. The preferred platform for doing the work is the Eclipse environment which runs under both Mac OS X and the various flavors of Microsoft Windows. Instructions for obtaining copies of the Eclipse environment—which is an open-source
software project and therefore free—are on an accompanied handout.
In addition to section leaders, the Center for Teaching and Learning will be providing small group study and one-on-one tutoring sessions for students who need extra help in
understanding concepts and problems discussed in section.
If you are interested, then sign up for a study group or appointment by going to http://sututor.stanford.edu, logging in, and searching for appointments labeled
cs106a. If you have any questions, you can call (650) 736-7996 or email firstname.lastname@example.org.
Notice for students who have a disability
Students who have a disability which may necessitate an academic accommodation or the use of auxiliary aids and services in a class, must initiate the request with the Student – 4 –
Disability Resource Center (SDRC), located within the Office of Accessible Education (OAE). The SDRC will evaluate the request with required documentation, recommend appropriate accommodations, and prepare a verification letter dated in the current academic term in which the request is being made. Please contact the SDRC as soon as possible; timely notice is needed to arrange for appropriate accommodations. The Office of Accessible Education is located at 563 Salvatierra Walk (phone: 723-1066; TDD: 725- 1067).