Course Syllabus

Computer Science 142 focuses on learning the "nuts and bolts" of programming. The goals of CS 142 are for you to become equipped to write programs that solve problems, to become proficient with the C++ programming language, and to learn the basic techniques of object-oriented design. Lab assignments provide practical experience in developing solutions and writing programs. We focus on the following topics:

  • Principles of algorithm formulation and implementation
  • Programming tools and the C++ programming language
  • Introduction to object-oriented program design and development

CS 142 is designed for students who intend to major in Computer Science or in areas with a strong emphasis on computer programming. The course is challenging and demands self-discipline and hard work to succeed. However, it is also meant to serve non-CS students and it is not assumed that you have any previous programming experience. The time required may vary significantly based on experience, but we make numerous resources available, and you can succeed if you put in the effort. Read this entire syllabus carefully! Then read "Critical Resources".

From time to time we send e-mails to you with important reminders about exams, updates, critical items, etc. Read those carefully. Also, check the announcements here in Canvas regularly as those e-mails also appear in the announcements along with other announcements that were not e-mailed.

Learning Environment

zyBooks: Programming in C++ is the required text for this class. You will need to create an account at zybooks to access this book. It is important that you create this account such that it is connected to your grades here in canvas. The easiest way to do this is to follow a link from canvas to zybooks. Some students have been able to follow some of the links without an account but typically the assignment links require an account, the first of those being “Chapter 1 - P&C”. When you follow that link you will be prompted to create an account. During that process you will need to enter the zyBook class code BYUCS142Winter2018. In the Class section field, enter which 142 section you are enrolled in, which you can find at mymap.byu.edu.

Note: Your primary email on zyBooks must be the same e-mail address you use for this course. If you do not use the same e-mail, your grades will not be recorded. You can verify what e-mail you have for this course by clicking the Account icon in the left-side navigation, then clicking Settings. You'll see your default email listed there.

You can subscribe to Zybooks beginning two weeks before the beginning of class. Your subscription runs until two weeks after class. After you subscribe to the book, click the person icon on the top right corner, select "My zyBooks library," then select "How to Use zyBooks." This is a small one chapter zyBook which tells you how to use zyBooks in general. Read this carefully! Then go to the BYU C++ zyBook for CS 142. We have adapted this text specifically for our BYU class. After completing labs, you should download copies of the source code for your lab to your local computer for backup. If you drop the class, zyBooks will give you a full refund. Just contact support@zybooks.com.

With the zyBooks approach you are involved in an interactive learning exercise. Rather than reading chapters about abstract ideas and then making the leap to implementing them once you get to the lab, this approach allows you to interact and master concepts as you go. The reading and activities are required. The course schedule describes which readings must be done prior to each lecture. Much of your learning will happen while doing the reading and activities. Following are the learning activities you will be doing in zyBooks as you do your reading.

  1. Participation Activities: The participation activities are relatively easy and you are not graded on whether you get them right or not, just on if you participated in the exercise. It is important to think carefully as you do them, as this makes what follows easier. 
  2. Challenge Activities: The challenge activities require you to get the right answer, but you get unlimited attempts. After you submit each answer, the zyBook will give you feedback which is important to read. Don’t be afraid to try things, especially with program snippets. Fiddle around! Trying things is one of the best ways to learn what is really happening.
  3. Preparatory Labs: Preparatory labs prepare you even more for the main lab. You will develop, test and submit them. When you submit, the lab is auto-graded with immediate feedback on mistakes. You get unlimited submissions.
  4. Main labs: There are 10 main lab assignments, one at the end of each chapter. Details are in the Main labs section.

Reading Activities and Expectations

Our expectation is that you finish the participation and challenge activities in the assigned reading before lecture. In that way you will be prepared to better learn and ask questions as we discuss topics together in class. This will make you a better learner in general, since in the real world you need the skill of learning concepts without an instructor. It also allows class time to explore concepts not as well covered in the text. We also expect that you will have finished as much as you can on the assigned preparatory labs before class. After class, you should be able to quickly finish any portions of activities not yet completed, or consider other resources (including TAs) to master topics that are still challenging. Completion of participation, challenge, and preparatory lab activities count significantly towards your grade. The score you get on participation, challenge, and preparatory lab activities is the percentage of the activities done at the time of the late cut-off. zyBooks lets you see the percentage you have done for each chapter so you can check to make sure your score is correct. You must hit "Submit to Canvas" to have your score uploaded to Canvas. You may do this as many times as you want up until the late cut-off.

