Problem-Solving, Program Design, and Program Implementation