No history yet

Problem Understanding

First, Understand the Problem

Before you write a single line of code or sketch out a solution, the most critical step is to deeply understand the problem you're trying to solve. It’s like being a detective. You can't find the culprit until you know exactly what crime was committed. Rushing into a solution without a clear picture of the problem often leads to solving the wrong thing, wasting time and effort.

The first and most crucial step in any problem-solving technique is accurately identifying and defining the problem.

Jumping ahead is tempting, but a few minutes spent clarifying the details upfront can save hours of frustration later. This initial phase isn't about finding the answer; it's about defining the question perfectly.

Define the Problem

A well-defined problem statement is a clear, concise description of the issue. It leaves no room for ambiguity. It's the difference between being told to "build a vehicle" and being asked to "build a two-person, battery-powered car that can travel 100 miles on a single charge."

Consider this vague request: "Make a program to sort a list of numbers."

This seems simple, but it's full of unanswered questions. Should the numbers be sorted from smallest to largest, or largest to smallest? What kinds of numbers are we dealing with—integers, decimals, or both? What if the list is empty? A better problem statement clarifies these points.

A refined problem statement: "Write a function that takes a list of integers and sorts them in ascending order (from smallest to largest). If the input list is empty, it should return an empty list."

This version is precise. It tells us the exact task, the direction of the sort, the type of data, and how to handle a special case. This clarity is your foundation.

Inputs and Outputs

Once the problem is defined, the next step is to identify your inputs and expected outputs. Inputs are the raw materials your algorithm will work with. Outputs are the finished product it must produce.

Lesson image

Let's use a simple example: finding the longest word in a sentence.

  • Input: A single string of text, like "The quick brown fox jumps over the lazy dog."
  • Output: The single word that has the most characters, which would be "quick" (or "brown" or "jumps," as they all have 5 letters).

Mapping out your inputs and outputs helps you visualize the beginning and end of your process. What data are you given? What data must you return?

Constraints and Requirements

Constraints are the rules of the game. They are the limitations or conditions you must operate within. Requirements are the specific criteria your solution must meet. Ignoring them means your solution, no matter how clever, is incorrect.

Let’s revisit our sorting problem: "Write a function that takes a list of integers and sorts them in ascending order."

What are some possible constraints?

Constraint TypeExample
TimeThe function must complete in under 1 second.
MemoryThe algorithm cannot use more than 100 megabytes of memory.
Data RangeThe integers in the list will always be between -1,000 and 1,000.
UniquenessThe input list may contain duplicate numbers.
Edge CasesThe function must handle an empty list or a list with only one number.

These details are not trivial. A time constraint might push you toward a more efficient algorithm. A memory constraint might prevent you from creating copies of the data. Understanding these rules shapes your entire approach to finding a solution.

Quiz Questions 1/5

What is the most critical first step to take before writing any code to solve a problem?

Quiz Questions 2/5

Which of the following is the best example of a well-defined problem statement?

Nailing down these three areas—the problem statement, inputs/outputs, and constraints—is the blueprint for your solution. With a solid blueprint, you're ready to start building.