Mit Google Docs veröffentlicht
Syllabus - F24 CS60
Automatisch alle 5 Minuten aktualisiert

Syllabus

CS60 Principles of Computer Science (Fall 2024)

Class:

Section 1: Monday, Wednesday 9:35am – 10:50am in SHAN B460

Section 2: Monday, Wednesday 11:00am – 12:15pm in SHAN B460

Prerequisite:

Harvey Mudd’s CS 5

Instructors:

Jim Boerkoel (boerkoel@hmc.edu), McGregor 309

David Harris (harris@hmc.edu), Parsons 2374

Head Grutors:

Alicia Luo

Taylor Levinson

Shreya Reddi

Course Homepage:

https://pages.hmc.edu/harris/class/cs60/

Q&A:

See our class Piazza

Submissions:

via Gradescope: CS 60 Gradescope

   Getting Help:

Office Hours:

  • Prof. Jim: Fridays, 9:00 - 10:50 am
  • Prof. Harris (Parsons 2374)
  • M 1-2, Tu 10-11, Wed 2:30-3:30, Th 2:45-3:45

Grutoring Schedule

Exams:

Quiz 1: Wednesday, October 2, in-class
Quiz 2: Wednesday, November 6, in-class

Final:

  • Section 2: Monday, December 9, 9am-noon, in-person
  • Section 1: Friday, December 13, 9am-noon, in-person
  • Note: Section 1 students may opt to take the final exam during Section 2’s earlier timeslot. However, Section 2 students must take the exam in their timeslot.

Overview of CS60

CS 60 serves majors and non-majors by providing a deeper and broader introduction in Computer Science. We will look at several aspects of code, including:

Functionality.  Does a program work as intended?

Testing.  How do we design test cases that can be automatically executed to verify that a program works as intended?

Style.  How do we design and document programs to help programmers (ourselves and others) read and understand code?

We will dive into several key conceptual areas:

All these concepts are important not just for CS majors, but for anyone who wants to apply computation to produce creative solutions for problems in other fields.

Note that we did not list “programming in Racket” and “learning Java”! You will get a lot of experience with these languages, but only because these are the tools we happen to be using this semester. Next semester, we could replace Racket and Java by Haskell and JavaScript; the class would still hit all its goals and would still be CS 60. (That being said, Java is currently the third most popular language in the world!)


Health and Basic Needs

Before you can learn, all your basic human needs must be met. Your physical and mental health are more important than whatever is going on in class.

If you aren't feeling well, please take care of yourself (and possibly others) by staying home from class. If you think you will be unwell for a while, contact an Academic Dean to let them know. Typically, the Dean will then contact us to arrange flexibility for our course, if necessary. If you feel comfortable doing so, please also contact us directly. You don't need to tell us any personal details if you don't want to, you can just let us know that you're in touch with a Dean about getting some flexibility for the course.

Accommodations

HMC is committed to providing an inclusive learning environment and support for all students. If you experience mental health, chronic or temporary medical conditions and may need accommodations in order to fully participate in this class, we encourage you to contact your home college’s Accessible Education office to request accommodations. (For HMC, you can contact access@g.hmc.edu).

Mental Health

College students often experience issues that may interfere with academic success such as academic stress, sleep problems, juggling responsibilities, life events, relationship concerns, or feelings of anxiety, hopelessness, or depression. If you or a friend is struggling, we strongly encourage you to seek support. Helpful, effective resources are available on campus, at no charge.


Getting Help

We expect that you will want and need help. Learning how to get help is an important part of learning CS! There are lots of ways to get support and help in CS 60, including:

If you need help with getting DrRacket or VSCode running on your computer, or accessing Piazza or submitting your assignments on Gradescope

Piazza

All class-related communication will happen on Piazza (not email). The system has ways of asking anonymous questions and specifying who you want to be able to see your question.

When you have questions related to a submission on Gradescope, please always include a link to your submission. Taking this small step saves us from having to dig around for your work and helps us help you faster!


Course Components

Expectations of you

Homeworks

Homework assignments are designed to make you think beyond strict repetition of class material and to give you hands-on practice with code functionality, testing, and style. They will be released by Monday and typically due by the following Sunday at 9:00pm.

