CMPU-101-04 Computer Science I and Lab. (Fall 2018)

“A computer will do what you tell it to do,

but that may be much different from what you had in mind.”

— Joseph Weizenbaum


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 discipline.


This course is sometimes referred to as Computer Science I, but the essence of this course is problem-solving and abstraction – recognising patterns and making generalisations. This semester we will explore the art and science of problem-solving using the computer as a tool. To be effective, programmers must thoroughly understand not only the problem to be solved, but also the interesting relationship between the programmer, the program and the computer. Investigating this relationship raises several important issues: for example, what sort of language do we want to use to “communicate” with a computer? What sorts of problems can computers be expected to solve? What are the basic elements of computation? What concepts or constructions can facilitate the task of programming a computer?

This course addresses these and other important issues by having students directly interact with computers from the very beginning. The lectures involve the exploration of topics not only by discussing them, but also by regularly putting ideas to the test in live computer sessions. The course includes weekly lab sessions in which students get regular hands-on experience with the topics being addressed in the lectures, and which also serve as a kind of warm-up for the weekly programming assignments.

Topics covered by this course include:

  • The relationship between the programmer, a program, and the computer.
  • Syntax and semantics of a programming language. (i.e. the nuts & bolts of the programming language.)
  • Data types.
  • Primitive computations (a.k.a. operations, functions, or methods).
  • Variables and parameters.
  • Defining new functions for particular operations.
  • Conditional expressions (if this, then that).
  • Lists of numbers (or words, or strings, or… anything), and their cousin the vector.
  • Recursion, for counting, for working through lists, and doing the same thing more than just a couple of times.
  • Data structures, for organising information in a more helpful way.
  • Iteration, brother of recursion: another technique for performing the same operation over and over again.
  • “Destructive” vs “non-destructive” programming.

The course explores these concepts using the Scheme programming language. Scheme is a good choice because it is quite easy to understand how the language is interpreted by the computer and how data are processed according to the program. While fairly straightforward to use (once you get to grips with it), Scheme is a complete programming language and as powerful as any other.

About this Quantitative Course...

This course is designated as a Quantitative Course and, together with the First-Year Writing Seminar and foreign language proficiency, satisfies one of Vassar's three requirements for graduation. It will challenge you to think abstractly, analytically, and logically, just like any other designated Quantitative Course.

That said, it is my sincere hope that you enjoy the class. To me, computer science – and especially programming – is a whole lot of fun, and one of the closest things to 'real magic' this world has. But the unavoidable truth is that becoming good at it takes time, effort and practise. (There's an old joke about a visitor to New York City who, lost, asks an old man with a violin case under his arm, “How do you get to Carnegie Hall?” “Practise, practise, practise,” says the musician with a sigh.)

So, I offer here some advice:

  1. Keep up with the reading and assignments. Topics tend to build on one another.
  2. Please attend class regularly. 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). 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.
  3. 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.
  4. Practise, practise, practise.



  • Professor Simon Ellis. Website. Email.
  • Office hours: Friday, 11.30 a.m. – 1.0 p.m. or by appointment.
  • Location: Sanders Classroom 220.


  • Amy O'Connell, Nadim Majunder & Juan Olivo.
  • Coaching Hours: Now available!
  • Location: Asprey Lab. (Sanders Physics 307).


Time: Tuesday & Thursday, 10.30 – 11.45 a.m. (class).
Friday, 9.0 – 11.0 a.m. (lab.).
Location: Sanders Physics 309.


The textbook for this class is freely downloadable to students in this course.

Class Sessions

The regular class sessions are intended to augment and support the material in the textbook by providing an opportunity for in-depth discussion of topics, working through examples, and the chance for you to ask as many questions about Scheme and computer science as we have time for! They are there to help you learn and grow as programmers and computer scientists.

That said, the material we cover each week will build on what was covered in previous weeks. And there is a lot of material to get through, so we will at times have to move quite quickly. Please be prepared by doing any reading assignments, and don't forget to keep practising your programming: it really is the best way to get better.

Technical Stuff

CS Computer Account

Each student will be provided with a CS computer account for you to use during this course. This account is discrete and separate from your Vassar computer account.

This account will be set up during Week I.


The computers in the lab are set up for you to use the drRacket software we will use in class.

If you would like to set up drRacket on your own computer, go to the drRacket download page to download the software. Please make sure you obtain the most up-to-date version of the software.

If you have any problems installing drRacket on your computer, please see the instructor or one of the coaches without delay.


