Avatar

Introduction to Programming and Computing

Winter 2023

College of the Atlantic

Introduction to Programming and Computing

This course explores computational thinking and problem solving via an introduction to computer programming. More specifically, the course explores computing as a discipline of study, discovering accurate solutions to interesting and challenging problems, and representing these solutions in a precise way so that computers can assist with solving the problems. Students learn fundamentals of programming using Python, including basic data structures, flow control structures, functions, recursion, elementary object-oriented programming, file I/O and discussion of higher-level concepts including abstraction, modularity, testing, and debugging.

Through detailed laboratory and project work, these concepts are developed using important real-world contexts.

Timetable

Topic Intros Tuesday, Wednesday, Lab Friday, Help Sessions TBD.

Tuesday and Wednesday

Topic Intro - 9:35-11:00

Friday

Lab - 9:35-11:00

Monday, Tuesday, Wednesday, Friday

Study Sessions: 6-7pm Monday, 7-8pm Tuesday, 6-7pm Friday (CHE 103); Help Sessions - 11-12:30pm Tuesday (GIS Lab), 1:30-2:30pm Tuesday (CHE 103), 6:30-8:30pm Wednesday (CHE 103), 11-12:30pm Friday (GIS Lab) 1:30-2:30pm Friday (CHE 103)

Welcome to College of the Atlantic!

Course Schedule

Week 1 Introduction to Programming and Computing

Introduction to the course

Week 2 Computation, Memory, and Storage

Unit 1: Computation, Memory and Storage

Week 3 Functions and Modularity

Unit 2: Functions and Modularity

Week 4 For Loops, Lists, and Testing

Unit 3: Documentation and testing and Unit 4: Control Flow

Week 5 - Working with strings and string algorithms

Unit 4: Control Flow

Week 6 - Strings and string methods

Unit 4: Control Flow

Week 7 - Conditional Execution

Unit 4: Control Flow

Week 8 - Searching Algorithms

Unit 5: Common Algorithms and Object Oriented Programming

Week 9 - Object Oriented Programming

Unit 5: Common Algorithms and Object Oriented Programming

Syllabus

Course Description

This course explores computational thinking and problem solving via an introduction to computer programming. More specifically, the course explores computing as a discipline of study, discovering accurate solutions to interesting and challenging problems, and representing these solutions in a precise way so that computers can assist with solving the problems. Students learn fundamentals of programming using Python, including basic data structures, flow control structures, functions, recursion, elementary object-oriented programming, file I/O and discussion of higher-level concepts including abstraction, modularity, testing, and debugging.

Through detailed laboratory and project work, these concepts are developed using important real-world contexts.

Course Details

First, there is no expectation that you have prior programming experience before taking this course. If you have no experience, this course is designed for you. If you have a little bit of experience, you may see a few topics that look familiar, but we will be covering material that will eventually be new to you. If you have significant experience, please come talk to me about alternative courses.

The purpose of this course is to provide an introduction to computing as a discipline. Learning how to program is a necessary skill, but the discipline of computing is about discovering accurate solutions to interesting, challenging problems that have real-world impact, and about representing these solutions in a precise way so that computers can assist with solving the problems.

Therefore, in this course we will investigate computational thinking and problem solving using computer programming. Along the way, you will learn the basics of computer programming using the Python programming language, covering topics such as flow control structures, string processing, fundamental data structures, object-oriented programming, and recursion.

The problem-solving and programming skills you will develop along the way will be applicable to a wide variety of areas, and will likely be a big asset to you in your future, regardless of your chosen area of academic pursuit. By the end, you will have a much better appreciation for the discipline of computing — which is much more (and much more interesting) than just programming.

The course content is organized in five units:

  • Unit 1 - Computation, Memory and Storage: How do we represent and store knowledge and information within the computer?

  • Unit 2 - Functions and Modularity: How do we organize and modularize systems using functions and objects to create modules we can stitch together to come up with solutions to problems in interesting ways?

  • Unit 3 - Documentation and Testing: How do we write code in a way that is understandable to the computers, ourselves, and most importantly other humans?

  • Unit 4 - Control and Flow: What are the mechanistic structures by which we have the computer process information?

  • Unit 5 - Common Algorithms and Object Oriented Programming: How do we develop robust solutions in a way that they may be easily reused to solve new and different problems?