If you have not tried buddy or pair programming, we encourage you to give it a try! Feel free to use the “Search for Teammates” post on Piazza to identify potential programming buddies/partners. If you choose to use pair programming, you must do so on the entire homework assignment; if you have already begun working on your own, you may not switch to pair programming mid-assignment. In rare cases, you may wish to split the partnership mid-assignment; in these cases, please contact the professors as early as possible to discuss alternative arrangements. When pair programming, you should create a joint submission: one partner should submit to Gradescope, then add their partner to the submission.

Exams

Exams are designed to help assess your command of key CS concepts and to help you identify potential areas of growth in your CS knowledge. Because exams are designed to help you identify your own strengths and weaknesses, they are to be completed alone, without the aid of notes, books, or any other external resources other than any that are specifically allowed on a per exam basis.


Grading

We have tried to design the assignments and grading system for CS 60 to account for multiple ways of learning and accumulating knowledge.

Course Grade

Your grade is point-based, and you accumulate points by working on homeworks and exams, through comprehension checks will be used as extra credit on exams.

Component

Contribution to Final Grade

Participation

5%

Homeworks

45%

Quizzes (x 2)

Final Exam

25% (12.5% each)

25%

There will be 11 homeworks (HW10 is a double assignment you will turn as two parts). All homeworks will be graded based on a combination of functionality, testing, and style. We will provide a rubric with each homework that indicates how much each of these elements is worth. Your lowest two homework assignment grades of the semester will be dropped. This is intended to give you flexibility in case you are ill or need to miss a week.

The graders are human and occasionally will be inconsistent or even wrong grading homework.  However, there are enough homeworks and parts and subparts of each homework that a grading error on any particular part will make epsilon difference to your final grade.  The CS60 teaching team will not regrade homework.  If you feel your quiz was marked down on a correct answer, you may submit it to the instructor for a regrade.  The instructors reserve the right to review and adjust the scores on all parts during a quiz regrade.

To encourage continual improvement, you have an opportunity during your final exam to “make-up” your performance on quizes. If you score better on the final than you did on one (or more) of your quizzes, we will replace the lower of your quiz scores with your score from the final.

Our default grading scheme is the following 10-point grading scale: e.g., A: [90%, 100%], B: [80%, 90%), etc. Instructors reserve the right to curve this scale in students’ favor if necessary (e.g., to account for a harder than anticipated exam).

Late Policy

Deadlines are useful because they put limits on our time: They let us know how much time to set aside for something, and they let us know when we need to move on :). However, deadlines can sometimes be punitive: If we need some flexibility in our lives (for example, to accommodate a particularly busy week), a deadline might prevent us from doing our best work.

We try to strike a balance between setting deadlines that move us along, while also providing flexibility when you need it. Here is the default, built-in flexibility we have for deadlines in our course:

Homeworks: Homeworks are generally due on Sundays. You may have two 72 hour late passes to be used on different homework assignments at your discretion. Students are responsible for self-tracking their use of late-days under the HMC honor code. If you are pair programming, either you or your partner may spend a late pass; only one is necessary. Please negotiate with your partner how you will handle late passes before the deadline arrives! Exception: the final assignment is due on the last day of class, and late submissions are not allowed.

Exams: There are no make-up quizzes. If you miss a quiz, the corresponding part of the final exam will “make up” the quiz. Please do not miss the final exam!

We want to emphasize that this is the default deadline policy, which has some built-in flexibility that we hope is useful to you. If you need more flexibility due to unforeseeable circumstances (for example, if you have an illness or injury), please let us know as soon as possible, so we can work with you. For prolonged circumstances, we will work with an Academic Dean to get you the flexibility you need. For more information, see the section on health and basic needs.

Autograder Errors

We will often use autograders to assess the functionality of your code. Gradescope will warn you when you submit incorrect files, or when the autograder fails to execute. For example, you might see the following:

The autograder failed to execute correctly. Please ensure that your submission is valid. Contact your course staff for help in debugging this issue. Make sure to include a link to this page so that they can help you most effectively.

This message almost always indicates a bug in your code!  (Bugs in the autograder happen sometimes too, but that’s the exception rather than the norm.)

