Syllabus & Course Policies

Overview

The first few CS courses are an introduction to computer science, with particular emphasis on software and on machines from a programmer's point of view.

  1. CS 110 focuses on learning how to program for beginners.
  2. CS 111 concentrates on the idea of abstraction, allowing the programmer to think in terms appropriate to the problem rather than in low-level operations dictated by the computer hardware.
  3. CS 235 introduces more data structures and algorithms and the C++ programming language.
  4. CS 224 focuses on machines and how they execute programs using the C programming language.

In CS 111, we are interested in teaching you about programming, not about how to use one particular programming language. We consider a series of techniques for controlling program complexity, such as functional programming, data abstraction, and object-oriented programming.

CS 111 primarily uses the Python 3 programming language. Python is a popular language in both industry and academia. It is also particularly well-suited to the task of exploring the topics taught in this course. It is an open-source language developed by a large volunteer community that prides itself on the diversity of its contributors. We will also use other languages in the latter half of the course, including the Scheme programming language.

Mastery of a particular programming language is a very useful side effect of CS 111. However, our goal is not to dictate what language you use in your future endeavors. Instead, our hope is that once you have learned the concepts involved in programming, you will find that picking up a new programming language is but a few days' work.

A complete list of lecture topics, readings, and assignments appears in the daily schedule.

Course Origin

This course heavily borrows from the UC Berkeley CS61A course. UC Berkeley is one of the top CS programs in the world and their instructors and staff have put in a lot of time over the years creating CS61A. We appreciate their willingness to share their resources—course materials, assignments, etc.—with us. Special thanks to John DeNero, Pamela Fox, and Vanshaj Singhania. We are excited to have collaborated with them to provide a strong introductary course in Computer Science.

Prerequisites

Though there are no enforced programming-related prerequisites for CS 111, we strongly recommend prior Computer Science coursework or other exposure to programming equivalent to CS 110 or a score of 3 or above on the AP Computer Science A exam. We discourage students take the course without any prior programming experience, because they typically must work substantially harder to master the material. If you have limited prior experience and you find it challenging to complete all of the required coursework in the first week, strongly consider taking CS 110 first. You'll likely have a better experience taking CS 111 later, and you won't fall behind in any meaningful way by taking a preparatory class first.

Preparatory Classes

To build programming experience before taking CS 111, we recommend that you first take a course that introduces you to programming. The most appropriate class within the CS department is CS 110, described below, but you may also find other classes at BYU give you the necessary programming exposure. Feel free to contact course staff if you are not sure what's best.

CS 110

CS 110: How to Program is an introductory computer science course taught in Python. It focuses on learning how to program and developing core coding skills, whereas CS 111 focuses on higher-level coding concepts including abstraction, complexity, object-oriented programming, and the structure and interpretation of computer programs. CS 110 is the recommended course for CS majors and minors with little to no previous programming experience.

BIO 165

BIO 165: Introduction to Bioinformatics is an introduction to Bioinformatics designed for students in Biology or Bioinformatics. It teaches students to program in Python, but covers a much smaller subset of the language than CS 111. Most of the course focuses on programming to manipulate biological data stored in diverse file formats. Taking BIO 165 before CS 111 is a good way to gain prior programming experience, but taking CS 110 is a better way.

Course Format

The course includes many events and opportunities for learning: lecture, lab, discussion, office hours, and more. Everyone learns differently, so not all of these events are required. However, it is recommended that you try everything out to figure out what combination of these events works best for you.

Lecture

There are three 50-minute lectures per week. This course moves fast, and lecture is tightly coordinated with section (labs and discussions). Please attend each lecture the day it is given to better prepare for your section.

Lab Section

Each lab section meets twice each week, covering labs and discussions. These sections are run by an amazing group of teaching assistants who have been carefully selected for their ability, enthusiasm, and dedication to learning. Getting to know your TA is an excellent way to succeed in this course.

Open TA Lab

In the open TA lab, you can ask questions about the material, receive guidance on assignments, and work with peers and course staff in a small group setting. See the lab hours and come by in-person or via Discord; no appointments are needed.

