CS106A Syllabus

CS106A introduces computer programming for people who have not programmed before. To learn programming, you need to do a lot of guided programming, and have a lot of help at hand - that's CS106A! Recently, CS106A has switched to using the Python programming language and lab-style coding in lecture. But at it's heart it's still CS106A - introduce the world of computers to a broad audience.

Key course facts...

Nick Parlante, nick.parlante@cs.stanford.edu, Gates 189
I'll be available at the end of class each day, a great time to ask questions. Nick's office hours - Tue 1:30-4:00 (updated) and also after class MWF or email to set up an appointment.

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.

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 with a cap on units.

Section

There will be a weekly section, signups begin Thu 5pm week 1. The signup link will be on the course page. You will have your own section leader for the quarter who will lead section and grade your homeworks.

Resources

In lecture we'll have links to some online code exercises on parlante.org.

We'll also web pages of Python language reference, and there is no required textbook.

Python 3 / PyCharm

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.

Lab In Lecture

It's best to bring a laptop to lecture. We will experiment integrating little exercises within lecture. 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 Thu and be due the following Tue night.

SCPD Video

This lecture is video taped, and at times that includes the students. Here is SCPD's standard statement about that:

Video cameras located in the back of the room will capture the instructor presentations in this course. For your convenience, you can access these recordings by logging into the course Canvas site. These recordings might be reused in other Stanford courses, viewed by other Stanford students, faculty, or staff, or used for other education and research purposes. Note that while the cameras are positioned with the intention of recording only the instructor, occasionally a part of your image or voice might be incidentally captured. If you have questions, please contact a member of the teaching team.

Tresidder LaIR

Tons of programming help is available at the Tresidder LaIR, which is on some tables 150 feet downhill from the Tresidder Starbucks. LaIR hours are Sun, Mon, Tue, Wed, Thu nights (this fits well with HW due Tue night, with 2 days of grace period). SCPD students will receive an email about their online help resources.

Exams

There will be a midterm and a final. The exams will look a lot like the homework problems, so an excellent first step is to feel like you understand and could reproduce your homework solution code. Everyone must attend the exams.

Grading

Homework 35%

Section 5%

Exams 60% (Final is 3x the midterm)

Homework Grading

The homeworks are graded on a simple scale for both correctness and style. Each grade falls into one of a few buckets:

No Required Textbook

We'll use web resources as a Python reference as we go. There is no required textbook. Not to buy now, but as a reference a year from now when you need a reminder to write some code - "Introducing Python" by Lubanovic is a good choice.

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.

Lateness

1. Worked turned in by the due date will get a 5% on-time bonus. The 5% 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 (Brahm) to arrange extra time for extraordinary circumstances.

Topics and Weekly Schedule

Below is a draft 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 exam dates are fixed and you must attend the exams to pass the class.