Instructor: Anya E. Vostinar
Room: Olin Hall 310
Prefect: See Moodle
Required: Python Programming: An Introduction to Computer Science, 3rd edition, by John Zelle
Some additional reading materials will be linked through Moodle
Drop in student hours:
M: 3-4pm W: 10-11am Th: 2:45-3:45pm F: 12-1pm
Anya’s Office: Olin Hall 323
Remember that you are always welcome to schedule an appointment with me outside of these times. To schedule an appointment, please see my calendar, find a time that isn’t marked ‘Busy’ within 9-5 M-F and either send a calendar invite to an event or email me.
Overview and Learning Goals
Computers are completely pervasive in our lives. We use them for entertainment, for productivity, and for communication. We overwhelmingly rely on programs written by others for each of these purposes. But what exactly makes up a computer program? What process is involved in creating, writing, and testing computer programs? Most importantly, how can you learn to write your own computer programs? This course is an introduction to the key concepts of computer science, and it focuses on the questions raised in the previous paragraph. But it’s also, at its heart, a course on problem-solving. After all, programming a computer involves understanding what problem we are trying to solve, identifying one or more ways we can approach solving that problem, and coming up with a step-by-step process for solving the problem. This step-by-step solution, translated into a computer language (Python in this case) is what ultimately becomes our computer program. This whole procedure is called algorithmic thinking, and is a big part of what this class is all about.
By the end of this course, you should be able to do the following:
- Take a problem, break it down into a series of steps (an algorithm), identify the programming components most appropriate to use for each step, use those components in Python to tell the computer how to solve the problem. Those components include variables, loops (for and while), conditionals, functions, objects, lists, and dictionaries
- Debug syntactic and logical errors in a program in a systematic fashion
- Read and explain code written by others and approach that process in a systematic way
- Write code that is easy for others to understand because it uses effective variable names and comments, and is well-organized using functions (including main) and objects as appropriate
- Explain why different solutions to a problem will be more or less efficient than each other at a high level (using Big-O notation)
- Explain the process and code used for insertion, selection, and merge sort, as well as binary search
- Implement basic recursive functions
While we’re back in person this year, we’re not yet out of the pandemic. In these unprecedented times, we will need to exhibit flexibility and patience with each other throughout the term. I have done my best to design the course so that everyone can be successful, regardless of personal circumstances. Communication will be key; please keep me updated about your situation in addition to reaching out to the other relevant offices on campus. If you experience significant technological problems that limit your ability to participate, please contact the ITS Helpdesk at 507-222-5999 or email@example.com. For announcements of known technical issues, visit the Helpdesk portal. If your personal situation (due to COVID-19 illness or other circumstances) begins to impact your ability to engage with the course, please contact the Dean of Students Office and also let me know.
I expect you to attend every class session and log in to Moodle and Slack every day for updates on activities and assignments.
All out of class written communication will happen via the class Slack. Please make sure you are checking it regularly and/or have email or push notifications setup. Each class day will have activities for you to complete and a section on Moodle to guide you through what you should do. All materials will be released at least 48 hours before they are due.
Types of Engagement and Collaboration Policies
We’ll have lots of different ways of engaging with the course material:
- Readings written by me and from the textbook, which will introduce ideas and provide details. You will have prompts or quizzes to check your understanding of the readings, which will contribute to your participation grade.
- Mini-lectures at the start of class that will include discussions to check your understand of the reading and give you a chance to ask questions.
- Labs for writing somewhat longer code with significant guidance from the instructions in order to make ideas from readings more concrete.
- Programming assignments where you complete more extended projects to provide opportunities to design solutions and see the ideas from class applied in real contexts. Some of these you will complete with a partner and some will be individual.
- Three in-class exams, that check your comprehension of the course material: the course concepts, but also applications of these concepts to problems that are variations of what we’ve discussed in class, or what you’ve done on the daily assignments or projects. You are able to correct questions that you miss on exams for half points back or to bring your overall score up to 70%, whichever is more.
- Final project, where you pull together everything you’ve learned to create something that interests you.
I believe each of these types of activities will give you a different lens on the core class ideas and help you to deeply learn and understand the material. In many of these activities you’ll have the option to work collaboratively, and throughout the course you’ll have assigned programming partners who you will complete the labs and homework with. You are required to work with your assigned partner to complete these assignments using pair programming. Please see the Collaboration guidelines for more details.
Evaluation and Grading
For this class, I will be grading as follows: At the end of the term, I add up your numerical scores for each component, multiply them by the weight for that component, and add up all components. I’ll then check what your percentage is compared to this breakdown:
|93-100%||A||Demonstrated mastery of all course concepts|
|90-93%||A-||Demonstrated near mastery of all course concepts|
|87-90%||B+||Demonstrated near mastery of all required concepts and most additional|
|83-87%||B||Demonstrated strong competence in all required concepts and some additional|
|80-83%||B-||Demonstrated competence in all required concepts and some additional|
|77-80%||C+||Demonstrated adequate understanding of required concepts and some additional|
|70-77%||C||Demonstrated adequate understanding of required concepts|
|60-70%||D||Not yet completely prepared for a course for which this is a prereq|
|0-60%||F||Not yet prepared for a course for which this is a prereq|
Note that there is overlap; I will always go with the higher letter grade in the extraordinary circumstance that someone is at exactly 93%. If someone is really really close to a cutoff, I’ll bump them up, so don’t worry about being at 89.99% and getting a B+ instead of an A-.
Here is how activities this term will be factored into your grade:
|Component||Contribution to overall grade|
There is an exception to the above table: if you do not achieve an average of at least 70% on the individual programming assignments, you will not receive a grade of a C- or better. If you do have an average of 70% or better on the individual programming assignments, your grade will be calculated by the above.
See the schedule for when the exams will be.
How to Succeed in this Class
Keep trying and ask for help: Learning a new topic can be challenging, and one of my hopes for this class is that you’ll struggle at times and learn more because you had to really work to understand something. That means you’re expected to be willing to try again when things don’t work the first time, and to seek out help when you’re truly stuck. (See below for more on seeking help!)
Work consistently: For all learning engaging with the material in shorter, more frequent sessions is likely to be helpful. Set aside time each day to work on the course, and make sure that you’re keeping up with the daily activities.
Take notes: Research has shown that writing things down in your own words helps you to remember and understand it better. Take handwritten notes when in class and reading from the textbook. Research has also shown that handwritten instead of typed notes help you retain the information better.
Pay attention to homework assignments and start early: When I’ve asked students what advice they’d give to future 111 students, the most common thing they said was to start the homework early! By starting early, you have more opportunities to work through problems that come up and time to ask for help. Even if you can’t immediately start on the homework, read over the prompt so that your brain can start thinking about it in the background; it really does help.
Test your code: One of the key parts of writing successful code is debugging it - testing whether it works, finding where it doesn’t, and fixing it so it does. Learning to debug your code is essential for any later coding projects you may do.
Ask questions and reach out for help: If you have a question about something, chances are other people do too. By asking questions in class, on Slack and in office hours, you’ll keep up with the course and gain a deeper understanding of the concepts.
Because the homework assignments and reading checks are designed to enhance your learning of the course material, and because the homework assignments in this course will often build upon each other, turning these in in a timely manner is essential. Turning in your assignments on time also maximizes the quality of the feedback you can expect to receive from the grader (or myself, where appropriate), and provides a framework of fairness.
Due to the nature and role of the reading checks, no late reading checks will be accepted. If you miss a couple of these, it will not impact your overall grade; just don’t make it a habit.
Homework assignments are due on Wednesdays at 10pm on Gradescope (through Moodle) unless otherwise stated. Any assignments received after this time will be considered late.
Late penalties on projects:
- Within 24 hours of the due date: 25% deduction
- 24-48 hours late: 50% deduction
- More than 48 hours late: No credit.
That said, life is complicated and messy and unpredictable. If you have a special circumstance, check with me ahead of time to the extent that’s possible, and we’ll see if we can figure something out. (Note that “I’m going to a funeral or the national championship for X” is a special circumstance, but “I have a paper due in another class” is not.) If it’s an emergency situation and you can’t get a hold of me ahead of time, contact me when you are able and we’ll talk. If you really struggle with an assignment and want to figure it out even after the deadline, feel free to talk to me too. The big goal here is your learning, so let’s talk about ways to make that happen.
(Acknowledgment: language paraphrased from Jeff Ondich’s and Amy Csizmar Dalal’s late assignments policy. Thanks, Jeff and Amy!)
All reading checks should be posted to the
#reading-questions channel on the class Slack with the appropriate tag.
All homework assignments should be submitted through Gradescope (which is linked through Moodle).
You can always see everything that you need to do for a class day on Moodle for that day in the “Before X’s Class” section.
All grading questions should be directed to me and not to the grader.
How to Get Help
I want to see all of you succeed in this class, and I believe you can succeed if you engage with the class material and activities consistently and reach out for help when you’re confused. To learn computer science, you’ll need to be willing to try new things and experiment with different solutions. Cultivating persistence to keep trying will be helpful not only in this course, but in any other problem solving activities. Sometimes, you may need assistance - here’s how you get it:
- Take a break: Often, taking a break from homework will help you to regroup and you’ll be able to succeed when you come back to it. Leave yourself enough time to be able to take breaks!
- Prefect sessions: This course has a prefect. The Prefect Program offers in person tutoring and/or optional collaborative learning sessions for participating classes. Prefect sessions review course concepts and often focus on critical thinking and problem-solving exercises centered on the course material. Our course prefect(s) will use email or Moodle to inform everyone in the class about upcoming sessions and availability for 1:1 tutoring.
- Help Forum:
You’re welcome to post questions about readings and labs on the
#helpchannel on Slack as well as about homework and the final project. You shouldn’t post much homework code, but you can post code related to other assignments. If you’re unsure if a question contains too much detail about the homework, email me instead.
- Talk to me: I have both drop in student hours and student hours that are by appointment (for one on one conversations). See links at the top of this document for more details. Talking to students is literally my favorite part of this job, please talk to me!
- Other Carleton resources: There are lots of resources to help you at Carleton. Lab assistants are available on a regular basis; see the top of Moodle for details. They can help you with debugging and making progress on your homework, or if you’re having trouble understanding something about Python. The Academic Skills center is a wonderful resource for helping you develop study skills, improve your ability to prep for exams, or manage procrastination. Oscar Alarez is an academic skills coach in the office with whom you can make individual video conferencing appointments.
Attendance is not strictly required in this class, though I believe that you will do much better if you attend every session and your particpation grade will be impacted if you miss many classes (since you can’t really participate if you aren’t in class). Because much of the classtime is spent working with partners on lab activities, if you miss class, you will miss out on that opportunity.
Inclusivity and Universal Learning
I strive to create an inclusive and respectful classroom that values diversity. Our individual differences enrich and enhance our understanding of one another and of the world around us. This class welcomes the perspectives of all ethnicities, genders, religions, ages, sexual orientations, disabilities, socioeconomic backgrounds, regions, and nationalities.
My goal is that everyone should be able to learn from this class and feel comfortable asking questions and participating. In class, on the forums, and when working with one another, be respectful and inclusive. If something makes you uncomfortable or you’re concerned about an interaction, please come talk to me!
Carleton College is committed to providing equitable access to learning opportunities for all students. The Office of Accessibility Resources (Henry House, 107 Union Street) is the campus office that collaborates with students who have disabilities to provide and/or arrange reasonable adjustments. If you have, or think you may have, a disability (e.g., mental health, attentional, learning, autism spectrum disorders, chronic health, traumatic brain injury and concussions, vision, hearing, mobility, or speech impairments), please contact firstname.lastname@example.org or call Sam Thayer (’10), Accessibility Specialist (x4464) to arrange a confidential discussion regarding equitable access and reasonable adjustments. If you’ve already arranged adjustments, please let me know if there’s anything you want me to know beyond what’s in the adjustments letter or if there are particular challenges for your specific circumstances. If you do not have official adjustments, I am still happy to discuss with you ways in which I can help you succeed in this class.
The Assistive Technologies program brings together academic and technological resources to complement student classroom and computing needs, particularly in support of students with physical or learning disabilities. Accessibility features include text-to-speech (Kurzweil), speech-to-text (Dragon) software, and audio recording Smartpens. If you would like to know more, contact email@example.com or visit go.carleton.edu/aztech.
Carleton College urges you to make yourself –- your own health and well-being –- your priority throughout this term and your career here. It is important to recognize stressors you may be facing, which can be personal, emotional, physical, financial, mental, or academic. Sleep, exercise, and connecting with others can be strategies to help you flourish at Carleton. If you are having difficulties maintaining your well-being, please contact me and/or pursue other resources, such as Student Health and Counseling or resources on the Office of Health Promotion website. Student Health and Counseling is currently offering telehealth services.
Carleton is committed to fostering an environment free of sexual misconduct. Please be aware all Carleton faculty and staff members, with the exception of Chaplains and SHAC staff, are “responsible employees.” Responsible employees are required to share any information they have regarding incidents of sexual misconduct with the Title IX Coordinator. Carleton’s goal is to ensure campus community members are aware of all the options available and have access to the resources they need. If you have questions, please contact Laura Riehle-Merrill, Carleton’s Title IX Coordinator, or visit the Sexual Misconduct Prevention and Response website: https://www.carleton.edu/sexual-misconduct/.
Academic Honesty and Collaboration Policy
As noted in Carleton’s policy on academic integrity, violations of academic honesty are dealt with at the college level. If I suspect academic dishonesty, I will refer the case for appropriate action to the Academic Standing Committee (ASC) via the Associate Dean of Students or the Associate Dean of the College. Please familiarize yourself with Carleton’s academic integrity policies and make sure that you have read the collaboration and academic honesty policies for this course. A possible penalty for academic dishonesty in a course is an F in the course. It’s not worth it – please seek help using the resources above instead.
This section discusses some of the pedagogical principles that you’ll see in this class. If you are interested in why the class is structured how it is, you might find an answer here (and I’m also happy to discuss it with you). If you aren’t interested in pedagogy, you can skip this.
Research has shown that active learning in the classroom leads to better retention of material for all students, but especially those from historically marginalized groups. Computer science classes are well-suited to active learning, because we can practice ideas in class by programming and writing out algorithms, for example. In this class, a large portion of in-class time will be spent with you grappling with ideas and trying to solve problems that I’ve given you while I and the prefect circulate to answer questions. This requires that you’ve read the assigned reading ahead of time, so that I don’t need to lecture and we can spend more time learning how to actually use the ideas. Active learning can feel less effective or productive in the moment, because you are struggling to figure things out instead of me just explaining things to you. However, that process of struggling is exactly what is needed for you to learn the material most effectively for long-term retention.
There are two main ways that content can be organized in a course: block and interleaved. Block learning is the idea of first learning all about topic X, taking a test, and then forgetting all about it to learn about topic Y. Interleaving is the process of learning a bit about topic X, a bit about topic Y, a bit more about topic Z, being tested on all of them, then learning more about all of them and being tested again.
Again this is a situation where block learning feels the most effective and efficient in the short term, and you’d do best on the tests in the short term. However, copious research shows that interleaving is the most effective in the long term. It is again the very process of struggling to recall something you learned a while ago that triggers your brain to then store that information into long term memory. Interleaving also leads to higher transfer abilities, where you are able to apply what you know to a new problem. (If you want to learn more about this, there are several excellent books, but one I recommend currently is Range: Why Generalists Triumph in a Specialized World by David Epstein.)
Pair programming is a very common practice in computer science industry, where two programmers sit at a shared computer and both engage in the process of writing a program. One is the ‘driver’ at the keyboard for a block of time while the other is the ‘navigator’ that is watching and thinking through the overall program, as well as spotting typos. You switch roles regularly (every 10-15 minutes or whenever the navigator has an ‘aha’ moment) and are both fully engaged in the task for the whole time. This method of programming has been shown to be highly effective in producing better code (not necessarily in a shorter period of time though) and leading to a better understanding of the problem for both programmers. We’ll use pair programming a lot in this course for several reasons: 1) as I said, it is very common in industry, so it’s good for you to get comfortable with it; 2) it is used in many upper level courses at Carleton, so again good for you to be comfortable with it; 3) ultimately it improves the learning and understanding of the people involved; and 4) when you are struggling with new concepts, it can feel a lot more doable when you have someone else there who is struggling with you.
This syllabus is based heavily on the syllabus from Anna Rafferty.