There are some chapter sections marked as optional. If you plan to take CS 235 then you should read these sections carefully and do the activities just like the other sections, even though we will not grade activity completion for these sections. Even if you do not plan to take 235, we expect you to at least read carefully the initial part of the section to get an exposure to the topic, and you should at least look over the entire section at a high level, and perhaps do some of the activities.

Main Labs

There are 10 main programming labs (see schedule for due dates). You may use computers in any CS open lab in the TMCB. If you are in rooms 1119, 1121, 1102, and 1138 you may also request face-to-face TA help. You are welcome to use your own computer for assignments, provided you assume associated risks (compatibility, maintenance, backup, etc.). You will develop the first 3 main labs directly in the zyBook. After that, you will program in the Visual Studio (VS) environment. Make backup copies of your files regularly.

When starting a lab, thoroughly read the lab requirements (specifications) found in the zyBook lab chapter. For further help, you may view the help video for the lab, found in Canvas home. Group help sessions also give lab help and are discussed below. The submission and auto-grading process is similar to preparatory labs. Main labs are worth 100 points. In addition to the auto-grade you get for submission results, a TA will grade your code based on a) did you fulfill any special requirements detailed in the lab specification, and b) did you use good coding style. The style guide and grading details are found in Critical Resources.

You can do multiple submissions in zyBook to get your best auto-grade score. Sometimes students will forget to submit after their last few edits (especially when they are just in comments). Make sure that the last submitted version is what you want to be graded. Unfortunately, we have no way to know when you are done in zybooks. Thus we need you to also submit your work for grading here in Canvas. For each main lab you will find a corresponding "Quiz" in Canvas such as "Main Lab#1 - Do As I'm Doing - Submit For TA Grading". These very short Quizzes ask administrative questions but their purpose is to signal the TAs that your lab is ready to grade.

If you realize right after submitting that you forgot something, then you may submit in zybooks again, but once a TA starts grading a version, we ignore subsequent submissions. TAs will grade your most recent zyBook submission currently available. Early points or late day usage are based on when that zybooks version was submitted. You read feedback on your lab by looking at the feedback in the "...Submit for TA Grading" Quiz.

Pair Programming

"Pair programming" is a style of team programming used in industry which can also be helpful in learning to program. It is more than just a group project. In pair programming, two programmers sit shoulder to shoulder during the entire code planning, writing, and debugging. They evenly split coding time as "driver" or "navigator", but they are both actively involved in every line of code. You are required to do lab 4 as pair programming and labs 1, 3, 6, and 9 alone. You have the option to do labs 2, 5, 7, 8, and 10 either alone or with pair programming. Pair programming has been shown to lead to better code and understanding than can be done by one programmer alone, even with expert programmers. In order to understand what is expected of you in pair programming, you are required to read "All I really need to know about pair programming I learned in kindergarten," before your first pair programming experience.

If you and your partner approach pair programming with a positive attitude it will be a good experience. It is a chance to teach each other and learn from each other. By having two pairs of eyes on your code, it is easier to propose more elegant solutions, avoid bugs, style errors, etc. One big advantage is that you fill in the initial blind spots of each other, often avoiding those exasperating long delays caused by "trivial" items that you missed. If your partner is more advanced than you, enjoy the opportunity to learn, but make sure you are still putting in full effort and adding ideas, typing at least half the code, and completely understanding each step taken. If you are more advanced than your partner, enjoy the opportunity to serve and teach. You will be surprised at how much you learn when you teach something to someone else. It is the responsibility of both partners to ensure that you both completely understand all of your code before you submit it. Pair programming can be a great learning experience for both if done correctly. However, if abused, with one partner depending on the other, then it is a variation of cheating, where one uses code written by someone else to get class credit.

When doing your lab as pair programming it is up to you to find a partner. If you are in an on-line section or are having difficulty finding a partner, go to discussions "Finding a Partner for Pair Programming" to look for available partners or to post your availability (include the lab, your time availability, etc.). If you have posted and subsequently found a partner, please delete your post from the discussion if possible.

Do the following when you do pair programming.

  • Include BOTH of your names in the header of your program. Next to your names state whether you used proper pair programming.
  • Submit the final code using zyBooks from both of your accounts. Your submitted code should be exactly the same.
  • For your safety, meet in the TMCB labs or some other public place to work.

By stating in your header that you used proper pair programming you affirm that you: 

  • Worked "side-by-side" on ALL aspects of creating the program, including the design, the implementation and the testing of the code.
  • Evenly split coding time as "driver" and "navigator", and switched roles frequently.
  • The navigator actively reviewed each line of code as it was typed in, watched for errors, style issues, etc. and gave input to the driver, while also considering strategic direction for upcoming lines of code, etc.
  • You took time to teach each other, and both of you understand all aspects of your submitted program.

