# Introduction to Programming for Non-Majors

These course materials are for CS 1004: Introduction to Programming for Non-Majors, taught at Worcester Polytechnic Institute. This course is taught using [p5.js](https://p5js.org), a free and open-source Javascript library for creative coding that is based on the [Processing](https://processing.org) project. The course is heavily project-based, and uses a form of [ungrading assessment model ](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/ungrading-self-reflection-and-self-evaluation)that relies heavily on [self-reflection and self-evaluation](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/ungrading-templates).&#x20;

Students complete [Skills Labs](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/skills-labs) that offer some structure for reinforcing core concepts, but still give significant room for creative expression and experimentation:

* [Lab 1: Three Points in Space](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/skills-labs/lab-1-three-points-in-space) - getting started with p5.js, procedural code execution, calling functions
* [Lab 2: Generative Art](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/skills-labs/lab-2-generative-art) - variables, control flow (if/else, for loops), user input (keyboard, mouse)
* [Lab 3: Image Processing](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/skills-labs/lab-3-image-processing) - loading images, arrays, pixels, considering efficiency/complexity
* [Lab 4: Data Visualization](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/skills-labs/lab-4-data-visualization) - strings, loading data from a file, creating/modifying simple objects

Students also work in groups to complete term-long projects (approximately 5 weeks of programming time). These happen in parallel with the labs; some students will learn concepts from labs early, others late. The [Project Guides](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/project-guides) section includes an outline of how projects are structured each week.

* [Finding Inspiration](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/project-guides/finding-inspiration) - based upon declared areas of interest, students seek out examples of programming used in that domain
* [Project Goal Setting](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/project-guides/project-goals) - once teams have been formed, students get to know each other, create asset maps to identify strengths and areas to learn, and define an initial project goal and plan for first week
* [Project Sprints](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/project-guides/project-sprint-template) - each week, students report what they have completed, what they did not complete, and what they plan to do for next week. They also identify questions they have or problems they are running into, for course staff to review and offer assistance.
* [Final Project Milestone](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/project-guides/final-submission) - students submit their final working project and present it in class, as well as a group-written postmortem on the project

There are a number of [class activities](https://codingcrafter.gitbook.io/intro-to-programming-for-non-majors-cs-1004/class-activities) that introduce core concepts. Some are documented in this repository; most are improvised.&#x20;

WPI teaches undergraduate courses on [7 week terms](https://www.wpi.edu/project-based-learning/wpi-plan). It's a fast pace! Each week has roughly:

* 2 hours of in-class activities focused on the concepts needed for the next lab, where they program alongside lecture, with frequent breaks for checking progress, answering questions, or challenging them to do more
* 2 hours of time to work on projects
* 1 hour of time to work on skills labs (with TA, in 20-person lab setting)
* up to 10 hours of students working outside of class

<figure><img src="https://i.creativecommons.org/l/by-nc/4.0/88x31.png" alt=""><figcaption><p>All course materials included on this site are free and open for use under the Creative Commons Attribution-NonCommercial 4.0 International License.</p></figcaption></figure>
