CSCI 141 - Computer Programming I

Scott Wehrwein

Spring 2025

Course Overview

What is this course about?

Synopsis from the WWU Course Catalog

Intended for students majoring in computer science. Basic concepts of computer programming using an object oriented programming language. Topics covered: introduction to the development environment, introduction to algorithms, elements of a programming language, including data types, packages, control structures, procedures and functions, basic input and output, arrays and records, text files, strings, variant records. Algorithm development, problem solving and software engineering are emphasized. Programming is required in implementation of concepts. Lab.

Official Course Outcomes

On completion of this course students will demonstrate:

Textbook

I recommend using the following free online interactive e-textbook as a reference and for additional practice:

How to Think like a Computer Scientist: Interactive Edition

Assessment

Grades will be calculated as a weighted average of scores on the following course components, each of which is described in more detail below:

The standard letter grade ranges apply (i.e., 90–100% is an A, 80–90% is a B, and so on). The calculated raw percentages may be curved at the instructor’s discretion, but any such curve will not lower anyone’s grade. “+” or “-” cutoffs will be decided at the instructor’s discretion. Students who demonstrate mastery of the material will get grades in the A range, and it is my goal to give as many A’s as possible.

Exercise Solution Sets

Before each class, you will watch a few short videos and work through a set of Exercises that check your understanding of the material from the videos.

Individual Solution Sets

Before the start of the corresponding class period, you will submit your individual solutions to the assignment titled “E##I” (I for Individual; ## is the lecture number). Individual solutions will be graded for completion. Your three lowest individual solution sets are dropped, so you can miss up to three of these submissions without penalty.

Submission: One submission per student, before class, on Canvas.

Team Solution Sets

In class, your team will construct and submit a collaborative solution set for the same exercises. The group’s solution set will be submitted during class and graded for correctness. You will submit your team’s exercise answers using this form, which is also linked just above the Schedule table on this page. Grades for team solutions will be in a Canvas assignment titled E##T (T for Team). The lowest three team submissions are dropped, meaning you can miss up to three class periods without penalty.

Submission: One submission per team, during class, using this form.

Participation Policy

The groupwork-heavy design of this course is motivated by research that shows that peer instruction is an effective teaching methodology that improves student learning outcomes. If you are absent or disruptive, this is detrimental not only to your own learning, but to your peers’ as well. To get credit for the team-based submission, you must be present for the entire class period. By writing your name on an Exercise Solution Set in class, you are certifying that you are present for the whole class period and actively participating during group work. If you list your name after arriving late or before leaving early, this can be considered a breach of academic honesty. If you arrive late or leave early, you may participate in group work as usual, but you will be considered absent for purposes of the team submission. If you have a compelling reason that you will need to arrive late or leave early, please let me know at least one day in advance.

Labs

Labs will provide additional programming practice with the support of a TA. Because many of the programming tasks you are asked to do (e.g., POTDs) are both short and constrained by the need to test them programmatically, I’ve tried to design the labs - especially the ones later in the quarter - to give you practice solving problems that are larger-scale and more difficult to test, such as programs that make drawings or interact more closely with a user.

To get full credit for a lab activity, you must both attend lab and hand in the deliverable by the deadline (the Tuesday night of the week following the lab). You can miss one lab without penalty. Beyond this, missing a lab or attending a lab section other than the one you are registered for requires permission from both me and your TA, so please contact us ahead of time in case of extenuating circumstances. Barring case-by-case exceptions, if you miss your scheduled lab but submit the deliverable on time you will receive half credit (i.e., your graded lab score will be multiplied by 0.5). Late lab submissions are penalized 10% per hour after the deadline.

Programs of the Day

The best way to become a better programmer is to practice programming; POTDs are designed to give you plentiful practice. For each regular class period, you are assigned a Program of the Day that is due at the start of the following regular class period (POTDs are never due on holidays or exam days). You are provided a prompt describing the program you’re asked to write, and a test program that will check your solution for correctness. Your grade on each POTD is based on the test program: if your solution passes all the tests, you get 100% for that POTD. No late POTD submissions are accepted, but your three lowest POTD grades are dropped.

Midterm Exams