Exams

There are two midterms and a final exam. All exams are programming based. They may be one program like a main lab, or a series of smaller programs similar to the challenge activities and prep labs, or some mix. They are created so as to be accomplished in under 3 hours. They are taken in the 142 labs with no access to internet or other resources other than your zyBook and Visual Studio. The week before the exam, you must sign up for a test slot. We will e-mail you and put in Canvas announcements the details of how to sign up. We recommend you sign up early as slots are less crowded. If you forget to sign up, and by the time you remember the remaining slots are full, your only option is to contact CS142question@gmail.com and request to take the test during the make-up slot we offer the morning (9am) following the last day of the exam. You will have 15 points deducted from your exam score.

TAs will hand you the requirements for your programming exam when you arrive. TAs will be there, but they can only give clarification on requirements. Exams are submitted and graded like main labs. The code functionality is auto-graded, and thus you must get it correctly working. Like real world programming, getting close does not get credit; it must work. TAs grade for style and requirements. You already demonstrate basic programming skills with main labs. Because of a) the time limitation and b) no access to outside help, the exams also test other aspects of your programming ability including:

  • Your ability to program completely on your own with no outside help.
  • Your ability to program within a time constraint. The better you have become at programming, the less the time limitation will affect you. We know people vary in their speed. We write the test so that you should be able to finish in under the time constraint. However, the time constraint is part of the test. The amount you can finish in the time limit is an indicator of your current programming ability.

The Monday following each midterm we will make the exam available along with our solutions to the exam, so that you can do a side-by-side comparison and analysis of your solution vs ours, which you will submit. Many ask how to prepare to do well on the exams. Two key responses are: 

  • Get to the point where you can do the preceding main labs and activities with little outside help.
  • Starting from the preceding prep labs, main labs, or code done in class, extend those specs on your own to do additional functionalities. Code it up on your own, debug and test, and then extend it to do more things. Do this a few times and your confidence, enjoyment, and programming ability will increase greatly.

Grading Scale

Your letter grade is based on these percentages.

Grades Percent
A 93%
A- 90%
B+ 87%
B 83%
B- 80%
C+ 77%
C 73%
C- 70%
D+ 67%
D 63%
D- 60%
E 0%

Grading Policy

Check your grades throughout the semester. It is your responsibility to ensure that your assignments have been graded. Do NOT ask for a final grade adjustment just because you are close to the next highest grade.

Attendance: 5% of your grade is based on attendance and participation (as defined by each section). If you feel you are sufficiently advanced to not require lecture attendance then take the on-line section which was created for that, though that section may have a few required meetings.

Late Policy: No credit is given for assignments turned in late. This is for your benefit as getting behind leads to a miserable semester. The "late cut-off" for assignments should not be considered as the "due date." The goal is to finish earlier! If you have a very unusual circumstance (e.g. extended sickness) you may contact us at CS142issue@gmail.com to work something out.

Start your assignments early, as unforeseen bugs (i.e. items which cause your program to not function properly) invariably arise, and they take time to fix. These bugs can be very frustrating, but learning how to recognize, find, and fix bugs is an important skill that only comes from experience. If you start just before the late cut-off, you will be stressed and anxious, work less effectively, and have a much less enjoyable experience.

If you do not completely finish an assignment, submit what you have before the cut-off to get partial credit. Alternatively, to accommodate unexpected events (sickness, emergency, extra nasty bug, etc.), all students get 8 free late days which can only be used for main labs, prep labs, or exam analyses. That is a total of 8 late days, not 8 late days for each category. If you submit a main lab or midterm analysis late, we subtract the number of late days from your remaining amount. To use late days for prep labs e-mail cs142issue@gmail.com. We add one extra credit point to your lab 10 score for each late day remaining at the end of the semester. Lateness increases by one late day Monday-Saturday at midnight. Thus, if an assignment is due Friday, and you turn it in Monday, it would cost 2 late days (1 for missing Friday, another for missing Saturday). If you turned it in Sunday, it would still cost 2 late days.

To further reward punctuality, we give extra credit for early submission of main labs. You earn 1 point extra credit per day up to 4 days. Extra credit points are accrued for every midnight left between submission and the midnight a lab is due (except Sunday).

Other Learning Resources and Teaching Assistants

Learning to figure things out without going to the TAs is an important skill to develop. First, read carefully the text, do the activities and labs as best you can, and attend class. Discuss concepts with classmates and friends. We have digital discussions in Canvas for labs, chapters, and other topics. Use the Internet to google the topic, or look at C++ reference cites, etc. (but do not to look up versions of the code itself). Make sure that interaction with colleagues or internet, etc. is for concept understanding, and not to get the solution code. The former is great learning; the latter is cheating. Explore Home in Canvas where you will find a FAQ, VS info, multiple lecture videos, Tutors, TA handbook, other resources, and links to useful sites.