Additional Course Info

  • Meets the following requirements: QR
  • Prerequisites: None
  • Level: Introductory
  • Course limit: 16
  • Lab fee: No lab fee

Course Values, Goals, and Practices

The computing courses at COA are designed to bridge the liberal arts education to computing and the digital world. In this, I am committed to actively creating digital and computational spaces that are radically inclusive. This includes integrating equity and social justice throughout our curriculum, and engaging students in metacognition to support this work.

Learning Objectives

This course is designed as a community learning journey. Together, we will:

  • Investigate computational ideas creatively, using a growth mindset which values revision and experimentation, and demonstrate community leadership skills as a collaborator who shares strengths, helps each other learn, and contributes to a broader shared understanding. (Participate in teamwork in respectful ways that allow people to relax and explore ideas.)

  • Understand and use the fundamental structures of a high-level programming language (Python), including use of variables, functions, elementary data structures, conditional execution, and looping structures. Time allowing, we will also cover classes and objects.

    • Build confidence and skill in troubleshooting code. Develop and execute a thorough set of test cases for a given solution. Identify and correct common mistakes in programming solutions (debugging).
  • Metacognitively (reflect on your learning) engage in contemporary issues in equity and social justice related to their digital world, community, and identity.

  • Given a high-level problem description, abstract this into a computational model, develop an overall algorithmic solution, and implement in Python a working solution to the problem.

  • Design algorithms for and then computationally investigate ideas in a variety of contexts and communicate the process and meaning to others

It is also my hope that in this course you:

  • Build confidence in coding and discover topics and applications you are interested in.

Course Materials:

Books:

The following texts are freely-available online. You may access the texts by clicking the title below.

I am providing multiple options for texts because you may prefer one author’s explanation or one type of format over another. Beyond the assigned readings, I encourage you to explore these and other books and learning resources that work well for you. On the website, I will also provide other resources (e.g., online videos, articles, blog posts) to complement your learning in the classroom.

Technology:

  • Bring a laptop to every class, we will be programming most days in Google Colab.
  • If you are in need of a term long loaner laptop, please contact the IT department at helpdesk@coa.edu. Mention that you are taking a computer science class, and pick up the laptop in A&S right by the whale skull.

Course components

Weekly structure

The class meets on Tuesday, Wednesday and Friday from 9.35-11:00. The typical weekly class schedule will be:

Day Activity
Tuesday Topic Introduction
Wednesday Topic Introduction
Friday Lab

In addition to the 4.5 hours of scheduled class time every week, I expect that between readings, going over notes, and doing assignments you will spend at least an additional 10.5 hours a week on this course, for a total of at least 150 hours over the term devoted to this class.

Labs

These will be held on Fridays. During these sessions you will work individually or in teams on computing lab exercises and you will finish the exercises after class and turn in your lab reports the following Friday at 23:59 EST. Attendance to class is important as you will be working on your labs individually and together in class.

A frequently asked question is “What happens if I can’t make it to a lab one week because I’m sick or have another obligation at that time?” Answers below:

  • If you’re missing a lab day due to short-term illness or some other reason, you should communicate this with your team and attend a team meeting before the deadline for the assignment to contribute to the teamwork.

  • If you’re unable to contribute to a lab assignment because of an illness taking you away from school work for an extended period of time, you should let me and your team know that you won’t be able to contribute to those lab(s) and we can discuss special circumstances and explore alternative arrangements to make up that work.

Overall these policies are put in place to ensure communication between team members, respect for each others' time, and also to give you a safety net in the case of illness or other reasons that keep you away from attending class once or twice.

Homework assignments

Beyond the in class activities, you will be assigned weekly larger programming tasks throughout the semester. These assignments will be completed individually, but you are encouraged to work together on these assignments, as long as you submit your own work.

Check-in Quizzes