There will be one practice exam (Exam 0) and three midterm exams (Exams 1-3) conducted during class on Fridays during weeks 2, 4, 6, and 8 of the quarter; see the Schedule table for precise dates. The exams will be conducted in the computer labs, and your task will be to write a program. Because of the nature of learning to program, exams are necessarily cumulative; for each exam, the Schedule table lists the cutoff date for material to be tested on each the exam.

Lab-based programming exams are the most authentic way to assess your achievement of the course outcomes. That said, writing programs under a time constraint is challenging and can be stressful. For this reason, I’ve done my best to give you the resources you need to be prepared and build flexibility into the policies. You will be allowed to use one double-sided 8.5x11 sheet of handwritten notes. Exam 0 is a practice exam; it will be scored so you know how you did, but your score on Exam 0 will not count towards your grade. Exams 1-3 are collectively worth 30% of your grade, but your lowest-scoring exam is dropped, meaning your two best exams are each worth 15% of your course grade.

Final Exam

The final exam will be similar in format to the midterm exams. It will be taken in the computer labs during our scheduled final exam slot, which is Wednesday, June 11th from 10:30 - 12:30 PM.

The final exam will be cumulative. You will be allowed to use one double-sided 8.5x11 sheet of handwritten notes. Per the University Academic Policies, a student who fails to take a final examination without making prior arrangements acceptable to the instructor receives a failing grade for the course.

I do not release final exams or final exam grades. This means that at the end of the quarter, your score on Canvas will not reflect your final grade in the course. If you wish to see your graded final exam, you can review it in-person in my office starting at the beginning of the following quarter by visiting my office hours or emailing me to make an appointment.

Resources for Getting Help and Support

Help with Course Content

If you are stuck, struggling, or need help on any aspect of the course, you have several avenues for seeking help:

Other Resources

If you are have concerns that go beyond the course material you are welcome to talk to me, but the following resources are also available to support you.

Faculty Community Ambassadors

The Computer Science department has both Faculty and Student community ambassadors who hold regular office hours:

These hours are a time for students, staff and faculty to bring concerns, feedback or questions as it related to equity, inclusion and diversity within STEM. We hope that we, the Community Ambassadors and the STEM Inclusion and Outreach Specialist, can advise and also guide people to college, university or external resources.

Our Faculty Community Ambassadors are Yasmine Elglaly and myself (Scott Wehrwein). You can find information on Commnity Office Hours and contact details for both at the following link: https://cs.wwu.edu/diversity-equity-inclusion.

University Resources

As a reminder, the following University resources are always available:

Logistics

Course Webpage / Syllabus

The Schedule section of this page will be kept up-to-date as the quarter progresses with topics, links to all lecture materials (videos, slides, exercises, problems, and readings), as well as links to assignment and lab handouts. I suggest bookmarking this page; if you forget the URL and need to find your way back here, you can find the link on the Syllabus page in Canvas.

Lectures

The Lecture component of this course will be largely “flipped”. For most class periods, you will do the following:

  1. Before a given class period, watch the (usually 3) pre-recorded lecture videos.
  2. After watching the videos, you will complete a short set of Exercises to test your understanding of the new content and submit your answers on Canvas to be graded for completion.
  3. Much of class time will be spent working in teams. At the beginning of class, you will compare Exercise answsers with other members of your team, compiling your solutions into a single team-wide solution set. Questions and clarifications on exercises will be discussed as a whole class. Your team’s solution set will be handed in and graded for correctness.
  4. The remainder of class time will be split between working in teams on Problems that require you to apply and extend the concepts from the lecture videos, and discussing Exercise and Problem solutions as a full class.

Lecture videos will be posted on YouTube and linked from the Schedule table, alongside the Exercises, Problems, and optional readings for each class period.

Canvas

We will use Canvas for announcements, grades, and submission of assignments and labs. Lab and assignment writeups will be linked from both the course webpage and the corresponding assignment on Canvas. Lecture videos, slides, exercises and problems, and references to the textbook for each lecture, will only be posted on the course webpage.

Computer Labs

The CS department maintains a set of Computer Science labs separate from the general university labs. You will use your regular University username and password to login.

Lab Locations and Access The following rooms in Communications Facility are CS Department labs: 162, 164, 165, 167, 405, 418, 420. These labs are open to all CS students (that’s you!) any time except when scheduled for a class or other activity. The complete of CS labs and their schedules can be found on the CS Support Wiki. CF 405 is never booked, so it’s always available. Labs are open 24/7, although the building locks at 11pm so you won’t be able to enter later than that.