If you still need help contact a TA. The TA's role is to help you master the topics of class. It is NOT to do assignments for you, or be your full-time tutor. They help clarify concepts, guide thoughts, and help you debug your code, but will not design programs for you or write code for you. A general rule is that TAs do not touch the keyboard. You need to be able to design, debug, and test solutions. There are multiple options for getting TA help described in the TA section in Critical Resources.

Group Help Sessions: For those interested, early in the semester we will create groups which meet weekly. Groups are limited to 26 students who may come from different sections. The same TA will work with the group throughout the semester. One focus of group sessions is preparing you for main labs. Another goal is for students to build relationships and teach each other. You also get to know a particular TA well who you can easily approach about questions. Each group has its own digital discussion. The TA monitors these discussions and helps with concerns. Advanced students are invited, since helping others is not only great service, but you learn much more when you teach. We schedule such that if after the hour you need more basic help, the TA will be available. We also create some specialty groups if you are interested (e.g. beginning, advanced, women). You may join or switch groups during the semester by going to the TA schedule and contacting the TA group leader for the desired session. 

Honor Code and Honesty

Expectations: We teach with the assumption that the vast majority of you are honest and will abide by the honor code. We focus on creating a course where honest students can learn in the most effective environment, rather than a less effective approach that makes it harder to cheat.

What is Cheating?: The goal of this class is for you to learn, and we encourage you to participate in any activity that actually increases your learning. This includes studying with classmates, internet, etc. to better understand course concepts, proper syntax for instructions, etc. However, when it comes to actually writing your code, the work must be your own. When pair programming "your" work means the work of the two. Do not show your code to another class-mate or look at or copy code for the assigned projects, exams, etc. If you show your code to a student and that student submits that code, you are both guilty of cheating. So work together, but not on the actual writing of the assignment code. One way to judge the difference is whether what you are doing is helping you learn specific topics in preparation for doing the assignment yourself vs. using an edited/unedited version of someone else’s work to fulfill all or part of your assignment. If you are unsure about a situation, ask us.

In the zyBooks approach you submit your current program and you get to see the difference between your results and the expected results for visible test cases, so that you can debug your program. You might be tempted to just “hard-code” your program to simply output matching test-case results, without properly calculating the results as intended, in order to get partial points for matching non-hidden test cases. Doing this on a lab or exam is a form of deception and is cheating.

Why not Cheat?:

  1. It is wrong and dishonest. This is the most important reason. We are here to obey our Heavenly Father and do what is right.
  2. It is ineffective. You will do worse in the class and not learn the subject. If caught cheating you will fail and be reported to the honor code office. If not caught you will still do poorly in the class because the midterms and finals are programming exams which force you to come up with programming solutions on your own with no outside (even internet) assistance. If you cheat you will not be prepared to do well on the exams.
  3. It will make you miserable. You will feel guilty and fearful. You will not be able to go the temple, approach God with confidence, etc. Being dishonest hurts you and those around you.

In summary, cheating is wrong, counterproductive, and brings unhappiness. Be a person of integrity, enjoy learning, and be happy!

University Policies

Honor Code

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.

Sexual Misconduct

In accordance with Title IX of the Education Amendments of 1972, Brigham Young University prohibits unlawful sex discrimination against any participant in its education programs or activities. The university 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 all university employees in a teaching, managerial, or supervisory role to report all incidents of Sexual Misconduct that come to their attention in any way, including but not limited to face-to-face conversations, a written class assignment or paper, class discussion, email, text, or social media post. Incidents of Sexual Misconduct should be reported to the Title IX Coordinator at t9coordinator@byu.edu or (801) 422-8692. Reports may also be submitted through EthicsPoint at https://titleix.byu.edu/report or 1-888-238-1062 (24-hours a day).

BYU offers confidential resources for those affected by Sexual Misconduct, including the university's Victim Advocate, as well as a number of non-confidential resources and services that may be helpful. Additional information about Title IX, the university's Sexual Misconduct Policy, reporting requirements, and resources can be found at http://titleix.byu.edu or by contacting the university's Title IX Coordinator.

Student Disability

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.

Important Note: 

Instructors reserve the right to modify this syllabus as necessary in order to accommodate classroom and university needs and developments. Additionally, this syllabus outlines a template of course-wide policies for CS-142, and is subject to minor section-level variation at the discretion of the instructor.

Course Summary:

Date Details Due