The course assumes a basic familiarity with arithmetic and algebra.

It also helps to have healthy doses of curiosity, motivation, self-discipline and patience, and a sense of humour (for when the program doesn't work properly, which happens to all of us).

To assess your understanding of the topics presented in this course, there will be weekly quizzes, labs and assignments, a midterm exam, and a final exam. The exams will be held in class, as scheduled.



The purpose of the labs is to give you some hands-on experience with programming, and to explain some of the principles from lecture with hands-on examples. Lab. assignments are structured so that later problems build upon each other incrementally, and often bring in concepts from previous weeks.

Though you are all working in the same room, your lab. work must be your own. If you have questions, please ask a coach or the instructor for help. This is especially important if a number of people are having the same problem, as it becomes a great opportunity to stop and review.


There will typically be one programming assignment each week. As well as to test your understanding of the material, their purpose is to give you a reason to practise writing code and to prepare you for the exams

Unless explicitly authorised for a particular assignment, collaboration is NOT allowed on assignments. If you run into difficulty with an assignment, you should contact one of the student coaches during their office hours or Prof. Ellis during his office hours (or by appointment).

Many assignments will include problems that are “coach free” (i.e. no assistance by coaches) or “help free” (i.e. no assistance from coaches or faculty). Such problems will be variations or slight developments on problems you have already seen.

The final assignment will be a larger piece of work, which will bring together all the topics we have covered in this course. You will have two weeks to complete it, and it will count for about double the score of the other assignments.

All programming assignments must be submitted electronically. (Full details about how to do this will be provided.) You must also turn in a paper printout of your programming assignments.


There will be two in-class exams: one just before break, and another near the end of the semester. They will be paper-and-pencil exams.

You may not use any computers, calculators or other devices: just a pencil. You may bring to each exam a single 8.5“-by-11” piece of paper ('crib sheet') with whatever notes you want to write on it that you may consult during the exam. (If printed out, the font size no smaller than 8pt!) You will hand in your 'crib sheet' with your exam.


Beginning in Week II, there will be a short (10 minutes-ish) quiz at the start of each lab. session. (With the exception of days where there is an exam, obviously!) These quizzes will cover material from the previous seven days, excluding anything we studied the day before, and we will go through the answers from each quiz after each one.


We are a community of learners, and we must be present to help one another in order to learn at our best. Your contributions and insights are unique and valuable in every class. The questions you ask will help everyone to understand the course material. The ideas you express may start discussions which lead to ideas for new and exciting projects.

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. (Additionally, excessive absences can have a significant negative effect on one's overall performance in this class.)


Grade Distribution

Your final grade for the course will be calculated according to the following distribution:

Assignments 27.5%
Midterm exam 17.5%
Final exam 25.0%
Labs 12.5%
Quizzes 12.5%
Participation 5.0%

Grade Boundaries

Based on the weighted average of your graded coursework, your letter grade will be determined according to the standard 90, 80, 70, 60 cutoffs: 90% or above is an A; 80% or above, but below 90%, is a B, and so forth.

Pluses or minuses may be added at the instructor's discretion.

You must have both a passing exam average and an overall passing average to pass the course.

I support wholeheartedly and implement all the general policies of Vassar College, including but not limited to those relevant to students with disabilities, Title IX, plagiarism, and classroom etiquette.

Late Policy


  • Assignments are due at the beginning of the class following the one in which they were assigned. (e.g. if an assignment is given out on Thursday, it is due on Tuesday.) Labs do not count for this schedule.
  • Late work will be subject to a 10% penalty per day late, up to a maximum of four days.
  • Submissions for an assignment will not be accepted once solutions have been discussed in class.

Lab. Problems

  • Lab. problems are intended to be solved during the lab. itself.
  • If you find you cannot complete a problem during the lab, you may get a problem checked off in the following week but before the next lab. for half credit.
  • Once solutions are posted to problems (usually at the start of the next lab.), they are not eligible for score.

Examinations & Quizzes

  • If you are unable to attend class on the day of an examination, it is your responsibility to notify the instructor in advance to make other arrangements.
  • “Make-up” examinations or quizzes are not usually offered except in the case of academic accommodation or extenuating circumstances.

Academic Accommodations

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.


We are each of us angels with only one wing, and we can only fly by embracing one another.
— Luciano de Crescenzo

We are a community of learners, and we must be present to help one another in order to learn at our best.

Your contributions and insights are unique and valuable in every class. The questions you ask will help everyone to understand the course material. The ideas you express may start discussions which lead to ideas for new and exciting projects.

Missing class deprives all of us of your insights, understanding, knowledge, experience and enthusiasm.

I understand that sometimes events occur which will preclude attendance. Please let me know in advance if you will have to miss a class. Do be aware that this is a difficult course, and missing too many lectures may hurt your overall performance in the class.

When Life Just Gets in the Way...

Sometimes, Life Happens™.

If something unexpected occurs which will prevent you from being able to submit assignments on time, precludes attendance at class, or otherwise interferes or conflicts with, or has a deleterious effect upon, your ability to work, it is important to let me know as soon as possible so we can devise a work-around.

Extenuating Circumstances

The term “extenuating circumstances” includes, for example, unexpected personal illness, a family emergency, or any other significant event which is likely to have a significant negative impact.

I am happy to work with students to reschedule work or provide extensions as necessary. Please let me know as soon as possible that there is an issue, either privately after class, in office hours (or by appointment) or by email.

I appreciate that it is not always possible to make contact in a timely manner. In this case, please just be in touch when you can.

Sports & Athletic Fixtures

You're on a team? Great! Fantastic! The very best of luck to you!

If you are on a team, please let me know well in advance (e.g. as soon as you get your schedule) when your sports fixtures might clash with the class.

If there is a last-minute cancellation and rescheduling of a match, perhaps due to bad weather or illness, and you find out one morning that you're shipping out that evening… this is not a problem. Again, please reach out to me as soon as possible and we'll make it work.


Any request for academic easement must be supported by evidentiary material. For example:

  • In the case of extenuating circumstances, the Dean of Studies' Office will send me an email.
  • For sports fixtures known well in advance, an email from the team coach outlining which students will be away, and when.
  • For last minute changes to sporting fixtures, please forward to me the email from the coach with the changed schedule.


All arrangements for academic easements are made on a case-by-case basis and without prejudice as necessary throughout the semester.

Academic Integrity

Please don't cheat.

Read Going to the Source.

Any course fundamentally based on composition, development, imagination and creativity – which this course is, to a large degree – is subject to the same kind of guidelines that apply to writing, creativity, research and development in general. Writing code is no different from writing anything else, whether it's a plot for a story or a scholarly work.

Copying someone else's work without attribution amounts to plagiarism.

If someone helps you out by providing you a substantial chunk of code (e.g. a section of function or more), or your work is improved by discussion with someone (since talking about your work with someone else is always a great idea), give proper attribution for the help you receive.

“In suspected cases of plagiarism, the instructor prepares a written statement of complaint to the Academic Panel.”

Going to the Source, Chapter X (p. 13).

This means that all cases where plagiarism is suspected — even ones where we are, in fact, incorrect, and students are completely innocent — must be reported to the Dean of Studies. The department is not able or permitted, legally, to intervene or intercede in any way.

Please don't put yourself or your professor in that position.

In short...

In this course, unless explicitly stated otherwise, collaboration is not allowed on labs or assignments.
Collaboration is never allowed on exams.

(This section was based on text by Professor Marc Smith.)

Some Scenarios... (a.k.a. This Might Happen To You)

"What's the Harm In...?"

Two students, Alice and Ralph, discuss an assignment and design their code together.

That is fine.

But then they decide that since their programs would be so similar, they might as well have Alice type in the code, have Ralph make his own copy of the file containing the code, and then have Ralph make his own minor changes.

That is not fine. That is plagiarism.

Although you may discuss and design with others, the code you hand in must be entirely your own.

Sharing Your Code

Trixie and Ed start working independently on a program. Trixie finishes and has a working version. Ed has trouble with his.

Trixie helps Ed debug.

That is fine.

But then Trixie realizes that Ed has a section of code that is all wrong and the program she wrote has just the right code for that section. She shows Ed her program. Or worse, she gives Ed an electronic copy of her program so that he can just paste in the correct code.

That is not fine. That is plagiarism.

Either action Trixie takes means that the code Trixie and Ed hand in is not entirely their own.

What Language Are You Speaking?

Here is a good rule of thumb. If you are talking in normal English (or Chinese or German or some other natural language) you are probably OK.

If you find yourself talking in Scheme code, you have crossed the line.

Saying, “Your program runs forever because you have the wrong condition in the while loop” is fine.

Saying, “Change while x == 0: to while x >= 0:,” is not fine. That is plagiarism.

Title IX

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 and the Title IX section of the EOAA website have more information, as well as links to both on- and off-campus resources.