A guide to learning basic programming by writing fun, working programs that gradually become more complex