Last week I wrote about the "Just In Time" approach that I use to learn new skills and incorporate them into projects. One reader retweeted my article with a comment about the frustration we often run into with project-based learning:
I can tell from my personal experience. Project-based learning is far more frustrating than following along a tutorial.— Danil Hendra (@danhendran) July 13, 2020
But keep following along tutorials won't get you anywhere.#programming #CodeNewbie https://t.co/e9MBFN1NZn
This is a very common response, so I thought I'd take this opportunity to share some strategies about how to move past the frustration.
Note: As a former middle school science teacher, many of these strategies come from my experience working with students on engineering projects and from science education literature. As it turns out, very similar strategies can be used for kids and adults!
This is probably the most important strategy for managing frustration. We start to feel frustrated when our code isn't working and we're not getting the output we expected or intended. Immediately, we start to feel as if we have failed. Instead of giving up at this point, take a pause, take a deep breath, and ask yourself these questions:
Even though my project isn't working, what part or parts are working? Why are those parts working?
Identifying these successful parts will help you realize that you've already accomplished something, and that you will be able to accomplish more after you get past the current challenge.
At what point did I start to get stuck? What did I do at that point?
This is the "retrace your steps" strategy that we use when when we've lost our keys, or get lost in a new place. If you can identify where things started to go wrong, you are getting close to identifying the cause of the problem, which is the first step in solving it.
What exactly is the problem, as I currently understand it?
This is the time to jot down, as specifically as possible, what your problem is and what has gotten you to this point. Articulating this clearly will help you clarify the issue for yourself, but will also (spoiler alert!) be important for moving on to the next strategy.
What does it sound like to articulate the problem? I'd recommend reading over Stack Overflow's "How do I Ask a Good Question" Guide. Focus on the two quoted points below:
Introduce The Problem
Explain how you encountered the problem you're trying to solve, and any difficulties that have prevented you from solving it yourself.
Help Others Reproduce The Problem
Include just enough code to allow others to reproduce the problem.
If you can articulate these two things, you have already started to kick your feelings of frustration and failure into reflection and new learning.
Edit: I recommend Stack Overflow's process for formulating questions, and as a platform for researching answers while you try to solve the problem yourself. As Joseph mentions in the comments below, using Stack Overflow to post questions can be intimidating for a beginner. Thanks, Joseph!
This can be the hardest part. When we get frustrated and start to feel as if we've failed, sharing with others might be the last thing we want to do. But if you've already completed Step 1, this step should become a lot easier.
Sharing our projects-in-progress with others can help us in a number of ways. First, it helps us to think about our code in a new way as we talk about it, because we have to make it make sense to other people. This helps to uncover our own thinking process, and gaps in our process or our understanding of a concept.
Then, we can start to learn from others.
Post a Question
You can post a question on a platform like the DEV Community or Twitter. Some people will share links to resources that could be helpful, some people will ask clarifying questions, some might propose solutions...and some will compliment you on what you've accomplished, or share similar challenges they have had. All of these responses should help you feel like you're part of the larger coding community, and give the motivation to push through the frustration.
Hop on a Video Call
The goal here is to discuss the problem, look at your code, and do some pair programming to try to fix it. This strategy will not only help you see into the thought process of another person, but will also help you to build your network. This can be someone you already know at a similar experience-level, or it can be someone with more experience who is looking for a chance to mentor others.
If you've taken the plunge into learning in public and asking others for help, ideally you've been able to get past the stuck point and have felt some success after the frustration. Now is the time to Pay It Forward, and share your reflections about the process with others.
Write a blog post about the challenge, the solution, and the process of how you got through it.
This will help you look back on how stuck you were, and reflect on what you did to solve it. You'll be able to pat yourself on the back for coming so far in so little time...and you'll also be able to thank those who helped you along the way.
Better yet, other people will be able to get motivation from seeing you overcome your challenge. And the next time you feel overwhelmed with the feeling of frustration, you can look back at your blog post to motivate you to keep pushing forward.
Shout out to the smart people at Stem Teaching Tools, who have helped me think about how to manage frustration with students on engineering projects. The strategies I shared in this post are adapted from ideas in Failing Forward: Managing Student Frustration During Engineering Design Projects.