CSCI150A Course Page and Syllabus: Fall 2023 Last updated on 2023-12-04 10:05:20 -0500

When and Where
150A: MWF 8:40 AM – 9:30 AM in 75SHS 224
Michael Linderman
75SHS 216
Office Hours
M: 2-4PM
T: 10:30AM-Noon
W: 2:30-4:30PM
Th: 2-4PM
Or by appointment
Getting Help
ED Q&A discussion Board
CS peer drop-in help sessions
Frequent Links
In-class question tool or go/cs150-inclass
ED Q&A discussion board or go/cs150-ed
Python documentation
PrairieLearn online practice problems (only accessible on-campus or via the VPN)

Mask Policy (subject to change)

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:

  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
  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)

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, blank quiz)
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, blank quiz)
While loop problems
PA4: Math game
5 10/9 Files PP: 10.1-10.3 or
TP: 9.1
Practice problems 5
10/11 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/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, blank quiz)
References (in-class questions)
PP: 8.6 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 reference and recursion) (cheatsheet, blank quiz)
Recursion problems
PA6: Recursion
8 10/30 Object-oriented programming (OOP) I (in-class questions) PP: 7, 14 or
TP: 15, 17, 18
Practice problems 8
11/1 OOP II
11/3 Quiz (covering OOP) (cheatsheet, blank quiz)
OOP problems (slides and in-class questions)
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, blank quiz) PA8: Zipf's law
10 11/13 Command line, modules (in-class questions) PP: 6.1-6.2 or
TP: 14.9
Practice problems 10
11/15 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/16 Midterm 2 @ 7:30 PM in MBH 220
11/17 No class after midterm 2
Functions with optional arguments, video 1, video 2 (in-class questions)
PA9: Weather
BR Thanksgiving Break
11 11/27 Big-O, Halting, (in-class questions) Practice problems 11
Project 2
11/29 Searching, Sorting (in-class questions) PP: 12, 13
12/1 Quiz (covering Big-0, searching and sorting) (cheatsheet)
Numeric representation (in-class questions)
12 12/4 Applications: Image processing with nested loops (slides)
12/6 Applications: DNA sequence alignment with recursion
Tentative self-scheduled exam-retake (12/6-12/8)
12/8 Scientific computing (cont.)
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)
Tentative self-scheduled quiz retake (12/11-12/12)
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.

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.

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.

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.

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.

Other Resources

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:

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:

  1. Is the code written clearly, efficiently, elegantly and logically?
  2. 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 send the instructors an e-mail to that effect. All resubmissions will be evaluated after the final due date, but “early” 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 (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.

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 85%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 TBD90% 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 TBD90% of quiz (mechanical) topics, and
70% of exam (applied) topics M+ (≥ 3), and
70% of programming assignments M+ (≥ 3)
D TBD90% 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 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.

Learning Community

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!

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 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 for more information. All discussions will remain confidential.

A Final Note

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.