CS 105 Algorithmic World

CS 105 - Course Information

Office hours
Class meetings

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 some 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 abstraction to create complex algorithms.
  3. Describe and programmatically manipulate text sound and images.
  4. Perform basic data visualization, analysis, and simulation computationally.
  5. Provide high-level explanations of the role of servers on the Internet, how web pages work, and be able to fetch data from online sources and manipulate it programmatically.
  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 activities

There will be six different kinds of activities 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 frequently be devoted to working on these.

Assignments: You will complete (approximately) weekly assignments. These will primarily consists of programming challenges and some short answer questions.

Assessments: Occassionaly, I will give you a short problem or a question during class time in a quiz-like format to help you assess your understanding of the material to date, and to help me gage where the class is.

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.

Reflections: Every week, you will be asked to write a reflection about what you learned and how you engaged with the class during the week.

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.

Exercises and Assignments will frequently contain challenges. These are optional suggestions to allow you to get a little more practice and test your understanding. While many of them will build directly on the exercise or assignment they are attached to, they should not be turned in as the exercise or assignment. I have given you a seperate place in Canvas to turn these in so you can keep track of the work you have done.


In this class, we will be doing something called ungrading.

In this class it means that I will not grade any of the work that you turn in. I will provide feedback and indicate if I think the work needs to be revised. For programming assignments, there will be a set of stated requirements that your program is expected to meet. A "grader" will be looking over your code to check if it satisfies the requiremnts. Work that doesn't meet the requirements will be considered "incomplete" and can be revised and resubmitted. We may also leave comments on the quality of your solution (for example, it may satisfy the requirements, but there may be a better solution). You are also welcome to resubmit work if you want to try the suggested solution.

At the heart of ungrading is a desire to refocus your mental energies from questions like "what grade am I going to get?" to questions more like "do I really understand this concept yet?" and "did I really put my best effort into this work?". As such, we are going to adopt a more reflective practice. For assignments and revisions, you will be asked to submit a self-evaluation of how the assignment went for you and where you think the work and your understanding could be improved.

Unfortunately, at the end of the semester, I still need to record a grade in Banner (unless you all opt for CR/NCR). So, I will ask each of you to write an assessment of your progress over the semester, reflecting on the work you have completed and your level of comfort with the material of the course. We will then have a short meeting and you will tell me what grade I should record for you. We will discuss your decision and I will retain ultimate veto power if I feel that you have significantly under- or over- valued your contributions, but in most cases your decision will stand.

Course communications

We will use Canvas as our primary tool for communicating so please make sure that you receive notifications or check it frequently. Course announcements will be posted in the Announcements section. To send me a direct message, please use the Inbox feature on Canvas -- this will keep your message from getting lost in my email. If you have a question about how to do something or resolve a bug, I urge you to start a Discussion on Canvas. 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 Canvas. 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.

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.

Fostering an inclusive environment

As part of the Middlebury community, I support an inclusive learning environment where diversity and individual differences are understood, respected, appreciated, and recognized as a source of strength.

I expect that students in my 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, we hope you will let us know so that it can be addressed.

If you are comfortable reporting such incidents, you can use our anonymous CS departmental climate feedback form (which goes to the CS department) or fill out a Bias Incident Report (which goes to the Middlebury Community Bias Response Team).

You belong in this class and in the computer science department. Thank you for being here and for contributing to this course.

Accommodations for disabilities

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 ada@middlebury.edu for more information. All discussions will remain confidential.

Loaner Laptops

If you ever find yourself temporarily in need of a laptop, the Computer Science department has 10 rotating Dell laptops available to our students. These come pre-installed with software for most of the courses in the major. They are available to be loaned out short-term or long-term based on your need (as determined by you). Feel free to ask me ahead of time if you think you need one for just a class period, or you can send an e-mail to rlichenstein@middlebury.edu directly.

The college also provides laptops to those who need them where “need” is based on Student Financial Services calculations. If you anticipate needing a laptop for the whole term, we encourage you to inquire with Student Financial Services and the library first due to our smaller pool of equipment. However, our department commits to meeting the needs of every student, so do not be afraid to reach out if you believe you need one of our laptops for any length of time.