Assignments

Each week, there will be problems assigned for you to work on, most of which will involve writing and analyzing programs. These assignments come in three categories: lab exercises, homework assignments, and projects.

Labs

Lab exercises are designed to introduce a new topic. You can complete and submit these during the scheduled lab sections or any time before the deadline. Most students find that attending lab is much more useful than working on lab assignments independently.

Lab exercises are scored on correct completion. To receive credit, you must complete all of the problems that are not marked as optional and pass all tests.

Homework

Weekly homework assignments let you apply the concepts learned in lecture and section to more challenging problems. Homeworks will typically be released on Wednesdays or Fridays and due after one lab and one lecture.

Partial Credit

Homework is scored out of 4 points, and every incorrect question costs you 1 point.

Projects

Projects are larger assignments intended to combine ideas from the course in interesting ways.

You are allowed and encouraged to pair program with a partner. Make sure to alternate roles so that both of you understand the complete results. We recommend finding a partner in your section, but course staff will also help with partner matching at various points in the semester. It is your responsibility to contact and collaborate with your partner. You may also work alone on all projects, although partners are recommended.

Exams

There will be three exams:

  • Midterm 1 will open Thursday, 11 May 2023 at 10:00 AM. You must pick up your test by 4:00 PM on Friday, May 12th, 2023. There is a $5 late fee starting at 3:00 PM on Friday, May 12th, 2023.
  • Midterm 2 will open Tuesday, 6 June 2023 at 10:00 AM. You must pick up your test by 4:00 PM on Thursday, 8 June 2023. There is a $5 late fee starting at 10:00 AM on Thursday, 8 June 2023.
  • The Final exam will be available during the whole duration of Finals Week.

Exams will be taken on paper on campus in the Testing Center.

UAC

We will provide appropriate accommodations to all students enrolled in the University Accommodations Center (UAC). To ensure that you receive the appropriate accommodations, make sure to send us your letter as soon as you receive it, confirming your status and accommodations. Please email all UAC letters to cs111headta@gmail.com and/or your instructur.

Privacy

All UAC-related materials for this course are kept separate from the rest of the course materials, and they are visible only to instructors and selected staff.

For any UAC related communications, we recommend that you reach out to your instructor directly.

If you believe your accommodations may affect the TA who is teaching your section, and would like to inform that TA, you may wish to inform the instructor, who can inform your section TA on your behalf.

Extensions

If you need to request an extension, for UAC reasons or otherwise, please direct message (DM) your section leader TA via Discord (see Contact). Your request will be processed as quickly as possible. If you have a UAC accommodation for assignment extensions, extension requests made will be approved, so long as they are made in good faith. Longer extensions will be approved on a case-by-case basis. Also see the Late Policy section below.

Resources

Textbook

The online textbook for the course is Composing Programs, which was created specifically for this course, based on the classic textbook Structure and Interpretation of Computer Programs. Readings for each lecture appear in the course schedule. We recommend that you complete the readings before attending lecture.

Supplemental Material

Lots of additional study materials including past exams for UCB CS61A appear on their Resources page.

Grading

Your course grade is computed using a point system with a total of 313 points.

  • Discussion, worth 4 points.
  • Lab, worth 9 points.
  • Homework, worth 33 points.
  • Midterm 1, worth 40 points.
  • Midterm 2, worth 50 points.
  • The final exam, worth 75 points.
  • Four projects, worth 102 points.
  • Total Points: 313

There is an 10-point extra credit opportunity at the end of the semester called Free Coding. There may be a few other extra credit opportunities throughout the semester as well.

This table shows the minimum number of points required to attain each letter grade (assuming no assignments are excused).

Grade Percentage Points
A 93% 292
A- 90% 282
B+ 87% 273
B 83% 260
B- 80% 251
C+ 77% 242
C 73% 229
C- 70% 220
D+ 67% 210
D 63% 198
D- 60% 188
E < 60% < 188

Your final score (in points) will be rounded to the nearest integer before being converted to a letter grade. 0.5 rounds up to 1, but 0.49 rounds down to 0.

