introduction to programming notes and exercises