Polytechnic School of Engineering of New York University
Integrated Digital Media
Technology, Culture and Society
Fall 2015 / Thursdays 6:30-9:20pm MAGNET 825
Your professor: Allison Parrish. E-mail me: aparrish@nyu.edu.
Office hours: Wednesdays, 4pm to 5:30pm at MAGNET (adjunct's work area)
##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 trained to go beyond this sequential thinking, to think concurrently and modularly. By its end, students are empowered to write and read code for event-driven, object-oriented, graphical user interfaces.
Students will:
-
Develop conceptual thinking skills to generate ideas and content in order to solve problems or create opportunities.
-
Develop technical skills to realize their ideas.
-
Develop critical thinking skills that will allow them to analyze and position their work within cultural, historic, aesthetic, economic, and technological contexts.
-
Gain knowledge of professional practices and organizations by developing their verbal, visual, and written communication for documentation and presentation, exhibition and promotion, networking, and career preparation.
-
Develop collaboration skills to actively and effectively work in a team or group.
Students in this course will:
- Understand the basics of creative coding in Javascript (p5.js/node.js).
- Apply their understanding of digital media to software.
- Learn best practices for designing software within an event-driven, object-oriented, real time framework.
- Experiment with different techniques for user input and output, including sensors and non-traditional screens.
- Propose and develop a complete software experience as a final project.
The course is presented in a tutorial format: most class sessions will consist of the instructor demonstrating and explaining some aspect of computer programming. The first seven weeks of the course are centered around basic programming concepts, with a focus on computer visuals; following that, the approach of the course is oriented toward particular topics. (These topics are subject to change as the interests of the students become more clear.)
We'll also be critiquing student work in-class, generally in an informal way and on a volunteer basis.
We'll be learning p5.js, a Javascript port of the perennial favorite Processing.
There are lots of ways to program with p5.js. We're going to try out the p5.js editor. Download it here (for Mac and PC).
- Students are responsible for ten weekly assignments, each of which is designed to give students the opportunity to demonstrate and deepen their mastery of the technical topics presented in class.
- Students must document their work using the IDM wordpress installation on http://sites.bxmc.poly.edu (or similar blogging site)
- In the last week of class, students will present a final project. The shape, form, and content of the final project are left up to the student, but the project should demonstrate significant mastery over the technical concepts discussed in class. Students are responsible for presenting their project in class and for accompanying documentation of the project (including the full source code). More details on this as the semester progresses!
##Assignments
The assignments are your opportunity to be on the hook for putting your skills to the test. They're designed to test and deepen your knowledge while giving me valuable information about how you're progressing in the class.
Turn in your assignments using this Google Form.
Specific requirements for assignments:
- Each assignment should be accompanied by a blog post that documents your process in fulfilling the assignment's objectives.
- You'll need somewhere to upload your completed sketches. If you already have your own web hosting service (DreamHost, say), that's great! If not, I'll show you how to set up a Neocities account in class.
- Assignments must be turned in before class on the day they're due. Late assignments will not be accepted.
- Assignments will be graded on their technical mastery and creativity.
There is no assigned textbook for this class, but I may assign one-off readings throughout the semester for in-class discussion. If you're the kind of student that benefits from having a textbook close at hand, please buy Make: Getting Started with p5.js: Making Interactive Graphics in JavaScript and Processing, by Lauren McCarthy, Ben Fry, and Casey Reas (when it's released!).
If you're looking for other supplementary sources of programming knowledge and exercises, refer to Katherine Bennet's excellent list of resources.
Component | Percentage |
---|---|
Attendance and participation | 30% |
IDM Coursework Documentation | 5% |
Assignments | 10 x 4% = 40% |
Final project | 25% |
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) 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.
Be on time to class. If you're more than fifteen minutes late, or if you leave early (without my clearance), it will count as an unexcused absence.
Laptops must be closed while your fellow students are presenting work. You're otherwise welcome to use laptops in class, but only to follow along with the in-class tutorials and to take notes. (Keeping all of this in mind.)
Read Leonard Richardson's Bots should punch up. "You can poke fun at yourself (Stephen Colbert famously said 'There's no status I would not surrender for a joke'), 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." Be sensitive to what your classmates might find offensive, triggering, or violent; be graceful and listen carefully when your work gets called out.
##Academic Integrity
Please review NYU's School of Engineering's academic dishonesty policy in its entirety. For the purposes of this class, "plagiarism" that violates the academic integrity policy is defined as representing someone else's code (or other procedure) as your own. (We will, of course, liberally be using media that other people have created as source material for our code and procedures—this does not violate the academic integrity policy. You are, however, expected to cite the sources of these materials where possible and appropriate.)
##Disability accommodations
If you are 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 http://www.nyu.edu/csd. The Moses Center is located at 726 Broadway on the 2nd floor.
###Session 01: September 3
- Course introduction: What is programming?
- Syllabus overview
- Using the p5.js application
- Uploading to the Internet
- Your first sketch
Works cited:
- Sol LeWitt, Wall Drawing instructions (link is to "Solving Sol," a site where programmers attempt to interpret the instructions with code)
- Casey Reas, Process Compendium (example of what the realization looks like)
- Yoko Ono, Grapefruit
- Fluxus Performance Workbook
- Jackson Mac Low, Insect Assassins and Call Me Ishmael (examples of "diastic")
Notes:
Additional resources:
- Learning p5.js, video tutorials from Dan Shiffman
- p5.js tutorials
Assignment #1, due September 10: Create a drawing with p5.js and upload the
source code for your drawing to the Internet. Limit yourself to the following
Processing functions: line()
, triangle()
, quad()
, rect()
, ellipse()
,
fill()
, stroke()
, and strokeWeight()
. Draw something beautiful or
intentionally banal.
###Session 02: September 10
- Processing: More shapes
- Values, types, and expressions
- Variables
- Loops
Notes:
Assignment #2, due September 18: Rework your first assignment to make use of
variables, expressions and loops. In your documentation, include screenshots of
how changing a single variable in your sketch effects the way the sketch looks.
EXTRA CREDIT: use a nested for
loop (i.e., one for
loop inside of another).
###Session 03: September 17
- Javascript details: Comments, code formatting, numbers
- Changes over time
- Simple interactivity
- Flow control (if/else)
- Randomness
Notes:
Assignment #3, due September 24: Create an artwork that responds to user input
and changes over time. Your work should make use of one of the methods of
oscillation discussed in class, at least one of the three variables we
discussed for making use of mouse input, and the code should contain at least
one if
statement.
###Session 04: September 24
Assignment #4, due October 1: Create a visual work that makes use of functions, loops and transformations to form repeating shapes and patterns with subtle variation. (You can incorporate interactivity and change over time if you'd like, but it's not necessary.) Some visual references: Casey Reas, Yes No; Gerhard Richter, 180 Farben, Untitled, Jean Arp, Lacey Micallef's animated gifs.
###Session 05: October 1
Assignment #5, due October 8: Create an overwhelming interactive audio visual experience using images and audio. (References TK.)
###Session 06: October 8
Assignment #6, due October 22: Create a sketch that keeps track of user action over the course of each instance of the sketch being run (clicks, keypresses, etc). Alternatively (or as a bonus): Use data from a CSV file to draw a simple data visualization.
###Session 07: October 19 (this is a make-up session for October 15)
###Session 08: October 22
- Text and type. Notes.
Combined assignments #7/#8: Create a work of electronic literature. See the Electronic Literature Collection for inspiration (volume 1, volume 2). See also Ubuweb: Visual Poetry. EXTRA CREDIT: Use object-oriented programming somewhere in your sketch.
###Session 09: October 29
Assignment #9, due November 5. Make a sketch that meets one (or more) of the
following descriptions: (a) Adapt an earlier homework so that it uses HTML
controls (like buttons, sliders, text input fields). BONUS: Incorporate an HTML
control from p5.dom
that we didn't talk about in class. (b) Make a sketch
that creatively re-interprets the pixels in a video (whether pre-recorded or
from the webcam). For inspiration, see the work of Nam June
Paik, Golan
Levin, Zach
Lieberman.
###Session 10: November 5
- Using external libraries
- Simple generative language techniques with RiTaJS
- More, if time! (Markov chain generation, p5.speech)
Assignment #10, due November 12. Two options this week. (1) Make a sketch that modifies or generates language creatively, using the RiTaJS library. This can be an extension of assignment #7/8, if you want. Bonus points for using features of RiTaJS that we didn't discuss in class. (2) Make a sketch that uses some other 3rd-party library for p5.js. Here's a list (check in the "Contributed" section).
Supplementary assignment. Come prepared on Nov 12 to pitch an idea for your final project. We'll discuss these in class. If you have a prototype: even better!
###Session 11: November 12
- Final project proposals
- Games and game-like things with p5.play
###Session 12: November 19
- Final project check-in
- p5.play continued
- p5.js and mobile devices (code examples in this repository)
###Session 13: December 3
- Final project check-in
- Node.js overview (code examples in this repository)
###Session 14: December 10
- Final project check-ins
- In-class work or topics selected by class
###Session 15: December 17
- Final project presentations