We will have weekly multiple choice quizzes to help you evaluate your learning continuously. These are low-stakes formative assessments that are graded for completion only. You do not need to get any answers right, but it should help you identify what parts of the material you should review. Quizzes will be graded for completion and must be submitted before the end of week deadline. Tip: Don’t leave it till the last minute!

Reflections

Throughout the course there will be reflection assignments where we engage and reflect on contemporary issues in environmental and social justice related to our digital world, community and identity. These assignments may be based on an assigned reading or computing concepts we encounter in our daily lives.

Final project

You will be responsible for the completion of an open ended final project for this course, the goal of which is to tackle an “interesting” problem using the tools and techniques covered in this class. Additional details on the project can be found on Github.

Teams

For all of the team based assignments in this class you will be randomly assigned to teams of 2 or 3 students - these teams will change throughout the trimester. You will work in these teams during class and on the lab assignments. For team based assignments, all team members are expected to contribute equally to the completion of each assignment. During the labs, we will be working together using pair programming, where you will take it in turns to write and review the the code, swapping roles frequently. Once the assignment is submitted the contributors will share responsibility for any revisions to be made based on feedback. Failure to adequately contribute to an assignment will result in a penalty to your grade relative to the team’s overall grade.

Getting Help

What if I need help? First, I expect you to make a good-faith effort whenever tackling a new problem. While there is no single best answer to “How long should I spend trying to solve a problem before asking a question?” five minutes is too little and five hours is way too long. We will be developing our debugging toolkit as we progress through the course. Learning how to spot and fix mistakes in our code (bugs) are a key part of programming. When we get stumped on a coding problem or are not sure what is causing an error it means we need to go back and understand the underlying concepts and is a learning opportunity.

Remember that struggling with a new concept is normal and is part of the process of learning; becoming frustrated to the point of desperation is not. If you are unable to solve the issue after using the tools in your debugging toolkit, there are several mechanisms by which you can, and should, reach out for help:

Peer Learning Groups

Building a strong peer network of classmates you can ask for help will be valuable for staying on top of homework and assignments. To help you be successful in this course, you will be assigned to a peer group at the start of the term. Your peer group should be your first point of call for questions about the course and assignments and also to discuss concepts and your progress and questions in the course.

Google Classroom Question Forum

The question forum on google classroom will be used for online Q&A and collaborative discussion. You can post questions and answers can be posted by the instructor, TA, and/or other students. Please check google classroom to see whether a question has already been asked/answered before starting a new post. However, instead of sharing code on google classroom, describe the issue or post the error message - if we need to troubleshoot outside google classroom, I will let you know!

I will make an effort to check the question forum daily during the week to answer any questions. I will check the board on Monday to answer any questions posted over the weekend.

Online resources (e.g., StackOverflow) can be a good source for understanding and inspiration. These should not be an immediate go-to without your having struggled with the problem first. You should also take any such online posting with a grain of salt, as they can sometimes be misleading or in a different context than your own or, in some cases, simply wrong. Moreover, take special note of the “Sharing and Reusing Code” section below.

Help sessions

The Teaching Assistant and I will have a handful of help sessions every week. You are warmly invited and encouraged to attend these sessions. Help sessions are relaxed, informal, and hopefully fun. Things that happen at help sessions:

  1. The TAs and/or I am around to offer help on the homework, lab, or project.
  2. Some students do most of the assignment while at a help session. They work through problems alone or with others, and find it comforting to know that help is at hand if needed.
  3. Others do the problems at home and come to the help session with specific questions.
  4. Help sessions are also a chance to ask general questions about the course.
  5. Help sessions are a great way to meet other students in the class.

Everyone is welcome at help sessions! Attending these sessions help students do well in class and get as much out of it as possible.

I will have a few individual time slots available each week that you can book on calendly. I will update my calendar on Sunday with available individual time slots. These individual time slots are a time to talk about the course content, homework, labs, and feedback, concerns about the course or personal matters impacting your course work. They are also an opportunity to get advice on your senior project or another data project and next steps (internships, careers, majors, future classes).

Grades:

