NYU | Tandon School of Engineering | Integrated Design & Media
DM-GY 6063 | Creative Coding
Fall 2023, Section D
- Instructor: Thiago Hersan
- email: thiago.hersan@nyu.edu
- Office hours: Mondays & Tuesdays 10:00am - 12:00pm 370 Jay Street (IDM Grad Lab Room 325A)
- Class meeting: Wednesdays 2:00pm - 4:50pm 370 Jay Street (Room 307)
- Website: https://6063D.github.io
- Brightspace (for assignment submissions)
- Slack Channel: #hersan-fall23-6063 on https://idm-cc.slack.com
Important Dates (for this course)
- 2023/09/06: First day of class
- 2023/09/18: Last day to Add/Drop class
- 2023/11/22: Break, no class
- 2023/12/04: Last day to withdraw from class
- 2023/12/15: Last lecture class
- 2023/12/20: Final presentations
Course Description
This course is an introductory programming class, appropriate for students with no prior programming experience. Traditionally, introductory programming teaches algorithmic problem-solving, where a sequence of instructions describe the steps necessary to achieve a desired result. In this course, students are asked to go beyond this sequential thinking and to think concurrently, modularly and critically about the creative potential of software. By its end, students are empowered to write and read code for event-driven, object-oriented, graphical user interfaces like websites, interactive installations, games and others.
Prerequisites
None.
Course Objectives
Students in this course will:
- Learn the basics of programming and creative coding using Javascript with the p5.js library and C++ with the Arduino platform.
- Write code and develop interactive projects within the context of visual art and design.
- Apply their understanding of digital media to software.
- Think critically about technology and its social, economical and political effects.
- Learn best practices for designing software within an event-driven, object-oriented, real time framework.
- Experiment with different techniques for data processing and user input/output.
- Propose and develop a complete software experience as a final project.
An Outline of the Course
We will meet in person for class once a week. During this time we will cover new topics on different aspects of creative programming through presentations, examples and short coding exercises.
We will also devote class time to review homework assignments and discuss assigned readings.
Some of the other class activities are discussed in detail below.
Assignments
You will have weekly programming homework assignments to further practice and develop the concepts covered in class. These will be simple exercises at first, but will get more substancial as the semester progresses. They won’t necessarily get more difficult, but will gradually become less prescriptive and allow for greater creative flexibility and experimentation.
In addition to the code, these assignments will require a short writeup that includes: sketches of the initial idea, description of your strategy, experiments that didn’t work, experiments that worked, but were left out for other reasons, any notes on aspects of the project you would like to keep working on if given more time, technical and conceptual references, etc.
Assignment submissions will be made through Brightspace.
Readings
Each week you will also read and respond to a short text about programming, technology, and/or social issues invulving programming and technology.
The responses will be short, 200-word texts written to express your opinion and feelings about the text and the subject.
Class Participation
Each week we will review the homework assignment and the readings during class. You are expected to be actively engaged in these discussions, whether it’s presenting your work or receiving feedback from other students.
Projects
There will be two larger multi-week projects throughout the semester, the first around week 5 and the other around week 11.
The shape, form and content of these projects are largely up to you to define, but the projects should demonstrate significant mastery over the technical concepts discussed in class.
You will be responsible for keeping a blog that documents progress of the project, and for presenting the final version of your project in class.
Quizzes
We will have sporadic online take-home quizzes. These will cover technical concepts and will be used not only to test your knowledge, but mostly to give me information about how you’re progressing in the class.
Grading
The grade for this course will be determined according to the following:
Activity | % of Final Grade |
---|---|
Weekly Programming Assignments | 25% |
Weekly Reading Responses | 20% |
Quizzes | 5% |
Midterm Project | 20% |
Final Project | 30% |
Letter grades for the entire course will be assigned as follows:
Letter Grade | Points | Overall Percent |
---|---|---|
A | 4.00 | 90% - 100% |
B+ | 3.33 | 85% - 89.99% |
B | 3.00 | 80% - 84.99% |
C+ | 2.33 | 75% - 79.99% |
C | 2.00 | 70% - 74.99% |
D+ | 1.33 | 65% - 69.99% |
D | 1.00 | 60% - 64.99% |
F | 0.00 | 0% - 59.99% |
Course Schedule (subject to change)
Week 01 (2023/09/06)
- Review Syllabus
- Introduction
- What is Programming
- Intro to p5.js
- Setting up dev environment
- Assignment: setting up dev environment and empty p5js project
- Reading: Program or Be Programmed (Intro) by Douglas Rushkoff
Week 02 (2023/09/13)
- Review Assignment & Reading
- Math Review
- What is Git
- p5js: Functions and variables, pixels and canvas, transforms
- Assignment: Drawing shapes with p5js
- Reading: Software Studies: A Lexicon (Intro) by Matthew Fuller
Week 03 (2023/09/20)
- Review Assignment & Reading
- p5js: Loops and conditionals, variation and randomness
- Assignment: Drawing many shapes using loops and randomness
- Reading: Glitch Feminism (Intro) by Legacy Russell / Cyberfeminism Index
Week 04 (2023/09/27)
- Review Assignment & Reading
- Pseudocode
- p5js: Functions, time and movement, mouse and events
- Assignment: Interactive and time-based shapes
- Reading: Art of Interactive Design (Chp 1) by Chris Crawford / The Media Art Pose by Golan Levin
Week 05 (2023/10/04)
- Review Assignment & Reading
- p5js: Arrays and dictionaries, data, CSV and JSON
- Assignment: Data visualization
- Reading: W. E. B. Du Bois’s Data Portraits (Intro and Plates) by Britt Rusert and Whitney Battle-Baptiste
- Midterm project: Proposal
Week 06 (2023/10/11)
- Review Assignment & Reading
- p5js: Objects, text and strings
- Assignment: Visual poetry
- Reading: Ways of seeing (Part 1) by John Berger
- Midterm project: Pseudocode
Week 07 (2023/10/18)
- Review Assignment & Reading
- Some notes on debugging
- p5js: More objects, images and pixels
- Assignment: Midterm project
Week 08 (2023/10/25)
- Midterm Project Presentations
- p5js: The DOM and audio files
- Assignment: Image manipulation and sound visualization
- Reading: Nonhuman Photography (Intro) by Joanna Zylinska
Week 09 (2023/11/01)
- Review Assignment & Reading
- p5js: ML and image and audio processing
- Assignment: Using the camera as an input device
- Reading: The Atlas of AI (Intro) by Kate Crawford / New Extractivism by Vladan Joler
Week 10 (2023/11/08)
- Review Assignment & Reading
- Working with electricity
- Arduino: Setup, wires, outputs, analog and digital
- Assignment: Visualizing time (again)
- Reading: Race After Technology (Intro) by Ruha Benjamin
Week 11 (2023/11/15)
- Review Assignment & Reading
- Finite State Machines
- Analog vs Digital
- Arduino: More I/O, serial port
- Assignment: Password machine
- Reading: Code and Clay, Data and Dirt (Intro) by Shannon Mattern
- Final Project: Description
Week 12 (2023/11/29)
- Review Assignment & Reading
- Arduino: More Analog Input, and Serial, WiFi and BLE communication
- Assignment: Physical interfaces: controlling p5js with arduino
- Reading: The Marvelous Clouds (Intro) by John Durham Peters / Worlds In Figures by Evan Roth
Week 13 (2023/12/06)
- Review Assignment & Reading
- P5js sound library revisited
- Final Project: Workshop
- Reading: The Question Concerning Technology in China (Intro) by Yuk Hui
Week 14 (2023/12/13)
- Guest Speaker
- Discuss Reading
- Final Project: Progress Presentation
- Assignment: Final Project
Week 15 (2023/12/20)
- Final Project Presentations
Expectations for Work Outside the Classroom
Students should expect to spend roughly 5 hours each week on supplemental work in this course. This may include reading assignments, homework assignments, writing assignments, research, studying, etc.
Office Hours
I will be available for 2 hours a week to answer questions, help with assignments, chat about creative code, etc. These will be in the IDM Grad Lab (Room 325A) on Mondays and Wednesdays from 10:00am to 12:00pm.
These are not mandatory. If you have questions or need help with some aspect of the material, but are unable to attend these, send me an email and we’ll find a time to meet.
Required Materials
- A text editor suitable for writing code, like VSCode.
- Arduino IDE
- Electronics Kit (details TBD)
- A notebook (digital or physical) for sketching ideas that can be included in write-ups.
Textbooks
There are no required books for class. Additional reading materials will be distributed throughout the semester.
Optional Textbooks
These books are excellent companions for the materials we’ll be covering:
- Generative Design 2nd ed by Benedikt Gross, Hartmut Bohnacker, Julia Laub, Claudius Lazzeroni. pdf (nyu lib)
- Getting Started with p5js by Lauren McCarthy, Casey Reas, Ben Fry. pdf (nyu lib)
- Form+Code by Casey Reas, Chandler McWilliams. pdf (nyu lib)
- Getting Started with Arduino 3rd ed by Massimo Banzi, Michael Shiloh. pdf (nyu lib)
Resources
Course Policies
Attendance
You are expected to attend all class sessions. Absences due to non-emergency situations will only be cleared if you let me know a week or more in advance, and even then only for compelling personal or professional reasons (e.g., attending an important conference, going to a wedding). If you’re unable to attend class due to contagious or incapacitating illness, please let me know by e-mail or slack before class begins.
Each unexcused absence will deduct 5% from your final grade. If you have three or more unexcused absences, you risk failing the course.
Lateness
Be on time to class. If you’re more than fifteen minutes late, or if you leave early without letting me know ahead of time, it will count as an unexcused absence.
Late Assignments
Late assignments will be penalized 10% of the total grade per day they are late. For example, the maximum grade possible for an assignment that is worth 100 points, would be 90 points if turned in the day after the due date, 80 points if turned in two days after the due date, etc…
“Incomplete” Grade
Under certain dire and unforeseen circumstances, like a critical emergency, a student may request an Incomplete/I grade. Faculty does not have the ability to give a grade of Incomplete without prior approval from the Office of Student Advocacy.
It is therefore the student’s responsibility to contact the student advocate and describe their circumstance requesting an incomplete. If this is granted, the advocate will reach out to the faculty member, who will work with the student to develop a detailed plan for completion which includes a specific end date.
Tech Etiquette
You’re welcome to use laptops/devices in class to take notes, work on exercises and look up references, but be mindful of other students and close laptops/devices during presentations and discussions. For context: Why I Just Asked My Students To Put Their Laptops Away.
Social Etiquette
These Social Rules from The Recurse Center should be kept in mind during class discussions, presentations, critiques:
Also, these observations from a discussion about ethics in tech are a helpful reminder:
“There is a general rule for comedy and art: always punch up, never punch down. We let comedians and artists and miscellaneous jesters do outrageous things as long as they obey this rule. You can poke fun at yourself, you can make a joke at the expense of someone with higher social status than you, but if you mock someone with lower status, it’s not cool.”
“If you make a joke, and people get really offended, it’s almost certainly because you violated this rule. People don’t get offended randomly. Explaining that ‘it was just a joke’ doesn’t help; everyone knows what a joke is. The problem is that you used a joke as a means of being an asshole.”
Be sensitive to what your classmates might find offensive, triggering or violent and be graceful and listen carefully when your work gets called out for being offensive, triggering or violent.
Academic Integrity
Violations of academic integrity are considered to be acts of academic dishonesty and include (but are not limited to) cheating, plagiarizing, fabrication, denying other access to information or material and facilitating academic dishonesty, and are subject to the policies and procedures noted in the Student Handbook and within the Course Catalog, including the Student Code of Conduct and the Student Judicial System. Please note that lack of knowledge of citations procedures, for example, is an unacceptable explanation for plagiarism, as is having studied together to produce remarkable similar papers or creative works submitted separately by two students, or recycling work from a previous class.
Please review NYU’s School of Engineering’s academic dishonesty policy in its entirety. Procedures may include, but are not limited to: failing the assignment, failing the course, going in front of an academic judicial council and possible suspension from school. Violations will not be tolerated.
All work for this class must be our own and specific to this semester. Any work recycled from other classes or from another, non-original source will be rejected with serious implications for the student. Plagiarism, knowingly representing the words or ideas of another as one’s own work in any academic exercise, is absolutely unacceptable. Any student who commits plagiarism must re-do the assignment for a grade no higher than a D. In fact, a D is the highest possible course grade for any student who commits plagiarism.
A Special Note on Open Source and “Found Code”
There’s an amount of sharing and re-using that will happen in this course due to the open source nature of the libraries, tools and learning materials we will be using. Plus a lot of assignments will be turned in using github, a platform for sharing code and other content.
Nonetheless, we have to be careful and conscious about the difference between using available tools that help with our learning experience and submitting other people’s work as our own. It’s not hard to find code online that will do things similar to, or exactly alike, the things you will developing for this class. It is NOT ok to use those as part of an assignment or project for this class.
On the other hand, it’s also not hard to find code/libraries/packages/examples that solve specific technical tasks that are part of a larger project or assignment. For example: a library that converts gifs into movies or code for working with different text encodings. These are specific tasks that we aren’t going to solve on our own, so using an open source solution is acceptable and expected.
You are expected to cite any tutorials, examples, libraries or inspiration that you use for our work. Sometimes the authors have a specific way they’d like their work cited (CC licenses), otherwise a name and a link is fine.
TL;DR: Copying assignment code from other sources, using any code from other sources with only slight modifications or using any code from other sources without a reference is plagiarism.
If there are questions about a specific situation, please ask.
A Special Note on LLMs and Large Diffusion Models
This is a class about creative uses of technology, and LLMs and interfaces like ChatGPT, Midjourney, etc definitely have their place in discussions about technology, society and creativity. Being in the environment we are in, it has become impossible to ignore these tools.
Having said that….
You may use AI interfaces to help generate ideas and images as it pertains to the brainstorming or ideation portions of a project and/or to generate images for presentations, as long as proper credit is given.
You may NOT submit any work generated by these interfaces as your own.
Given that this is an introductory course to programming, and we’re all starting fresh, I don’t believe there is any situation that will warrant the use of these tools for generating code. Save that for a future when you might have to write tedious software for parsing/flipping/transforming database entries. There should be an aura of fun to the code you are writing, and a sense of accomplishment in learning how to make computers do unexpected things, that doesn’t justify the use of tools that generate code.
Likewise, writing/response assignments will be short and personal, asking not only for your understanding of the material, but also your thoughts, interpretations, opinions and concerns about certain topics related to art, design, society and technology. Don’t sell yourself short! I want to hear your voice and words regarding these topics.
As always, if there are any questions about a specific situation, just ask.
Academic Accommodations
If you are a student with a disability who is requesting accommodations, please contact New York University’s Moses Center for Students with Disabilities at 212-998-4980 or mosescsd@nyu.edu. You must be registered with CSD to receive accommodations. Information about the Moses Center can be found at https://www.nyu.edu/csd. The Moses Center is located at 726 Broadway on the 2nd floor.
If you are experiencing an illness or any other situation that might affect your academic performance in a class, please email the Office of Advocacy, Compliance and Student Affairs: eng.studentadvocate@nyu.edu.
Inclusion
The NYU Tandon School values an inclusive and equitable environment for all our students. I hope to foster a sense of community in this class and consider it a place where individuals of all backgrounds, beliefs, ethnicities, national origins, gender identities, sexual orientations, religious and political affiliations, and abilities will be treated with respect. It is my intent that all students’ learning needs be addressed, and that the diversity that students bring to this class be viewed as a resource, strength and benefit. If this standard is not being upheld, please feel free to speak with me.
Credits
This syllabus has been inspired by previous versions of this course and includes words/ideas by: