/DM-GY-6063B-Creative-Coding

Repository for Allison Parrish's section of Creative Coding.

Primary LanguageJavaScript

Polytechnic School of Engineering of New York University
Integrated Digital Media
Technology, Culture and Society

DM-GY 6063 B Creative Coding

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.

IDM program objectives

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.

Course objectives

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.

Methodology

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.

Technology

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).

Requirements

  • 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.

Reading

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.

Grading policy

Component Percentage
Attendance and participation 30%
IDM Coursework Documentation 5%
Assignments 10 x 4% = 40%
Final project 25%

Attendance, lateness and in-class behavior

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) 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 my clearance), it will count as an unexcused absence.

In-class behavior

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.)

Procedures should punch up

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.

Schedule

###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:

Notes:

Additional resources:

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

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

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

###Session 12: November 19

###Session 13: December 3

###Session 14: December 10

  • Final project check-ins
  • In-class work or topics selected by class

###Session 15: December 17

  • Final project presentations