It is your responsibility to submit working code. Generally, course staff will not manually download submissions to fix bugs to run the autograder. If you submit code such that the autograder does not run, you will receive no credit for any functionality! Of course, you are always welcome and encouraged to get help from course staff in debugging.

Instead, you need to find the bug and either fix the syntax or comment out the non-working code. Typically that means making a method trivial (e.g. do nothing except return something of the expected type). You can leave your implementation in block comments with a note that you have commented out the code because there is a bug. It is better to submit code that passes some tests rather than submit code that causes the autograder to fail. As you implement, we highly recommend running tests frequently so that you can quickly assess when new code breaks functionality.


Classroom Climate and Policies

The goals of this course can only be accomplished in a setting of mutual respect. As your instructors, we are committed to creating a classroom environment that welcomes all students, regardless of their identities (e.g. race, class, gender, sexual orientation, religious beliefs). We all have unconscious biases, and we will try to continually examine our judgments, words and actions to keep our biases in check and treat everyone fairly. We hope that you will do the same. If you feel comfortable, please let one or all of the professors know if there is anything we can do to make sure everyone is encouraged to succeed in this class.

Our goal is to welcome everyone to CS. We firmly believe that everyone in the class is fully capable of engaging and grasping the material. Our classroom should be an inclusive space, where ideas, questions, and misconceptions can be discussed with respect. There is usually more than one way to see and solve a problem and we will all be richer if we can be open to multiple paths to knowledge. We look forward to getting to know you all, as individuals and as a learning community!

Honor Code

Whether you are programming individually or as a pair, there are a few important rules regarding cooperation:

In short, you should conduct yourself in accordance with the Harvey Mudd Honor Code and with the Computer Science Department’s academic honesty policy.

You may wonder if it is permitted to help a classmate (other than your partner if you are pair programming) debug a program and, in the process, look at their code. This is permitted (and encouraged!), assuming that it is done with the intent of aiding your classmate and not with intent of gleaning code that might be used in your own program, nor with the intent of completing part of the assignment for another person.

Here are some additional examples of permitted collaboration and prohibited conduct. Use your good judgment here. If you are not sure about what's appropriate, please ask.

Permitted collaboration: 

Prohibited conduct:

Buddy and Pair Programming

We encourage you to “buddy program”: This is when you work with a buddy but each person uses their own computer. You can help each other brainstorm, debug, and celebrate (often in that order)! If you haven’t tried buddy programming, we recommend it. However, remember that when buddy programming, you’ll never have a copy of anyone else’s code.

For most of the programming assignments you will be permitted to “pair program”, which is different in that you will share a computer and alternate who is typing at least every 30 minutes on a shared submission. If you choose to use pair programming, you must do so for the entire assignment; no part of the assignment may be completed individually. Pair programming is great at providing a partner in learning but can pose logistical challenges. Because all of your work time must be together, you are only permitted to get help during grutoring (or Piazza) when you are both there. If you would like to try pair programming, we suggest using the new pair programming lab space in McGregor 206. Our grutors are pair programming experts, so don’t hesitate to ask for pointers!


Tentative Fall Calendar -- Subject to change

Week

Monday

Wednesday

Sunday 9 pm

8/26

Intro to Racket

Trace/Let; Intro to Java

9/2

Labor Day: No Class

Big O

1: Recursion in Racket & Java

9/9

Complexity

Racket Lists

2: Big O

9/16

Java Arrays & Racket Lists

Higher Order Functions

3: Racket Lists + Java Arrays

9/23

HoFs, Java Strings

Java Object Oriented

4: Racket HoF + Java Strings

9/30

Java Objects, Double Arrays

Quiz 1

10/7

Java Lists

Java Lists

5: OO Programming
Due:
Friday, Oct. 11

10/14

Fall Break: No Class

Java Inheritance

6: Linked Lists

10/21

Java Interfaces

BSTs

7: Inheritance

10/28

BSTs

Quiz 2 Review

8: Binary Search Trees

11/4

Quiz 2

Stacks & Queues

11/11

Priority Queues, Heaps

Abstract Data Types

9: Stack Calculator

11/18

Spampede

Spampede AI

11/25

Optional Spampede Lab Day

Thanksgiving: No Class

12/2

Advanced Topics

Course Review

10: Spampede

Due: Friday, Dec. 6