.. _suggested-curriculum:

Suggested Curriculum
====================

The Arcade library is designed to support education.
Get students hooked on programming.
Then start teaching them new concepts, as students
discover the need.

Arcade's theme: "Only advanced actions should require advanced knowledge."
What does this mean? For example, if a students want to create an image
with drawing commands, they should
not have to know about defining functions, classes, or using decorators,
or any other advanced programming topic.

Below is a rough list of common first-course items to teach,
and the order they could be taught in.


Stage 1:
--------

Draw
^^^^

* Learn to call drawing commands and create your own drawings.
* Learn to use variables to change your drawing.
* Teach students about common error messages, and how to read
  and use them.


Stage 2:
--------

Draw and animate with functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Learn to create functions, so you can make your own draw_tree commands
* Learn to animate with functions and static variables
  (or skip this and use classes later. Static function variables are weird.)
* Teach students about expressions and simple mathematics in Python.

Stage 3:
--------

Learn to use loops
^^^^^^^^^^^^^^^^^^

* Learn to loop
* Learn nested loops (learn to use nested loops to draw grids, triangles, etc.)
* Testing and unit tests

Stage 4:
--------

Lists
^^^^^

* Working with lists
* Creating lists from scratch
* Keeping locations of items in a list (drawing stars or falling snow)
* Array-backed grids (This can be pushed back in the curriculum easily)

Stage 5:
--------

Object-oriented programming
^^^^^^^^^^^^^^^^^^^^^^^^^^^

* Object-oriented programming
* User control of items
* Sprites

Stage 6:
--------

Other topics
^^^^^^^^^^^^

Do these in any order:

* Physics engines
* Files
* Code libraries
* Searching
* Sorting
* Recursion
* String formatting
* Decorators