From coursera - Introduction to Systematic Program Design - Part 1