No history yet

Algorithmic Problem Solving

The Blueprint Before the Code

Knowing how to write a for loop or an if statement is like knowing how to use a hammer and saw. It’s essential, but it doesn't make you a carpenter. The real skill is knowing how to build the house. In programming, that means learning to think through a problem before you write a single line of code.

The first step is to create a plan in a language you're already fluent in: plain English. This plan is called a simplified, readable description of what your script needs to do. It has the structure of code, using words like IF, ELSE, and WHILE, but it doesn't worry about the strict syntax of a programming language. It’s all about the logic.

Think of pseudo-code as a recipe. It lists the steps and the logic, but it assumes the chef already knows the basic techniques.

Let's imagine a task: you have a list of new user email addresses. You need to create a final, clean list that contains only unique, validly formatted emails. Here’s how you might sketch that out in pseudo-code:

START

  INITIALISE an empty list called `raw_emails`
  INITIALISE an empty list called `clean_emails`
  INITIALISE an empty list called `seen_emails`

  FOR each `email` in `raw_emails`:
    // First, handle duplicates
    IF `email` is in `seen_emails`:
      CONTINUE to the next email
    ELSE:
      ADD `email` to `seen_emails`

    // Next, validate the format
    IF `email` contains an '@' symbol AND a '.' after the '@':
      ADD `email` to `clean_emails`
    END IF

  END FOR

  OUTPUT `clean_emails`

END

Notice how this plan is clear and unambiguous. Anyone can read it and understand the intended steps, regardless of which programming language they know. This is the blueprint.

Divide and Conquer

Complex problems can feel overwhelming. The key is to break them down. The strategy is a powerful mental model for this. Instead of tackling one giant task, you split it into several smaller, independent sub-problems.

Look back at our email filtering task. We didn't try to solve

Look back at our email filtering task. We didn't try to solve "clean the list" in one go. We divided it into:

  1. Handle duplicate emails.
  2. Validate the email format.
  3. Add clean emails to a new list.

Each of these is a much simpler problem to solve. Once you've solved each piece, you can assemble them to complete the larger task. This approach makes your logic clearer and your code much easier to debug. If there's a bug, you can isolate which part of the logic is failing.

Mapping the Flow

Another powerful planning tool is the Input-Process-Output (IPO) model. It's a simple way to frame any programming task. You define what data goes in, what transformation happens, and what result comes out.

For our email cleaner:

ComponentDescription
InputA list of raw email address strings.
Process1. Iterate through the list.
2. Check for and discard duplicates.
3. Check for valid email format (@, .).
OutputA new list containing only unique, valid emails.

This structure forces you to think about the boundaries of your problem. What exactly do I have to start with? What exactly must I produce? The 'Process' block then becomes a checklist for your pseudo-code or flowchart.

Thinking about the flow also helps you anticipate problems. What if the input list is empty? What if an email has two '@' symbols? These are —unusual or extreme scenarios that can break your code if you don't plan for them.

Good problem-solving means thinking defensively. Before you write the code, ask yourself: "What could go wrong?" Then, build the logic to handle it directly in your plan.

By planning your logic with pseudo-code and flowcharts, breaking down the problem, and considering the full input-process-output cycle, you move from just writing code to architecting solutions. This is the core skill of a programmer.

Quiz Questions 1/5

What is the primary purpose of writing pseudo-code before starting to write actual code?

Quiz Questions 2/5

You are tasked with creating a script that reads a text file, counts the frequency of each word, and then prints the ten most common words. According to the 'Divide and Conquer' strategy, what is the most logical way to break down this problem?