Course Syllabus
Please Log In for full access to the web site.
Note that this link will take you to an external site (https://shimmer.mit.edu) to authenticate, and then you will be redirected back to this page.
Table of Contents
1) Course Learning Objectives
Welcome to 6.s090! This course is designed to teach students how to understand and apply foundational principles of Python programming, which include the ability to independently:
- Read and evaluate code written by yourself or others in order to understand what it does.
- Write code that is correct and that can solve real problems, including doing data analysis, simulation, and plotting using common packages.
- Test code correctness by writing and running test cases.
- Debug code that is not working using appropriate tools and strategies.
- Design simple programs that are well-formatted, use appropriate structures, and avoid repetition.
- Communicate about code using appropriate technical terms, justify, and reflect on design decisions.
2) Course Structure
This course is structured into 8 smaller units, which are labeled with numbers from 0-7 (programmers often start counting at 0). Each unit will feature some subset of the following components:
-
Reading - The course site has an online textbook, which explains new content for the unit and provides worked small examples. For extra preparation, do the reading before coming to class. Otherwise, the readings can serve as a useful reference as you complete the exercises.
-
Class - Class sessions will be held in-person, introduce unit content, and provide students practice and discussion opportunities. Class will cover the same material as the readings, but allows for questions and interaction.
-
Exercises - Homework that is meant to exercise your brain and help you learn the material through practice. All exercises are submitted online via the course website.
- Drills are shorter problems that reinforce basic unit content.
- Problems require applying the content to more authentic and complex scenarios.
- Alternative assignments are offered for some units. These assignments are designed for students who have significant prior programming experience and can be completed in lieu of the drills and problems for a particular unit.
-
Most exercises are automatically graded, and allow you to submit answers as many times as you want before the deadline. Solutions to the exercises are often available with the "View Answer" button, which will become available after you have submitted a correct solution. Some solutions will be released after the exercise deadline. It is highly encouraged to review the solutions to the exercises (especially the problems), as studying other ways to approach a problem can be a valuable learning opportunity.
- Note: Clicking the "View Answer" button prevents you from making further submissions.
- Note: Alternative assignments will be graded manually by the instructor. Students will receive individual feedback on their code style and solutions from the instructor.
-
Office Hours - Office hours are optional and offer students the opportunity to come work on the exercises and ask the instructor questions, or to chat about life, course content, and other topics.
-
Quiz - Hand-written paper test designed to give you feedback on your independent understanding of the material covered in the unit. Quizzes take place during the first 20 minutes of class for the following unit and will be graded promptly by the instructor and handed back to the student during the next office hours or class that the student attends.
-
Reflections – Each unit will have an optional survey that gives you the opportunity to reflect on your learning strategies and what you learned from a particular unit, as well as give the instructor feedback on what worked well, what was confusing, and generally how to improve the unit content.
3) Grading
The goal of this course is to provide you with an opportunity to master the learning objectives through structured content delivery, practice, assessment, and feedback on your individual performance. Grades act as one form of feedback, and offer an approximate quantitative measure of the extent to which you have mastered the learning objectives of the course, using MIT's definitions of letter grades.
Your grade for the course will based on totaling points across four separate components, which add up to 100 points:
- 21 points for Drills* = 7 units x 3 drills per unit x 1 point per drill
- 42 points for Problems* = 7 units x 3 problems per unit x 2 points per problem
- 35 points for Quizzes = 5 highest quiz grades x 7 points per quiz (6 quizzes will be offered for units 1-6, lowest quiz score will be dropped.)
- 2 points for Participation - determined at the end of the course by the instructor. There are many ways to gain participation credit, including participating in class, attending office hours, emailing the instructor and asking good questions, submitting quality unit reflections. Basically: did you interact with the instructor and other students in a way that contributed positively to your own and others’ learning throughout the course?
*Credit for drills and problems for a unit may be substituted by completing the alternate assignment.
Your final grade will be determined by summing the points across all the categories and then mapping those points to a letter grade. A rough estimate of how we expect this mapping to look is as follows:
- A \geq 90
- B \geq 80
- C \geq 70
- D \geq 60
- F < 60
This course is pass/fail. In order to pass, you must achieve at least a C or higher.
Additionally, in order to earn a C or higher you must:
earn at least half of the points in each of the drill, problem, and quiz categories
AND
earn at least half of the total points for each unit.
Explicitly, this means you must earn at least:
- \geq 10.5/21 Drill points
- \geq 21/42 Problem points
- \geq 17.5/35 Quiz points
AND
- \geq 8/16 points for units 1-6 (16 = 3 Drill points + 6 Problem points + 7 Quiz points)
- \geq 4.5/9 points for unit 7 (9 = 3 Drill points + 6 Problem points).
MIT does not allow instructors to curve grades. Your quiz scores and your final grades are not curved or based on other students’ performance or any sort of ranking. Rather, it is a reflection of a measure of individual mastery and my hope as an instructor is to help all students achieve excellent understanding of the material.
4) Lateness / Extensions
Because of the tight course timeline, there is limited flexibility around submitting late work (especially because some quizzes are close to exercise deadlines and the best way to prepare for the quiz is to do the exercises).Course due dates and policies around lateness are designed to balance several goals, including encouraging healthy life choices (for example, sleeping at reasonable times without worrying about losing points) and providing a structure to help you regularly practice programming and keep up with the pace of the course.
All that being said, the summer term is very busy and we would much rather give you an extension than have you pull an all-nighter working on the exercises for this course. To that end, if you are unable to complete the exercises for a unit on time, you may email Hope hoped@mit.edu to request an extension. Please provide a vague explanation (no need to share personal details unless you want to) and a reasonable timeline of when you expect to finish the assignment (preferably this would be before the unit quiz) and I will consider your request. Without an extension, exercises that are submitted within 24 hours after the original due date will receive 70% credit.
Students are encouraged to be mindful of their limits, manage their time well, and get their work done on time. However, unexpected events are a part of life and extensions are offered based on trust that you would only ask if there was a sincere need.
Unfortunately, quizzes generally cannot be made up at a later time. If a student misses one quiz, this will be dropped as the lowest quiz score. If a student needs to miss multiple quizzes, email Hope hoped@mit.edu and schedule a meeting to discuss the situation.
5) Collaboration and Academic Integrity
Students are responsible for ensuring that the work they submit reflects their understanding of the material. Students are encouraged to collaborate with each other, the instructor, and seek clarification from the internet (especially the course site, StackOverflow, and the official Python Documentation) when needed while completing the exercises (quizzes are strictly closed book).
5.1) Citing Sources
If students use sources other than the course site to assist them, they are expected to cite them in the comments of their code. It is an important academic principle to cite your sources, so that the originator of an idea can get credit for their idea, so that humans can trace the origin of ideas, and so that you can help yourself be aware of your reliance on outside help. While formal citations within code is currently not common practice, citing sources in your code can help you or other programmers understand your program design choices.
For this course, we ask that you cite both your source and briefly describe how you used the source either at the top of your code file or above the relevant function. You can use the following template as an example:
# CITE: @hoped
# helped me debug a mutation error in check_package
# CITE: https://stackoverflow.com/questions/38104340/indexerror-index-out-of-bounds
# helped me debug an IndexError in get_row
# CITE: Claude Opus 4.7
# asked for a hint on how to start filter_data, it helped me think of some pseudo code
5.2) AI Policy
Students are allowed to use Generative AI chatbots to help them with the assignments. Note that parley.mit.edu offers MIT students free and private API access to many of the latest Claude, Gemini, and ChatGPT models.
If you use a chatbot or other outside source for coding assistance, please both cite the source and do not copy/paste code directly from the source into your code file. Instead, you can use the source to help you learn and understand and then put it away when you write your solution. Similar to how a friend can help you with an assignment, but you would not expect it to be ok to copy the homework directly from your friend, for the purposes of this course and maximizing your learning you should not copy directly from online chatbots or web sources.
However, students are NOT allowed to use Generative AI tools with LLM autocompletion or agentic coding features to write code for you. While traditional autocompletion tools like IntelliSense are allowed, Github CoPilot and similar tools are not allowed. If you are unsure about whether a particular AI tool is allowed, please ask the instructor.
These policies have been put in place in an effort to support your independent mastery of fundamental programming skills. While AI and other sources have the potential to help you learn, they also have the potential to undermine your learning, and that is something we want to avoid. While AI coding tools are being widely adopted by software engineers, there is some evidence that AI can create an illusion of productivity, but slow software engineers down, and that using AI to perform new tasks can significantly undermine learning. Writing code by hand is one of the best ways to learn and memorize programming syntax, which helps you understand how and why programs work. Similar to how most students learn math by multiplying, adding, subtracting and dividing by hand before using a calculator, we believe that programmers must learn how to code primarily without AI assistance before they can effectively make use of such tools. We also believe that programmers are accountable for the code that they write directly or indirectly. Code security, correctness, and avoiding harm is primarily a human responsibility, and requires a knowledgeable human in the loop. As AI tools will likely continue to make mistakes due to human or program error for the foreseeable future, human programmers need to be able to detect and fix the mistakes as well as have the technical knowledge needed to design and communicate about programs with other humans and machines.
5.3) Cheating
Cheating on the quizzes or exercises is academically dishonest, limits your learning potential in the course, and is unfair to other students who honestly complete the assignments to earn their grades. An academic integrity violation will typically lead to a grade of zero on the assignment in question, can also result in the instructor filing a "letter to file" with the Office of Student Conduct and Community Standards (OSCCS). At the discretion of the instructor, more severe actions may also be taken (for example, failing the course, filing a complaint with the Committee on Discipline, or other actions). More information about these various actions can be found in the OSCCS's resources on academic misconduct.
6) Asking for Help
Students are responsible for their own learning. Just as it is difficult to get stronger by watching other people lift weights, it is difficult to become a better programmer by solely watching other people or LLMs write algorithms, code, or tests for you. That being said, part of being an effective learner is knowing when to ask for help. Just as an athlete practicing a technique seeks assistance and advice from a coach or other teammates to get better and avoid injury, a student should seek help when they get stuck in order to learn and avoid frustration.
When you are stuck, we would encourage you to first to make use of internal help strategies such as:
- Asking yourself, “What exactly is the bug / question / topic that I do not understand or know how to answer?” It is important to not skip the crucial first step of knowing what you don’t know!
- Asking yourself, “Is this related to something I have seen before? How can I relate this topic to what I’ve learned previously?” A popular learning theory posits that learning happens when you start from what you know (comprehensible input) and take it one step beyond to new territory.
- Asking yourself, “Is there a way to simplify this problem into a smaller problem? Is there a simpler test case I can use to debug? Is there a smaller part of the algorithm I can solve first?” Simpler problems tend to be easier to solve!
After trying to use your internal skills and problem-solving strategies, it is a good idea to consider all your options for external help. Ask yourself, what is the best resource to help me solve this problem?
Relevant external resources you are allowed to use include:
- Course website
- Reference materials: official Python documentation, Python cheatsheet
- Additional beginning / intermediate programming exercises: codingbat.com, Leetcode
- Search engine (useful for questions like "how to do X in Python", specific error messages).
- LLM chatbots (particulary parley.mit.edu)
- Classmates. (Note that while we encourage a collaborative learning environment, other students in the course are not obligated to help you. Please be respectful and appreciative of other students’ time and efforts to help.)
6.1) Course Staff
You are also strongly encouraged to take advantage of the help that is offered by the instructor:
- A great way to get help is to come to office hours. Hope will offer (optional) office hours week (see course calendar).
- You can also schedule additional one-on-one office hours by emailing Hope
hoped@mit.edu. - You can also email Hope with any questions, including:
- things you found confusing in the readings / in class
- how to approach an exercise
- how to fix a particular bug in your code
- potential website bugs
- question about grades
- questions about the syllabus or course policy
- extension request
- anything else that might come up
When you ask for help from a person, please be prepared! Signs of preparation include writing down specific questions, being ready to demonstrate bugs, and explaining what internal help strategies have been used already. Sending code files and relevant screenshots in addition to describing the issues is extremely helpful.
After you have solved an issue, it is a good idea to reflect on what the original problem was, what the solution was, and how you can apply that to future problems. Taking a moment to reflect on what you have learned helps solidify these moments of struggle into long-term cognitive learning.
| Name | Picture | |
|---|---|---|
| Hope Dargan | hoped@mit.edu | ![]() |
| Duane Boning | boning@mit.edu |
6.2) Equal Access and Accommodations
We are committed to the principle of equal access and is willing to make arrangements to help accommodate students with disabilities or other challenges. In general, knowing about the kind of help you need as early as possible will help me be better prepared to provide that help effectively. So please help me out by letting me know about your situation (and, if appropriate, meeting with a representative from Disability and Access Services) as soon as possible.
6.3) Mental Health and Support
MIT is a challenging environment and this course covers a lot of content at a fast pace. As such, it is normal to expect some level of stress (and a lot of hard work) during the summer term. A certain level of stress is healthy and is part of the learning process (if it were easy, you probably wouldn't be learning much!). However, too much stress can be a bad thing, and if you are feeling overwhelmed, please reach out.
Additionally, if you or someone you know is struggling with mental-health issues (including significant stress, mood changes, excessive worry, substance/alcohol abuse, or problems with eating or sleeping), you are strongly encouraged to contact or visit one or more of the following resources, which can provide additional guidance and support:
7) Instructor AI-Use Disclosure
For the sake of providing full transparency, you can assume that all course content was written by hand. This includes the syllabus (what you're reading now), the readings, class slides, JuPyter notebooks, all exercises and quizzes - basically every piece of text and code that you see visibly on the course site. This means that any mistakes are likely human generated (if you spot any please let us know!)
I mainly use AI for proofreading and treat it like I'm asking another teacher for feedback on my work. I draft content completely first, read it myself, and then ask AI to critique it, to find spelling errors, to help me find things that may be confusing to students. I take AI critiques with a grain of salt, and manually apply changes that correct objective errors or serve a potential pedagogical benefit.
I also use AI for help with HTML formatting and small snippets of code "behind the scenes" of the course website. For example, I used Gemini Pro 3.1 to turn a course schedule written in Excel into the HTML course calendar. Less commonly, I ask AI for help with technical questions (I usually try StackOverflow or a web search first).
Because of data privacy concerns, I do not put identifiable student data into LLMs (meaning your names, email addresses, grades, etc.). For similar reasons, I do not use AI to write emails. Your grades for exercises and drills will be automatically graded using Python code and test cases that I wrote by hand, and quizzes and alternate exercises will be manually graded by myself.
For the sake of not distracting from course content elsewhere, I'm not going to cite AI every time I use it to fix a typo or write some CSS. If I use it for anything besides what I've described above (proofreading and formatting), I will cite AI and describe what it was used for, as I have asked you to do in your assignments.
I also try my best to stay informed about the rapidly evolving landscape of AI technogical advances, industry norms, and education research. I adopt these practices because I enjoy teaching, programming, and writing, and I take my responsibility to help you learn seriously.
If you have any questions about my AI use (or lack thereof) for teaching, or for my research, please ask!
6.s090