Timeline Week 2 - TheIronYard--Orlando/FEE--2015--SPRING GitHub Wiki

Week 2 -- Intro to Programming, JavaScript, TDD

  • Intro to Programming:
    • Basic Types, Variables, and Operators
    • Conditionals and Loops
    • Functions and Callbacks
  • Running JavaScript via node
  • Basic TDD with node.assert
  • Writing pseduo-code and logical diagramming
  • Interactive debugging via C9 and Chrome

Objectives

Students should be competent at:

  • Writing vanilla JavaScript:
    • given significant structure
    • to solve logical problems
    • in a test-driven manner
    • with simple assert statements
  • Running JavaScript from the CLI:
    • via the node binary
    • via the mocha script
    • continuously with --watch
  • Pair programming with multiple partners:
    • Pilot-Copilot style
    • Ping-Pong style
    • Randori style with the class

Students should be familiar with:

  • Experimenting with JavaScript in:
    • the Cloud 9 IDE "Immediate" REPL
    • the Chrome JavaScript Console
    • the node REPL
  • All basic types in JavaScript:
    • Null
    • Undefined
    • Number
    • String
    • Boolean
    • Array as List
    • Object as Hash
  • Methods of the basic types, e.g. String.length, String.slice(), Number.toFixed()
  • Named function definitions and invocations:
    • with and without parameters
    • with variable parameters
  • Conditional statements and guard clauses
  • Looping statements with while and for
  • Breaking down problems into pseudo-code within code comments
  • Deleting and re-writing code in iterations
  • Logical digramming of blocks and conditions

Students should be exposed to:

  • Complex problem domains via Conway's Game
  • Various forms of refactoring:
    • decomposing conditionals
    • conditional chains to lookup
    • extract method / variable
    • replace literal
    • replace with guard

Projects

I should build...

  • Very basic math and string operations:
    • 1 + 1 vs '1' + '1'
    • 1 - 1 vs '1' - '1'
    • 'one' - 'one'
  • Basic calculator functions:
    • plus(a, b)
    • minus(a, b)
    • star(a, b)
    • slash(a, b)
  • String Calculator Kata (addition)
    • add('zero', 'zero') === 0
    • add('zero', 'one') === 1
    • add('one', 'one') === 2
    • add('one', 'two') === 3
    • add('two', 'two') === 4
    • refactor to data provider
  • Check Writing Kata (<10)
    • toString(1) === 'one dollar & 00/100s'
    • toString(2) === 'two dollars & 00/100s'
    • toString(3.14159) === 'three dollars and 14/100s'
  • Project Euler Problems (Randori Kata)
    • #1: Sum of 3s and 5s < 1000
    • #2: Sum of even Fibonaccis < 4M

They should build...

  • Individually and in Pairs
  • With TDD via require('assert')
  • Running from the CLI with:
    • node filename.js
    • mocha filename.js
    • mocha --watch filename.js
  • String Calculator via:
    • chained conditionals
    • checkpoints: 'ten', 'twenty', 'thirty', 'fifty', etc
    • refactored to lookup
  • Check Writing via:
    • chained conditionals
    • checkpoints: 0-10, 10-20, 20-30, 30-50, etc
    • refactored to lookup
  • Project Euler Problems 1 & 2
  • Chess Board as Array (from MDN)
    • with "Catalan: Closed" opening
    • with "Catalan: Closed" opening + midgame
    • refactored to array of step functions