# CSCI146 Fall 2024

 When and Where 146A: MW 8:15 AM – 9:30 AM in 75SHS 102 146Z: F 8:40 AM – 9:30 AM in 75SHS 102 Faculty Michael Linderman 75SHS 216 802-443-5737 mlinderman@middlebury.edu Office Hours M: 1:00-2:00PM T: 2:00-4:00PM W: 2:00-4:00PM Th: 9:45-11:15AM Or by appointment Getting Help ED Q&A discussion board CS peer drop-in help Quick Links In-class question tool ED Q&A discussion board Gradescope Python documentation PrairieLearn (only accessible on campus or via VPN)

### Description

CSCI146 is an introduction to the field of Computer Science geared towards students geared towards students with some prior computer science or programming experience, or a background in quantitative problem-solving (e.g., advanced math coursework). At the completion of the course, you will:

1. Be able to solve computational problems with procedural statements (assignment, operators, conditionals, loops), functions and objects
2. Be able to design, implement and debug medium-sized programs in Python
3. Have a working understanding of Python tools, e.g. plotting libraries, used in scientific computing and data analysis
4. Be able to analyze and apply basic algorithmic techniques, such as recursion

If you are not sure if this is the right course for you, please discuss it with me. I am happy to do so!

## Schedule (subject to change)

1 9/9 Introduction, algorithms, expressions, variables (in-class questions) PP: 1 except 1.51, 2 or
TP: 1, 2, 5.12
Practice problems 1
9/11 Expressions, variables, functions (in-class questions) PP: 3 or
TP: 3 except 3.4
9/13 Quiz (covering algorithms, expressions, types) (cheatsheet, blank quiz)
Lab 1: Variables, assignment and functions
PA1: Functions
2 9/16 Style and Loops (in-class questions) PP: 2.6, 9.3 or
TP: 4.6-4.8, 6.1-6.4, 3.4, 7.1-7.4
Practice problems 2
9/18 Loops, cont. (in-class questions)
9/20 Quiz (covering functions, comments/docstrings, and for loops) (cheatsheet)
Lab 2: Loops
PA2: Turtle Graphics
3 9/23 Sequences I (strings, lists) (in-class questions) PP: 4.1-4.3, 8.1-8.5, 9.2 or
TP: 2.6, 8, 10.1-10.5
Practice problems 3
9/25 Sequences II (methods) (in-class questions) PP: 7.3-7.4, 8.7 or
TP: 8, 10.6,10.8-10.9
9/27 Quiz (covering sequences, operators and slicing) (cheatsheet, blank quiz)
Lab 3: Sequences
PA3: Cryptography
4 9/30 Conditionals (in-class questions) PP: 5 or
TP: 5.2-5.7
Practice problems 4
10/2 While loops (in-class questions) PP: 5, 9.6-9.8 or
TP: 7.3-7.4
10/4 Quiz & Quiz catch-up (covering booleans, relational operators, conditional statements, while loops) (cheatsheet, blank quiz)
Lab 4: Conditionals
PA4: Math game
5 10/7 Loops, lists and files PP: 10.1-10.3 or
TP: 9.1
Practice problems 5
10/9 Midterm 1 review, in-class notes, Midterm 1 cheat-sheet. You can bring the cheat sheet and a separate letter-sized page of notes (front & back) to the exam.
Sample Exam 1 (solution)
Sample Exam 2 (solution)
Sample Exam 3 (solution)
Sample Exam 4 (solution)
Sample Exam 5 (solution)
Sample Exam 6 (solution)
10/10 Midterm I @ TBD
10/11 No class (Fall Break) PA5: Data for everyone
6 10/14 Objects, Sets (in-class questions) PP: 14.1-14.3, 11.1, 11.5 or
TP: 15.1-15.2, 17.1-17.2, 19.5
Practice problems 6
10/16 Tuples, Dictionaries (in-class questions) PP: 11.1-11.3, 11.5 or
TP: 11, 12
10/18 Quiz (covering sets, dictionaries) (cheatsheet, blank quiz)
Lab 5: Data Structures
Project 1
7 10/21 Recursion I (in-class questions) TP: 5.8, 6.5-6.7 Practice problems 7
10/23 Recursion II
10/25 Quiz (covering reference and recursion) (cheatsheet, blank quiz)
Lab 6: Recursion
PA6: Recursion
8 10/28 Object-oriented programming (OOP) I (in-class questions) PP: 7, 14 or
TP: 15, 17, 18
Practice problems 8
10/30 OOP II
11/1 Quiz (covering OOP) (cheatsheet, blank quiz)
Lab 7: OOP
PA7: OOP
9 11/4 Big-O, Halting, (in-class questions) Practice problems 9
11/6 Searching, Sorting (in-class questions) PP: 12, 13
11/8 Quiz & Quiz catch-up (TBD) (cheatsheet, blank quiz)
Lab 8: Algorithms
PA8: Zipf's law
10 11/11 Data Science I (in-class questions) Practice problems 10
11/13 Midterm 2 review, in-class notes, Midterm 2 cheat-sheet. You can bring the cheat sheet and a separate letter-sized page of notes (front & back) to the exam.
Sample Exam 1 (solution) This is a sample final from prior years, so not all questions are relevant
11/14 Midterm 2 @ TBD
11/15 Lab 9 PA9: Weather
11 11/18 Data Science, (in-class questions) Practice problems 11
Project 2
11/20 Data Science, (in-class questions)
11/22 Quiz (cheatsheet)
Lab 10
BR Thanksgiving Break
12 12/2 Applications: Image processing with nested loops (slides)
12/4 Applications: DNA sequence alignment with recursion (slides)
Tentative self-scheduled exam-retake (12/6-12/8)
12/6 Applications: DNA sequence alignment with recursion (cont.) and wrap-up (slides)
EX 12/9 Final review, in-class notes, Final cheat sheet. You can bring the cheat sheet and a separate letter page of notes (front and back) to the exam.
Sample Final (solution)
Tentative self-scheduled quiz retake (TBD) (Cheat sheet)
TBD Final Exam TBD

