10 minute read


Welcome to CS 65: Introduction to Computer Science! As the title suggests, this course is an introduction to the field of Computer Science (CS). Although most consider the terms “computer scientist” and “computer programmer” perfectly synonymous, the field is significantly broader than simply learning to write code. In reality, CS concerns the study of algorithms, which are step-by-step instructions to be executed by some actor, and of data structures, which are ways of representing information so that it can be efficiently processed by algorithms. Since algorithms and data structures are more general than just writing code, you may find that the skills you acquire in this course will apply in more situations than you expect.

By the end of this course, you will be able to:

  1. Understand the fundamentals of CS,
  2. Design, document, develop, test, and debug algorithms in the Python programming language,
  3. Recognize common data structures and how to use them to efficiently solve problems, and
  4. Solve computational problems by breaking them into manageable parts and synthesizing them into a coherent whole.

Check out the Schedule page for a detailed survey of the topics covered in the course.


There is no required textbook for the course. Assigned readings will be primarily based on the free open-source textbook:

Activities / Grading

Your grade in this course is determined by:

Assignments 30% Exams 10% (each)
Labs 10% Best 10%
Final Project 20% Participation ±5%

The grading scale for the course is as follows.

A 93–100% C+ 77–80%
A- 90–93% C 73–77%
B+ 87–90% C- 70–73%
B 83–87% D 60–70%
B- 80–83% F 0–60%

Note: Grades will not be curved in this course; however, I reserve the right to change the above scale in your favor. This is to avoid punishing students for making an exam too long, etc.

Grades will be posted on codePost rather than Blackboard. Assignment 1 walks you through setting up your codePost account for the first time.


Assignments will be assigned approximately weekly and will categorized as either individual or group. You can find the due dates on the Assignments page and the Schedule page.

Most assignments will be group assignments, and you will be randomly assigned a pair programming partner. You are expected to complete the group assignment together with your partner and only submit one solution.

Note: For group assignments, you may NOT divide up the work and complete the parts independently. All code submitted must be authored by all members of your group. I expect you to work on group assignments together in a Zoom or Microsoft Teams call.


A portion of most synchronous class meetings will be devoted to a lab. Labs consist of a sequence of exercises to help you practice the concepts you are learning. Labs are to be completed with your assigned partner and will usually include a component that you must turn in to codePost before the next class period.

Labs are designed to be completed in-class, but occasionally labs will be intentionally longer than can be completed in class. These extra exercises are for those of you who like having extra practice problems for studying.

Final Project

This course includes a substantial group project due at the end of the semester. More details will be announced later in the semester.

Each group will also give a final demonstration of their project. These project demos will take place during the final examination week in place of a final exam.


There will be three take-home exams. You can find the due dates of each exam on the Schedule. These take-home exams are open notes, open computer, and open instructor. However, because I intend the exams to assess your own individual understanding of the material, collaboration on exams is not permitted. You should not talk to anyone (except me) about take-home exams before they are graded and returned. You should not discuss the exam problems (nor your answers) with anyone else. You should not give any information about your progress on the exam (e.g., which problems you have completed or which you found difficult), and neither should you ask others about their progress. If you have any doubt about what is and is not permissible, ask the instructor.


To reward you for performing exceptionally well in one or more aspects of the course, 10% of your final grade will be determined by your best score on assignments, labs, the final project, and exams.


Your participation in the course is key to you fully grasping the material. Thus, your participation grade will be calculated based on the following factors:

  • coming to class on time,
  • coming to class prepared,
  • asking questions when appropriate,
  • making positive contributions to class discussion,
  • staying on task during lab exercises, and
  • working effectively with your lab partner(s).


Attendance is mandatory in this course. In-class activities will include completing the lab with your pair programming partner, so any absence not only negatively affects you but also your partner.

Warning! Every unexcused absence will result in a -1% penalty to your final grade. If you are sick or must miss class for any reason, you must notify your instructor as soon as possible.

Note: Your first unexcused absence penalty will be waived.

Extra Credit

To encourage you to actively participate in Drake activities and to support your peers, you will receive 0.25% extra credit to your final grade for each instructor-approved activity that you attend (up to a maximum of 2%).

