# MVCode Learning Plan

Each student works independently, and is tracked towards common learning outcomes.

Badges, points and ranks help motivate students to achieve their goals.

#### Math

Can read Cartesian coordinates Neophyte Cartesian Coordinates
Understands basic Arithmetic Neophyte Arithmetic Basics
Arithmetic: Multiplication/Division/Negatives/Decimals/Inequalities Hacker Arithmetic Basics 2
Elementary understanding of sine. (Amplitude, period) Coder Sine Wave Basics
Can plot mathematical functions Coder Function Plotter
Basic shape area and perimeter formulas (rectangles, circles, triangles) Coder Area and Perimeter Basics
Can solve right triangles (Find missing angles and sides) Coder Trigonometry with Right Triangles
Pythagorean theorem Coder Pythagorean Theorem
Basic Algebra (first order polynomials, averages, sqrt, pow) Coder Algebra Basics
Second order polynomials Developer Second Order Polynomials
Polar coordinates Developer Polar Coordinates
Spherical coordinates Developer Spherical Coordinates

#### Programming Fundamentals

Local vs Global Scoping Hacker Scoping
While Loops Hacker While Looper
processing shape functions (rect, ellipse, line, triangle) Hacker Processing Shapes
Can use if/else statements Hacker If/else Statements
Access array elements Hacker Array Access
Understands basic processing built-in functions: draw, setup, keyPressed Hacker Processing Functions
Mouse and Keyboard input (keyPressed, keyReleased, mousePressed, mouseReleased) Hacker Processing Mouse and Keyboard
function declaration vs function calls Hacker Functions Declaration vs Call
Access object properties Hacker Object Property Access
Processing image function Hacker Processing Images
Variables Hacker Variables
/rank_requirements/170 Hacker
for loops Coder For Loops
Array methods (length, push, can look up an use additional methods) Coder Array Methods
Class declaration with constructor Coder Class Declaration
Class methods Coder Class Methods
for...of loops Coder For Of Loops
Can use return statements in functions Coder Returns
Statically vs dynamically typed programming Developer Static vs Dynamic Typing
Callbacks/higher order functions Developer Callbacks
Rudimentary understanding of functional programming (map, reduce, apply, filter) Developer Functional Programming Basics

#### Computer Fundamentals

Can navigate to their Scratch account and lesson Neophyte Scratcher
Intuitive use of left vs right click Neophyte Left/Right Click
Can use a keyboard Neophyte Keyboarder
Can independently navigate web pages (open, forward/back, refresh, enter username/password) Neophyte Web page naivigator
Copy, Paste, Undo shortcuts Hacker Copy Paste Undo
Single user git basics (pull, push, clone, commit, etc) Developer Single-user Git Basics

#### Communication

Works through lessons independently Hacker Works Independently
Correct use of indentation and reasonable use of whitespace in code Coder Indentation and Whitespace
Can read external reference materials Coder External Referencer
Can translate appropriate pseudocode Coder Pseudocode
Can explain programming issues with proper vocabulary or diagrams Coder Explainer Basics
API calls Developer API Calls
Proficient in programming syntax (can write in a variety of languages and look up new syntax when needed Developer Proficient in Programming Syntax
Able to answer and explain programming fundamentals questions from Coder level students Developer Can Answer Coder Level Questions
Ask a good question on Stack Overflow Developer Stack Overflow
Create a Coder or above level exercise for other students Developer Coder Exercise Maker
Peer coding project (both contributing significant code to the project.) Developer Peer Coding Project
Codes neatly according to a reasonable convention (consistency and clarity are what's important) Developer Coding Convention

#### Creativity and Design

Student Portfolio with project Hacker Porfolio
Basic RGB color knowledge (Red, Green, Blue, White, Black, Purple, Yellow) Hacker RGB
Prevent and debug infinite loops Hacker Infinite Loop Debugger
Creation of independent project which demonstrates proficiency of concepts Coder Independent Project
Makes use of function parameters to simplify code Coder Function Parameters
Can make meaningful modifications to example projects or lessons Coder Meaningful Modifications
Uses debugging techniques (such as using console.log or running test programs) Coder Debugging techniques
Write skill-level-appropriate efficient code (use of loops, functions, "do not repeat yourself") Coder Efficiency Basics
Works outside of classtime (More than one day a week) Coder Work From Home Works at Home
Compete in a programming competition outside of code club (example: ludum dare) Developer Outside Programming Competition
Big O notation Developer Big O Notation
Designs and builds own projects Developer Designs and Builds Projects
Website with programming portfolio (github pages) Developer Web Portfolio
Mid level example interview questions Developer Mid Level Interview Questions
Simple example interview questions Developer Simple Interview Questions

#### Engineering and Applied Math

Rectangular Collision Detection Coder Rectangular Collision Detection
can design and build simple algorithms (sorting, reverse string, fibonnaci, etc...) Coder Algorithms Basics
Understanding of vector addition and subtraction Coder Vector Basics
Collision detection (rectangle,circle,triangle, composite) Developer Primitive Collision Detection
Vector math (arithmetic, cross/dot product) Developer Cross and Dot Product
A* pathfinding Developer A* Pathfinding
Equations of motion Developer Equations of Motion
Can implement gravity Developer Gravity