We all want to develop problem-solving skills in math, programming, computer science, data structures and algorithms, and other fields. But as we move forward, we may face various challenges and barriers. Sometimes we handle these situations smartly, but sometime we may get stuck. In this blog, I will present solutions and motivation to tackle some of these scenarios in problem solving. Let’s begin step by step.
Sometimes, we don’t know much about the problem and quickly suggest a solution. So habits of proposing or accepting such solutions can create a long-term problem in our ability to solve problems!
Such habits can develop blind spots in our problem-solving ability. We may start to rely on quick fixes rather than taking time to analyze the problem and develop comprehensive solutions. Over time, this can cause us to overlook important details or root causes of errors.
On the other hand, sometimes we lose patience early in the problem-solving. For example, after trying a problem for only 5 minutes, we may begin to think, “I will not be able to find a solution.” But staying with the problem longer is more effective. The fact is: Sometimes problems come with their own complexity, which requires patience, observation, and simplification.
If a 1-hour time limit is set for finding a solution, we need to develop a mindset to use that time wisely. As we move forward with an analytical focus, the probability of success will increase. We may get an idea for a solution at the end of 5 minutes, 15 minutes, 25 minutes, or some other time.
Sometimes, we are very close to getting the correct solution. But suddenly, we shift our focus to the wrong detail and deviate from the approach. Here are couple of ideas on how to handle such situations:
Solving a problem is much like driving a vehicle to a destination within a given time frame. If you have good driving experience, control over your driving tools, and an accurate map, handling any wrong deviation will be much easier.
Learning problem-solving is an art of continuous practice by using patience, experience, and knowledge. We should never lose faith in ourselves and keep trying until we find a solution in the given time!
Whenever a thought comes to our mind to give-up a problem, we should motivate ourselves, recollect all experiences and give one more best try! Such situations can be one of the defining moments. The fact is: mastering problem-solving is an iterative journey of learning from failures!
Solving 100 problems with proper planning and in-depth understanding is much better than solving 1000 problems with no planning and poor understanding.
You may have observed some learners who focus on solving a lot of problems in a hurry to improve their problem-solving skills. Still, they don’t feel confident approaching new problems. Why does this happen? The idea is simple: During this process, they miss the reason behind underlying concept and develop a habit of memorization.
There is no limit to the number of problems you can solve, but you need to follow a proper strategy for each problem. By understanding the concepts behind approaches, you can avoid making the same mistakes repeatedly, identify common patterns, and apply appropriate solutions to different problems.
We all desire to keep problem-solving ideas in our memory for a long time, but sometimes we forget due to lack of application or other reasons. Later, when we need them, we have to start from scratch again.
To avoid such situations, one idea would be to write a simple note on paper whenever we explore a new idea for the first time. This requires patience and discipline, but it is worth in the long term.
When you look at these well-written notes later, it can provide a huge relief. It gives you an opportunity to build new ideas based on your previous work rather than starting from scratch. However, it is important to note that 80% of these notes may contain ideas about what not to do.
Sometimes failures in problem-solving occur when we underestimate our abilities and experiences. The idea is simple: We should never ever underestimate ourselves!
As we know, confidence about our past experiences and knowledge have a significant impact on our ability to solve problems. But some programmers often underestimate themselves due to lack of confidence, fear of failure or the assumption that someone else knows better.
Underestimating ourselves can hinder our ability to think critically and creatively, make us hesitant to take risks, and impact our problem-solving efficiency. On the other hand, when we believe in our abilities and experiences, we can approach problems with a positive attitude, make bold decisions, and take the necessary steps to solve it. We are more likely to be open to new ideas and solutions, which can lead to more effective and innovative problem-solving.
We mostly encounter two situations of fear in problem-solving:
The first type primarily occurs when the problem is totally new to us or when there is a little complex problem statement. One simple solution would be: Rather than overthinking, spend a little extra time in understanding the problem, extracting relevant details, and simplifying it. Of course, a good understanding of concepts works as a catalyst.
The second type is primarily due to the realization of an incorrect approach or inability to identify the next step. One simple solution would be: Gather all experiences and patterns of problem-solving, go back and forth, draw a simple picture of followed steps, and check: Are we moving in the right direction? Are we missing some details? What is the specific point where the error is happening? Do we need to switch to another approach?
Most important thing: Fear is just a current state of mind, nothing more! We should keep faith in our experiences, motivate ourselves and keep trying to get it done!
The one basic rule of problem-solving: Keeping the distraction aside and developing a desire to get an efficient solution!
As we define the current form of a player in a sport, we can also define the current form of a person in problem-solving. So we should do a continuous practice like a sports person to achieve the best form! The best idea is: We should not bother about ups and downs. It’s a part of the journey, and focusing on the next ability level would be the best strategy!
When presented with a problem — whether it is an algorithmic problem or a real-life problem, how do we solve it? Sharing here the five common strategies where different strategies have different action plans.
Why is preparing a weekly execution note important? There could be several reasons, but the best idea is that it helps us track progress and formulate future strategies. Let’s understand from another perspective.
If you are not clear about the answers, then one thing is lacking — a strategy! We all have validated learnings at all stages of life, but our mind has one limitation — a habit of forgetting things as time passes.
Sometimes, we even make the same mistakes or solve the same problems again, which is an inefficient approach. So, the best long-term solution would be to write weekly execution notes and store the validated learnings. This is just like a dynamic programming approach of storing ideas in a cache or memory.
Why are some people efficient in learning? For example, one person takes two months to learn something, another person takes two years, and there is a person who struggles to understand it in a lifetime. What are the differences in their approach? It is about two things — focus and collaboration.
Focus is necessary for learning, but collaboration helps us understand other people’s experiences, avoid mistakes, and find solutions quickly.
Enjoy learning, Enjoy coding, enjoy problem solving :)