The CS50 team

The CS50 team includes Professor Grigoryan, two graduate teaching assistants, and seven undergraduate teaching assistants.

Professor: Gevorg Grigoryan, Sudikoff 113

Graduate assistants: Providing additional assistance and grading

Undergraduate assistants: Serving as Section leaders and graders

Contacting the team

The majority of questions and problems can be resolved via posts to Slack (see below). If you need a private communication with the teaching team, you can do so via direct messaging in Slack (preferred means of electronic communication), contact the relevant person by email, visit us during office hours, or make an appointment.

Office hours are listed on the Canvas calendar, also visible via this Calendar feed.

Student responsibilities

  • Attend class (with your laptop) and engage in classroom activities. We do take attendance - you are permitted three absences.
  • Attend weekly Section meetings, and engage in their activities. We do take attendance - you are permitted three absences.
  • Do the weekly reading - it’s short.
  • Pay attention to Slack for announcements.
  • Code and submit Labs 1-6; see the policies below on extensions and late submissions.
  • Engage fully with your project team, striving to produce well-designed, well-documented, well-tested, well-styled code.

Lectures

  • MWF 10:10-11:15
  • x-hour: Th 12:15-1:05
  • Location: Wilder Hall 111

Lecture notes

Each lecture topic will be supported by lecture notes. These should be available by class time each day of class and will complement what is presented in class. We try to include in the class notes most of what we will discuss in class, but there will often be additional material in the notes we can’t cover in class, and examples shown in class that won’t be in the notes. In short: you should read the lecture notes, and attend class.

Syllabus

Please see the schedule for the complete list of topics that we will cover. The schedule is subject to change and I will try to update this page when changes occur. All class times, and the official assignment deadlines, are posted in the Canvas calendar.

Some assignment deadlines, further out in the term, are still tentative.

We will use many of the x-hour periods for additional lectures, discussions, lab and help time.

Sections

Each student will be assigned to a Section, and each Section meets one hour per week. Attendance is required; you are permitted up to three absences. These meetings give you an opportunity to work closely with an undergraduate teaching assistant on a hands-on activity that reinforces what we do in class. Notes are posted at the end of each week.

If you have a conflict with your usual section meeting time, in a particular week, feel free to attend a different section that week - just slack your regular section leader know, and check in with the leader of the section you attend. Please don’t make a regular habit of changing sections.

Leader Day Time Room
Tanya A. Shah ?? ?? ??
Thomas A. Young ?? ?? ??
Christina T. Lu ?? ?? ??
James G. Edwards ?? ?? ??
Justin D. Gualtieri ?? ?? ??
Dev Jhaveri ?? ?? ??
Oliver M. Mctammany ?? ?? ??

Reading assignments

You are encouraged to read all the assigned readings listed before class each week, but you are expected to have read these materials before the next week.

Prerequisites

Successful completion of Computer Science 10.

Course Announcements

The instructor will make announcements via Slack. You may choose among several options for receiving announcements and other updates to our CS Slack channel. See the Slack page for more information.

We will use Slack for class discussion and announcements, Canvas for calendar and grades.

Slack

You are responsible for reading announcements we make in Slack. Slack is also a great tool for seeking help, quickly and efficiently, from classmates and the instruction team. Rather than emailing questions to the teaching staff, please post your questions on Slack. This allows your classmates to benefit from seeing the question and subsequent instructor response. You are also encouraged to contribute answers to other people’s threads, or initiate open-ended discussions (“what did everyone think about that ‘goto considered harmful’ article?”).

Warning! If your question reveals part of a solution, do not post it publicly! Ask your question vis-a-vis a direct message to one of the TA’s or the professor.

To get set up in Slack, go to Slack and sign up with your @dartmouth.edu email address (unless you already have an account on the cs-dartmouth Slack domain). One signed up, direct message Lili Wang (@lili.wang.gr), asking to be added to the #cs50-w18 Slack channel.

Slack has a nice app for iOS and Android, desktop clients for Mac, Windows or Linux (I recommend the desktop client option), as well as a nice website interface.

Slack has great tools for sharing not only text and files, but also code snippets and for jointly editing posts, and much more. You are encouraged to create slack channels for your own groups for managing the final project.

Canvas

All lab assignments will be announced in the Assignment section of our Canvas site. You will receive all your feedback and grades via that site.

All classes, office hours, and due dates will appear on the Canvas calendar.

Access to the Canvas site is limited to those enrolled in the course.

Homework

Labs

Students will work individually on a series of six coding assignments (“labs”), which get progressively harder through the term. The first three labs are submitted through a Linux script, and the latter three labs are submitted through Gitlab (below). We will test all your solutions on CS Linux systems (below), so you should develop and test (or at least test) your code there.

Project

Students will work on projects in small groups assigned by the instructor; details will be announced later in the term. After the project is submitted, through Gitlab (below), each member of a group will submit a confidential assessment of themselves and the others in their group.

