Can we capture the unpredictable evolutionary and emergent properties of nature in software? Can understanding the mathematical principles behind our physical world world help us to create digital worlds? This class focuses on the programming strategies and techniques behind computer simulations of natural systems. We explore topics ranging from basic mathematics and physics concepts to more advanced simulations of complex systems. Subjects covered include forces, trigonometry, fractals, cellular automata, self-organization, and genetic algorithms. No computer programming experience is required, the course will start with the basics of code using HTML, CSS, and JavaScript (with the p5js framework). In addition to learning technical skills and discussing scientific concepts, students will have the opportunity to visit science museums, art galleries, and artist studios in the London area.
- Daniel Shiffman, daniel dot shiffman at nyu dot edu
- Course Number: COREA-AD 17J (Cross-listed with Interactive Media and Technology)
- Meets daily: 10am - 1pm
- Office hours daily: 2pm - 3pm (and by appointment via e-mail)
- Credit Hours 4
- Class google group for discussion / questions / announcements
- Homework wiki
- Field Trip schedule TBA
- Meets 2-5pm today (as to not conflict with morning orientation).
- What is computational media?
- What is programming?
- How can I apply programming to my field of interest?
- Example projects.
- What is the potential for software within the visual arts?
- As a ____________, why would I want or need to write software?
- Programming language discussion
- history of Processing and p5.js (and processing.js?)
- Basics of web development
- Landscape of HTML, CSS, and JavaScript?
- Running things locally
- What is git and github?
- Drawing with numbers
- Coordinate Systems
- Shapes
- Color
- Code
- Sol Lewitt
- The flow: code blocks, setup, draw, and events
- Variation: mouseX, mouseY
- Variables: Declare, Initialize, Use
- random()
- map()
- FTPing to server
- Basics of blogging
- Introduction to wordpress
- Your blog is at yournetid.imnyuad.com/blog. Follow the install instructions at that link (it should be fairly self explanatory). If you are stuck you can watch this video walkthrough.
- If you want to get a bit more into wordpress, you can start here.
- p5.js
- Tutorial: Getting started with p5.js - Set up your files for editing and viewing.
- Reading / Watching
- Read p. 8-41 of Form + Code
- Supplemental
- This course is now taught with JavaScript and p5.js rather than Processing. The material in the following chapters and videos mirrors the content we do in class, however it is in a different language. I leave it up to you whether you find this helpful to look at or not.
- Chapters 1-2, Learning Processing
- Videos 0.0-2.1
- Homework 1
- Conditionals
- If, else if, else
- Boolean variables
- Relational Operators, Logical Operators
- Buttons, rollovers, switches
- Loops
- while
- for
- Modulo
- Functions
- Re-usability
- Modularity
- Calling vs. Defining
- Parameter Passing
- Return types
- Recursion
- Event functions
- More on randomness and Perlin Noise
- Intro to Objects
- Reading
- Chapter 8 of Learning Processing or Processing OOP tutorial
- Nature of Code Introduction
- "Hackers and Painters" by Paul Graham
- Homework 3
- Bletchley Park
- 8:55 am, meet at Guilford House
- Estimated return: 4:30pm
- Homework 4
- Studio visit to Random International and the V&A Museum.
- Homework 7
- Guest speaker: Stefanie Posavec
- Note class will meet in afternoon instead of morning
- Homework 8
- Note class will meet in afternoon instead of morning
- Final Project Proposal
- Final Project Proposal
- Assignments will include readings, programming exercises, and written documentation of your work.
- Each student will be required to post their homework to the class blog (instructions provided in class).
- Over the course of the term, you should have completed ten blog posts (8 exercises, 1 final project proposal, 1 final project summary). In total this should amount to at least 7,000 words (equivalent to 18 double-spaced pages.) Each blog post should contain a written response to material presented in class (specific questions will be provided), a description of your homework assignment, and questions regarding the technical material.
- For your final project proposal and summary, you will be required to write about your project concept and project development process.
- Students will be expected to collaborate, to document their work, to make presentations and to discuss their ideas regularly in class.
- Class time will be divided between technical lectures, independent project development, individual meetings with instructor, and project presentations / critique.
- In addition to regular class meetings, the instructor will organize a series of field trips to visit artist studios, gallery shows, and museum exhibits in the London area.
- Define the fundamentals of computation.
- Build creative software sketches that demonstrate knowledge of these fundamentals.
- Critically examine interactive art in the context of screen, sculpture, and web.
- Apply concepts from physics and mathematics to real-time software animation.
- Develop methodologies for simulating nature using computational algorithms.
- Propose and build a creative project made from computational methods.
- Class Participation (attendance, discussions, project proposal and implementation presentations) : 25%
- Writing Assignments: 25%
- Programming Assignments: 35%
- Final Project: 15%
- One liner – What did you do?
- Content – Why did you do it? Who is the audience? How does it engage with the theoretical and technical concerns we have discussed in this class?
- Demo
- Comments/Critique
- The Nature of Code, Daniel Shiffman
- The Computational Beauty of Nature, Gary Flake
- Form + Code, Casey Reas / Chandler McWilliams
- Learning Processing, Daniel Shiffman