Syllabus


CS 208E — Course Information

Staff

Instructor: Chris Gregg, cgregg@stanford.edu, Office: Durand 331B, Phone: 857-234-0211, Office Hours: TBD

Head TA: Gaurab Banerjee, gbanerje@stanford.edu, Office Hours: TBD

Course description

This is a course designed by Eric Roberts, Stanford Computer Science Professor (Teaching) emeritas, and a giant in the Computer Science Education field. The seminar covers the intellectual tradition of computer science emphasizing ideas that reflect the most important milestones in the history of the discipline. Topics include programming and problem solving; implementing computation in hardware; algorithmic efficiency; the theoretical limits of computation; cryptography and security; computer networks; machine learning; and the philosophy behind artificial intelligence. Readings will include classic papers along with additional explanatory material.

Class meetings

This seminar is scheduled for Mondays and Fridays from 11:00am to 1pm in Bldg 530, Room 127. As in any small seminar, regular attendance is expected, though you will have the opportunity to watch the lectures via screencast if necessary.

Readings

Most of the reading for this class consists of chapters from Eric Roberts’s book for people interested in the intellectual foundations of computer science. The bookstore has copies of the reader, which contains 12 chapters from the current draft along with the wonderful E. M. Forster short story “The Machine Stops” and essays by Vannevar Bush and Alan Turing.

Course requirements

The required work for this course consists of the following:

  • Class Participation
    • Most of what you learn in the seminar will take place during the seminar meeting, so it is critical that you take an active role. You are expected to complete the assigned reading and to think about the issues raised by those readings so that you can participate fully. While there is not going to be a participation grade, per se, if you simply watch the lecture screencasts without being engaged, you will not get much out of the course.
  • Weekly assignments
    • In most weeks, I will give out a short assignment on Friday, which is due the following Friday. The goal of these assignments is to make sure that you are actively engaged in the topics and not simply reading about them. Concepts that you think you understand from the reading don’t really sink in until you’ve had a chance to put them into practice.
  • Final project
    • The single most important component of the course is the final project, in which you—as part of a team of students—investigate in detail some aspect of computer science that seems to qualify as a “great idea.” The deliverables include a web site that describes your topic in detail and a 45-minute presentation, which we will schedule during the 10th week of class. I will describe the project assignment and offer several possible topic ideas in a separate handout distributed at the beginning of the fourth week of class.

Grading

Final grades for the course will be determined using the following weights:

50% Weekly assignments
50% Final project

Note on the final project:

  • Because it is worth 50% of your grade, you are expected to take it seriously, and to put in a significant effort. You will be in teams, and team members will be graded individually to the extent possible. Students who do not participate materially to their team should not expect a high grade for the course.

Week-by-week schedule (may be modified)

Honor Code

In the spirit of collegial and cooperative learning, you are free to discuss ideas and approaches with other students, and then implement the solution yourself. The key is this: all the code you submit you should type in and get working yourself. In particular, it is not ok to share or paste in someone else's code or get code from a previous quarter. It is not ok to look at someone else's code. You should not be looking at another student's homework code.

For discussion or tying out ideas, the many lecture examples work well and of course it's fine for everyone to look at and experiment with that code.

Web search: it's fine if you search the web to find the right 2 line phrase to solve something, like "sort strings" - programmers do that sort of search all the time, and finding and using short phrases like that is fine. Do not, however, search for a whole homework function and paste in what you find. We want you to write that code.

The Computer Science department produces many honor code cases at Stanford. This is not because CS is a magnet for cheating; it's just that online submissions provide a large body of evidence, and computer science has tools which do an extremely good job of finding cheating.

Each homework submission has a section where you can write notes for the grader. If you think a bit of collaboration may have crossed the line, mention it in your README notes for that homework. You can never get in honor code trouble for collaboration clearly described in this way.

As mentioned above, CS106A exams will very much resemble the homework problems. So that's an additional reason you need to author and understand your own code.

On a related note, when you are done with a homework - please don't post your code on the internet! That causes problems for us and for people trying to learn the material later.

Philosophy and the Honor Code

It's not that people can be divided into cheaters and non-cheaters in some pre-ordained way, though that is an easy way to think about life. It's more that the stress and bad decision making of a particular situation make a cheater of someone. If you feel you are in that position, contact Chris and I promise we'll work something out where you can pass this class vs. making a huge mistake.

Week Monday Date Details
1 June 21 Class begins, Bit problems to start: code, syntax errors, logic, loops, functions, decomposition, style 1.0
2 June 28 RGB colors, digital images, expressions, image processing, loops
3 July 5 No class Monday (Independence Day). Black-box functions, strings, Doctests, 2D Grid, (Quiz 1 Fri)
4 July 12 String find/slice, files, files processing, start lists
5 July 19 More complex loops, nested loops, command line, break, 2d drawing
6 July 26 More algorithms, hardware, start dict
7 August 2 (Quiz 2 mon), dict count algorithm, nested dict algorithms
8 August 9 Mapping, lambda, sorting, custom sorting, modules 1.0
9 August 16 Classes, Advanced topics, (Quiz 3 Fri)
10 August 23 Conclusions, no class Fri