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!
|9/13||Introduction, algorithms (PI slides)||Practice problems 1 (solution)|
|9/15||Variables, expressions (PI slides)||PP: 1 except 1.5, 2 or
TP: 1, 2, 5.1
Quiz (covering variables, expressions but not functions) (cheatsheet)
Functions (PI slides)
|PP: 3 or
TP: 3 except 3.2
|Lab 1: Functions|
|9/20||Documentation, constants, modules, randomness (PI slides)||PP: 3.6, 6.1 or
TP: 2.7, 3.2
|Practice problems 2 (solution)|
|9/22||Loops I (PI slides)||PP: 9.3 or
TP: 4.1-4.2, 8.3
Quiz (covering functions, comments/docstrings, random module and for loops) (cheatsheet)
Loops II, math module
|Lab 2: Turtle Graphics|
|9/27||Strings plus loops (PI slides)||PP: 4.1-4.3, 9.2 or
TP: 2.6, 8
|Practice problems 3 (solution)|
|9/29||Strings plus objects (PI slides)||PP: 7.3 or
Quiz (covering strings, string methods, operators and slicing) (cheatsheet)
|Lab 3: Cryptography|
|10/4||Conditionals (PI slides)||PP: 5 or
|Practice problems 4 (solution)|
|10/6||While loops (PI slides)||PP: 5, 9.6-9.8 or
Quiz (covering booleans, relational operators, conditional statements, while loops) (cheatsheet)
Loop and conditional problems
|Lab 4: Math whiz|
|10/11||Lists (PI slides)||PP: 8.1-8.5, 8.7, 9.1 or
|Practice problems 5 (solution)|
|10/13||Lists, files||PP: 8.1-8.5, 8.7-8.8, 10.1-10.3 or
TP: 10, 14.2
Quiz (covering lists, files) (cheatsheet)
List and files problems
|Lab 5: Data for everyone|
|10/18||Fall Break||Practice problems 6 (solution)|
|10/20||Objects, Sets (PI slides)||PP: 14.1-14.3, 11.1, 11.5 or
TP: 15.1-15.2, 17.1-17.2, 19.5
|10/22||Tuples, Dictionaries (PI slides)||PP: 11.1-11.3, 11.5 or
TP: 11, 12
|Lab 6: Word game|
|10/25||References (PI slides)||PP: 8.5 or
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)
|10/28||Midterm @ 7:30 PM in MBH 216|
|10/29||No class||Test Project 1 Out|
|11/1||Modules (PI questions 1, PI questions 2)||PP: 6.1-6.2 or
|Practice problems 7 (solution)|
|11/3||Command line, debugging||PP: 10.1-10.5, 15 or
TP: 14.1-14.4, Appendix A
|11/5||Quiz (covering import vs. run, optional arguments, dictionaries) (cheatsheet)||
Test Project 1 due
Lab 7: Weather Report
|11/8||Data analysis w/ numpy, datascience (PI questions)||NumPy "quickstart", datascience Tables||Practice problems 8 (solution)|
|11/10||Plotting w/ matplotLib (PI questions)||Matplotlib tutorial||Prelab 8|
|11/12||Quiz (covering vector execution, focused on numpy) (cheatsheet)||Lab 8: Zipf's law|
|11/15||Recursion I||TP: 5.8, 6.5-6.7||Practice problems 9 (solution)|
|11/17||Recursion II||Prelab 9|
|11/19||Quiz (cheatsheet)||Lab 9: Recursion|
|11/22||Numeric representation (PI questions)|
|11/24||Thanksgiving break (no class)|
|11/26||Thanksgiving break (no class)|
|11/29||Object-oriented programming (OOP) I (PI questions)||
Practice problems 10 (solution)
Test Project 2 Out
|12/1||OOP II||Prelab 10|
|12/3||Quiz (cheatsheet)||Lab 10: OOP|
|12/6||Big-O, Halting, (PI questions)||Practice problems 11 (solution)|
|12/8||Searching, Sorting (PI questions)||PP: 12, 13|
|12/10||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||Test Project 2 Due|
|12/14||7:00-10:00PM Final Exam Section A at 75SHS 224 (you are welcome to take the exam in either slot)|
|12/15||9:00AM-12:00PM Final Exam Section B at 75SHS 224 (you are welcome to take the exam in either slot)|
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). 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 the departmental ASIs directly 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 or the department ASIs if you need a computer (in any way) for this course.
Your semester grade will be calculated thusly:
|20%||Test Projects (2×10%)|
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 Thursday.
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:
Design/style is manually graded on a five point scale:
|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.|
Note that “3” for design/style is good! More important than the score is the feedback (in the form of comments on your submission) from the graders. 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.
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).
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 from the departmental ASIs or another source (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, meet with the departmental ASIs (Maja Cannavo and Rebecca Warholic), utilize the peer help sessions, and use the CampusWire “class feed” to ask and answer questions about the material. Rather than emailing questions to the instructor, please post the questions on CampusWire. 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 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. 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 firstname.lastname@example.org 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, tutoring) work better for you.