Course Staff
![]()
Professor: Robert C. Duvall
- 660-6567
- LSRC room D228
- Office Hours: Wednesday 5-6pm, Thursday 2-3pm
I am generally not available during the weekend- Drop-in policy: Feel free to come in whenever my office door is open; you may also make an appointment via email.
![]()
Graduate TA: Hieu Bui Graduate TA: Yifei Ding
Undergraduate TAs
- Ariba Aboobakar
- Cristina Brackeen
- Will Broughton
- James Cho
- Monica Choe
- Katharine Cummings
- Jimmy Fang
- Tahvi Frank
- Riley Glusker
- Jimmy Guo
- Courtney Hollenberg
- Evan Kaplan
- Mac Karnuta
- Alex Kim
- Joanna Kim
- David Le
- Gang Li
- Elizabeth Onstwedder
- Kathleen Oshima
- Rajan Patel
- Kannan Raju
- Nick Strelke
- Noelle Suaifan
- Brad Sykes
- Jie Wang
- Jenny Zhang
- Janet Zhang
In general, you should only email us only about administrative aspects of the course or if you have a personal concern. When using email, please put CompSci101 at the start of your subject line to help ensure that your email gets past our spam filters and is delivered correctly. If you send us an email and do not get a response within 48 hours, we probably did not receive it.
Meeting Times
The class meets MW from 10:05-11:20am in White Lecture Hall room 107 on East Campus.
On most days we use a set of notes to guide the class session. Those notes are linked to the day on which the slides are first covered below. You can also browse this directory for the slides. See the bottom of this page for creative commons information on the materials produced. There will also be a video made of each class (including the days you take exams :)
Labs are intended to give you a chance to practice and explore the course topics in more detail than is possible in a large lecture setting. You are expected to attend the same lab section each week. If you need to go to a different section one week, please check in with the person running that section to make sure your attendance is recorded. Attempting to do the lab work each week will give you a good sense of how well you are keeping up with the course material.
Lab Time Place 101-01L Wed 3:05-4:20pm Allen 326 101-02L Wed 4:40-5:55pm Soc Sci 228 101-03L Wed 3:05-4:20pm Physics 047 101-04L Wed 4:40-5:55pm Soc Psy 127 101-05L Thu 1:25-2:40pm Old Chem 123 101-06L Thu 3:05-4:20pm Bio Sci 130 101-07L Thu 1:25-2:40pm Bio Sci 154 101-08L Thu 3:05-4:20pm Soc Sci 228 101-09L Thu 4:40-5:55pm Old Chem 123 101-10L Thu 4:40-5:55pm Soc Sci 228 101-12L Thu 1:25-2:40pm Soc Sci 124
Books
Required: How to Think Like a Computer Scientist - Learning with Python: Interactive Edition 2.0
by Jeffrey Elkner, Allen B. Downey, and Chris MeyerThis book is free, online, and interactive!
Recommended: Core Python
by Wesley Chun RanumSome people still prefer to read text or just want a different perspective.
Although time will be given at the beginning of lecture for you to ask questions about the reading, the majority of the lecture will be an extension of the reading, not a summary. You will be expected to be active participants during class time. This makes it vital that you prepare by reading before coming to class.
Grading
Grading is done on an absolute, but adjustable scale. This means that there is no curve. Anyone earning 90% or more of the total number of points available will receive a grade in the A range (A- to A+); 80% = B, 70% = C, 60% = D. This scale may go down, but it will not go up. There is no curve. If everyone in the class does poorly on a particular item (test or assignment), we will identify the problem and determine a remedy.
| Practice Problems | 15% |
| Labs | 10% |
| In-class questions |
5% |
| Programming Projects | 30% |
| Midterm exams (2) |
20% |
| Final exam | 20% |
Expectations for an A
To receive a grade of A you must exceed expectations and do very well on the final exam. This means you must do everything required extraordinarily well or you must do more than is required and do this well. In other words, to earn an A you must do more than merely meet the requirements, you must go beyond them. In order to earn an A+ you must do most of the optional assignments and exceed expectations in general.
Turning Work in Late
If you find yourself not submitting the recommended work for this course each week, please talk to one of the course staff immediately. It is important that you do not get behind in this class, its pace is too fast to allow you fall behind. The secret to successfully surviving this course is to start early and work steadily; it is not possible to cram or skim in Computer Science classes. If you are having trouble, be sure to talk to someone as far before the due date as possible. Don't give up, ask for help. Don't give up, ask for help. Don't give up, ask for help.
Individual extensions will be granted only for medical reasons (see the Short-term Illness Notification policy) or other circumstances beyond your control that must be presented with an official Dean's excuse. Extensions will not be granted after an assignment is due, you must request an extension well before an assignment is due.
If you have personal reasons to ask for an extension, and you do so at least a week in advance, it is possible to get one, so please ask. Please use this Google form to request an extension.
Complaints
All care will be taken to make sure that grades are accurately calculated and reported. However, mistakes happen. If you believe there is an error in your grade, we want to fix it. Please use this Google form to report the error.
Due to the bookkeeping challenges of a large class, all grading error requests must be made within 3 days (days count as weekdays while Duke is in session) from the initial grade being posted. No grade change requests will be accepted more than 3 days after a grade is posted. Grades and points are normally posted in Sakai.
Practice Problems
Learning programming and problem solving, like learning a musical instrument or a sport, requires practice, lots of practice — you cannot simply read about or memorize the concepts. These problems are meant to give you quick feedback about how well you have solved the problem. Each problem typically involves writing one or more methods that are then tested on a variety of input values. Many of these problems will be used as part of the Programming Assignments, giving you the chance to better understand those projects and the confidence that core pieces of the project are working before you have to code those.
Attempting to do these problems each week will give you a good sense of how well you are keeping up with the course material. Also, completing past problems may not help your grade directly, but it is an excellent way to study for the exams.
These problems will be assigned almost every week throughout the semester, with some problems marked as required and others as optional. Some will be started or finished during class or lab and others you will do completely on your own. Only problems turned in by the due date will be given credit for that week — no late APTs will be accepted. Any problems you do above the minimum required will help you towards earning an A in the course.
You will be given a description of a problem and asked to write code to solve it — testing the code online and when you are done with the code you must submit it from within Eclipse or on the web. Generally, you are not graded on the quality of source code, but based on how many of the test cases your solution solves correctly.
Labs
It is required that you, individually or as part of a team of no more than 4 students, submit that week's lab worksheet by 8am the day after you attend lab each week to get credit for that week's lab — lab work cannot be made up later. Each student will be given one excused absense and attendance will not be officially taken for the first two labs (the Add/Drop period).
You will work in teams of three or four during lab and at least one person from each team must bring a laptop to lab each week. When working in a team, if you were not there or your team determines that you did not participate in the exercises, your name should not be included on the final submission. Your lab work will be graded on a 0, 1, 2, or 3 point scale and based on how complete the answers are on the form (absent, there in body only, clear effort, very good and complete answers).
Programming projects
Programming projects are large (containing one or more practice problems), open-ended problems, providing opportunities for you to express some creativity and go beyond the basic specification. For each project, you will be expected to complete all of the assignment's basic functionality as well as use good coding style. Points on these assignments will vary with harder assignments being worth more than previous assignments, and most assignments will get harder as the semester progresses (harder means takes more time, requires more thought).
All assignments must be turned in by 8am on the due date given. Each student is granted two assignment extensions with no penalty during the semester. To request an assignment extension, you must complete this form no later than one day before the due date, and the assignment must be received within 72 hours of the original due date. We do not grant extensions after an assignment is due. Assignments turned in on time receive no penalty, and students who do not use their late penalties receive extra credit at the end of the semester. Assignments can be submitted up to one week late (or one week late + 72 hours with an extension) for half credit. All assignments must be received before the last day of class regardless of any extension.
When you are done with your project and are confident it is satisfactory, you should submit it electronically from within Eclipse or on the web. You may submit an assignment as many times as necessary, but only the files included in the last submission will be graded. Thus, you should always submit all your project's files -- even if they have not changed since a previous submission. Note, the official time of submission for your project will be the time of your last submission. An assignment will be considered late if the last submission is late, even if your first submission was on time. You may lose points on your assignment if your final submission is incomplete or late.
Exams
Two in-class exams will be held during the course's meeting time in the course's meeting room and will be closed-book. This is not because we expect you to memorize material for the midterm exams, but because we do not want you to spend precious time looking up answers when a test is only about an hour long. Instead, for the midterm exams, a handout will be given with material that does not need to be memorized. You may request specific material to appear on the handout.
- Exam 1: Wednesday, October 2, 2013
- Exam 2: Wednesday, November 13, 2013
The final exam will be open book and open notes.
- Final Exam: Saturday, December 14, 2-5pm
These exam dates are given at the beginning of the semester to avoid any scheduling conflicts. Exams can only be made up if:
- you let the professor know before the date of the exam or quiz why it will be missed,
- the professor agrees that the conflict cannot be avoided, and
- you arrange to make up the exam either before the exam date or as soon as possible afterwards.
Collaboration Policy
In accordance with the Duke Community Standard, we encourage proper collaboration, in which all parties equally participate, on programming projects and labs. Exams taken online or in-class must be your own work; you should not collaborate on them at all. This means you do not talk to anyone or look up anything on the web unless you are given instructions otherwise. You can always use notes and the book for quizzes and exams. Studying together is always encouraged, especially when preparing for exams. At other times you may be assigned to work in a group, in which there will be only one submission for the entire group that represents your collective effort.
You are responsible for understanding all work you turn in. For any given assignment, an interview may be included as part of the graded work. During the interview, you may be asked to explain the problem solving process and individual lines of code not given as part of the assignment. Turning in code that you cannot explain is considered cheating.
You may consult with the course staff about any aspect of the course. On programming projects you may consult with other students only in a general way, e.g., about debugging, programming concepts, or questions about wording on the assignment. You cannot actively work with someone else unless the assignment specifically grants permission for you to do so. It is never acceptable to directly show one another your program code or write one program among a group and submit multiple copies. Finally, it is unacceptable to search for direct answers to problems on the Internet.
Consult means you can discuss programs in a general way before writing code or get help with debugging your program, but you must write your own code and do your own thinking about the problem. For each assignment you are expected to include a list of the people with whom you have consulted (including any other students and course staff) or that have talked to you in the README file you submit with the assignment. You should also cite any resources other than class materials you use (e.g. web pages, notes from other courses at other universities, etc.). This file is required and failure to provide it will result in rejection of the assignment as complete.
If you are not sure what the collaboration policy is for a given assignment, please ask!
Computing Requirements
This course requires you to use many different websites, each best suited to its task. We are working to coordinate all of them as best we can, but some will require you to create an account to log in — in this case, please use your Duke NetID (but not your Duke password) so that we can properly track you across all of them.
Course Web Site (no log in required)
The syllabus, class
notes, reading assignments, homeworks, and other resources, will be
available here.
Sakai (standard Duke log in required)
Grades and announcements
will be available here.
Piazza Discussion Board
If you have any questions about the course, post your questions here
because it is seen by all the course staff as well as all the students.
You should also regularly read and contribute to the course discussion
board as it is a useful place for posting questions that are likely to
be of interest to the rest of the class. You are encouraged to post
responses to questions as well as ask them. The discussion board will
be monitored regularly and responses posted to questions that have not
previously been answered. Before posting a question, please make sure
that you have read all previous messages and that your question has not
yet been discussed.
Runestone Interactive Books
The course textbook is online and interactive! It includes practice exercises that we may assign during the semester.
CloudCoder
Practice Problems will be hosted at this site. While they can be tested there, you must submit them from within Eclipse or on the web to get credit for them.
Python Tutor (no log in required)
This site is used within the textbook and during class. It is a useful
tool for seeing exactly what your program is doing when it is run.
Additionally, although not its primary purpose, you may want to paste
your code there to help debug more complex issues --- always make sure your most current version is saved on your computer within Eclipse.
Software
All computing projects will use Python 2.7, the Eclipse programming environment, and the Duke Ambient plug-in for downloading and submitting projects. More information about installing this software is available here.