If you have an upcoming recital or any activity you’d like to invite your peers to, consider announcing it to the class. Your instructor will approve or disapprove posts on a case-by-case basis.

Note: To claim extra credit for attending an activity, send an email to your instructor with “Extra Credit” in the title and a brief description of what happened at the event.

Note: You will only receive extra credit for attending approved activities of your peers or general activities. You will not receive activities for going to your own recitals, for example.

Course Policies


Deadlines in this course are firm. However, I do recognize that there are exceptional circumstances due to sickness, family emergencies, etc. I am willing to work with you through these situations and grant extensions if it is appropriate. Please reach out to me immediately if such a circumstance arises.

Accommodations for Students with Disabilities

Drake University is committed to providing equitable access to learning opportunities for all students. The Disability Services office (107 Old Main) collaborates with students who have disabilities to provide and/or arrange reasonable accommodations. If you have, or think you may have, a disability (e.g., mental health, attentional, learning, autism spectrum disorders, chronic health, traumatic brain injury and concussions, vision, hearing, mobility, or speech impairments), please contact

to arrange a confidential discussion regarding equitable access and reasonable accommodations.

Academic Integrity

Drake University has high standards for academic integrity, and you are expected to read the Academic Dishonesty Policy from the College of Liberal Arts and Sciences.

Below is a particularly relevant excerpt from the statement:

Academic dishonesty is an all encompassing term involving any activity that seeks to gain credit for work one has not done or to deliberately damage or destroy the work of others. Academic dishonesty includes, but is not limited to, plagiarism, cheating, fabrication, and knowingly helping another to commit an act of academic dishonesty.

Below are some examples of how Drake’s policy applies to this course:

  • When you explicitly work as part of a group or team, you need not identify the work of each individual in the group (unless I specify otherwise).
  • You may discuss concepts (algorithms, ideas, approaches, etc.) described in the readings, lab exercises, or during class with anyone.
  • All the work you submit (code, experimental data, journals, etc.) must be your own or that of your group. You must appropriately cite any code or documentation you copy or modify, including code provided by the instructor. Furthermore, each member of your group must understand and be able to individually explain all aspects of the work. If you cannot explain your solution, you are in violation of this policy.
  • You must cite all non-syntax consultations (i.e., ideas about algorithms, help with debugging) from any source, including the readings, labs, provided code, and internal or external language references.
  • You must acknowledge and attribute any conceptual contributions by individuals not in your group. That is, you must give specific attribution for any assistance you receive. (This includes the instructor, teaching assistants, and tutors.) The suggested acknowledgment format is: “[Person X] helped me to do [thing Y] by [explaining Z].”
  • You are responsible for safeguarding your work from being copied by others.

Getting Help


Feel free to reach out to me at any time. The quickest way to get a hold of me is to message me on Microsoft Teams. You may also schedule an appointment with me on Calendly.

My office hours are virtual and by appointment only. They are also generally limited to 2:00–5:00 PM CT on Mondays and Wednesdays.

CS Tutors

Drake University offers free tutoring services for introductory computer science students. If you are interested in scheduling an individual tutoring appointment, visit the Tutoring Services page on the Cowles Library website. To see what slots are available, scroll down to the Math Tutoring section to see what times are open. (Math and CS are combined into one tutoring schedule since it is one department.)

Academic Success Resources

Check out the Academic Success website. It includes a page for Skills for Success with excellent tips for management classwork. You may also find the following resources useful:

COVID-19 Policies

Camera Use

A significant part of your learning in this course will depend on your active and attentive engagement in class discussions and other collaborative learning opportunities. I encourage you to turn on your camera during online collaborative exchanges to help sustain a sense of community and co-presence as we learn together. However, doing so is not required; if you have reservations about doing so (or an inconsistent, slow internet connection, etc.) having your camera turned off is also completely acceptable.

If You Test Positive

If you test positive for COVID-19 or have been exposed and need to isolate yourself, please send an email to from your Drake email account and include your full name and student ID along with information about your situation. College and schools’ deans’ offices will then contact your professors, who will work with you to provide fully virtual learning opportunities during your quarantine and/or recovery.

