Introduction
There is no one right approach or methodology in design. If we all took the same path, we might all end up in the same place.
This course is presented as a project development studio, which means that the curriculum is here to support your individual projects. Therefore, you should always feel free to do things your own way — reinterpret assignments, follow different paths.
However, some of the in-class work and homework assignments involve assisting or reflecting upon the work of your peers. Here, you should only reinterpret assignments in ways that are mutually agreeable to the classmates with whom you are working.
As a project-oriented class, the curriculum will be adapted and revised somewhat over the semester to meet student interests. So please check back for updates and changes. And please let me know in person or by email if you would like a particular technical subject to be addressed during class time. I'm happy to cover any subject in C++ or software architecture in general that would be useful to you.
Two Poems about Toolmaking
Week 1
Before the first class
Read the first section of Buckminster Fuller's book, Operating Manual for Spaceship Earth — the section called "Comprehensive Propensities", easily found online.
Please consider the following questions and be prepared to discuss them in class:
- What are some of the "piano tops" that exist within the digital design tools you use today? Try to think of examples that carry over from the pre-digital era as well as ones from an earlier age of computing.
- What are some of the ways that the tools you use make a clean break from their predecessors?
- Are there any tools that have no predecessors at all? And if so, what sorts of problems do they solve?
- What would a world without "piano tops" be like?
Class
- Introductions
- Discussion of Buckminster Fuller reading
- Turtles all the way down: Re-inventing the while-loop in C/C++
- Discussion of initial project ideas and areas of interest
- In-class exercise: From Intuition to Exploration
In-Class Exercise: From Intuition to Exploration
- Form groups with classmates who are interested in a similar domain
- Discuss the current landscape of this design area: who uses it, what tools exist, what are their strengths and weaknesses
- Individually, make a list of assumptions about what is necessary or essential in this design space
- Reconvene: which assumptions seem universal? Which seem contextual, cultural, or temporary — "piano tops"?
- Consider: what tests or prototypes might help you further investigate your assumptions?
Homework
As a continuation of the in-class exercise, perform one (or a few) experiments. This can be done through code or any other means that seems appropriate to your inquiry.
Readings
- Meditation: On Description by Patricia F. Carini
- Gears by Seymour Papert
- Pixar Case Study: Determining the Benefits of Direct-Touch, Bimanual, and Multifinger Input
- New York Times review of Portal 2: Physics, With Wormholes by You
Videos
Week 2
Class
- Discussion of readings and video
- In-class exercise: Describing an Object
- In-class exercise: From Exploration to Formalization
- Technical Case Study: STL Containers: Capabilities and Constraints
In-Class Exercise: Describing an Object
Based on Prospect Center's Methodology. Take a few moments to observe the object. Make one statement about something you notice — how it looks, smells, its texture. Stay with direct observations rather than things you know about it from other contexts. Do not be afraid to say something obvious — everyone notices different obvious things, and that spectrum is valuable.
In-Class Exercise: From Exploration to Formalization
Each student presents homework explorations. Class responds descriptively, not qualitatively — stay with direct observations, resist inferring intent. What are features of the work? What themes do you notice? Based on the class's observations, consider: where did you succeed in bringing across an idea? Where was your idea seen differently?
Homework
Go back to your explorations and try to formalize. Emphasize the essential — find a pure distillation of the ideas you were pursuing. Begin to expand a feature set:
- Write a list of "user stories": simple statements like, "As a user, I should be able to adjust an image's brightness and contrast."
- From this high-level view, identify the data structures and transformations implicit in what you've described.
- Consider the paths that lead inevitably from your idea. As Chekhov said, "If you say in the first chapter that there is a rifle hanging on the wall, in the second or third chapter it absolutely must go off."
Readings
Videos
Week 3
Class
- Discussion of readings and video
- In-class exercise: From Formalization to Iteration
- Technical demonstration: Polymorphism, Inheritance, and Common Design Patterns in C++ — Code
In-Class Exercise: From Formalization to Iteration
Students present "feature sets" / "user stories" in small groups. In responding, don't try to change the presenter's point of view — try to help him or her refine it. The goal is feedback that will help the presenter create a clear plan of attack for developing the technical components:
- Which features or user stories seem most essential to the idea?
- Which seem extraneous, unresolved, or confusing?
- Which features will be difficult to implement?
- Can you think of any code or conceptual reference points that might be useful?
- Do you see any missed opportunities? ("Since you're already doing X, you could easily extend that to Y…")
Homework
Reflect on your earlier work and the comments made by your peers. Develop a plan of execution:
- Create a list of priorities: technically indispensable features, philosophically indispensable features, and features that improve usability without being essential.
- Estimate the difficulty and time commitment for each feature.
- Create a preliminary sketch of your technical architecture: what are the core systems, how do they communicate, and what design patterns might be used?
Readings
- What is Logo? And Who Needs It? by Seymour Papert
- Familiarize yourself with these canonical Design Patterns
Videos
Week 4
Class
- Announcements and discussion of readings and video
- Technical demonstration: An Architectural Overview of the Cinder Creative Coding Framework
- Brief "progress report" presentations and peer feedback
- One-on-one meetings to discuss individual projects
- In-class work-time
Homework
Start executing your technical plan:
- Gather your tools: ensure you've got all the basic pieces working together before going too deep.
- Before going deep on any particular component, work out the general relationships between components. Frame out your core systems and gradually add features as you go.
Readings
- Toward a Theory of Architecture Machines by Nicholas Negroponte
- Excerpt from Mindstorms by Seymour Papert — Introduction: Computers for Children and Chapter 1: Computers and Computer Cultures
Week 5
Class
- Discussion of readings
- In-class exercise: From Iteration to Reflection on Process
- Last-minute technical questions and opinion polls
In-Class Exercise: From Iteration to Reflection on Process
- What did you learn in the process that might have changed your initial approach?
- How were your high-level concepts impacted by low-level technical or design considerations?
- How did your high-level technical architecture evolve as you worked through low-level considerations?
- In what ways did your tools aid your creative process? In what ways did they hinder it?
- Were there things you were hoping to achieve that you couldn't because of limits in the underlying tools?
- How might someone answer the above questions in relation to the tool you've developed?
- When is a project finished? Is this project finished?
Homework
Prepare your project for final presentation. Be ready to:
- Discuss your project and development process
- Give a quick demonstration of the tool and its capabilities
- Have your classmates interact with the tool and provide feedback