1Previous editions of PP had numeric section labels, but the 3rd edition does not. For conciseness I have continued to use the numeric labels. Section 1.5 is the 5th section of chapter 1. 2Similarly, previous editions of TP had numeric sections labels, but the current edition does not. Again for conciseness, I have continued to use numeric labels.

## Supplemental Textbooks

The course does not have a required textbook. However, you may find the following supplemental resources helpful. The supplemental reading is intended to provide an alternate presentation of the material that helps you prepare for class and/or solidify your understanding afterwards. There is almost always a free option (i.e., a free online book). You will not be responsible for material that appears only in the reading, i.e. any material on a quiz or exam will appear in lecture, in a programming assignment or in a practice problem.

Note that these books have both positive and negative aspects (in a variety of ways). There are aspects of these books that do not represent the inclusive professional Computer Science community we work to create here at Middlebury and more generally. We recognize those problems but also the potential benefits of freely available resources for your learning.

## Software and Computing

We will be programming in Python 3 and you will need regular access to a computer that can run a Python development environment.

• Thonny IDE (free) is a local development environment (i.e., runs on your computer and doesn’t require Internet access) that is the recommended (and default) tool for this course. All assignments have been developed and tested with Thonny.

## Coursework (subject to change)

This semester we will be using a form of “specification” grading. Instead of using points to assess work, all assignments and exams will be evaluated as Satisfactory/Not Yet Satisfactory or with an EMRN rubric (Exemplary, Meets expectations, Revision needed, Not assessable). “Satisfactory” (S) or “Meets expectations” (M) is not synonymous with “minimally competent”, but instead an indication of a fully working program or having achieved the learning goals for that course element. There is no partial credit, instead you will receive feedback on your submission and, where possible, have one or more opportunities to resubmit an assignment or retake a similar quiz/exam problem based on that feedback. The only grade you will receive will be the final grade and it will be determined according to the bundles of specifications (listed below) you have achieved.

Why? A grade should reflect your demonstrated understanding of the material at the end of the course (and only that). Assessing your work is a necessary but imperfect proxy for assessing understanding. My goal and responsibility is to create the best structures possible for you to demonstrate your true understanding. And your corresponding responsibility is to do everything you can to make your work accurately reflect your true understanding.

The bundles incorporate knowledge at three levels:

• Mechanical: Apply skills directly in class, e.g., predict output of code, write a short code “snippet”. These skills are generally assessed through in-class quizzes.
• Applied: Connect multiple mechanical skills to create something new, e.g. write a short, but complete, function or program. This knowledge will generally be assessed via exams and programming assignments.
• Synthesis: Connect skills at larger scope and across more complex tasks (with less scaffolding). This knowledge will primarily assessed with programming projects.

Note that this is a new system for this course. I am committed to do whatever is needed to ensure you understand the expectations and processes and are equipped to achieve your desired definition of success. I welcome your feedback and am ready to change any aspects that are not working. My goal is for you to achieve a Satisfactory understanding of all material you choose to tackle.

