CS 105 - Understanding Our Algorithmic World

CS105 - Course Information

ProfessorChristopher Andrews
Office215 75 Shannon Street
Emailcandrews@middlebury.edu
Office hoursM 1:30p-3:30p, T 3:30p-4:30p, F 1:30p-2:30p or by appointment
Website/go/cs105
Class meetingsMWF 9:10a-10:00a (A), 10:20a-11:10a (B), 224 75SHS
Discussion forumPiazza

Course Objectives

This course is targeted specifically towards students with no background in programming or computer science who are curious about what we can do with CS. The class does not fill any requirements for the CS major. Instead, this will be a gentle introduction for novices to throw back the curtains on some of the cool and interesting things that we can do with some basic programming, as well as making you more informed about the ways that computers are shaping the world around you. More than anything, I hope you take away tools that you can use no matter where you end up.

This course draws a lot of inspiration (and a number of assignments) from Berkeley's Beauty and Joy of Computing course.

At the completion of the course you should be able to:

  1. Write basic programs and understand the use of variables, conditionals, loops, and events.
  2. Describe and use basic computer science concepts such as algorithms and abstraction.
  3. Describe and programmatically manipulate text sound and images.
  4. Perform basic data visualization, analysis, and simulation computationally.
  5. Explain the basic components of modern computing and demonstrate a knowledge of computing history.
  6. Be able to recognize, identify and make informed judgement about some societal and ethical issues that arise from the uses of computing technology.

Class deliverables

There will be four different kinds of deliverables in this class:

Exercises: Throughout the semester, there will be a collection of in-class exercises where you will work through examples yourselves. These are very much in the form of tutorials, and are very prescriptive. Our "in-class" time will largely be devoted to working on these. You will turn these in, and they will be scored as "Meets Expectations" (M), "Revision Needed" (R) or "Not Assessable" (N). Exercises earning an R or an N may be revised and resubmitted within a week of being assessed.

Assignments: You will complete (approximately) weekly assignments. These will primarily consists of programming challenges and some short answer questions. These will be scored as "Exceeds Expectations" (E), "Meets Expectations" (M), "Revision Needed" (R) or "Not Assessable" (N). To achieve a score of E, assignments will need to go above and beyond the core requirements. Extra challenges will be specified, and later in the semester, unique contributions that take assignments to the next level will be considered for E scores. Assignments earning an R or an N may be revised and resubmitted within a week of being assessed.

Project: At the end of the semester, you will develop a project of your choosing. This will be your chance to demonstrate everything you have learned by creating something of interest to you. These will be assessed on a number of factors (to be specified later), which will be distilled down to a score of 0-3 for assessment purposes.

Social issue engagement: On most Fridays, we will have a discussion about some social and ethical issues surround the use of computing technology. You are expected to read any associated readings and engage with the ideas. There will be two ways to engage. One way will be to make a meaningful contribution to in class discussion (as determined by me). As not everyone feels comfortable talking in class (and some of our topics may not be comfortable to begin with), there are two other forms of engagement. Followup discussions can be started on our discussion forum, and meaningful contributions to the forums will be counted as engagement. You can engage more personally by writing a 1+ page response to the topic that will not be shared with the class.

Assessment Tiers

In this class, we will be using an approach called specification grading. Rather than translating all of the above into percentages which are then used to assign you some number between 0-100 which is then translated to a letter, we will have a series of "assessment tiers". You are welcome to set your sights on any tier. Since I still need to report a grade, the tier you achieved will determine your grade. If you exceed the expectations of your tier, but don't quite reach the next one, +/- modifiers will be added.

At the Mastery tier (A equivalent), you will demonstrate a firm understanding of all of the aspects of the class and have demonstrated an ability to go beyond merely what you have been shown. To achieve this level, you will fulfill the following requirements:

  • Complete all assignments at or above M, with at least 3 at the E level
  • Have no more than 1 exercise below the M level
  • Engaged with all social issues presented in the class
  • Achieve a project score at or above 2.25

At the Proficiency tier (B equivalent), you will demonstrate a good understanding of most of the aspects of the class. To achieve this level, you will fulfill the following requirements:

  • Complete all assignments at or above M, with at least 1 at the E level
  • Have no more than 3 exercises below the M level
  • have no more than 1 missing engagement point
  • Achieve a project score at or above 1.75

At the Competency tier (C equivalent), you will demonstrate a fair understanding of most of the aspects of the class. To achieve this level, you will fulfill the following requirements:

  • Complete all assignments at or above R, with with no more than 2 below M
  • Have no more than 4 exercises below the M level
  • Have no more than 2 missing engagement points
  • Achieve a project score at or above 1.25

At the Familiarity tier (D equivalent), you will demonstrate some understanding of some of the aspects of the class. To achieve this level, you will fulfill the following requirements:

  • Have no more than 4 assignments below M
  • Have no more than 1/2 of the labs scored below M
  • Achieve at least 1/2 of the engagement points
  • Achieve a project score at or above 1

Getting help

We are going to be using Piazza for our class discussions outside of class. Rather than emailing questions to me, please post the questions on Piazza. This will allow other students to answer questions and to benefit from the answers you receive. This system will only work if you use it, so please do so.

Honor code and collaboration

Short version Help each other, but do not share solutions.

Long version In computer science, we build on the work of developers before us. Most of us learned to code by copying code and finding ways to tweak it to do what we want. Almost no computer programs are built without building on the work of others, either in the form of algorithms, libraries, or even just short snippets of code. In the computer science department, we recognize the value of forming study groups, helping each other debug code, and working together.

On the other hand, there are questions of intellectual property and academic integrity. These are considerably murkier waters than you may face, for example, writing a history paper, or doing a problem set in math. With code, you can "accomplish" spectacular things by copying the right chunks of code without ever knowing how it works.

For the most part, navigating these waters is on your head. I encourage you to help classmates to debug misbehaving code. I encourage you to post questions (and answers!) on Piazza. But you need to do so in a way that respects other people's work and in a way that contributes to your intellectual development rather than hindering it (or trying to mask your lack of it). This is not a race to get a good grade. The grade is at best a carrot to "trick" you into doing the work required to become better educated. As such, don't just go looking for code that you can turn in to satisfy an assignment. You can probably find some, but it won't help you much, and I'll probably be able to tell. If you need help -- ask. I am trying to provide you with a lot of resources for getting help, please use them.

Policies: Do not work collaboratively unless indicated by the assignment. You can help one another, and work together, but you cannot work jointly on the same assignment. I do not want to see identical assignments that differ only in the name at the top. If someone does show you code (as an explanation or asking for debugging help), do not copy it. Retain ideas, and go away and write your own version later. Attribute any ideas, etc, that you pick up (this goes for classmates, books, online resources, etc). Be explicit. Tell me where you got the idea, approach, technique, etc. Explain what your contribution was. Make sure that your contribution demonstrates that you understand what was not your work alone. Finally, if you have any doubts, ask me first.

Accommodations for disabilities

Students who need test or classroom accommodations due to a disability must have a Letter of Accommodation from the Disability Resource Center. Please contact one Jodi Litchfield (litchfie@middlebury.edu or 802.443.5936) for more information. Students with Letters of Accommodation are encouraged to make an appointment with me as soon as possible. All discussions will remain confidential.