# Solving problems

Computers are tools for solving problems, so it makes sense to spend time thinking about how to actually use them for this. The following is a list from a CourseraSpecifically, the Algorithmic Toolbox course. algorithms course:

**Read the problem statement**. What is the task? What are the resource constraints?**Design the algorithms**. Prove its correctness and estimate its performance.**Implement the algorithm**.**Test and debug**.**Deploy / publish / etc…**.

## How to solve any problem

How to solve it is the name of a book by G. Pólya
Pólya, G. and Conway, J. (2014). *How to solve
it*. Princeton, NJ: Princeton University Press. that describes an
approach for solving any problem. Thought it's mathematically focused,
it applies well to other domains. The steps for solving problems
outlined here are thus:

- Understand the problem
- Clearly state the problem
- What is the goal of a solution to the problem?
- Break down the problem into sub-problems
- Devise a plan
- Potential strategies:
- Eliminate possibilities
- Consider special and edge cases
- Apply direct reasoning
- Find patterns
- Draw diagrams
- Solve simpler problem
- Develop a model
- Be ingenious
- Are there solutions to related problems? Have you seen similar problems before that you can apply to this (or to its sub-problems)?
- Execute the plan
- Check each step.
- Seriously, double check your math. Simple errors always get me and they translate through.
- Retrospective
- Does the solution fit the problem?
- What are the lessons learned from the process?

Last updated on 2018-04-11.