If anyone wants this in a humorous 1 hour format, watch the legendary Jim Weirich (rip) explain it here: https://www.youtube.com/watch?v=FITJMJjASUs
Don't be discouraged that it is in Ruby as the concepts are completely general. Great watch even though I never coded a line of Ruby.