1.3 Practice: decomposition, abstraction and subprograms