CSE 163, Spring 2019: Syllabus

CSE 163: Intermediate Data Programming

Overview (link)

Teaching staff:


  • Lecture: CSE2 G10 from 2:30 to 3:20, MWF
  • Exam 1: Friday, May 10 from 2:30 pm - 3:20 pm, CSE2 G10
  • Exam 2: Monday, June 3 from 2:30 pm - 3:20 pm, CSE2 G10
  • Final Project Presentation: Tuesday, June 11 from 2:30 pm - 4:20 pm, CSE2 G10


Goals (link)

The world has become data-driven. Domain scientists and industry increasingly rely on data analysis to drive innovation and discovery; this reliance on data is not only restricted to science or business, but also is crucial to those in government, public policy, and those wanting to be informed citizens. As the size of data continues to grow, everyone will need to use powerful tools to work with that data.

This course teaches intermediate data programming. It is a follow on to CSE142 (Computer programming I) or CSE160 (Data Programming).

The course complements CSE143, which focuses more deeply on fundamental programming concepts and the internals of data structures. In contrast, CSE163 emphasizes the efficient use of those concepts for data programming.

In this course, students will learn:

  1. More advanced programming concepts than in CSE142 or CSE160 including how to write bigger programs with multiple classes and modules.
  2. How to work with different types of data: tabular, text, images, geo-spatial.
  3. Ecosystem of data science tools including Jupyter Notebook and various data science libraries including scikit image, scikit learn, and Pandas data frames.
  4. Basic concepts related to code complexity, efficiency of different types of data structures, and memory management.

Assessment (link)

Here is how your grade will be calculated:

  • Weekly programming assignments: 60% (approximately 7)
  • Final project: 15%
  • Exams: 25% (2 exams in total)

This maps to the 4.0 grade scale roughly as follows. You will get at least the grade below for the percentages shown:

  • 90% at least 3.5
  • 85% at least 3.0
  • 80% at least 2.5
  • 75% at least 2.0
  • 70% at least 1.5
  • 60% at least 0.7


Most weeks, there will be a programming assignment that will involve writing Python code from scratch, processing and analyzing data, and answering open ended questions all based on the course material for that week. Programming assignments should be completed individually by each student.

Grading policies for programming projects: Your code will be graded based on the following criteria:

  1. Correctness: Does your code pass the tests we gave you? Does it pass some additional tests we've withheld?
  2. Design: Are there any larger design issues with your code (e.g. inefficiency or gross redundancy)?
  3. Style: Does the automatic style checker we've provided you report no issues with your code?
  4. Test quality: You will sometimes be asked to write tests for your homework assignments. Do these tests correctly identify problems in buggy implementations?

If you are not satisfied with a grade you receive on a homework, you should refer to the regrade policy

Final project

The culmination of the course is the creation of a final project that answers some interesting question using real-world datasets. There will be various check-points for the project throughout the quarter. More information about project specifics will be posted in the future. Students are encouraged to work with a partner for the project, but we will allow individual submissions. The project's scope will be testing all of the learning goals listed in the previous section.


There will be 2 timed exams in this course. These will be written exams and you will be allowed a single sheet of 8.5"x11" paper for notes (both sides).

Make-up exams will only be given in case of a serious emergency. If you miss an exam, even if you are sick or injured, you must contact Hunter BEFORE the exam (or arrange for someone to do so). You must show evidence that you are physically unable to take the exam. No make-ups will be granted for personal reasons such a travel or conflicting schedules. No accommodations will be made for students who arrive late to exams. The only accommodations for exams that will be made are those that correspond to the University's official accessibility guidelines, which must be reflected in your student account.

Late days (link)

Each student receives 5 "late days" for use on homework assignments. A late day allows you to submit a program up to 24 hours late without penalty. For example, you could use 2 late days and submit a program due Thursday 11:30pm on Saturday by 11:30pm with no penalty. Once a student has used up all the late days, each successive day that an assignment is late will result in a loss of 5% on that assignment. Regardless of how many late days you have, you MAY NOT submit a program more than TWO days after it is due or after the last day of class. Leftover late days have no impact on your grade.