Some language adapted from Pete Johnson, Christopher Andrews, Jason Mittell, Robert Talbert and Brett Wortzman.

Practice Problems: Almost every week we will have a set of online practice problems available via the PrairieLearn system. These problems are a “no stakes” mechanism to practice what you are learning (i.e., they are not included in the grade bundles). The problems are combination of multiple choice, short answer and coding questions. Many are “evergreen”, i.e., you can automatically generate new instances of the problem to keep practicing! These questions are intended to help you solidify what you learned in class and prepare for the quizzes/exams. Note that our instance of PrarieLearn is only available on campus or via the VPN.

Programming Assignments: Almost every week we will have a programming assignment (PA). The programming assignments will typically be due on the next Thursday.

A programming assignment that meets expectations will be correct (assessed via manual review and automated correctness tests) and exhibit satisfactory “style”, albeit with opportunities for improvement. The latter reflects that the code we write must be readable by humans as well as computers. Style (including “design”) is evaluated based on the following questions: 1. Is the code written clearly, efficiently, elegantly and logically? 1. Is the code readable, e.g. good use of whitespace, effectively commented, meaningful variable names, uses language style conventions? Satisfactory style focuses on the latter criteria, and includes minimal expectations for naming, documentation, etc. Often you will receive automated feedback to help you develop satisfactory style.

An exemplary programming assignment will be correct, will address the “creativity” elements, and exhibit good style with minimal opportunity for improvement. The creativity elements are flexible challenges or open-ended opportunities within a programming assignment for you to exercise your creativity. There are many ways to satisfy the creativity portions of a programming assignment.

If your program is incomplete or does not meet the execution goals prior to the due date, you can still obtain full credit. To do so, you must submit a meaningful attempt prior to the due date (or extended due date, see below). You can then resubmit your assignment (multiple times) prior to the late deadline (typically two weeks later).

If you would like your resubmission to be re-evaluated before the final deadline, please respond to the online survey linked from the top of the Gradescope automatic testing window. All resubmissions will be evaluated after the final due date, but “early” resubmissions will not be evaluated until you notify the instructors (since we won’t know if your code is ready). A meaningful attempt is generally characterized by passing some but not all of the automated tests. The extended due date recognizes that learning is an iterative process that doesn’t always happen exactly on schedule. However, making an attempt by the due date ensures you are regularly practicing and solidifying what you are learning (especially while it is fresh!).

Projects: There will be two projects during the semester. These are like open-book take-home tests, but for programming. They will not involve new tools or techniques, but instead will require you to connect the skills you have learned at a larger scope. Similar to the programming assignments, the projects will have an initial and final due date.

Quizzes: Most Friday lab sessions will start with a short quiz on the week’s material. This quiz is a low-stakes opportunity to check whether you have understood the week’s material. Typically each quiz will have 3 sub-topics (the evolving list of topics). Periodically there will be “retest” days where you can complete new quiz problems for sub-topics that you missed previously.

Exams: There will be two midterm exams (outside of class) and a final exam where you can complete new quiz and exam questions for applied topics that you missed previously. Review the evolving list of topics.

If extenuating circumstances will cause you to miss an element of the course, e.g. a weekly quiz, let me know as soon as possible beforehand. When I know beforehand, we can make alternate arrangements.

Final grades: Final grades will be determined by the following bundles (subject to change):

A 90% of labs completed, and
90% of quiz (mechanical) topics, and
90% of exam (applied) topics M+ (≥ 3) with 75% E (4), and
90% of programming assignments M+ (≥ 3) with 50% E (4) and
2 project M+ (≥ 3) with 1 project E (4)
B 90% of labs completed, and
90% of quiz (mechanical) topics, and
80% of exam (applied) topics M+ (≥ 3) with 50% E (4), and
80% of programming assignments M+ (≥ 3) and
1 project M+ (≥ 3)
C 80% of labs completed, and
80% of quiz (mechanical) topics, and
70% of exam (applied) topics M+ (≥ 3), and
70% of programming assignments M+ (≥ 3)
D 70% of labs completed, and
70% of quiz (mechanical) topics, and
50% of exam (applied) topics M+ (≥ 3), and
50% of programming assignments M+ (≥ 3)

The “+” and “-” modifiers will be applied by the instructor to the base grade above when the work completed falls in between bundles, e.g., an “A-” would be assigned for work that is close to but not does meet all the requirements for the “A” bundle and “B+” would be assigned for work that meaningfully exceeds the “B” bundle requirements but is not close to the “A” bundle.

