Syllabus

Professor Christopher Andrews
Office 215 75 Shannon Street
Email candrews@middlebury.edu
Office hours   TTH 3:45p-5:00p, W 11:15a-12:05p, or by appointment
Class 2:15-3:30 TTH, 75SHS 203

Course Objectives

At the completion of this class, all students should be able to:

  • Demonstrate the use of form, color, texture, transformations, and layers to create new pieces of algorithmic art using p5.js
  • Describe the differences between noise and randomness and be able to use apply them appropriately
  • Implement algorithms based on simulation models and procedural generation and use them in novel artworks
  • Create effects and filters using shaders
  • Create curated, long form, and reactive works
  • Decompose existing works to understand how they could be recreated

Class deliverables

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

Projects There will be 4 projects. The projects will be relatively open ended and will give you a chance to demonstrate what you have learned while allowing you to exercise your creativity. The final project will be due during the final week of class. We will be mounting a show at the end of the course, and you will be expected to show your work.

Challenges Every week that there isn’t a project due, there will be a challenge. These will be shorter and more structured than projects. Some of these will focus on technical skills and reproductions, others will start with a prompt and require some creativity.

Tutorials These will a chance for you to walk through examples yourself, tutorial-style. The will be very prescriptive and will again focus on the technical aspects of the material.

Sketches I will expect you to maintain a digital “sketchbook”. This will be your collection of ideas that you are playing with, experiments with things you have seen in class, or just snippets of things you want to hang on to.

Weekly reflection Every week, you will write a brief reflection about what you learned, what you accomplished, and what still needs work. Reflections will also frequently include conceptual questions about the material you have read about or we have discussed in class.

Participation

You are expected to participate in the class beyond just turning in assignments. Class will frequently involve discussions or critique sessions, and you are expected to be active participants in both of these activities.

Assessment

In this class, we are going to follow a practice called Ungrading. You may have encountered the practice in other classes, though the implementation tends to vary professor to professor and class to class.

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.

Tutorials will primarily be checked for completeness.

Challenges and projects will be evaluated on three axes.

  • technical requirements: does the work meet the core requirements and implement technical pieces correctly
  • creative contribution: where appropriate, have you demonstrated adequate creative contribution to the piece
  • aesthetic attributes: I will provide subjective feedback on your artistic choices

I will expect work with problems with technical requirements and inadequate contributions to be revised. Revisions that address aesthetic concerns will be optional.

You will have five late days that you can use on any assignment (other than the final project). You do not need to talk to me to use one unless you need to use two on the same assignment.

After I return work to you, you will have two weeks to make any revisions necessary. You can revise as often as you like within that period (there will be a form to notify me when work is ready for another look). After two weeks, the submissions will be closed. You are encouraged to finish any stray work, and I will answer further questions, but no new work will be evaluated after this point.

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. When you turn in assignments, you will be asked to provide 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. You will reflect on the work you completed and your understanding of the material. 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.

The Honor Code and Getting Help

Campuswire

We are going to be using Campuswire for our class discussions outside of class. Rather than emailing questions to me, please post the questions on Campuswire. 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.

All kinds of posts are welcome on Campuswire, from low level debugging questions, to high level conceptual questions, to weird things you just want to share. If you are seeking help on an assignment, a good questions includes what you are expecting, what you are getting instead, and what you have tried. A weaker question simply asks “why doesn’t my code run?” or “why is my code not passing all of the tests?” (unless you think your output is correct and that the test is at fault – it does happen). It is helpful if the code you are asking about is present on GitHub so I can look for greater context when necessary, but if you can post some small snippet, that is very useful. This is good for you to try and isolate where things are not working, it means I (and others) can generally spot the problem faster, and your fellow students can be part of the conversation. Posting images so I can see the output you are seeing is also helpful (especially once we introduce randomness). You just want to not post so much that it provides the answer for someone who has not completed the assignment.

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 Campuswire. 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). With no grades, there is no benefit to turning in correct work that you don’t understand, so please do yourself a favor and don’t just go looking for code you can turn in to satisfy an assignment.

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.

Generative AI Use

There is no getting around the fact that tools like Claude, Codex, Gemini, and Co-Pilot have rapidly become go-to sources of information. There is also no getting around how easy it makes casual academic dishonesty. One of my off-topic objectives is to help you navigate making use of these tools without violating the spirit of the honor code or compromising your own learning process.

In this class you will be expected to pick up a collection of new tools (and probably a new language). I encourage you to start with the documentation, but the LLM tools will be very useful as you are figuring out syntax and trying to figure out what is possible. The challenge is trying to do that in a way that doesn’t compromise your actual learning process.

  • Do not enter the text or images from an assignment as a prompt into an LLM
  • You are responsible for all code you turn in and expected to be able to explain it
  • Uses of LLM’s that don’t require attribution
    • single lines that provide function names, parameter ordering or syntax you didn’t remember
    • identifying where errors in your code are
  • Uses of LLM’s that require attribution (and should be used infrequently and judiciously)
    • design of algorithms or approaches
    • equations
  • All AI use should be focused on process and technique, not output. You should not be describing output as part of your prompt unless it is about how to achieve a certain effect.

Attribution should take the form of a comment that clearly marks the region that was added. I would also expect a discussion in your reflections about your level of understanding of such regions.

Example of prompt that doesn’t require attribution:

I need to get the color of the canvas at pixel location x,y. How do I do that in p5.js?

This is a good example because the question is based on the fact that you know something is possible and you just don’t know the command. This is also difficult to look up in the documentation if you don’t already know the name of the function responsible.

Example of a prompt that is on the borderline for requiring attribution:

I read the color value at two different pixel locations using p5.js, how do I check if they are the same?

This is borderline because without more knowledge about the output type, this could be asking for an algorithmic solution. However, if you look at the return type of get() you will find it returns an array of RGBA values and you may not remember how to compare two arrays of values in JavaScript.

Example of a prompt that require attribution:

I have a shape and I need a way to figure out where those points are after rotating around a point on the canvas.

This is reasonable because you may not have the math to figure this out yourself and it is about process rather than output. You should attribute it as it is an algorithmic component you didn’t write yourself. It is also a potential weak spot in your code unless you take the time to understand it.

Example of a prompt requiring attribution that is on the borderline of reasonable:

I have a shape that I have drawn in p5.js. I don’t like the flat color, how would I get a marbled effect on it?

This is starting to let the LLM take over part of your creative process. This is on the borderline because you aren’t getting it to make creative decisions unless you let it write a function that applies one particular approach for you. It would be better to ask for a variety of techniques that can be used to create marbling techniques and then picking one and implementing it yourself.

Example of a prompt that you shouldn’t use

I need a p5.js program that generates a flower garden

This has ceded almost all cognitive and creative control to the AI. You might as well just ask for the output image. In addition to being poor for your development as an algorithmic artist, if done for an assignment without prior approval it will be considered academic dishonesty. “Prior approval” – does that mean it is kind of okay? No, but I will not fully shut the door on the existence of a crazy art project that uses prompts of this kind within a larger process. This would have to be a very ambitious project, so I would expect a lot of conversations about it 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 sgakuya@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.