Gitlab

In the latter half of the course we will use Gitlab, a locally hosted git server, for storing and submitting your source code. This service will be essential for the project. Please do not use Github, because most repositories there are publicly accessible; see the section about Honor Code below.

Access to CS Linux systems

You will need a computer account on the CS Linux machines even if you develop on your own computer. You are free to use the Sudikoff labs (rooms 003, 005) for your work; if you have a Windows laptop, you may find it best to use the MacOS computers in these labs. Please note that these rooms have some periods when they are reserved for other courses.

Recovering files lost on the CS Linux systems

The CS servers run a periodic backup of all user files, once or twice a day, and you can recover the files yourself.

Grading

There are no exams in this class – instead, a series of programming exercises and a final project.

Component Percentage
Intro Labs 1-3 24%
TSE Labs 4-6 30%
Final project team grade 31%
Team contribution and peer evals 5%
Class engagement 10%

The final project is a team grade – every team member gets the same grade – but there is an opportunity for peer evaluation to address variance in members’ contribution.

Class engagement will be assessed on attendance and participation in activities both in class and in Section meetings. Engagement requires both preparation and participation - you should read ahead, think ahead, and actively participate.

Class Attendance counts toward “engagement”; you have three ‘free’ absences. You are expected to attend and engage actively in classroom activities.

Section Attendance counts toward “engagement”; you have three ‘free’ absences. You are expected to attend and engage actively in the meeting’s activities.

Lab grades depend on the segfault and lateness policies below.

Programs that crash

It is particularly difficult to grade a program that doesn’t compile or crashes during testing by the graders. If your code does not compile or your program crashes due to segmentation faults or any other issues, we will return it to you via email as soon as possible. You will then have 24 hours to correct it and resubmit, with a 20% deduction off the maximum score. (But no submission, or resubmission, will be accepted more than 72 hours after the original deadine; see below.) If you choose not to resubmit, we will grade the original code as best we can.

We cannot guarantee that we’ll return you program immediately - we’ll do the best that we can. You might be busy when you receive it due to other commitments, but we have to stick to the above policy. So the best way to avoid that situation is to ensure that your program doesn’t crash in the first place. Learning how to debug and test your programs is a key part of this course.

Late assignments

This is a challenging course, so self-discipline and planning will be key to your success. In short, Start Early!

Late assignments will be penalized 10% for each 24 period (or fraction thereof) late. So if it’s due at 11:50PM on 25-April and you submit it at 1:00AM on 26-April, 10% of the maximum score will be deducted from your final score.

To address unavoidable circumstances, all students are allowed three free 24-hour extensions on lab assignments (at most one extension per lab). Be careful how you use them since the assignments get progressively more difficult as the term proceeds, and you never know when you might fall ill or have an interview. Note that these extensions are not applicable to the term Project.

No assignments will be accepted 72 hours after the original deadline. That includes any second-chance resubmissions you make in response to notice about a “segfault” or “does-not-compile” - all such resubmissions must be in by the 72-hour mark.

Combinations of extension, late penalty, segfault penalty

  • If we find that your code does not compile, or crashes, you lose 20% - period.
  • If we discover a segfault and notify you, you may resubmit (without further penalty) up to 24h after the time we send the notice. If you resubmit more than 24h after the notification was sent to you, we apply the 10% lateness penalty policy.
  • If we notify you that your code does not compile, or crashes with segfault, you can’t then choose to resubmit and ask for the 10% late penalty instead of the 20% segfault penalty. The purpose of our resubmission policy is to allow you to fix some things and avoid losing more points because we can’t observe the functionality of your code.
  • If you take an extension, but then submit your lab after the extended deadline, we compute lateness from the time 24h after the original deadline.
  • Other combinations are possible… but we accept nothing more than 72h after the original deadline.

Homework grading/regrading

Your work is normally graded each week by the teaching assistants, according to a grading rubric that I discuss with them. If you have any grading questions on a homework or quiz, please follow the procedure below.

If the grader made an obvious mistake (e.g., totaling error), you can see the TA and we’ll make the correction right away.

If you feel the grader did not grade your answer accurately, then you should slack both the grader and me (direct message) to explain which program(s) need regrading and why. We will arrange for your answer to be reviewed again. After you hear the outcome on your regrade request, if you still feel the matter is not resolved satisfactorily, then you should see me.

You must submit your regrade request within one week from when the homework/exam was returned, or 5PM March 6, 2018, whichever is earlier.

Please note that any regrade request that comes after the deadline stated above will not be considered, regardless of its merit.

Honor code

Dartmouth’s Honor Code and policies apply to your conduct in this course. Please read about Dartmouth’s Academic Honor Principle.

First, you may discuss and help each other (help in debugging, sharing knowledge, giving moral support, getting coffee, etc.). This support is the type of team spirit and joint problem-solving skills that are the essence of the course and necessary to do a great project. However, you cannot work jointly on coding up (i.e., writing) your individual programming assignments. You can talk, discuss solutions, even show snippets of code on the white board (not the computer) to solve a problem but you cannot jointly work on the code development and writing. Submitted code for the labs has to be yours and yours alone.

