CSCI146 Fall 2025
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 |
Instructor | Philip Caplan 75SHS 219 pcaplan@middlebury.edu |
Office Hours | TBD Or by appointment |
Getting Help | CS peer drop-in help |
Description
CSCI 146 is an introduction to the field of Computer Science geared towards students with some prior computer science or programming experience, or a background in quantitative problem-solving (e.g., advanced STEM coursework). At the completion of the course, you will be able to:
- Solve computational problems with procedural statements (assignment, operators, conditionals, loops), functions and objects.
- Design, implement and debug medium-sized programs in
Python
. - Use standard
Python
libraries for scientific computing and data analysis. - Analyze and apply basic algorithmic techniques, such as recursion.
Grading
We will be using a form of “specification” grading. 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) means your program works as expected, or you have achieved the learning goals for that course element. “Exemplary” (E) means creativity elements or challenges are complete. You will receive feedback on your submissions and, where possible, have one or more opportunities to resubmit an assignment or retake a similar quiz/exam problem based on that feedback. Your final grade will be determined according to the bundles of specifications (listed below) you have achieved.
This scheme will allow you to demonstrate knowledge in the following ways:
- 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 be assessed with programming projects.
Coursework
Lectures: On Mondays and Wednesdays, new material will be presented which will also involve short in-class exercises. You are expected to attend class and actively engage with your peers when working on the in-class problems.
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 PrairieLearn
is only available on campus or via the VPN.
Labs: On most Friday’s we will complete a set of programming problems via the PrairieLearn
system in small groups. These problems are intended to be complete-able within the class period, but may require time outside of class to finish. You can complete these problems anytime before the last day of the semester.
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:
- Is the code written clearly, efficiently, elegantly and logically?
- 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 (initial) due date, you can still obtain full credit. To do so, you must submit a meaningful attempt prior to the initial due date. You can then resubmit your assignment (multiple times) prior to the final deadline (typically two weeks later).
If you would like your resubmission to be regraded before the final deadline, please click the “Regrade request” button on your Gradescope submission. All resubmissions will be evaluated after the final due date, but “early” resubmissions will not be evaluated until you request a regrade via Gradescope (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 final due date recognizes that learning is an iterative process that doesn’t always happen exactly on schedule. However, making an attempt by the initial 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. A record of correctly answered quiz topic questions will be maintained in this Canvas assignment.
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 so we can make alternate arrangements.
Final grades: Final grades will be determined by the following bundles (subject to change):
Final Grade | Bundle |
---|---|
A | 6 labs completed, and 24 quiz topics, and 18 exam topics M+ (≥ 3) with 15 E (4), and 8 programming assignments M+ (≥ 3) with 4 E (4) and 2 projects M+ (≥ 3) with 1 project E (4) |
B | 6 labs completed, and 21 quiz topics, and 16 exam topics M+ (≥ 3) with 10 E (4), and 7 programming assignments M+ (≥ 3) and 1 project M+ (≥ 3) |
C | 5 labs completed, and 18 of quiz topics, and 14 exam topics M+ (≥ 3), and 6 programming assignments M+ (≥ 3) |
D | 5 labs completed, and 15 quiz topics, and 10 exam topics M+ (≥ 3), and 5 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. Furthermore, “+” and “-” modifiers may be applied based on attendance.
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 (please contact me!) or when otherwise specified (extenuating circumstances do not count against your allotment of extensions).
Expectations of Students
You are expected to attend class. If you cannot attend class, please complete this form for excused absences. Excused absences are for medical appointments, illnesses, games or conferences. If you miss more than 1 consecutive week of classes, then I will reach out to check in (copying your dean and advisor).
You are expected to keep up with the material by reading all of the class notes (and watching class videos, if any). You are expected to bring an electronic device (e.g., a laptop or smartphone) to class every day to participate in the exercises. If you forget your device or it is temporarily out-of-service, please obtain a loaner laptop (see below).
Outside of class, proactively attend office hours and utilize the peer help sessions. Use the Discusions page on Canvas to post questions and/or answers.
Supplemental Textbooks
The course does not have a required textbook. However, you may find the following supplemental resources helpful.
- Think
Python
, 3rd edition. - Practical Programming (3rd edition): An Introduction to Computer Science Using
Python 3.6
.
Note that these books have both positive and negative aspects. 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. Download the latest version of Python
here, e.g. version 3.13.x
(any version higher than 3.10
should be okay). To develop our Python
programs, we will use VS Code
, which you can download here. Please see these instructions about getting started with the course.
If you don’t have access to a computing device with VS Code
(even if for just a single class period), please contact me to ask about the availability of the department’s loaner laptops. The CS Department maintains a set of loaner laptops, preinstalled with relevant course tools, for both short-term and longer-term use. Given the small number of machines available (approximately 10), if you anticipate needing a laptop for a longer period (e.g., the entire semester or more), I encourage you to also inquire with the library about loaner equipment and/or Student Financial Services about need-based resources for purchasing a laptop. Our department commits to meeting the needs of every student, so please don’t hesitate to contact me if you need a computer (in any way) for this course.
Other tools we will use are:
- Gradescope to submit Programming Assignments.
- PrairieLearn to complete Lab work and Practice Problems. Please note that PrairieLearn requires VPN connection to Middlebury’s network, so if you are not using the campus WiFi, you will need to set up a VPN connection.
- Canvas to post questions and answers about lectures/assignments and to synchronize grades with Gradescope.
Other Resources
Python
Cheat Sheet: PrintablePython 3
cheat sheet- Official
Python
glossary
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
The work that you turn in must be completed independently, unless an assignment is explicitly designated as one in which collaboration is permitted (e.g. for labs).
Furthermore, 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). 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 student’s 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. 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 use our 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 a programming 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.
ADA
Students who have Letters of Accommodation in this class are encouraged to contact me as early in the semester as possible to ensure that such accommodations are implemented in a timely fashion. For those without Letters of Accommodation, assistance is available to eligible students through the Disability Resource Center (DRC). Please contact ADA Coordinators Jodi Litchfield, Peter Ploegman, and Deirdre Kelly of the DRC at ada@middlebury.edu for more information. All discussions will remain confidential.