There is no curve; your grade will depend only on how well you do, and not on how well everyone else does. These thresholds will not be adjusted based on student performance. You could all get A's. You could all get D's.

These are the exact thresholds that will be used at the end of the course to assign grades.

Incomplete grades will be granted only for medical or personal emergencies that cause you to miss the final or last part of the course, only for students who have completed the majority of the coursework, and only if work up to the point of the emergency has been satisfactory.

Your lowest homework score will be dropped.

Each discussion that you complete is worth 1 point. Your lowest two scores will be dropped. Discussion attendance is optional after the first 6 discussions.

Each lab that you complete is worth 1 point. Your lowest two scores will be dropped.

For Computer Science Majors: please note that in order to fulfill the requirement for this course, you must pass with a C- or higher.

Late Policy

If you cannot turn in an assignment on time, contact your section TA and your partner as early as possible. Depending on the circumstance, we may grant extensions.

  • Labs: We rarely accept late lab submissions.
  • Homework: We rarely accept late homework submissions.
  • Projects: Submissions after the deadline will have a deduction of 2 points per day late, with a maximum deduction of 8 points.

Citizenship

For exceptionally rude or disrespectful behavior toward the course staff or other students, your final grade will be lowered by up to a full letter grade (e.g., from an A- to a B-) at the discretion of the course instructors. You don't need to be concerned about this policy if you treat other human beings with even a bare minimum of respect and consideration and do not engage in behavior that is actively harmful to others.

Learning Cooperatively

With the obvious exception of exams, we encourage you to discuss course activities with your friends and classmates as you are working on them. You will learn more in this class if you work with others than if you do not. Ask questions, answer questions, and share ideas liberally.

Learning cooperatively is different from sharing answers. You shouldn't be showing your code to other students or looking at others' code, except:

  • During lab, you can share all you want as long as you're all learning.
  • For a project that allows partners, you can share anything with your partner.
  • If you've finished a problem already, you can look at others' code to help them finish.
  • Sharing is not allowed on Homework assignments; they should be completed and submitted individually.

If you are helping another student, don't just tell them the answer; they will learn very little and run into trouble on exams. Instead, try to guide them toward discovering the solution on their own. Problem solving practice is the key to progress in computer science.

Since you're working collaboratively, keep your project partner informed. If some medical or personal emergency takes you away from the course for an extended period, or if you decide to drop the course for any reason, please don't just disappear silently! You should inform your project partner, so that nobody is depending on you to do something you can't finish.

Academic Honesty

Any students caught collaborating on exams will receive an E (failing grade) in the course. Please don't be one of these students.

Reading others' homework or project solution to a problem before you solve that problem on your own will incur large point penalties. You are free to discuss the problems with others beforehand, but you must write your own solutions. The exception to this rule is that you may share code with your project partner.

If you are unsure if what you are doing constitutes academic misconduct, please clarify with the instructor or contact course staff. The following is a list of things you should NOT do. This list is not exhaustive, but covers most of the big offenses:

  • Do not copy code from any student who is not your partner.
  • Do not allow any student other than your partner to copy code from you.
  • Do not copy solutions from any online sources, such as Stack Overflow, Pastebin, and public repositories on GitHub.
  • Using AI-assisted autocompletion (such as GitHub Copilot or ChatGPT) to complete assignments is prohibited.
  • Do not post your solutions publicly during or after the semester.

In summary, we expect you to hand in your own work, take your own tests, and complete projects with code written only by you and your partner. The assignments and evaluations are structured to help you learn, which is why you are here.

Rather than copying someone else's work, ask for help. You are not alone in this course! The entire staff is here to help you succeed. If you invest the time to learn the material and complete the projects, you won't need to copy any answers.

A Parting Thought

Grades and penalties aren't the purpose of this course. We really just want you to learn. The entire staff is very excited to be teaching CS 111 this semester and we're looking forward to meeting such a large and enthusiastic group of students. We want all of you to be successful here. Welcome to CS 111!

© 2023 Brigham Young University, All Rights Reserved