The project phase is different. You can work jointly with your project team on writing code and documentation. But you cannot take code from anywhere (e.g., the web or any other source). It has to be the joint product of the team. No sharing of code between teams. As above, teams can discuss code, show each other snippets on the white board, but not share source code.

In either case, you should not read and directly incorporate solutions for assignments found on the Web (including websites for previous terms, inside or outside of Dartmouth).

SPECIFIC GITHUB WARNING

We will also be learning how to share files using the git source code control system. We will use git with Gitlab, a private git server located right here in Sudikoff. You may have also heard of GitHub, which is an open repository of projects (including source code) from programmers around the world. Some past students of CS50 uploaded their assignment or project solutions to GitHub for reference by potential employers. While this is may be a good idea for your job search, it is extremely disruptive, distracting, and misleading for students taking the class with you as well as future students.

  • Anyone can upload code to GitHub. That doesn’t mean it’s good code, working code, or even code that will compile and run! If you take freely available code and study it sufficiently to be sure it works properly and isn’t evil, you might as well write it yourself.
  • If you need to upload your work for reference by potential employers, GitHub offers free private repositories to students.
  • Any student found to have uploaded any CS50 assignment solutions, including TSE and the final project, to a publicly available GitHub repository, or to a private GitHub repository while sharing its access credentials with other Dartmouth students, will be reported.
  • Anyone caught using the work of prior CS50 students, whether from GitHub or other sources, will be reported.

The following is repetitive, but it is necessary to be explicit here (this is Prof. Campbell’s version):

You would be amazed at how easy it is to tell when people work together on problem sets, particularly coding exercises. Think about the simple shell commands we run against your source code from labs and projects to compare your lab assignments and projects against every other assignment and project ever submitted since this revision of course started in 2008 - it takes less that a millisecond to run these checks - no effort on our behalf. Similarly, we know how to use google too. You should not under any circumstance look at or use code from students that have previously taken this course. The message is simple - please don’t make life unpleasant for all of us by breaking these rules. The penalties for cheating at Dartmouth are severe, starting with suspension and including expulsion. If you are unsure about anything, please ask.

We can assure you that violations of the Honor Code have been, and will continue to be, treated seriously.

Indeed, I agree with Professor Cormen, who wrote:

I reserve the right to assign you a failing grade on an entire homework assignment or on an entire exam if I believe that you have violated the Academic Honor Principle, apart from any finding by the COS. I will give you every opportunity to convince me that you did not violate the Academic Honor Principle, but I take the Academic Honor Principle very seriously. You have read Sources and Citation at Dartmouth College. I was co-chair of the committee that wrote this document. In fact, I wrote the first draft. So I know exactly what it says. Cheaters—whether or not they are caught—bring dishonor upon themselves and upon everyone else at Dartmouth. To do that, for just a few lousy points in a course, is [insert your favorite strong adjective meaning “stupid” here]. You cannot fool me into thinking that you did not cheat if, in fact you did. So don’t cheat.

Please let me know if you have any questions—better to be safe than sorry!

Credit your sources

Any ideas you get from other teams or any other source should be carefully cited both in the code and in the documentation.

  • In your assignments, list all your collaborators (e.g., “I discussed this homework with Alice, Bob, …”) and credit any sources (including code) used.
  • You must also credit specific sources that are provided by the instructor. For example, you must credit code that we give you if it helps you with your work (either by direct use of the code, or by simply enhancing your understanding by reading the code).
  • References for any non-trivial algorithms you employ should be included in the code and documentation to ensure others will know where to learn more about it.

For more general information, see Dartmouth’s guidelines for proper citation of sources, particularly the section on Computer programming assignments.

Special accommodations

Students with disabilities who may need disability-related academic adjustments and services for this course are encouraged to see me privately as early in the term as possible. Students requiring disability-related academic adjustments and services must consult the Student Accessibility Services office (205 Collis Student Center, 646-9900, Student.Accessibility.Services@Dartmouth.edu). Once SAS has authorized services, students must show the originally signed SAS Services and Consent Form and/or a letter on SAS letterhead to me. As a first step, if you have questions about whether you qualify to receive academic adjustments and services, you should contact the SAS office. All inquiries and discussions will remain confidential.

Religious observations

Some students may wish to take part in religious observances that occur during this academic term. If you have a religious observance that conflicts with your participation in the course, please meet with me before the end of the second week of the term to discuss appropriate accommodations.

Inclement weather

On rare occasions, Dartmouth may cancel classes or even close the campus. If this occurs, general notice will be given in three ways:

  • Local broadcast media;
  • Campus-wide BlitzMail messages; and
  • A recorded message at a College toll-free Inclement Weather Phone Line: 1-888-566-SNOW (1-888-566-7669).