Joy Ko

Time and Place

  • Weekly Class: Monday, 9:40AM-12:40PM, BEB Rm 120
  • Office Hours: by appointment in BEB Rm 324

Course Description

In architectural practice, a working knowledge of design computation has gone from "nice to know" to "need to know", and yet many academic and professional institutions struggle to keep pace. At best, resourceful architecture students and practitioners piece together their computational skill sets in an ad-hoc manner, adopting fragmented sources developed in contexts unrelated to architectural design. This course is designed to address this unmet need by teaching foundational computational concepts tailored specifically towards architectural design. An understanding of the fundamental structures of design computation -- including the structure of code and algorithms for computational geometry- will prepare students to survive in the new reality of digital practice. The specific content of this course will be carried through a discussion of practical situations that architects commonly encounter, and in which computation has proven to be a powerful ally to generate effective solutions. These topics will evolve based on existing technology and challenges in practice, and will be drawn from topics such as aggregation, decomposition, complexity, optimization, fabrication, interoperating, exploration and collaboration.


Lectures and in-class workshops will be posted on the Class Dropbox. In addition here are some online sources:

  • Documentation for Python at
  • Documentation for at
  • How to Think Like a Computer Scientist: Learning with Python .PDF

Course Outline

Week 1 : (Sept 15) Overview; Getting Started in

In this class, we will give an overview of the class, and set up the infrastructure to begin Python scripting in

Week 2 : (Sept 22) Algorithmic Thinking, Code and Diagram

The abstract concepts of algorithm and data structures will be framed by exploring geometric constructions using a simple toolkit, and graphic diagrams to view code structure and execution will be introduced.

Week 3 : (Sept 29) Vectors, Functions, Transformations

The representation and manipulation of the vector-- the most fundamental object in our library -- is introduced through diagram, equation and code. In the workshop, functions will be written that encapsulate well-known planar transformations.

Week 4 : (Oct 6) Lines, Planes and Generative Pattern

Lines and planes are presented from a vector point of view alongside the implementation of these classes. In the workshop, we will practice manipulating properties of these simple geometric objects in addition to further list iteration to generate patterns such as fractals and guilloche lines.

Week 5, 6 : (Oct 13, 20) Collection Types, Aggregation, Midterm

Collection types -- polylines, polygons and meshes -- are shown to have a common basis of construction as classes. In the workshop, we continue manipulating geometric properties of objects, specifically for the purpose of creating components that can be populated across a collection of such objects. The midterm assignment will also be discussed.

Week 7 (Oct 27): Midterm Review

Week 8 (Nov 3): Curves, Surfaces, Other Coordinate Geometries

The parametric representations of curves and surfaces are introduced which underlies the functional view of drawing these objects using The richness of parametrizing using other coordinate geometries -- polar, cylindrical and spherical -- will be demonstrated in the workshop.

Week 9 (Nov 10): Surfaces, Desirable Features, Decomposition

Continuing our treatment of parametrization, we show how other coordinate geometries can be used to describe many surfaces using a rectangular domain. Using this simplified description, the Surface class is introduced. The basics of using this class, the construction and desirable features of classical surfaces, as well as the application to many decomposition examples will be demonstrated.

Week 10 (Nov 17): Classes, Fields, Complexity

The essence of object oriented programming is the ability to define custom classes of objects. The development of a Walker class will be demonstrated starting from a simple definition based on inputs of a position, direction and updating which allows traversal of a vector field.

Final Week (Nov 24): Final Project Deliverables, Course Evaluations