Thonny

The CS labs have everything you need to do your work for this class. However, many students find it helpful to do some coursework on their own computers. Fortunately, the IDE we use, called Thonny, is easy to install and use on Windows, Mac, and Linux. To get Thonny, visit https://thonny.org/ and download the version of Thonny for your system. For Windows, any of the versions should work fine, but I recommend the 64-bit Python 3.10 version.

Feedback

I take student feedback seriously. I appreciate any feedback you’re willing to give, and I will do my best to act on constructive feedback when possible. I will solicit feedback through surveys periodically throughout the course, but you are welcome and encouraged to provide feedback anytime in my office hours, by email, or if you desire anonymity you can fill out this Google Form.

Schedule

This table provides daily topics and links to videos, slides, exercises, POTDs, labs, and readings. Content in the future remains subject to change, but I don’t anticipate major changes; I will make an effort to announce any changes made.

Date # Topics Videos Slides Ex (Due) POTD (Out) Lab Other Readings
4/2 (1) 0 Introduction, Logistics, Syllabus
Hello, World!
announcements
how to succeed
slides
hello.py
E00
About You Survey
4/4 No Class
4/7 (2) 1 Computers
Alorithms and Pseudocode
Function Calls
A: 8:45
B: 9:29
C: 13:04
announcements
A
B
C
pseudocode
E01 Guide
P01
Lab 1 Ch 1
4/9 2 Data Types
Variables
Program Arguments
A: 15:26
B: 15:53
C: 7:01
announcements
A
B
C
L02C.py
code
E02 P02 2.1–2.5
4/11 3 Operators
Expressions and Statements
A: 17:56
B: 16:41
announcements
code
A
B
E03 P03 2.6–2.7
4/14 (3) 4 Keyword Arguments
Binary Representation
A: 6:43
B: 12:33
announcements
A
B
E04 P04 Lab 2 W2 Survey
4/16 5 Boolean logic A: 16:45 announcements
code
A
E05 P05 7.1–7.3
4/18 Practice Exam (thru 05)
4/21 (4) 6 Conditionals A: 16:59
B: 15:53
announcements
A
B
code
E06 P06 Lab 3 W3 Survey 7.4–7.8
4/23 7 While loops A: 20:25
B: 11:17
announcements
A
B
code
E07 P07 8.1–8.3
4/25 Exam 1 (thru L06)
4/28 (5) 8 For loops A: 7:18
B: 21:28
announcements
A
B
code
E08 P08 Lab 4 W4 Survey Ch 5
8.1–8.3
4/30 9 importing modules
random, Turtles
A: 12:17
B: 16:39
announcements
A
B
code
E09 P09 Ch 4
5/2 10 Functions 1: inputs and outputs A: 8:08
B: 12:21
C: 11:00
D: 5:14
announcements
A
B
C
code
E10 P10 6.1–6.3
5/5 (6) 11 Functions 2: Local variables, scope; A: 19:34
B: 12:24
announcements
A
B
code
E11 P11 Lab 5 W5 Survey 6.4
5/7 12 Functions 3: Managing Complexity in Lab 6
Tuples
A: 11:17
B: 14:07
announcements
A
B
code
E12 P12 6.5–6.10
10.27–10.28
5/9 Exam 2
(thru L11)
5/12 (7) 13 Strings 1 A: 4:40
B: 12:19
[announcements]
A
B
code
E13 P13 Lab 6 W6 Survey Ch 9
5/14 14 Strings 2 A: 12:56
B: 4:54
[announcements]
A
B
E14 P14 Ch 9
5/16 15 Lists A: 5:49
B: 18:14
[announcements]
A
B
code
E15 P15 Ch 10
5/19 (8) 16 Reading and writing files A: 7:26
B: 26:37
A
B
code
E16 P16 Lab 7 W7 Survey Ch 11
5/21 17 Dictionaries A: 16:03 [announcements]
A
E17 P17 Ch 12
5/23 Exam 3
(thru L17)
5/26 (9) No Class: Memorial Day No Lab W8 Survey
5/28 18 Variables are references; Mutability A: 15:52 [announcements]
A
E18 P18 9.9, 10.8, 12.4
5/30 19 Mutability and functions A: 10:18 [announcements]
A
E19 P19 6.4
This Blog Post
6/2 (10) 20 Searching [announcements] E20 P20 No Lab W9 Survey
6/4 Sorting E20
6/6 Ask me Anything
6/11 Final Exam: 10:30am-12:30pm

