CS106A Syllabus

CS106A introduces code and computer programming for people who have not programmed before. Code and programming are central to so much in modern life, yet code can appear to be impossibly opaque. By working gradually and with its army of section leaders, CS106A takes students into the world code, building things they could not have imagined.

Staff

Instructor: Nick Parlante, nick.parlante@cs.stanford.edu
We'll use the "chat" feature for quick questions after lecture. See the course page for the full list of Nick's and Juliette's hours.

Head TA: Juliette Woodrow jwoodrow@stanford.edu
Juliette will be available for student questions during zoom lecture in the QnA section, and has her own office hours on the course page. Contact Juliette for all sorts of course help.

Then we have many section leaders to lead the small sections and provide lots of helper hours for when students get stuck (see below).

Topics

We will cover all the important topics of basic programming in Python: types, numbers, strings, functions, linear collections, dictionaries, logic, decomposition, good programming style, whole-program structure, text, file-processing, debugging, and performance. We'll also touch on more advanced topics you might want in the future, including lambdas, comprehensions, modules, and Jupyter notebooks.

Python is a huge language with many advanced features, and CS106A does not cover all of Python's features. CS106A teaches the important core features, and you will be able to solve real programming problems with just this course.

Other Courses: CS105 CS106A/B CS193Q CME193

CS106A is the first course in programming and computer science, for people who with zero experience. CS106B is the second course, teaching more advanced programming and computer science for people who know basic programming. CS105 is a more lightweight introduction to CS ideas, but without as much coding as CS106A. CS193q is a 1 unit seminar that teaches Python very very quickly - geared for people who already know how to program but do not know Python.

CME193 is a course in applied Python for scientists and engineers. It is a course one could take after CS106A.

Ways and Units

CS106A satisfies the university WAYS-FR requirement if taken for a letter grade. Undergraduates should sign up for 5 units. Graduate students have the option of taking it for 3-5 units, but the workload and grading is unchanged. The 3-unit option is just a courtesy for grad students who have a cap on the number of units they can take.

Section

There will be a weekly section to study and practice code in a small group setting with individual help. Signups begin Thu of week1, see the course page for details and the link to sign up. You will have your own section leader for the quarter who will lead section and grade your homeworks.

Section Leaders and the LaIR

CS106A has a large staff of highly capable section leaders. The large staff enables us to staff the small weekly sections, and also allows CS106A to have a lot of helper hours at the so called "LaIR" - see https://cs198.stanford.edu/ and click on Helper Schedule. "CS198" is the name of the umbrella organization of the section leaders for CS106A and CS106B.

Python Resources

In lecture we'll have links to some online code exercises on Nick's experimental server. Other times we will distribute a .zip file with that day's code examples.

We'll use web resources as our Python reference as we go, and Nick maintains a free Python Reference.

There is no required textbook, and a book is not needed for this course. However, if a student insisted on a recommendation, "Introducing Python" by Lubanovic is a good introductory book.

Python 3 / PyCharm

We will use Python version 3. We will have instructions to install it in week2. At the start we'll use the experimental server which works without installing anything. Later we will do larger exercises where you will need a computer with Python 3 installed on it. You will also need to install the free PyCharm development environment. We'll have detailed instructions for that when we get there.

Lab In Lecture

We will experiment integrating little exercises within lecture, so expect to do some exercises live as we go. Education research shows that doing a little activity with what you just saw helps a lot with learning. (see Carl Wieman, Stanford school of ed.)

Homework

We will have weekly programming assignments. Usually homework will go out by Thu and be due the following Tue or Wed night at 11:55pm.

Quizzes

With Covid, we are switching from big exams to smaller quizzes. Each quiz will be 10-15 minutes in length, and involve writing code. We score these with an eye towards partial-credit, giving points for the parts that are correct, not grading them all-or-nothing. We will, of course, give out sample problems and instructions as the quizzes approach. The code problems on the quizzes will be similar to the problems on the homeworks.

Grading

Homework 55%

Section 5%

Quizzes 40%

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.

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 Nick or Juliette and we promise we'll work something out where you can pass this class vs. making a huge mistake.

Lateness

1. Worked turned in by the due date will get a 2% on-time bonus. The 2% is small enough that will not make much difference to anyone's grade, but it's a reward for people who start the work early enough to finish on time.

2. After the due date, each assignment will have a full-credit "grace period", 48 hours unless documented otherwise on the assignment.

3. Work turned in later than 48 hours can get some credit, but loses about 15% per day beyond the grace period. If you turn something in very late, please contact your section leader so they know it's there to grade. With the 15% penalty going, it's probably better to turn in what you could get working for some credit and move on to the next assignment. We have a lot of assignments. And of course contact the head TA to arrange extra time for extraordinary circumstances.

Topics and Weekly Schedule

Below is an approximate topic plan, although the topics are still shifting around a bit. There is plenty of time in 10 weeks to cover all the important Python topics we need. The three quiz dates are fixed. We expect most people to take the quiz at the start of class that day, but we'll have some flexibility for people who need to take it at a different time.