A growing body of research indicates that traditional approaches to grading fail to produce the sorts of meaningful learning desired by both teachers and students. Such approaches often reinforce inequitable power dynamics between teachers and students, promote faulty reward systems that disincentive creativity and risk-taking, and devalue important aspects of learning (including revision and feedback). Given this context, instead of a traditional approach to grading in which you do work that is evaluated singularly by me, this course assumes that you opt to take ownership and responsibility over your performance and engagement with the class. To make this happen, this course uses a “contract grading” scheme, which gives you a voice in the grading process, provides you with the agency to specify your intended course performance, and also share in the responsibility for evaluating whether or not you fulfilled your intended obligations. Please see the contract grading document (on Google Classroom) for a more-fleshed-out explanation of this approach and how it will operate in the course.

I will meet with each of you individually to set goals at the start of the course and to check progress towards those goals mid-way through the trimester.

The work in this course will be comprised of the following components and their weights:

  • Homework and Labs: 40%
  • Final Project: 25%
  • Check-in quizzes: 10%
  • Class Participation and Attendance: 10%
  • Reflections: 15%

Policies

Collaboration policy

Unless indicated otherwise on a specific assignment, your HW and lab assignments may, and should, be discussed with others in this course. Each assignment is subject to the “empty-hands policy:”

  • You may freely discuss ideas with other students, but each student must leave the discussion without any written or otherwise recorded material.

Any manifestation of copying another student’s work for your own (whether digital, hand-written, oral, etc.) is not permitted. This includes, for example, looking at or screen-capturing another student’s implementation and then writing “your own” version of that implementation.

  • Check-in assessments must be completed by you without help from another individual. You can complete the check-in assignments at any time during the week before the deadline.

Sharing / reusing code

I am well aware that a huge volume of code is available on the web to solve any number of problems. You can, and should, consult online resources (e.g., StackOverflow) when you get stuck. Recommendations there are often useful for helping you to get unstuck. However, you are not permitted to copy-and-paste any solutions directly from online resources. Rather, use them to guide your own solution and implementation. Caveat: answers on StackOverflow are sometimes wrong and/or can be misleading.

  • Any online source referenced in your solution must be documented in the comment block at the top of your submission. (We all refer to help online — do not consider doing so a badge of dishonor, but do give credit to the source of help.)
  • If you have collaborated with any other students (subject to the guidelines above), please also cite those students in your comment block at the top of your submission.

Academic Integrity (excerpt from Course Catalog)

By enrolling in an academic institution, a student is subscribing to common standards of academic honesty. Any cheating, plagiarism, falsifying or fabricating of data is a breach of such standards. A student must make it their responsibility to not use words or works of others without proper acknowledgement. Plagiarism is unacceptable and evidence of such activity is reported to the provost or their designee. Two violations of academic integrity are grounds for dismissal from the college. Students would request in-class discussions of such questions when complex issues of ethical scholarship arise.

Most often, violations of academic integrity are due to perceived timeline pressures and a corresponding feeling of desperation. Please understand that, if you find yourself in such a situation, I want you to come talk to me, rather than making a rash (and poor) decision that can have negative consequences. We can discuss appropriate accommodations and alternative timelines for an assignment.

Universal Learning and Learning in Community

Many of us learn in different ways. For example, you may process information by speaking and listening, so while lectures are quite helpful for you, some of the written material may be difficult to absorb. You might have difficulty following lectures, but are able to quickly assimilate written information. You may need to fidget to focus in class. You might take notes best when you can draw a concept. For some of you, speaking in class can be a stressful or daunting experience. For some of you, certain topics or themes might be so traumatic as to be disruptive to learning. The principle of Universal Design for Learning calls for our classrooms, our virtual spaces, our practices and our interactions to be designed to include as many different modes of learning as possible, and is a principle I take seriously in this class.

It is also my goal to create an inclusive classroom, which depends on community building, and which requires everyone to come to class with mutual respect, civility, and a willingness to listen to and observe others. As such the syllabus serves as a contract of some expectations between all members of the class, including myself.

