CS1: Problem-Solving and Abstraction

CMPU-101 Sections 56-57
Vassar College, Spring 2021
Syllabus / Course Wiki

Welcome to our course wiki. It will be updated throughout the semester with important course information, so check here regularly.

Professor: Marc Smith
Office: SP 104.5 (teaching fully remote)
Phone: 845 437 7497
Email: mlsmith (best way to contact me!)
Lectures: Mon/Wed 12:00-1:15pm Zoom
Labs: Fri 1:00-3:00pm (Section 56) Zoom
Fri 3:10-5:10pm (Section 57) Zoom
Office Hours: Mon/Wed 1:15-3pm Zoom
Tue 1-3pm
Thu 4-6pm
and by appointment
Wiki: https://www.cs.vassar.edu/courses/cs101-2021-5657/top
Campuswire: https://campuswire.com/c/G4F8726F9
Moodle: https://moodle.vassar.edu/course/view.php?id=18339



How to Design Programs, Second Edition, by Felleisen, Findler, Flatt, and Krishnamurthi. Required
(available in the Bookstore, from Amazon, and for free online)

This course is an introduction to computing and programming. Its major goal is to introduce students to the principles of systematic problem solving through programming and the basic rules of computation.

The course does not assume any prior programming experience. It is therefore suitable for first-year students—majors and non-majors alike—who wish to explore the intellectual ideas of the discipline.

The course assumes a basic familiarity with arithmetic and algebra. It does demand curiosity, self-discipline, and some amount of people skills, because all computer scientists end up working with others interactively all the time, in disciplines across the sciences and humanities.

This course is sometimes referred to as Computer Science I, but the subtitle—and essence—of this course concerns problem solving and abstraction. This semester we will explore the art and science of problem solving using the computer as a tool. But a computer is not a tool in the same sense as a hammer or screwdriver, is it? A computer must run software to be useful, and that software must first be designed and implemented. This course introduces a series of Design Recipes that help develop fundamental data abstraction and problem solving skills. We will write programs in a series of student learning languages based on subsets of Racket, a modern, functional programming language. You will find that our textbook, programming languages, and programming environment were developed by the same group of people, to provide an overall integrated learning environment. The problem-solving techniques learned in this course extend seamlessly to the second semester Computer Science course, where Java and Object-Oriented programming are introduced.

We will use DrRacket v8.0 (or later), a programming environment for the Racket programming language. Racket is a variant of Scheme, which is itself a descendant of LISP, the second oldest high-level programming language. For this course we will use the student languages (BSL, ISL, ASL) from the HtDP/2e text, and teachpacks for graphics and interactive animation that DrRacket provides.

DrRacket is installed on the computers in our classroom and labs. It is also freely available on the Web (see links on the left of this page) in case you wish install it on your own computer. DrRacket runs on most popular platforms (Windows, Mac OS X, Linux, and other *nixes). Programs written in DrRacket have the same behavior on all platforms. You therefore do not need to worry what kind of machine you use when you run DrRacket programs.

Note: Due to COVID-19, and that class this semester class will be fully remote, we will not actually be meeting in one of the department's Linux labs. Therefore, you will install and use DrRacket locally on your own computer.

We are a community of learners, but we must be present to learn from one another. You provide a unique and valuable contribution to every class. The questions you ask help everyone better understand the course material. Missing class deprives the entire class of your insights and understanding. So, please notify me before any classes or labs you know you will miss. I take attendance every class, and I worry about you when you're not present. More practically, part of your grade (5%) is based on participation, and you must be present to participate (visits during office hours also count toward class participation). Excessive absences tend to hurt one's overall performance in this class.

Note: Due to COVID-19, remote lectures will be recorded. If you are in a time zone that makes synchronous attendance prohibitive, please let me know, and we will make arrangements for you to attend asynchronously. Unless otherwise pre-arranged, students are expected to attend lectures synchronously.

This course is designated as a Quantitative Course, satisfying one of Vassar's three requirements for graduation, along with the first-year Writing Seminar and the foreign language proficiency requirement. This course will challenge you to think abstractly, analytically, and logically–as would any other designated Quantitative Course.

