Getting unstuck

It's completely normal for programmers to get stuck sometimes. It happens even to experienced developers, and especially when doing unfamiliar things. Learning to persist and get unstuck is part of the programming skillset.

Below is a list of approaches and techniques. They are based on many years of experience developing software, and usually help beginners get unstuck.

Determine the cause

Beginners get stuck for one of several reasons:

an understanding problem: not actually understanding the problem 100%

a debugging problem: getting errors or wrong outputs

a syntax problem: not knowing how to make Python do what you want

a thinking problem: not knowing what to do to solve the problem

Consider which problem you have now, then read the corresponding section.

Incomplete understanding

At the risk of stating the obvious: make sure you've understood the problem completely before you start solving it.

Here are some questions you can ask yourself to check your understanding:

did you carefully read the problem description?

does any part of it seem confusing or odd to you?

can you restate the problem in your own words?

You can ask others for clarification or re-read the problem statement. If any terminology is unfamiliar, look it up.

Debugging problems

If you get errors or wrong outputs when you run your program, your program has one or more bugs that you'll have to find and fix.

Deal with errors

If running your code gives an error, read the error message closely several times. It can be hard to understand error messages when you're not used to it, but if you can understand the error you'll often get unstuck.

Note that error messages often contain line numbers. These tell you approximately which line causes the problem, though they can be off sometimes. Try to carefully read the offending line several times; the problem is often subtle.

If you don't understand the error, you can:

google the error

compare your code to previous examples you've seen

compare your code to the reference sheet

When running code on Python Principles, errors are turned into links. Try clicking the link to visit the corresponding blog post that explains the error and how to fix it.

Deal with wrong outputs

If your program runs, but produces a wrong or unexpected output, something is wrong with either your implementation or the logic behind it.

Note carefully which input produces a wrong output. Mentally step through your code with this input. Think about what each line does. This way you will hopefully notice when things start to go awry, letting you understand the problem. You can read more about this debugging approach in the Debugging by Simulation blog post.

Syntax problems

You're having syntax problems if you don't precisely what to type to make Python do as you want. You can often use examples to get unstuck. You can:

review previous examples you've seen

combine bits of code from previous examples

base your solution on the reference sheet

You can also review the lesson that taught you how to use the concept you need.

Thinking problems

When a coding problem is easy and familiar, we can typically do it without much thought. When we run into a challenging problem, it's easy to default to the same approach. You end up just trying things, hoping that something will work.

But when that fails, it's best to step back and think. Ensure that your mental model is clear before proceeding.

Devise a strategy

Write down in plain English what you want your program to do before you write any code. This forces you to develop a clear approach to the problem. It also prevents you from getting bogged down in the details of syntax. This approach is referred to as writing pseudocode first.

If you're asked to write a function with inputs and outputs, it's often helpful to think of some concrete input and walk through what the output should be and why.

Other tips

Sleep on it

When you struggle with a problem, get stuck, and then spend some time doing other things, your brain continues to work on the problem in the background. This process is known in science as incubation. Research shows that sleep is particularly effective for incubation, but even taking a 10 minute break can sometimes get you unstuck.

If you try returning to the problem the next day, you'll often be surprised to find that everything is much clearer.

Think out loud

Sometimes the problem seems clear in your head. But if you try explaining it to someone else, out loud, you'll see that your mental model was muddy all along. There is something about making your thoughts explicit and formal through language that often works to get programmers unstuck. This is known as rubber duck debugging.

So grab a friend, a pet, or a rubber duck, or hop on a chatroom. Explain the problem you're having out loud or in text. You may find it helps surprisingly much. For chat rooms you can join our Discord or try the /r/learnpython subreddit.

Use a structured approach

Try reading our post on how to approach a coding exercise. It gives a more structured approach that you'll probably find helpful for difficult exercises.

Get help

We're available to help you on the Discord chatroom. You can also usually get help from fellow coders on the /r/learnpython subreddit which we're not affiliated with.