Course Policies

Professionalism

I am committed to maintaining an inclusive, supportive, and professional environment in all academic settings including lectures, labs, and course-related online spaces. Students are expected to live up to the ACM Code of Ethics and Professional Conduct. This is the ethical code adopted by nearly every software professional. Failing to follow the ACM Code of Ethics and Professional Conduct can negatively affect course grades up to and including a failing grade for the course. Conduct is also considered when determining admission to the major.

Academic Honesty

Academic honesty is taken seriously in this course. Your code submissions will be automatically checked for similarity to all other submitted code for this quarter and previous quarters. The similarity detection tools are quite sophisticated: trivial changes to the code are insufficient to fool it – students who take their classmates’ code and try to tweak it get caught. In fact, making sufficient changes to someone else’s code to eliminate suspicion of similarity is more difficult than just writing the code yourself. All involved parties are accountable for plagiarism: sharing your code with someone else is just as much a violation as taking someone else’s code.

Collaboration Policy - Individual Assignments

Individual programming assignments are to be completed independently. Students are welcome to discuss assignments with each other on a conceptual level, but each student should be writing their code independently and without direct help from fellow students. Sharing your code with others or looking at someone else’s code is an explicit violation of this collaboration policy. The best way to be absolutely sure you are collaborating appropriately is follow these two rules:

AI Policy: Use of AI is not allowed in this course for any assigned work.

Regret Policy: If you find you have made a bad decision in a panic, you have 48 hours after the deadline to contact the instructor to apologize; in this circumstance the penalty will be a zero for the assignment. Otherwise, the standard department policy for violating academic integrity applies, which is a failing grade in the course and the incident being reported to the Chair and Dean.

Closing Thought

plagiarism is negatively correlated with final grades in both the course that the plagiarism occurred and in a subsequent related course.

-Pierce & Zilles, Investigating Student Plagiarism Patterns and Correlations to Grades, 2017

Communication

It is your responsibility to make sure that you promptly become aware of Canvas Announcements as they are posted; Canvas should be configured to send you an email notification by default, but if you are unsure, please come see me in office hours.

Other guidelines for communication in this course:

Late Work

Exercise Solution Sets and Programs Of The Day

Late submissions are not accepted for POTDs or individual exercise solution sets, but your lowest three scores for each (out of about 20) are dropped. There is no way to make up team-based exercise submissions due to absence from class, but your lowest three scores in this category (out of about 20) are dropped.

Labs

The late penalty for labs is 10% for each hour past the deadline, rounded down to the nearest integer number of hours.

Programming Guidelines

Your programs will be graded on correctness, clarity, and efficiency (in that order).

Correctness:

A correct program is one that always produces the correct output for a given input. Also, a correct program does not produce unintended side-effects. The most effective way to ensure that your program is correct is to test, test, test. Test each component as you introduce it; once you are confident that a component works you can use it in other routines. Try to break your program in testing, and if you succeed, locate the bug and fix it. The better you test your program, the more likely it is to be correct - the more likely it is to be correct, the more likely you’ll earn a good score. Most of your grade will depend on the correctness of your code.

Clarity:

The easier it is to read and maintain your code, the easier it is to locate and remove bugs. Your program should be well organized, appropriately commented, and easy to maintain. To have a well-organized program, design your program thoughtfully and modularly. Think before you code: hacking away blindly leads to ugly, difficult-to-read code. If you do hack away, producing a functional but ugly wall of code, try to clean it up a bit. Make sure that your cleaning does not introduce new bugs.

As for comments, please follow these simple guidelines proposed by Emeritus Professor Osborne:

Efficiency:

Your code should be efficient, in the sense that the programs you write in this class should run in a few seconds or less. If you continue on in CS, the definition of and standards for efficiency will get more rigorous; for now, just make sure your programs aren’t doing a lot of unnecessary work.

Changes to the Syllabus

This syllabus is subject to change. Changes, if any, will be announced in class or online. Students will be held responsible for all changes.

University Policies

All University-wide policies apply to this course, including those outlined at http://syllabi.wwu.edu. These policies cover issues including: