Class time is designed to be as interactive as possible. My role as instructor is to introduce you new tools and techniques, but it is up to you to take them and make use of them. Programming is a skill that is best learned by doing, so as much as possible you will be working on a variety of tasks and activities throughout each class.


Your final grade will be comprised of the following:

Participation 10%
Mini Homework & in-class exercises 15%
Homework 30%
Midterm 1 15%
Midterm 2 15%
Final project 15%

The exact ranges for letter grades will be curved and cutoffs will be determined after the final exam. The more evidence there is that the class has mastered the material, the more generous the curve will be.


To construct functional and diverse teams, you will be asked to complete a short survey to gage your previous exposure to programming topics. After completing the survey, you will be assigned to teams of 4 students - these teams will change once onlythroughout the semester (barring extraordinary circumstances). You will work in these teams during class and on the homework assignments. Only the take home exams will be completed individually.


Beyond the in class activities, you will be assigned larger programming tasks throughout the semester. Most of these assignments will be completed collaboratively by your team. All team members are expected to contribute equally to the completion of each assignment and you will be asked to evaluate your team members after each assignment is due.

Students are expected to make use of their team's git repository on the course's github page as their central collaborative platform. Commits to this repository will be used as a metric of each team member's relative contribution for each homework.

Each team's work will also be shared with and evaluated by at least one other team in the class in order to provide feedback in the form of code review.

Final Project:

You will form your own team of 3-5 students and will be responsible for the completion of an open ended final project for this course, the goal of which is to tackle an "interesting" problem using the tools and techniques covered in this class. Additional details on the project will be provided as the course progresses.


There will be a two take home midterms that you are expected to complete individually. Each exam will ask you to complete a number of small programming and or analysis tasks related to the material presented in the class. The exams will be written to take between 2-5 hours. The exact structure and content of the exams will be discussed in more detail before they are assigned.


All course communication will be via Slack. You should have received an email with an invitation link to join the course Slack. Some rules for using Slack:

  • Use an identifiable username and add your picture to your profile.
  • Only professor and TA are allowed to use the @channel and @here mentions.
  • While this is an informal communication channel, all rules of academic discourse apply.
  • Ask and answer questions on the appropriate channel.
  • Create channels as needed, especially one for each team.

Academic integrity:

Duke University is a community dedicated to scholarship, leadership, and service and to the principles of honesty, fairness, respect, and accountability. Citizens of this community commit to reflect upon and uphold these principles in all academic and non-academic endeavors, and to protect and promote a culture of integrity. Cheating on exams or plagiarism on homework assignments, lying about an illness or absence and other forms of academic dishonesty are a breach of trust with classmates and faculty, violate the Duke Community Standard, and will not be tolerated. Such incidences will result in a 0 grade for all parties involved. Additionally, there may be penalties to your final class grade along with being reported to the Undergraduate Conduct Board.

Please review the Academic Dishonesty policies here.

A note on sharing / reusing code - I am well aware that a huge volume of code is available on the web to solve any number of problems. Unless I explicitly tell you not to use something the course's policy is that you may make use of any online resources (e.g. StackOverflow) but you must explicitly cite where you obtained any code you directly use (or use as inspiration). Any recycled code that is discovered and is not explicitly cited will be treated as plagiarism. The one exception to this rule is that you may not directly share code with another team in this class, you are welcome to discuss the problems together and ask for advice, but you may not send or make use of code from another team.

Excused Absences:

Students who miss a class due to a scheduled varsity trip, religious holiday, or short-term illness should fill out an online NOVAP, RHoliday or short-term illness form respectively. Note that these excused absences do not excuse you from assigned homework, it is your responsibility to make alternative arrangements to turn in any assignments in a timely fashion.

Those with a personal emergency or bereavement should speak with your director of graduate studies or your academic dean.

Late / missed work

  • Late work policy for homework assignments:

    • late, but within 24 hours of due date/time: -20%
    • any later: no credit
  • Late work will not be accepted for take home midterms and the final project.

  • Regrade requests must be made within three days of when the assignment is returned, and must be submitted in writing. These will be honored if points were tallied incorrectly, or if you feel your answer is correct but it was marked wrong. No regrade will be made to alter the number of points deducted for a mistake. There will be no grade changes after the final exam.

  • Exam dates cannot be changed and no make-up exams will be given. If a midterm exam must be missed, absence must be officially excused in advance of the due date, in which case the missing exam score will be imputed using the final exam score. This policy only applies to the midterm.

  • You must complete the final project and be in class to present it in order to pass this course.