Each assignment will have a corresponding reflection that will encourage you to reflect on your homework experience and to help us identify changes that need to be made to this assignment or later assignments in the future. These reflections are due at the same time as the assignment, but you may turn them in up to the late cut-off without having to use any late days.

If unusual circumstances truly beyond your control prevent you from submitting an assignment or attending an exam on time, you should discuss this with the course staff ASAP. If you contact us well in advance of the deadline, we may be able to show more flexibility in some cases.

Academic honesty and collaboration (link)

We take academic honesty very seriously. Cheating not only deprives you of practice and understanding, but is also unfair to the rest of your class. Any assignments that has copied or paraphrased content will receive a zero.

You are still, however, encouraged to discuss assignments and concepts on a high level with your classmates so long as you:

  1. Make a serious attempt on each and every problem or coding project before discussing it with others.
  2. Limit cooperation to just group discussion and brainstorming. A good rule of thumb is that you should not take away any written notes, photographs, or other records from your brainstorming session.
    • Do not show your code to another student, nor should you look at another student's code directly. This includes current and former students, tutors, friends, paid consultants, people on the internet etc...
    • Do not post your homework solution code publicly online for any reason.
  3. Write up each and every problem in your own writing, using your own words. (Similarly, you must write code on your own).
  4. List each person you collaborated with at the top of your written homework or in your project writeup and which parts you collaborated on.

Naturally, when working on a partner projects, you're free to share your code and collaborate in full detail with your partner. However, you should not share your code with other groups.

If you have a specific question about your code or written work, the only person you may show your work is a member of the course staff.

Cheating: If you do not follow these rules, you will be considered to have cheated. Cheating is a very serious offense. If you are caught cheating, you can expect a failing grade and initiation of a cheating case in the University system. Cheating is an insult to other students, to the instructor, and to yourself. If you feel that you are having a problem with the material, or do not have time to finish an assignment, or have any number of other reasons to cheat, we have many mechanisms for getting help. Copying the work of others is not the solution.

For more details, see this Academic Misconduct page. If you're not sure if something constitutes cheating, send the instructor an email describing the situation.

Getting help (link)

There are two main ways of getting help:

  • Piazza:

    You can find the access code to join Piazza on our course Canvas page

    We use Piazza as an online Q&A forum where you may ask questions (both publicly and privately). If you have a question, this should be the first place to check & it's often the case that other students may have had the same question.

    We also strongly recommend you monitor new questions asked on Piazza semi-regularly: seeing questions other students ask can often be surprisingly enlightening.

    We do not have a course staff email so if you have a question about a particular concept or part of the assignment that you do not want to post publicly on Piazza, you should post privately so that the instructor or any of the TAs can answer. Students should prefer using Piazza instead of emailing individual staff members. Obviously, if your concern is a personal matter that you want to talk to the instructor about, you may email the instructor individually.

    Note: The use of "Piazza Careers" is not required and you do not need to put any personal information in the website.

  • Office hours:

    Please visit office hours! Answering questions during office hours is often one of the best parts of teaching, so please do us a favor and make use of them.

One additional resource to keep in mind is the resources page on the class website. This page contains links to a variety of guides, tips, and tricks on material we don't have time to fully cover during lecture or section. The resources there might not always be relevant, but they're checking from time to time.

Software and textbooks (link)

We will use Python 3 installed via Anaconda on all programming assignments and Visual Studio Code is our officially supported IDE. You may use other installations of Python or IDEs, but the course staff may not necessarily be able to help you with any set-up related questions you may have. See Software for installation instructions

There is no physical textbook for this class, all resources are available online and for free!

Acknowledgements (link)

We thank Ruth Anderson, Valentina Staneva, Jake VanderPlas, Ariel Rokem, Joe Hellerstein, and Magdalena Balazinska for their contributions to designing this course. The initial materials for this course were created by Hunter Schafer with significant contributions by Josh Ervin, Zorah Fung, Erik Hoberg, Melissa Hovik, Dylan Jergens, Joely Nelson, Nicole Riley, and Erika Wolfe with input from Ruth Anderson. Special thanks to Magdalena Balazinska, Dan Grossman, and the eScience Education Working Group for their leadership in creating this course.