## Late Policy

During the semester you may take up to two (2) 24-hour extensions on your programming assignments and projects (not the quizzes or exams) at your discretion, either on different assignments or both on the same assignment. No explanation is required. To take an extension, e-mail me prior to when the assignment is due with a note to that effect. If you are working with a partner on an assignment, both partners need to take an extension. While the two extensions are automatic, you need to let me know ahead of time (via e-mail) if you plan to use an extension. That way I know to expect a late submission and can get your submission promptly into the grading queue. Ahead of time is defined as anytime before the deadline.

Other than the two extensions described above, I will not accept late assignments except under extenuating circumstances (contact me!) or when otherwise specified (extenuating circumstances do not count against your allotment of extensions).

## Expectations of Students

You are expected to keep up with the material by reading all of the class notes (and watching any class videos). You are expected to bring an electronic device (e.g., a laptop or smartphone) to class every day to participate in online in-class questions. If you forget your device or it is temporarily out-of-service, please obtain a loaner laptop (see above). Be curious! Come prepared to our class meetings with any questions you have about the material and assignments.

Outside of class, proactively attend office hours, utilize the peer help sessions, and use the Ed Q&A board to ask and answer questions about the material. Rather than emailing questions to the instructor, please post the questions to the discussion board. This will allow other students to answer questions and to benefit from the answers you receive.

## Learning Community

I encourage an open exchange of ideas and questions in all interactions throughout the course. We have wide range of backgrounds in class, but everyone will be a beginner in one or more aspects of this field. My goal is to help each of you develop your own understanding of the material, and I recognize that each of you has your own journey. So I encourage you to ask lots of questions and to be supportive of your classmates on their unique journeys.

As part of the Middlebury community and the Computer Science department, I support an inclusive learning environment where diversity and individual differences are understood, respected, appreciated, and recognized as a source of strength. Creating and maintaining an inclusive and positive learning environment where all have a sense of belonging is an important priority and a shared responsibility.

Our shared expectation is that everyone in this class will respect differences and demonstrate diligence in understanding how other people’s perspectives, behaviors, and world views may be different from their own. Should you experience or witness any behavior that opposes this idea, I hope you will let me/us know so that it can be addressed. If you feel comfortable doing so, you can report any incidents or concerns by:

• contacting me directly,
• using the anonymous CS departmental climate feedback form (which goes to the CS department),
• filling out a Bias Incident Report (which goes to the Middlebury Community Bias Response Team).

You belong in this class and in Computer Science. I am glad you are here!

## Honor Code

You are encouraged to discuss material from the lectures and other course resources with your classmates. However, the work that you turn in must be completed independently, unless an assignment is explicitly designated as one in which collaboration is permitted.

In particular, your work must not be based on information obtained from sources other than those approved for the course (i.e., the course web page, web pages linked from the course web pages, materials provided in class and the supplemental textbooks). Examples of impermissible “other” sources include searching online for relevant code, using a large language model such as ChatGPT, GitHub Copilot, etc., and assignments/solutions from previous semesters or other similar courses (even if available freely online). Consulting such resources constitutes a violation of the Honor Code. The goal for this course is to build a foundational understanding of CS and Python programming. Finding code elsewhere that works, but we don’t know why, inhibits instead of promotes that understanding.

You should never copy another students code or solutions, exchange computer files, or share your code or solutions with anyone else in the class. You may, however, use any code that I provide to you or that comes from the textbooks, as long as you acknowledge the source. You are allowed to obtain help with your code from the course assistants and departmental ASI(s). Alongside manual inspection, I may use automated tools for detecting software similarity and/or ask you to explain your approach to me.

For the two projects: You should think of these as take-home, open-book tests. As such, you may read use the course materials, class notes, and any other source approved by the instructor, but you may not consult other sources (e.g., looking for code online). You may not consult anyone other than the instructor, ASIs or peer course assistants. I encourage you to ask questions, but reserve the right not to answer, just as you would expect during an exam.

If you are working with others on an assignment, I suggest the following procedure: Spend as much time as you need working with others to understand the assignment. When you’re ready to start on your own take a break and then go back and write your program(s) without the notes or other materials you used while working with the others, including any programs you wrote with others outside of class assignments. This will help ensure that you follow both the letter and the spirit of the Honor Code.

If you are ever unsure about what constitutes acceptable collaboration, permitted resources, etc. please ask! If you ever find yourself feeling stuck and it seems like the only way forward may conflict with the Honor Code, or even just seems little a borderline, please contact me right away. We can always come up with an appropriate path forward.