Syllabus

January 11th, 2021


Course description

Introduction to the engineering of computer applications emphasizing modern software engineering principles: program design, decomposition, encapsulation, abstraction, and testing. Emphasis is on good programming style and the built-in facilities of respective languages. Uses the Python programming language. No prior programming experience required.

Canvas

We will use Canvas in CS 106A this quarter only to post recordings of course videos. The Canvas website for our class is:
https://canvas.stanford.edu/courses/130143
All other information relevant to the class will be posted on the class web page, described below.

Class web page

The class web page for CS 106A is:
http://www.stanford.edu/class/cs106a/

You can also reach that webpage via the simpler URL:
http://cs106a.stanford.edu/

You should regularly check the class web site for handouts, announcements and other information, including the most up-to-the-date information on assignments and errata. Please note that the class web page will have links to essential class materials including class handouts and assignment files.

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 CS106B 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.

Discussion sections

In addition to lecture, you will also be attending a weekly 50-minute section. In order to take CS 106A, you must sign up for a section between 5:00P.M. Thursday, January 14th and 5:00P.M. Sunday, January 17th. The signup form will be available on the web at the URL:
https://cs198.stanford.edu/cs198/auth/default.aspx

Section sign-ups are not first-come first-serve, so don’t worry about rushing to fill out your preferences as soon as the form opens. After a matching process, your section assignments will be emailed out to you by the evening of Tuesday, January 19th. Sections begin the second week of classes (i.e., next week). Note that you should only sign up for sections at the URL indicted previously (you should not sign-up for sections on Axess).

Attendance and participation in section will be graded and will make up 10% of your final grade in the class, so this is a required component of the class.

Section leaders and course helpers

CS106A provides extensive assistance for students. Section Leaders and Course Helpers are available from Sunday through Thursday evenings each week to help with assignments—we call this the LaIR. Check the web site http://cs198.stanford.edu/ and click on the "Helper Schedule" link for the latest schedule of Helper Hours. More information about how to access the helpers at LaIR will be posted once LaIR hours start.

Units

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 or 4 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.

Texts and handouts

There are no required textbooks. In lecture we'll have links to some online code exercises on parlante.org and web pages of Python language referencee. We will also distribute additional material in the form of class handouts. Class handouts will be available electronically on the CS 106A web site.

Programming assignments

We will have weekly programming assignments. Usually homework will go out Thursday and be due the following Tuesday night.Most assignments will be 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 is "perfect" or exceeds our standard expectation for the assignment. To receive this grade, a program often reflects additional work beyond the requirements or gets the job done in a particularly elegant way.
✓+A submission that satisfies all the requirements for the assignment, showing solid funtionality as well as good style. It reflects a job well done.
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 the assignment.
-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 check + and check. 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. The overall goal is to maximize the learning experience in doing the assignments, and we have found the "bucket" grading system to work much better for programming assignments than assigning numeric grades from a pedagogical perspective over many quarters of experience.

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.

Lateness

  1. Worked turned in by the due date will get a 2% on-time bonus. The 2% is small enough that will be unlikely to change anyone's grade, it's just a token 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. Even work which does not function perfectly can get a lot more points than zero, so you should turn in what you have.
  3. Work turned in later than 48 hours can get some credit, but looses 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 and move on to the next assignment. We have a lot of assignments. And of course contact the head TA (Juliette) to arrange extra time for extraordinary circumstances.

Examinations (no, make that quizzes)

Rather than having traditional examinations this quarter, we will have three quizzes that are geared toward helping you determine your level of understanding of the course material (and helping us assess that as well). Since the course material builds on itself, checking that you have a solid grasp of the material at various points in the class is critical for making sure that you have the right scaffolding to assimilate other concepts that are learned later in the class. Insert Info about when the quizzes are and how long they are here If you are in a timezone that makes taking the assessments during our regular class time impractical or have another class that meets at the same time, we’ll schedule an alternate time on the same day for you. If you need an alternate time for a diagnostic assessment, please contact the head TA at least one week before the assessment date. In your email please indicate all the alternate times you would be available to take the assessment on the same date as regular assessment. To maintain the integrity of the assessments, any alternate times must be on the same day as the regular assessment. The diagnostic assessments are open-book.

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 descried 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 moment make a cheater of someone. If you feel you are in that position, contact Nick and promise we'll work something out where you can pass this class vs. making a huge mistake.

