IAT 806: Intro to Computing (Fall 2026)

Welcome! This is a studio course on programming for interactive and generative work. We start from scratch in JavaScript and p5.js, and move on to learn some basics in computer graphics, using machine learning models in interactive web-based apps, and how software is structured. No prior programming experience is expected.

This page summarizes format, outcomes, policies, grading, and the weekly schedule. The order and details of the sessions are subject to change. When in doubt, the official SFU outline and Canvas announcements win if they ever differ from a draft here.

Format

  • Class — A mix of live coding and studio time. Sessions are recorded and posted on this site.
  • Prep — Some weeks have a short video or reading to do beforehand. These are posted with each week in the schedule. You should practice some of the programming concepts in advance. And watch the videos I send along.
  • Environment — We will use VS Code (if you're comfortable with something else, go for it), a browser, and Git. You will post all work and assignments on Github.
  • Expectations — plan roughly 5–7 hours/week beyond class for assignments and project work.
  • Two weeks have no class. Sept 30 and Nov 11 are statutory holidays. Those weeks run as take-home modules: material to watch and something to make, no in-class session.

Learning Outcomes

By the end of this course you should be able to:

  • Read, write, and debug JavaScript from scratch.
  • Build interactive, animated, and generative work with p5.js.
  • Structure a software project using version control, sensible file organization, and documentation.
  • Work with core computer graphics concepts: coordinate systems and transformations, raster and vector, and what the GPU does.
  • Use machine learning models in the web
  • Recognize and apply common software design patterns.
  • Simulate motion, forces, and emergent behaviour.
  • Scope, build, document, and exhibit an original project of your own definition.

Resources

  • Textbook — none required. Everything we use is free and online. I will share teaching material for each class.
  • p5.js reference — the primary reference for the course.
  • The Coding Train — Daniel Shiffman's video courses, used for some prep material.
  • The Nature of Code — free online, used late in the term.
  • ml5.js — machine learning models for the browser.
  • Environment — VS Code, a current browser, and a free GitHub account. We set all of this up in week 1.

Session videos & slides

Each week's recording and slides will be linked in the schedule table below as they go up.

Teaching Team

Instructor

Dr. Alireza Karduni

Email: akarduni@sfu.ca

Office hours: TBA

Course Policies

Contacting us

Use the course Discord for questions about material and assignments, so everyone gets the answer. Use SFU email for anything official such as concessions, grading disputes, accommodations. Please allow up to two business days for email replies.

Conduct

This course is a harassment-free environment for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, religion, or technical experience. If something happens that makes that untrue, tell me. If I am the problem, SFU has channels that do not route through me.

Illness

If you are sick, stay home. Sessions are recorded and material is posted. Let me know so we can work out how you catch up.

Accessibility

If anything about how this course runs makes it harder for you to do your best work, tell me early and we will adjust.

Late policy

10% a day for two days, 20% after that. If something real is going on, talk to me before the deadline rather than after.

AI policy

You may use AI tools to ask questions, have things explained, talk through an approach, and help find a bug. That is a reasonable use of them.

You may not have an agent write your code for you, on assignments or on the project. The point of this course is that you can write and read code yourself.

If you used AI in any capacity on something you submit, say so in a short note describing what you used it for. If you did not use it, state that too. This applies to code, writing, and images. You should be able to explain any line you hand in, and I may ask you to.

Grading

ComponentWeight
Assignments40%
Final project (proposal, midpoint demo, final work)35%
Final documentation10%
In-class participation15%

These are roughly the distribution of grades. I will give plenty of extra grade as we move on. So don't stress too much.

Final Project

You define one project early and build it through the term. You start thinking about it in week 1, discuss it in week 2, propose it in October, demo a running version in November, and exhibit it at the end of term. I know that people come in with different expertise. THE QUALITY OF YOUR FINAL PROJECT depends on where you start.

You choose the form and declare it in your proposal:

  • An artifact / installation, with documentation and a video, or
  • An artifact and a short paper in a conference format, if you are working toward a publication.

Either way I expect to see code in live

About the syllabus

This syllabus is subject to change. But use it as where we I will post all changes. I will send announcements when assignments are out. And I will update this table regulrarly.

Acknowledgements

This course builds on versions of IAT 806 taught by SIAT colleagues before this offering, including Philippe Pasquier, Wolfgang Stuerzlinger, and on the open teaching materials of Daniel Shiffman (The Coding Train) and the Processing Foundation.

Course Syllabus

W1
Sep 16
Topic:
Setup and your first sketch
Covered:
Git and GitHub; HTML, JavaScript, and p5.js; the canvas and coordinate system; shape and colour
Slides:
Assignments Out:
Assignments Due:
W2
Sep 23
Topic:
Motion and interaction
Covered:
Variables; the draw loop; mouse and keyboard input; conditionals; program state
Slides:
Readings & Prep:
3 readings (show more)collapse
Assignments Due:
  • Come with project ideas
No class
Sep 30
Topic:
No class — National Day for Truth and Reconciliation
Covered:
Take-home module: loops, arrays, and writing your own functions
Slides:
W3
Oct 7
Topic:
Systems of many
Covered:
Loops and arrays in practice; randomness; grids and generative composition
Slides:
Assignments Due:
W4
Oct 14
Topic:
Objects
Covered:
Classes and instances; arrays of objects; particle systems
Slides:
Assignments Due:
  • Project proposal
W5
Oct 21
Topic:
Space, motion, and pixels
Covered:
Transformations and the matrix stack; vectors; the pixel array and image filters; offscreen buffers and blend modes
Slides:
Assignments Due:
  • Assignment 2
W6
Oct 28
Topic:
Machine learning in the browser
Covered:
Pose, hand, face, and sound models with ml5.js; working with noisy real-time input; training a small model; ethics of capture
Slides:
W7
Nov 4
Topic:
Data, APIs, and the network
Covered:
Asynchronous JavaScript; calling APIs; language models and embeddings; keeping keys out of your repo; publishing your work
Slides:
Assignments Due:
  • Midpoint project demo
No class
Nov 11
Topic:
No class — Remembrance Day
Covered:
Take-home module: how graphics are drawn, what a shader is, and a first look at 3D in p5
Slides:
Assignments Due:
  • Assignment 3
W8
Nov 18
Topic:
Designing software
Covered:
State machines; events; composition; separating program state from rendering; refactoring
Slides:
W9
Nov 25
Topic:
Forces and emergence
Covered:
Vectors as forces; steering and flocking; cellular automata
Slides:
Assignments Due:
  • Assignment 4
W10
Dec 2
Topic:
Noise, oscillation, and making things interesting
Covered:
Perlin noise; sine and cosine as motion; particle systems driven by live input from a webcam or a model
Slides:
Exam period
TBA
Topic:
Exhibition
Covered:
Final presentations. Date TBA
Slides:
Assignments Due:
  • Final project and documentation