
from https://xkcd.com/378
In CS 50 (cross ref ENGS 50) you will learn how to design and build large, reliable, maintainable, and understandable software systems. In the process you will learn to program in C with Unix development tools.
The objectives of this course are for you to learn:
- Software design principles
- Good coding style and documentation
- Debugging and testing
- Design and coding with a team
- Programming in C
- Programming on Unix
- Use of git for source-code management.
The first few weeks of this course are a crash course in Unix and C. After that, you will build your very own Search Engine application. Finally, you will join a team of other students to design, build, document, and test a large software project.
Prerequisite: CS 10.
Who, when, where
(Note: all times are Eastern time zone)- Instructor
- Tim Pierson | 222 Engineering and Computer Science Center (ECSC)
office hours: most weeks Thurs. 2:30 pm - 3:30 pm (confirm via Canvas calendar), and by appointment. - Graduate teaching assistants
- Cesar Arguello Martinez and Yijing Feng.
- Section Leaders
- Aimen Abdulaziz, Bansharee Ireen, Chahak Goyal, Edwin Onyango, Henry Irwin, Henry Kim, Jack McMahon, Mark Tao, Miles Harris, and Rehoboth Okorie.
- Learning Fellows
- Angelic McPherson, Chelsea Joe, Dara Casey, Jordan Mann, and Lucy Korte.
- Lectures
- 11-hour | MWF 11:30 am - 12:35 pm | ECSC 116
x-hour | Tu 12:15 pm - 1:05 pm | ECSC 116 - We will regularly use x-hours to discuss Unix and C-related concepts early in the class. The x-hour periods in the first half of the term will be used for advancing course materials, while the x-hour periods in the second half the term will be used mainly as a help time on labs. We will reserve part of class time for team activities.
- To maximize your learning efficiency during class time:
- Read the lecture notes and the summary before each lecture
- Join the class with questions and engage in team activities
- Come to office hours for questions related to labs or course materials
- Do the weekly reading - it's short
- Engage fully with your project team, striving to produce well-designed, well-documented, well-tested, well-styled code.
- Help: Learning fellows
- This course involves active learning, and you are expected to be engaged during each class meeting time. Learning Fellows are here to facilitate this through peer instruction, which is critical to your learning in this course. Your reasoning skills will develop most effectively when you are actively engaged with this material and cooperative learning is one of the best ways to achieve this engagement.
- The Learning Fellows and I will circulate across teams, promoting useful dialog and providing feedback. Your questions and feedback will help shape the course based on your questions and ideas. If you have questions, do not hesitate to raise hand and ask for help.
- If you have questions about the Learning Fellow Program, please reach out to me, or visit https://sites.dartmouth.edu/learningfellows/.
- Help: Slack
- We will use Slack for class discussion and Q/A. Click on the Slack link on Canvas to be added to our Slack channel. I encourage you to ask and answer questions there. Make sure you abide by the honor code described below!
- Note: You can DM me on Slack, but unless I happen to be sitting at my computer when you do, I won't get your message until Slack sends me an email at some point in the future. You're better off emailing me directly rather than DM'ing me on Slack. Please don't message me via Canvas!
- Announcements
- Monitor Canvas for periodic course-wide announcements.
- Textbook
- There is no textbook for this class. The Reading and Resources tabs have links to the recommended reading and other helpful resources.
Homework
- Reading assignments
- You are encouraged to read the class summary linked from the date on the Schedule tab before class. You are expected to have read the weekly readings before the next week. Make sure to read the CS 50 style guide before starting at any homework.
- Labs
- Students will work individually on a series of six coding assignments ("labs"), which get progressively harder through the term. All labs are submitted through GitHub Classroom (GitHub). We will test all your solutions on Thayer Linux servers, so you should develop and test (or at least test) your code there.
- Project
- Students will work on a project in small groups; details will be announced later in the term. After the project is submitted, each member of a group will submit a confidential assessment of themselves and the others in their group.
- Access to Linux systems
-
You will do all your programming on Linux servers at Dartmouth's Thayer School of Engineering. You will have to connect to the Dartmouth Campus network to access Thayer's Linux servers. If you are off campus, please use Dartmouth's VPN.
The primary CS50 server is called
plank.thayer.dartmouth.edu
; you may also use equivalent servers calledbabylonX.thayer.dartmouth.edu
, whereX
is 1 through 8. (You can check their status here.) Your laptop must first be on the campus network, or on Dartmouth VPN, to access these servers.In CS50 we support development only on Thayer's Linux systems. Not MacOS, not Windows, not even other Linux systems. Linux systems differ in subtle ways; MacOS is a form of Unix different from Linux, and Windows is even more different. The graders will use
plank
for all testing.If you find yourself stuck or confused about Linux or any of the tools we use, here are some places to look:
- For help with Dartmouth-supported services check the Knowledge Portal, which has helpful pages about Canvas, Slack, VPN, Zoom, and more. If you're really stuck, email help@dartmouth.edu or call their helpdesk for personalized help. (The phone number is at the bottom of every page on the Knowledge Portal.)
- For help using the Thayer Linux computer systems, look here first.
If you don't find an answer there, search the
#help-systems
channel on our workspace to see if others may have had and resolved your issue or, if not, post a question there. If neither of those help, then send email to Thayer Computing Services for support. (Keep in mind they are only active during normal business hours.) - For help about CS50-specific issues, use Slack.
Grading
-
There are no exams in this class -- instead, a series of programming exercises and a final project.
Component Percentage Shell Lab 1 8% C intro Labs 2-3 20% TSE Labs 4-6 36% Final project grade 26% Class engagement 10% Total 100% The final project is a team grade -- every team member gets the same grade for the team portion -- but there is an opportunity for peer evaluation to address variance in members' contribution. The team score is worth 90% of the grade and the peer evaluation is worth 10%.
Class engagement will be assessed on attendance and participation in activities in class. Engagement requires both preparation and participation - you should read ahead, think ahead, and actively participate.
Class Attendance counts toward "engagement". You are expected to attend and engage actively in classroom activities. If you cannot attend a class meeting due to an emergency, reach out to your team mates so that you can catch up with them outside the lecture time for group activities.
Lab grades depend on whether your submission meets the requirements for that lab, and being submitted on time. See the lateness policies below.
- Homework grading/regrading
-
Your work is normally graded each week by the teaching assistants (TAs), 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 me or the TA and we'll make the correction right away.
If you feel the grader did not grade your answer accurately, then you should send email to both the grader and me 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 four days from when the homework/exam was returned, or the last day of class, whichever is earlier.
Please note that any regrade request that comes after the deadline stated above will not be considered, regardless of its merit.
- Programs that crash {#crashes}
-
Your lab solutions are graded on correctness, style, design, and documentation. Each lab requires you to document your own tests and test results; the graders will also compile and run your program with their own test cases. If your program crashes when the graders run a particular test, your program will be marked as incorrect for that test. If your program does not compile, you will lose all correctness points. 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 policy
- Due via Canvas on the date and time noted on the Canvas assignment. Late penalties:
- < 8 hours: 10%
- < 24 hours: 20%
- < 48 hours: 40%
- more: no credit.
Honor code
-
Dartmouth's Honor Code and policies apply to your conduct in this course. Please read about Dartmouth's Academic Honor Principle.
For lab assignments 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 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 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 their job search, it is extremely disruptive, distracting, and misleading for you and future students.Keep in mind:
- 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, make the repo private. GitHub offers free unlimited 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 graders have a list of existing public repos hosting CS50 related labs, and will compare your submission to them to detect plagiarism.
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.
Copying code from StackOverflow or other online sources is strictly forbidden. The code you submit must be your own.
For more general information, see Dartmouth's guidelines for proper citation of sources, particularly the section on Computer programming assignments.
Accessibility Needs
Students requesting disability-related accommodations and services for this course are required to register with Student Accessibility Services (SAS; Getting Started with SAS webpage; student.accessibility.services@dartmouth.edu; 1-603-646-9900) and to request that an accommodation email be sent to me in advance of the need for an accommodation. Then, students should schedule a follow-up meeting with me to determine relevant details such as what role SAS or its Testing Center may play in accommodation implementation. This process works best for everyone when completed as early in the quarter as possible. If students have questions about whether they are eligible for accommodations or have concerns about the implementation of their accommodations, they should contact the SAS office. All inquiries and discussions will remain confidential.
Mental Health
The academic environment at Dartmouth is challenging, our terms are intensive, and classes are not the only demanding part of your life. There are a number of resources available to you on campus to support your wellness, including your undergraduate dean, Counseling and Human Development, and the Student Wellness Center.
Religious Observances
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 as soon as possible, or before the end of the second week of the term—at the latest, to discuss appropriate adjustments. Dartmouth has a deep commitment to support students’ religious observances and diverse faith practices.
Acknowledgment
This version of the course is based upon those designed by Professors Balkcom, Campbell, Kotz, Lakshmi Kommineni, and Palmer. I am deeply indebted to these outstanding educators.