If you anticipate or experience any barriers to learning in this course, please reach out to me and your student support advisor. If you have a disability, or think you may have a disability, COA’s Disability Support Services located within the Office of Student Life in Deering Commons to develop a plan for your academic accommodations. You can find out more information in the course catalog under Accommodating students with disabilities. If you have already been approved for accommodations through the Disability Support Services please let me know! We can meet 1-1 to explore concerns and potential options.

Late work, extensions, and special circumstances

All work is due on the stated due date. Due dates are there to help guide your pace through the course and they also allow me to return feedback to you in a timely manner. However, sometimes life gets in the way and you might not be able to turn in your work on time.

If you intend to submit work late for an assignment or project, you must notify me before the original deadline and as soon as the completed work is submitted. This allows me to return feedback to you and let’s me know when to check your work. Lab work cannot be submitted late.

Learning during a pandemic

I want to make sure that you learn everything you were hoping to learn from this class. If this requires flexibility, please don’t hesitate to ask.

  • You never owe me personal information about your health (mental or physical) but you’re always welcome to talk to me. If I can’t help, I likely know someone who can.

  • I want you to learn lots of things from this class, but I primarily want you to stay healthy, balanced, and grounded.

Help

Most of you will need help at some point and I want to make sure you can identify when that is without getting too frustrated and feel comfortable seeking help.

  • Google Classroom Stream: The best way to get any questions on course content, technology, logistics, policies is to post your question on the google classroom stream. And you are encouraged to answer each others' questions here as well.
  • Peer learning group: You will be assigned to small groups at the start of the course. Your peers are there to support you in the course and should be one of your first ports of call for questions about the course and the material.
  • Help Sessions: The Teaching Assistant and I will have a handful of help sessions every week. You are warmly invited and encouraged to attend these sessions. Help sessions are relaxed, informal, and hopefully fun. Things that happen at help sessions:
  1. The TAs and/or I am around to offer help on the homework, lab, or project.
  2. Some students do most of the assignment while at a help session. They work through problems alone or with others, and find it comforting to know that help is at hand if needed.
  3. Others do the problems at home and come to the help session with specific questions.
  4. Help sessions are also a chance to ask general questions about the course.
  5. Help sessions are a great way to meet other students in the class.

Everyone is welcome at help sessions! Attending these sessions help students do well in class and get as much out of it as possible.

  • Email: Please refrain from emailing any course content questions (those should go on Google Classroom Stream), and only use email for questions about personal matters that may not be appropriate for the public course forum (e.g. illness, missed assignments).
  • For more general support and advice, please make use of the resources on Campus which you will find in the College course catalog. If you’re not sure where to go for help, just ask.

Project

Showcase your inner computer scientist

Project Guidance

As part of this course you will create an individual project. You can read about what will go into the individual project on Github. More guidance on the project will be given in class.

This set of cheatsheets will be a useful reference point for the project:

Cheatsheets

📌 Algorithms Cheatsheet

📌 Control Flow Cheatsheet

📌 For Loops Cheatsheet

📌 Functions Cheatsheet

📌 Data Types Cheatsheet

Resources

Thorndike Library

Thorndike Library offers many resources and services that can assist you in your academic endeavors, including individualized research support and access to resources beyond COA. Study spaces are also available. The library is open 7 days/week. Remote access to the research databases is available 24/7. Contact library@coa.edu or visit the library website for details.

Books

Technology

If you are in need of a term long loaner laptop, please contact the IT department at helpdesk@coa.edu. Mention that you are taking a data science class, and pick up the laptop in A&S right by the whale skull.

Tools

Cheatsheets

People

Course organisers

Acknowledgements

I am committed to the promotion and use of open educational resources and software in the journey of designing an accessible computing education.

Conceptually, intellectually, and substantively, the course content, course policies, and learning objectives draws heavily upon the course Introduction to Programming and Computing designed by colleagues in the Digital and Computational Studies at Bates College including Carrie Diaz Eaton, Anelise H. Shrout, Barry Lawson and modified by me when I taught the course at Bates in 2021-2022. The grading contract draws on the work of Ethan Miller, Misty Beck, Francis Eanes at Bates as well as scholars beyond these institutions.

The course website design draws inspiration from Introductory Statistics by Mine Çetinkaya-Rundel.