Welcome to CS 110: How to Program!
This course is designed to teach students with little or no programming experience the skills they need to write basic programs on their own. We will be using Python, but all of the concepts are directly applicable to any other programming language. By the end of the class, we hope you walk away with the ability to program well and the confidence to apply these skills in whichever field you choose to pursue.
For information on when, where, and how to get help, see Getting Help.
Joy and Belonging
A significant goal of this course is to help you experience the joy of programming. We were created with the express purpose and potential of experiencing a fulness of joy.. One of the ways you can experience joy is through creating programs. As Elder Uchtdorf relates in the talk above:
The desire to create is one of the deepest yearnings of the human soul. No matter our talents, education, backgrounds, or abilities, we each have an inherent wish to create something that did not exist before. Everyone can create.
Another goal of this course is to help you to feel like you belong in the world of programming. A sense of belonging is important to our physical, mental, and spiritual well-being. Belonging means that you should always feel you are part of a group, that you have friends you can turn to for help and support, and that we are all part of a welcoming community.
If you feel you don’t belong in a group of programmers, consider this passage from Elder Uchtdorf:
You might say, “I’m not the creative type. When I sing, I’m always half a tone above or below the note. I cannot draw a line without a ruler. And the only practical use for my homemade bread is as a paperweight or as a doorstop.” If that is how you feel, think again, and remember that you are spirit daughters of the most creative Being in the universe.
To help build a spirit of joy and belonging, we encourage you to participate in labs twice a week. The lab is a place to learn to program together. In lab, you can look at each other’s code, write code together, and talk about different ways of solving problems. If you don’t know some of the concepts we are teaching in class that week, then you should go to lab to get help so you can learn them. If you are really solid on the concepts we learned in class that week, you should still go to lab, so you can help others learn what you know. Being part of a community means sharing what you know and being willing to receive knowledge from others.
The lab experience is available and encouraged for both in-person and online students. There are multiple lab sections available at popular times. If the lab section you want to join is full, join the waitlist; we will open additional lab sections at the times with sufficient demand.
If you feel like you don’t belong — whether in this class, your chosen major, or at BYU — and for any reason, please come talk to your instructor. We love you and we will listen.
If you have difficulty with your mental health, please seek counseling (see https://caps.byu.edu and accommodations (see https://uac.byu.edu) to help you cope with this. If you need help with accommodations, please contact your instructor.
Additionally, if you feel you need extra support in developing a sense of belonging, you can talk to the CSIDE mentors in TMCB 1112. You can also talk to our fantastic colleagues in the BYU Office of Belonging, found in the Wilkinson center across from the information desk.
- Programming: Demonstrate the ability to independently write small programs (about 150 lines of code), given an English description of what the program should accomplish.
- Basic Programming Constructs: Effectively use basic programming constructs, including variables, statements, expressions, and control.
- Abstraction: Develop the ability to use and create functions when writing programs.
- Decomposition: Develop the ability to describe a program as a flow chart of actions and choices. Be able to translate this flow chart into a series of functions, each one accomplishing a small part of the bigger program.
- Algorithms: Effectively use basic algorithms to design and develop a program.
- Data Structures: Effectively utilize basic data structures such as lists and dictionaries to represent and store data in a program.
- Testing and Debugging: Write and use simple tests to ensure correct functioning of a program. Explain the meaning of error messages encountered when running a program. Use a debugger to step through code execution and identify the source of a bug.
Should I be in this class?
You should take this class if:
- You would like to learn how to program and have never programmed before.
- You have done a little bit of programming before but are not ready for CS 111, which will go quickly into advanced concepts like higher-order functions and object-oriented programming.
See Should I take CS 110 or CS 111? for more detail.
This Fall, CS 110 has 5 lecture sections:
- Section 001, Angela Jones, On demand, Online
- Section 002, Gordon Bean, TH 3:30pm - 4:45pm, TMCB 1170
- Section 004, Xinru Page, TH 9:30am - 10:45am, TMCB 1170
- Section 016, Bryce Perkins, T 5:15 - 7:45pm, SLC 318
- Section 017, Angela Jones, TH 8:00am - 9:15am, JKB 3106
You should attend an in-person section unless you already have some prior programming experience (but are not quite ready for CS 111) or you work really well with online material. We anticipate that most students are better served with an in-person section.
Regardless of which section you are enrolled in (online or in-person), you should also enroll in a lab section:
|005||3-3:50p TTh||B113 MARB|
|006||1-1:50p TTh||106 JKB|
|007||2-2:50p TTh||B094 JFSB|
|011||3-3:50p TTh||383 CB|
|013||1-1:50p TTh||B060 JFSB|
|018||9-9:50a WF||123 MARB|
|019||10-10:50a WF||122 MARB|
|020||11-11:50a WF||B142 JFSB|
|021||10-10:50a TTh||202 RB|
|022||1-1:50p TTh||2110 JKB|
|023||2-2:50p TTh||1117 JKB|
|024||5-5:50 TTh||134 TMCB|
|V06||6-:6:50 pm MW||https://byu.zoom.us/j/3844339723|
Course Requirements and Materials
There are no prerequisites to this course; students with little or no prior programming experience can succeed in it.
You will need a Windows or Mac laptop. We recommend at least 8GB of RAM. We will show you how to get all required (free) software installed on your laptop. You will need a way to take hand-drawn notes, such as a paper notebook and pencil. There is no textbook for this course.
When using your laptop in class, we ask that you only use it for taking notes or practicing concepts we discuss in class. If you use your computer for games or other uses you will be distracting to the other students. We may ask you to close your laptop if we perceive this to be a problem.
You should bring your laptop, notebook, and pencil to every class, both lecture and lab.
Course Website: The day-to-day happenings of the course (and links to all the platforms below) can be found here at fall2023.byucs110.org. We will post assignments, a calendar, lecture notes, and various resources on this website.
Canvas: This is where you can view your grades. Canvas also has links to the course website, Gradescope, and Discord.
Gradescope: This is where you submit your course assignments. Please use the link in Canvas to open Gradescope. If you have used Gradescope for other courses in the past, you may need to merge your previous account with the one Canvas creates for you.
Discord: CS 110 server. An invite will be posted in Canvas.
There are no textbooks for this class. Instead, material is presented in lectures and in the guide. Some videos are also posted in Canvas and on the course website for selected content.
If you are in an in-person class, your instructor will explain the material using the lecture notes and/or guide. There will be in-class activities to practice the material, so bring paper, pencil, and laptops!
Online students should review either the lecture notes or the guide. Lecture notes include source code so that you can follow along with the in class activities. The guide includes code for all of the lecture material, so you can copy-and-paste it into PyCharm to run it. Online students should also watch the videos that are posted.
There are four types of assignments for this course — labs, homeworks, projects and exams. The following table summarizes important information about them. See below for more details and be sure to review the academic honesty policy below.
|Assignment||Purpose||Type of Work|
|Labs||learning to code together, preparing for homework and projects||work with a partner, discuss and write code together, produce your own version without copying and pasting|
|Homeworks||additional practice problems, become more independent||discuss on a whiteboard or on paper with a friend, share drawings, write all of your own code|
|Projects||demonstrate that you can code independently||work entirely on your own, do not discuss with other students|
|Exams||demonstrate you understand what code does||work entirely on your own, do not discuss with other students|
Lab sections are where you start on your lab assignments. The lab assignments are where you will practice the skills you need to succeed on the homework, projects, and exams.
Each lab section will be supervised by a section leader TA.
The lab assignments are designed to be done with a partner; however, it is not appropriate to “divide and conquer” on an assignment. Instead, you should work together on each activity, drawing it out together, deciding on a strategy, and translating that strategy into code, but each of you writing the code on your own computers (do not copy-paste another’s code; do not allow someone else to copy-paste your code).
If you and your partner do not finish the assignment during the lab section, you should finish the assignment outside of class. You may continue to work with the same or a different partner, or finish on your own.
Each lab assignment should be completed before the corresponding homework, as the lab will prepare you for the homework problems.
Homework problems have problems similar to those in the lab. These are an opportunity for you to get more practice and to be sure you have learned the concepts from that week.
You can do “whiteboard” collaboration on the homeworks. This means you can talk about the homework problems and strategies with others, including drawing out ideas together, but you should not share code with others, nor should you look at others’ code or allow others to look at your code.
If you are stuggling to write your own code on the homework assignments, please reach out to a TA or your instructor.
Each homework assignment is due the morning of the next lecture period e.g. the homework for the lecture on Tuesday will be due Thursday morning
Projects are an opportunity for you to demonstrate mastery of the skills learned thus far. Projects are to be done individually. While you can seek help from TAs and the instructors, you should not discuss the projects with others (students or non-students) nor share or view others’ project code. The code you turn in for a project should be entirely your own.
All of the skills and techniques needed to do the projects will be covered in the prior lab and homework assignments. Avoid consulting the Internet for help on the projects. Instead, review the guide and prior labs, and seek help from the TAs or instructor.
The projects provide you the opportunity to demonstrate what you have learned. It is better that you struggle on a project than to get inappropriate help, receive a grade that doesn’t accurately reflect your actual skill, and then proceed to future responsibilities that require the skills you didn’t actually develop. If you are struggling, please reach out to a TA or your instructor!
There will be a midterm and a final. These will be multiple choice questions. We will have practice exams available on our website and review sessions in class.
Your final grade will be calculated based on the following:
- 50% projects
- 20% homework
- 10% labs
- 10% midterm
- 10% final
Labs, homeworks, and projects are due on the posted date before the start of class (i.e. 8:00am). This allows the TAs to grade all submitted assignments and post the grades to Canvas later that day.
Late submissions are accepted through the last day of class. There is no late penalty: seek turn things in when they are due, but adapt your schedule as necessary.
Late submissions and resubmissions will be manually graded regularly; however, grades for past assignments will be posted to Canvas less often.
Try not to get too far behind! Everything builds on previous assignments.
If you find yourself getting behind, please reach out to your instructor!
In our Heavenly Father’s plan, our goal is to learn to become more like our Savior Jesus Christ. One of the key ways we do that at BYU is by developing our skills — in sound thinking, effective communication, and quantitative reasoning. Our goal as instructors is to help you develop these skills while also developing the characteristics of Christ.
We are guided in our efforts as students and scholars by the 13th Article of Faith:
We believe in being honest, true, chaste, benevolent, virtuous, and in doing good to all men; indeed, we may say that we follow the admonition of Paul—We believe all things, we hope all things, we have endured many things, and hope to be able to endure all things. If there is anything virtuous, lovely, or of good report or praiseworthy, we seek after these things.
Academic integrity is a core part of the honor code. “Be honest” is the first statement listed. When you fail to be honest in your studies, you are missing an opportunity to grow more like Christ. We encourage you to do your utmost to ensure that you don’t compromise your integrity as you work to learn the material in this course.
Following are our expectations for academic honesty in each of the assignments you will have in the course.
Labs are to be done collaboratively.
- work with another student on the labs,
- discuss the problems together, and
- write the code together, each on your own laptop.
You should not:
- “divide and conquer” the lab work (i.e. “I’ll do problem 1 and you do problem 2 and then we share answers”)
- copy-and-paste each other’s code.
Homework is a mix of collaboration and independent work. Your ideas on how to solve a problem can be collaborative but your code should be your own.
- discuss the homework problems with other students,
- share drawings and high-level descriptions of your strategy with others, and
- be the author of all your code.
An effective way to help a peer with a homework assignment is to ask instead of tell. Ask questions that will guide toward gaining sufficient understanding to do the work. The goal is that each student gains the practice they need to be prepared for the upcoming project.
You should not:
- share code with or receive code from others (whether they are students in the class or not).
If you struggle to translate the ideas from the associated lecture into code on your own, the homework is the time to find out! Get help from the TAs or your instructor. Do not procrastinate getting help.
Projects are to be done individually. They serve as an opportunity for you to demonstrate—to yourself and to the world—that you can actually write code to solve a problem.
- do all the work yourself.
You should not:
- discuss the projects with others, whether they are students in the course or not.
If you are struggling on a project, talk to the TAs or your instructor.
Exams are to be done individually. Do not discuss the content of the exams with others.
Learning to code takes practice. Don’t rob yourself and others of learning how to approach difficult programming problems, an essential skill for future classes.
If you are unsure about whether or not something constitutes cheating, please confirm with an instructor or TA.
AI-assisted code generation
New tools, such as GitHub Copilot or OpenAI’s ChatGPT have the ability to generate code from a simple text prompt. You should NOT use these tools to work on your homework or projects. The purpose of the homework and projects is to learn how to program. You can only develop this skill if you practice.
Some further notes on these tools:
These tools are pretty cool and fun to use. They’re kind of like using a calculator, but for writing code. Depending on the problem, your mileage may vary in how effective these tools are: they do pretty well on the simple stuff, and sometimes do alright on harder stuff. These tools are not very good at breaking down complex problems into smaller pieces, which is a fundamental learning outcome of the course.
Just how it would be impossible to excel in an advanced math class if you had to constantly pull out a calculator for every simple addition or multiplication problem, you will not be prepared to program anything but the most primitive pieces of code if you do not practice the basics we present in class.
You are welcome to try these tools on your own time. You can get a free license for Copilot through your BYU email. However, you should focus on learning to code on your own, first. Once you have turned in your work for full credit, you may use these tools to redo the assignment and compare the result — see what works well and what doesn’t. You are of course welcome to use these tools on your own personal activities. Using these tools on your homework or projects constitutes cheating.
What happens if you cheat?
If you have chosen to be dishonest, please come talk to your instructor! We will lovingly help you as you seek to reconcile with the truth. It will likely feel uncomfortable and will take courage and humility, but the peace and satisfaction of knowing you are again in the right is completely worth it. Learn for yourself the joy of repentance.
If we detect that you have cheated, we will try to set up a meeting with you to discuss the situation and determine the consequences. Otherwise, we will use our best judgment of the situation and decide an outcome.
The usual outcome for cheating on an assignment is a zero for that assignment. If you have cheated on multiple assignments, you will receive an E for the course.
In most cases, the names of those who have cheated will be given to the Honor Code Office.
Statement on Belonging
We are united by our common primary identity as children of God (Acts 17:29; Psalm 82:6) and our commitment to the truths of the restored gospel of Jesus Christ (BYU Mission Statement). We strive to create a community of belonging composed of students, faculty, and staff whose hearts are knit together in love (Mosiah 18:21) where:
- All relationships reflect devout love of God and a loving, genuine concern for the welfare of our neighbor (BYU Mission Statement);
- We value and embrace the variety of individual characteristics, life experiences and circumstances, perspectives, talents, and gifts of each member of the community and the richness and strength they bring to our community (1 Corinthians 12:12–27);
- Our interactions create and support an environment of belonging (Ephesians 2:19); and
- The full realization of each student’s divine potential is our central focus (BYU Mission Statement).
As faculty, administration, staff, and students voluntarily commit to conduct their lives in accordance with the principles of the gospel of Jesus Christ, they strive to maintain the highest standards in their personal conduct regarding honor, integrity, morality, and consideration of others…
[Each commits to]:
- Maintain an Ecclesiastical Endorsement, including striving to deepen faith and maintain gospel standards
- Be honest
- Live a chaste and virtuous life, including abstaining from sexual relations outside marriage between a man and a woman. Living a chaste and virtuous life also includes abstaining from same-sex romantic behavior.
- Abstain from alcoholic beverages, tobacco, tea, coffee, vaping, marijuana, and other substance abuse
- Participate regularly in Church services
- Respect others, including the avoidance of profane and vulgar language
- Obey the law and follow campus policies, including the CES Dress and Grooming standards
- Encourage others in their commitment to comply with the Honor Code and Dress and Grooming standards.
In keeping with the principles of the BYU Honor Code, students are expected to be honest in all of their academic work. Academic honesty means, most fundamentally, that any work you present as your own must in fact be your own work and not that of another. Violations of this principle may result in a failing grade in the course and additional disciplinary action by the university. Students are also expected to adhere to the Dress and Grooming Standards. Adherence demonstrates respect for yourself and others and ensures an effective learning and working environment. It is the university’s expectation, and every instructor’s expectation in class, that each student will abide by all Honor Code standards. Please call the Honor Code Office at 422-2847 if you have questions about those standards.
Preventing Sexual Misconduct
As required by Title IX of the Education Amendments of 1972, the university prohibits sex discrimination against any participant in its education programs or activities. Title IX also prohibits sexual harassment-including sexual violence-committed by or against students, university employees, and visitors to campus. As outlined in university policy, sexual harassment, dating violence, domestic violence, sexual assault, and stalking are considered forms of “Sexual Misconduct” prohibited by the university.
University policy requires any university employee in a teaching, managerial, or supervisory role to report incidents of sexual misconduct that come to their attention through various forms including face-to-face conversation, a written class assignment or paper, class discussion, email, text, or social media post. If you encounter Sexual Misconduct, please contact the Title IX Coordinator at [email protected] or 801-422-2130 or Ethics Point at https://titleix.byu.edu/report or 1-888-238-1062 (24-hours). Additional information about Title IX and resources available to you can be found at http://titleix.byu.edu.
Brigham Young University is committed to providing a working and learning atmosphere that reasonably accommodates qualified persons with disabilities. If you have any disability which may impair your ability to complete this course successfully, please contact the University Accessibility Center (UAC), 2170 WSC or 422-2767. Reasonable academic accommodations are reviewed for all students who have qualified, documented disabilities. The UAC can also assess students for learning, attention, and emotional concerns. Services are coordinated with the student and instructor by the UAC. If you need assistance or if you feel you have been unlawfully discriminated against on the basis of disability, you may seek resolution through established grievance policy and procedures by contacting the Equal Employment Office at 422-5895, D-285 ASB.
Brigham Young University’s devotional and forum assemblies are an important part of your BYU experience. President Cecil O. Samuelson said:
“We have special and enlightening series of devotional and forum assemblies…that will complement, supplement, and enrich what will also be a very productive period in your classrooms, laboratories, and libraries. We look forward to being with you each Tuesday…and hope that you will regularly attend and bring your friends and associates with you…A large part of what constitutes the unique ‘BYU experience’ is found in these gatherings where the Spirit has been invited and where we have the opportunity to discuss and consider things of ultimate worth and importance that are not afforded to the academic community on almost any other campus”
(from the address “The Legacy of Learning”, 30 August, 2005)
Your attendance at each forum and devotional is strongly encouraged.
The first injunction of the Honor Code is the call to “be honest.” Students come to the university not only to improve their minds, gain knowledge, and develop skills that will assist them in their life’s work, but also to build character. “President David O. McKay taught that character is the highest aim of education” (The Aims of a BYU Education, p.6). It is the purpose of the BYU Academic Honesty Policy to assist in fulfilling that aim. BYU students should seek to be totally honest in their dealings with others. They should complete their own work and be evaluated based upon that work. They should avoid academic dishonesty and misconduct in all its forms, including but not limited to plagiarism, fabrication or falsification, cheating, and other academic misconduct.