So here's some advice: Keep up with the reading and assignments. Topics tend to build on one another. Missing one lecture may prevent you from fully understanding the next, which may prevent you from completing a lab or assignment, and so on (you get the idea). Do your best to attend every lecture. Make arrangements with a classmate to copy material you miss when you can't attend, and don't hesitate to ask me questions whenever they arise. Visit me during office hours–I want to know how you feel about the course material and I truly want you to enjoy the class.

To assess your understanding of the topics presented in this course, there will be daily quizzes, weekly labs and assignments, and two midterm exams (dates already set–see the table below and the schedule), and a final programming assignment.

A word about the labs: The purpose of the labs is to give you some hands-on experience with the actual tools, and to explain some of the principles from lecture with hands-on examples.

A word about the assignments: One of the purposes of the assignments is to prepare you for the exams. Some assignment problems are drawn from HtDP, the textbook; others are constructed for this instance of CMPU-101.

Exams: The exams are open book, open note, and will take place in lieu of the lab session for that week.

Attendance, Lateness, and Final Grade determination: If you are unable to attend class on the day of an exam, it is your responsibility to notify the instructor in advance to make other arrangements. Late assignments will be penalized, and will not be accepted once solutions have been discussed in class. Your final grade for the course will be calculated according to the following distribution of coursework:

5% Participation
20% Weekly Labs
20% Assignments
20% Midterm I (3/26)
20% Midterm II (5/14)
15% Final Programming Assignment

Based on the weighted average of your graded coursework, your letter grade will be determined according to the standard 90, 80, 70, 60 cutoffs. For example, 90% or above is an A; 80% or above, but below 90%, is a B; etc. Pluses or minuses may be added at the instructor's discretion. Note: you must have both a passing exam average and an overall passing average to pass the course.

Please don't cheat. Read Going to the Source. Since this course is concerned with composing code, the guidelines that apply to writing in general apply equally to the writing of computer programs. Copying someone else's code without attribution amounts to plagiarism. So give proper attribution for the help you receive. Quoting from chapter X of Going to the Source, “In suspected cases of plagiarism, the instructor prepares a written statement of complaint to the Academic Panel.” Please don't put yourself or your professor in that position. The Computer Science Department has adopted its own Student Integrity Guide which we hope will be helpful to you when questions arise. When in doubt, ask your professor or a coach before seeking any help from another source.

Academic accommodations are available for students registered with the Office for Accessibility and Educational Opportunity (AEO). Students in need of disability (ADA/504) accommodations should schedule an appointment with me early in the semester to discuss any accommodations for this course that have been approved by the Office for Accessibility and Educational Opportunity, as indicated in your AEO accommodation letter.

Vassar College is committed to providing a safe learning environment for all students that is free of all forms of discrimination and sexual harassment, including sexual assault, relationship abuse, and stalking. If you (or someone you know) has experienced or experiences any of these incidents, know that you are not alone. Vassar College has staff members trained to support you in navigating campus life, accessing health and counseling services, providing academic and housing accommodations, helping with legal protective orders, and more.

Please be aware all Vassar faculty members are “responsible employees,” which means that if you tell me about a situation involving sexual harassment, sexual assault, relationship abuse, or stalking, I must share that information with the Title IX Coordinator. Although I have to make that notification, the Title IX office will only provide outreach by email. You will control how your case will be handled — you don’t have to read or respond to the email, and it is completely up to you whether to pursue a formal complaint. Our goal is to make sure you are aware of the range of options available to you and have access to the resources you need.

If you wish to speak to someone privately, you can contact any of the following on-campus resources:

The SAVP website (https://savp.vassar.edu) and the Title IX section of the EOAA website (https://eoaa.vassar.edu/title-ix/) have more information, as well as links to both on- and off-campus resources.

I would like to acknowledge two of the authors of How to Design Programs, Second Edition, Matthias Felleisen and Matthew Flatt, for their advice over the years in constructing the syllabus for this course, as well as lecture and assignment materials, which heavily influenced the content for this course.