Masks are required in Prof. Linderman’s office and are encouraged, but not required, in class and other spaces.
We in the Computer Science department want to do everything we can to create a safe learning and working environment for all. I will be wearing a mask in class and I encourage you to do the same.
CSCI150 is an introduction to the field of Computer Science geared towards (but not exclusive to) students interested in the sciences. No previous programming experience is assumed. At the completion of the course, you will:
If you are not sure if this is the right course for you, please discuss it with me. I am happy to do so!
PP: Practical Programming (3nd edition): An Introduction to Computer Science Using Python 3
TP: Think Python: How to Think Like a Computer Scientist
Week | Date | Topics | Supplemental Reading | Assignment (hover for due date) |
---|---|---|---|---|
1 | 9/11 | Introduction, algorithms (in-class questions) | Practice problems 1 | |
9/13 | Variables, expressions (in-class questions) | PP: 1 except 1.51, 2 or TP: 1, 2, 5.1 |
||
9/15 |
Quiz (covering algorithms, expressions, types) (cheatsheet, blank quiz) Functions (in-class questions) |
PP: 3 or TP: 3 except 3.2 |
PA1: Functions | |
2 | 9/18 | Functions (cont.), style, modules (in-class questions) | PP: 3.6, 3.8, 6.1 or TP: 2.7, 3.2 |
Practice problems 2 |
9/20 | Loops I (in-class questions) | PP: 9.3 or TP: 4.1-4.2, 8.3 |
||
9/22 |
Quiz (covering functions, comments/docstrings, and for loops) (cheatsheet, blank quiz) Loops II |
PA2: Turtle Graphics | ||
3 | 9/25 | 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/27 | Sequences II (methods) (in-class questions) | PP: 7.3-7.4, 8.7 or TP: 8, 10.6,10.8-10.9 |
||
9/29 |
Quiz (covering sequences, operators and slicing) (cheatsheet) Sequence problems (in-class questions) |
PA3: Cryptography | ||
4 | 10/2 | Conditionals (in-class questions) | PP: 5 or TP: 5.2-5.7 |
Practice problems 4 |
10/4 | While loops (in-class questions) | PP: 5, 9.6-9.8 or TP: 7.3-7.4 |
||
10/6 |
Quiz & Quiz catch-up (covering booleans, relational operators, conditional statements, while loops) (cheatsheet) While loop problems |
PA4: Math game | ||
5 | 10/9 | Files, References (in-class questions) | PP: 8.5 or TP: 10.10-10.12 |
Practice problems 5 |
10/11 |
Midterm I review, Midterm 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) Midterm Exam (solution) |
|||
10/12 | Midterm I @ 7:30 PM in MBH 220 | |||
10/13 | No class (Fall Break) | PA5: Data for everyone | ||
6 | 10/16 | 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/18 | Tuples, Dictionaries (in-class questions) | PP: 11.1-11.3, 11.5 or TP: 11, 12 |
||
10/20 |
Quiz (covering sets, dictionaries) (cheatsheet) Set and dictionary problems |
PP: 8.5 or TP: 10.10-10.12 |
Project 1 | |
7 | 10/23 | Recursion I (in-class questions) | TP: 5.8, 6.5-6.7 | Practice problems 7 |
10/25 | Recursion II | |||
10/27 |
Quiz (covering recursion) (cheatsheet) |
PA6: Recursion | ||
8 | 10/30 | Object-oriented programming (OOP) I (in-class questions) | PP: 7, 14 or TP: 15 |
Practice problems 8 |
11/1 | OOP II | |||
11/3 | Quiz (covering OOP) (cheatsheet) | PA7: OOP | ||
9 | 11/6 | Data analysis w/ numpy, datascience (in-class questions) | NumPy "quickstart", datascience Tables | Practice problems 9 |
11/8 | Plotting w/ matplotLib (in-class questions) | Matplotlib tutorial | ||
11/10 | Quiz & Quiz catch-up (covering vector execution, numpy and datascience) (cheatsheet) | PA8: Zipf's law | ||
10 | 11/13 | Command line, modules (in-class questions) | TP: 5.8, 6.5-6.7 | Practice problems 9 |
11/15 | Midterm II review, Midterm cheat-sheet. You can bring the cheat sheet and a separate letter-sized page of notes (front & back) to the exam. | |||
11/16 | Midterm II @ 7:30 PM in MBH 220 | |||
11/17 | TBD | PA9: Weather | ||
Thanksgiving Break | ||||
11 | 11/27 | Data science (in-class questions) |
Practice problems 11 Project 2 |
|
11/29 | Scientific computing (in-class questions) | |||
12/1 | Quiz (covering data science, scientific computing) (cheatsheet) | PA10: Scientific computing | ||
12 | 12/4 | Big-O, Halting, (in-class questions) | Practice problems 12 | |
12/6 | Searching, Sorting (in-class questions) | PP: 12, 13 | ||
12/8 | Numeric representation (in-class questions) | |||
EX | 12/11 |
Final review, 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) |
||
12/13 | Final Exam 7:00-10:00PM |
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.
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.
Think Python: How to Think Like a Computer Scientist (free!)
CS for All (no longer free)
Practical Programming (3rd edition): An Introduction to Computer Science Using Python 3.6
Note that these books have both positive and negative aspects (in a variety of ways). In particular there are aspects of Think Python 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.
We will be programming in Python 3 and you will need regular access to a computer that can run a Python development environment.
If you don’t have access to a computing device that can run Thonny (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.
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:
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 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:
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).
When you are ready for a resubmission to be evaluated, please send the instructors an e-mail to that effect. Resubmissions will not be evaluated until you notify me (since I 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 ability to resubmit 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 class 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. 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.
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):
Final Grade | Bundle |
---|---|
A | 90% of quiz (mechanical) topics, and 90% of exam (applied) topics, and 90% of programming assignments M+ (≥ 3) with 50% E (4) and 2 project M+ (≥ 3) with 1 project E (4) |
B | 90% of quiz (mechanical) topics, and 80% of exam (applied) topics, and 80% of programming assignments M+ (≥ 3) and 1 project M+ (≥ 3) |
C | 90% of quiz (mechanical) topics, and 70% of exam (applied) topics, and 70% of programming assignments M+ (≥ 3) |
D | 90% of quiz (mechanical) topics, and 50% of exam (applied) topics, 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.
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).
You are expected to keep up with the material by reading all of the lecture notes (and watching any lecture 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.
I encourage an open exchange of ideas and questions in all interactions throughout the course. This course assumes no prior background in Computer Science. All students are welcome and all are expected to be beginners in some or all 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:
You belong in this class and in Computer Science. I am glad you are here!
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 lecture 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.
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 seem little a borderline, please contact me right away. We can always come up with an appropriate path forward.
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 the ADA Coordinators at the DRC via ada@middlebury.edu for more information. All discussions will remain confidential.
This course is a “living being” that is continually evolving. I want you to have the best possible learning experience, and I welcome your feedback (whether in person, via e-mail or via an anonymous note slipped under my office door) at any time on how to make any and all aspects of the course (e.g. class time, materials, assignments, office hours, peer drop-in sessions) work better for you.