anchor.diff:  . Contains no duplication
   . Expresses the intent of the programmer
   . Minimizes the number of classes and methods
  - 
  +
   
   === class organization
   . Classes should be small
  
positive.code: 
  === Turing Complete
  
  The ability to define functions, to use function composition and recursion, and that 
  has a conditional statement, is a complete programming language.  
  We say it is *Turing complete*, which means that it can compute all the functions that a 
  Turing machine can compute.
  
  === Invariant programming
  
  This allows one to write efficient and to easily reason about the behaviour of your loops.
  The technique involves understanding a few concepts, 
  .the first is being able to describe your problem in mathematical terms, as a specification
  .the second is understaing The principle of communicating vases
  .and third is tail recursion
  
  === Complexity 
  
  Big-O notation is about the Worst-case scenario of an algorithm
  
  
negative.code: O(n) = linear complexity
  O(log n) = logarithmic complexity
  O(n^2) = Polynomial complexity
  O(n!) = Factorial complexity
  
  === Object Oriented Programming (OOP) three main principles for structuring programs
  ==
  . Data Abstraction - provide guarantees and reduce complexity
  . Polymorphism - compartmentalize responsibility
  . Inheritance - avoid redundancy and encourage incremental development
  