CSCI150A&B Course Page and Syllabus: Fall 2022 Last updated on 2022-12-14 15:42:25 -0500

When and Where
150A: MWF 8:00 AM – 8:50 PM in 75SHS 202
150B: MWF 9:05 AM – 9:55 AM in 75SHS 202
Michael Linderman
75SHS 216
Office Hours
M: 2:00-4:00PM
T: 1:00-2:30PM
W: 1:00-2:30PM
Th: 2:00-4:00PM
Or by appointment
Getting Help
ED Q&A discussion Board
CS peer drop-in help sessions
One-on-one tutoring via the CTLR (till CS150 appears as an option, please select CSCI201 and then Mia Tarantola)
Frequent Links
OhYay in-class (or remote) platform or go/cs150-ohyay
ED Q&A discussion board or go/cs150-ed
Python documentation
Mask Policy (subject to change)

Masks are required during class in CSCI 150 and in Prof. Linderman’s office hours.

We in the Computer Science department want to do everything we can to create a safe learning and working environment for all. While we can’t eliminate the risks associated with COVID-19, evidence suggests that widespread masking can significantly reduce the transmission and severity of disease. In order to protect the health of our community, the CS department recommends that students and faculty wear masks in CS learning spaces, including classrooms, office hours, and public spaces.



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

Date Topics Supplemental Reading Assignment (hover for due date)
9/12 Introduction, algorithms (in-class questions) Practice problems 1 (solution)
9/14 Variables, expressions (in-class questions) PP: 1 except 1.51, 2 or
TP: 1, 2, 5.1
Prelab 1
9/16 Functions (in-class questions) PP: 3 or
TP: 3 except 3.2
Lab 1: Functions
9/19 Documentation, constants, modules, randomness (in-class questions) PP: 3.6, 3.8, 6.1 or
TP: 2.7, 3.2
Practice problems 2 (solution)
9/21 Loops I (in-class questions) PP: 9.3 or
TP: 4.1-4.2, 8.3
Prelab 2
9/23 Quiz (covering expressions, functions, comments/docstrings, and for loops) (cheatsheet, blank quiz)
Loops II, math module
Lab 2: Turtle Graphics
9/26 Strings plus loops (in-class questions) PP: 4.1-4.3, 9.2 or
TP: 2.6, 8
Practice problems 3 (solution)
9/28 Strings plus objects (in-class questions) PP: 7.3 or
TP: 8
Prelab 3
9/30 Quiz (covering strings, string methods, operators and slicing) (cheatsheet, blank quiz)
String problems
Lab 3: Cryptography
10/3 Conditionals (in-class questions) PP: 5 or
TP: 5.2-5.7
Practice problems 4 (solution)
10/5 While loops (in-class questions) PP: 5, 9.6-9.8 or
TP: 7.3-7.4
Prelab 4
10/7 Quiz (covering booleans, relational operators, conditional statements, while loops) (cheatsheet, blank quiz)
Loop and conditional problems
Lab 4: Math whiz
10/10 Lists (in-class questions) PP: 8.1-8.5, 8.7, 9.1 or
TP: 10
Practice problems 5 (solution)
10/12 Lists, files PP: 8.1-8.5, 8.7-8.8, 10.1-10.3 or
TP: 10, 14.2
Prelab 5
10/14 Fall Break Lab 5: Data for everyone
10/17 References (in-class questions) PP: 8.5 or
TP: 10.10-10.12
10/19 Midterm 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/20 Midterm @ 7:30 PM in MBH216
10/21 No class Test Project 1 Out
10/24 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 (solution)
10/26 Tuples, Dictionaries (in-class questions) PP: 11.1-11.3, 11.5 or
TP: 11, 12
Prelab 6
10/28 Quiz (covering sets, dictionaries) (cheatsheet, blank quiz)
Set and dictionary problems
PP: 8.5 or
TP: 10.10-10.12
Test Project 1 due
Lab 6: Word game
10/31 Modules, command line (in-class questions) PP: 6.1-6.2 or
TP: 14.9
Practice problems 7 (solution)
11/2 Optional parameters, debugging (in-class questions) PP: 10.1-10.5, 15 or
TP: 14.1-14.4, Appendix A
Prelab 7
11/4 Quiz (covering sets, dictionaries, import vs. run, optional arguments) (cheatsheet, blank quiz)
Dictionary and module problems
Lab 7: Weather Report
11/7 Data analysis w/ numpy, datascience (in-class questions) NumPy "quickstart", datascience Tables Practice problems 8 (solution)
11/9 Plotting w/ matplotLib (in-class questions) Matplotlib tutorial Prelab 8
11/11 Quiz (covering vector execution, numpy and datascience) (cheatsheet, blank quiz)
Prelab 8 notes
Lab 8: Zipf's law
11/14 Recursion I (in-class questions) TP: 5.8, 6.5-6.7 Practice problems 9 (solution)
11/16 Recursion II Prelab 9
11/18 Quiz (covering recursion) (cheatsheet, blank quiz)
Prelab 9 Notes
Lab 9: Recursion
11/21 Thanksgiving break (no class)
11/23 Thanksgiving break (no class)
11/25 Thanksgiving break (no class)
11/28 Object-oriented programming (OOP) I (in-class questions) PP: 7, 14 or
TP: 15
Practice problems 10 (solution)
Test Project 2 Out
11/30 OOP II Prelab 10
12/2 Quiz (covering OOP) (cheatsheet, blank quiz)
Prelab 10 Notes
Lab 10: OOP
12/5 Big-O, Halting, (in-class questions) Practice problems 11 (solution)
12/7 Searching, Sorting (in-class questions) PP: 12, 13
12/9 Numeric representation (in-class questions)
12/12 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)
Test Project 2 Due
12/14 Final Exam 7:00-10:00PM in 75SHS 202 (You can take the final in either slot)
12/15 Final Exam 9:00AM-12:00PM in 75SHS 202 (You can take the final in either slot)

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