Self-Monitoring and Symptoms

Please carefully monitor your own health and wellbeing throughout the semester, including frequently taking your own temperature. If you experience COVID-19 symptoms or a fever, even if you do not test positive, please do not come to an in-person class meeting. Fill out your information using the following Drake self-monitoring form:

Additional Information

Here’s a good resource for other questions/concerns regarding COVID:

Pair Programming

On Assignment 3, a significant majority of the class proposed using Stuart Wray’s “driver/navigator” pair programming method for group work in this class. Many important guidelines for making group work effective in this context were also pointed out. This amendment to the syllabus combines the most common themes and suggestions from all of the proposals.

General Guidelines

Whenever working in a group, you are expected to adhere to all of the following general guidelines. These all fall under the general rule of “treat others the way you want to be treated.”

  1. Respect. Mutual respect is the foundation of any successful collaboration. As a group member, you responsible for being respectful and kind to your partners. This includes respecting your partners’ ideas, being patient, and being considerate in your interactions with them.
  2. Communication. Most problems in group work are due to lack of communication. This responsibility includes:
    • Listening. If your partner has a question or idea, it is your responsibility to listen (without interrupting), consider, and respond in a respectful manner.
    • Speaking. When it is appropriate, ask questions, discuss errors, give advice, or clarify your ideas.
    • Promptness. Whether your group decides to use email, texting, or Microsoft Teams for remote communication, it is your responsibility to check messages frequently and reply promptly.
  3. Meetings. Be flexible with your schedule and respectful of your partner’s schedule when setting times to meet. If you agreed on meeting at a specific time, show up on time. Ideally, you should come prepared to the meeting, having read the assignment beforehand. Contact your partner ahead of time if you must miss a meeting due to an emergency.
  4. Constructive criticism. Be open-minded and willing to accept correction. (You might learn an alternative approach to solving the problem you wouldn’t have originally thought of!). When giving correction, be respectful and carefully explain why a different approach should be considered. Calmly talk through any disagreements.
  5. Stay focused. When working on the project, be respectful of your partners’ time by being attentive and on task. Be prepared to give your best effort on the problems. Consider taking short breaks and/or seeking help if you are stuck.

Roles of the Driver/Navigator

In this class, we will adopt the Wray’s driver/navigator pair programming method. Therefore, when working in a group, you should only work on coding the assignment when you are on a video call with your partner. You should also discuss who will take each role before you get started.

IMPORTANT: You must frequently switch roles while working on the assignment. In class, I recommend switching roles during the next class period. When you are working on the assignment, you should decide with your partner how often to switch roles (e.g., every 30 m inutes). During the week, each group member should spend roughly equal time as the driver.

Switching roles means that the driver will need to transfer the current code to the navigator. If using Zoom, you can send files through the chat feature; if using Microsoft Teams, you can simply drag and drop files into the chat to share a file.

The driver’s responsibility is to be actively typing up the solution to the problem being worked on. If working via Zoom, the driver should be sharing their screen with the navigator. The driver should share be actively explaining each step to the navigator as they go so that they can double check it. If you are the driver and get stuck, think out loud and try to articulate what is going wrong to the navigator. The driver is not more important than the navigator and should be consistently listening to the ideas of the navigator.

The navigator’s responsibility is to aid the driver by double checking code, researching ideas, reviewing documentation, and any other appropriate supporting actions. As the navigator, if you are not following what the driver is doing, speak up and ask a question.

PRO TIP: As Wray points out in his article, the driver/navigator method is working at its best if there is constant communication between the driver and the navigator. In fact, he mentions that if you are working side-by-side you should have greasy fingerprints all over your laptop screens from pointing, discussing, brainstorming, explaining, and tinkering through your solutions together. Over Zoom, you can make use of the annotate tool to write, highlight, and sketch out ideas to approach problems together.


Many of you pointed out that the appropriate consequences are tightly coupled to the circumstances. Therefore, no specific consequences will be listed here. Any violations of this policy should be privately reported to the instructor and will be dealt with on a case-by-case basis.