Grading

70%Programming assignments (weighted toward the later assignments)
10%Diagnostic assessment I
10%Diagnostic assessment II
10%Section participation
Mastery Learning: We are strong believers in mastery learning—that is, students should show mastery of the course material by engaging in all of it. Therefore, to pass the class you are required to make a real effort on and submit all the assignments, take both diagnostic assessments, and attend/participate in section. Exceptions can be be granted in special circumstances that are pre-approved by the head TA (e.g., medical or other emergencies). But, importantly, skipping some portion of the class because you think you “don’t need it” to pass the class is taken as an indication of lacking mastery of the material and can lead to a non-passing grade. We want you to engage with all the material in the class, not aim to do the minimal amount that you think might be required for passing. Please take this to heart when doing the work for this class.

Software for Programming

As in any programming course, the assignments in CS 106A require extensive hands-on use of a computer. We will use Python version 3. At first you will just use parlante.org so you don't need to install 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.

Course privacy statement

As noted in the University’s recording and broadcasting courses policy, students may not audio or video record class meetings without permission from the instructor (and guest speakers, when applicable). If the instructor grants permission or if the teaching team posts videos themselves, students may keep recordings only for personal use and may not post recordings on the Internet, or otherwise distribute them. These policies protect the privacy rights of instructors and students, and the intellectual property and other rights of the university. Students who need lectures recorded for the purposes of an academic accommodation should contact the Office of Accessible Education.

Affordability

Stanford University and its instructors are committed to ensuring that all courses are financially accessible to all students. If you are an undergraduate who needs assistance with the cost of course textbooks, supplies, materials and/or fees, you are welcome to approach the course staff directly.

If you would prefer not to approach the course staff directly, the Diversity and First Generation Office’s Opportunity Fund is designed to financially assist undergraduate students who are experiencing a temporary financial challenge from a hardship or who are seeking funds for an opportunity related to their academic, professional, and/or social development. Go to https://diversityandfirstgen.stanford.edu/ resources. The Diversity and First-Gen Office is available to connect you with resources and support while ensuring your privacy.

Support services

The COVID-19 pandemic is a stressful time for us all. In addition, you may experience a range of other challenges that can cause barriers to learning, such as strained relationships, increased anxiety, alcohol/drug problems, feeling down, difficulty concentrating and/or lack of motivation. These mental health concerns or stressful events may lead to diminished academic performance or reduce your ability to participate in daily life. Stanford is committed to advancing the mental health and well-being of its students. If you or someone you know is feeling overwhelmed, depressed, and/or in need of support, services are available. You can learn more about the broad range of confidential mental health services available on campus here:
https://vaden.stanford.edu/caps-and-wellness/counseling-and-psychological-services-caps

Academic accommodation

Students who may need an academic accommodation based on the impact of a disability must initiate the request with the Office of Accessible Education (OAE). Professional staff will evaluate the request with required documentation, recommend reasonable accommodations, and prepare an Accommodation Letter for faculty dated in the current quarter in which the request is being made. Students should contact the OAE as soon as possible since timely notice is needed to coordinate accommodations. The OAE has contact information on their web page: http://oae.stanford.edu

Ongoing improvements

As part of our ongoing efforts to make this course an even better experience for students, our teaching team continually conducts research to improve our teaching methods. In this course, new teaching methods may be used and various aspects of student performance may be analyzed on an ongoing basis. Information about you and your personal performance in this course will be held strictly confidential, but aggregate information for the whole class may be reported. If you would like to opt out of participating in any new teaching methods or having your performance analyzed as part of this research, you may do so without penalty. For more information, please contact the instructors.

We’re looking forward to a fun class!