Your semester grade will be calculated thusly:

35% Assignments/Labs
20% Test Projects (2×10%)
15% Midterm
20% Final
10% Weekly Quizzes

Labs: Almost every week we will have a lab assignment. To prepare for each lab assignment you will be required to complete a short “prelab” assignment, which will typically be due at the end of the week. The lab assignments will typically be due on the next Friday.

About 5-10% of the points for each lab assignment are designated “creativity” points, providing flexible challenges or open-ended opportunities for you to exercise your creativity. Note that these points are not extra credit; that is, in order to get a 100% score, you’ll have to earn these creativity points as well. Since the creativity points only count for a small fraction of the total points it is still possible to earn an ‘A’ grade for your lab assignments without any creativity points.

Lab assignments are graded on correctness/completeness and design/style. The latter reflects that the code we write must be readable by humans as well as computers. Design/style 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?

Design/style is manually graded on a five point scale:

Value Description
5 Essentially no room for improvement. Code exhibits all the traits listed above.
4 Minor room for improvement. Code exhibits many but not all of the traits above.
3 Some room for improvement. Code exhibits some of the traits above.
2 Substantial room for improvement. Code exhibits few of the traits above.
1 Poor
0 No effort

Note that “3” for design/style is good! More important than the score is the feedback (in the form of comments on your submission). Please review all of the feedback you received. Think of those comments as a conversation between you and and the instructors.

Test Projects: There will be two test projects during the semester. These are like open-book take-home tests, but for programming.

Exams: There will be one midterm and one final. The precise schedule will be determined during the semester.

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. To help you prepare for the quizzes (and the exams) there will be a set of similar written problems (and solutions) available for you to complete outside of class. The lowest quiz score for the semester will be automatically dropped.

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.

Late Policy

During the semester you may take up to two (2) 24-hour extensions on your lab assignments only (not the test projects, 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 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 current 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 textbooks). An example of an impermissible “other source” is searching online for relevant code.

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 peer tutors and departmental ASIs. Alongside manual inspection, I may use automated tools for detecting software similarity.

For the two test 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 tutors. 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 lab 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 programs 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!


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 and Peter Ploegman of the DRC at 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.