Getting started in Software development: A Path to a rewarding career (Part 2, Problem solving)
Tags: webdev, beginners, tutorial, career
Published: 2023-07-01 20:43:43

## Hello and welcome
Thanks for stopping by again.

## Table of Content
Full table of content for the entire series is [here](https://dev.to/jdonq/getting-started-in-software-development-a-path-to-a-rewarding-career-16ik)

For today though we will address the following

- **Getting started**
    - **Learn problem solving as an idea**


## Getting started
Now that the intro, plan and basic definitions are cleared up and understood, it is time to get started for real by learning problem solving as an idea or a process. We will try to go through everything at a steady pace to ease understanding. This is especially important because subsequent sessions will rely on some of what is covered previously. 


### Learn problem solving as an idea
Simply put, this involves **learning** how to solve problems and while that is quite obvious, it is necessary to go deeper into it, 
understand it and internalize it.

A problem in this context can be described as a challenge or task or process you are looking to develop software for. 

Learning problem-solving skills is as crucial in software development as it is in everyday life and below, we will go through some practical steps to solve almost any problem because as usual, we are here to help 😁
![Iron legion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jxpfv0i3nevilo1mt2e6.png)


#### **Understand the Problem**
This is arguably the most important step in problem solving. You want to know the problem, embrace the problem, visualize the problem, become one with the problem, get into the problem, appreciate the problem, the problem is the enemy and as Sun Tzu said; ‘Know thy enemy’. 

I cannot tell you how many lines of code in my experience have gone to waste because of misunderstood problems. 

Read and analyse the problem carefully **as many times as necessary**. Put a good amount of thinking into understanding it. You want to ensure you have a clear understanding of what needs to be solved because knowing the problem well will help you properly identify the requirements, constraints, the what, the why and so on of the problem.
![The problem](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5gwevts8hkvftd80ao7t.PNG)
The better you know the problem, the better your chances of solving the problem properly. The quality of your solution is a direct factor of your knowledge and understanding of the problem. It is just that important. **Understand. The. Problem.**

#### **Break Down the Problem**
Here, after you have become one with the problem and you have a strong grasp of what needs to be done, you want to break down the problem into smaller more manageable chunks. 

Any problem, no matter how complex, is just a lot of smaller problems in one, and if the smaller problems of the initial problem are still too complex, then break them into smaller problems still and the cycle continues until all you have are simple problems that cannot be broken down further. 
![Break problems down](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rrouzqlvp0uqdp5ny8q4.PNG)
A sky scrapper is a grand structure but once broken down, it is just a lot of single buildings stacked upon each other.

A building is still imposing in its own way but once broken down is just a lot of bricks arranged in a certain way.

A brick, well that is not nearly as scary as a sky scrapper 
![Bricks](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rv2206hyv94nv6p5htmz.PNG)
Using the example above, if you take the problem as a sky scrapper, it will be overwhelming but if it is broken down to mere bricks then things will not look so scary anymore.

One of these folks that say wise things once said, “A big problem is just a problem that has not been broken down properly”.
Another one is “if you find the problem to be too complex, seek first to break it down further”
**Break. Things. Down**

#### **Plan and Execute**
So, you now understand the problem and you have broken it down into manageable chunks after a lot of thinking, time to plan how you will solve the problem. 

Devise a strategy to solve the problems in their manageable form. What tools can you use, what algorithms can you use, how will it all flow together etc. This will give your execution some structure so that your efforts are not scattered or wasted. 
![Think Plan Execute](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jmremvg7jsxssu71tk7y.png)
Sometimes, while planning, you will realize you do not fully understand the problem or did not break things down well enough. If this ever happens, you are not alone, these first three steps are usually a cycle in my experience. No worries at all, this is quite normal, all you have to do is go back and break things down further. If you do not run into that then great job, you are ready to execute. 

Implement the plan you have put together and while doing this, if you find that you missed something, go back to the understanding or breaking down phase and clear things up then proceed as before.
**Think. Plan. Execute**

#### **Test and evaluate**
Once you have executed the plan, the job is almost done. Next you need to check your output for correctness. You need to test what you have built to see if it works and if it works as it was intended. Does it do what you set out to achieve. 
![metrics](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kag4j9ugxsfl4b56o22.png)
Is the problem solved, is it solved well, does it meet the requirements, are there edge cases where your solution might struggle, in the case of a user solution; are the user defined metrics and standards met. Basically, did you get the job done? **Check. Check. Check**

#### **Review and Take lessons**
A common mistake with getting the job done is the assumption that it is great and that’s it, but almost always, there are lessons to be learnt against next time. 

Go back and take a look at your solutions to see what could have been done better, faster, with less resources, more efficiently and what can be added to a library somewhere as part of a knowledge base to help improve yourself and others in the future.
![Review](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o0s76ptmpqtihsdf25rl.jpg)
Review your solution and reflect on the problem-solving process, consider alternative approaches or optimizations that could improve your solution, learn from your mistakes and analyse how you can avoid similar pitfalls in the future.

#### **Take on the next problem and repeat**
A simple fact of life is that problem-solving skills are developed through practice and experience. Engaging in problem-solving activities regularly will help enhance your skills. Solve as many problems as you can from different domains in different contexts to get your brain attuned to the problem-solving process as well as actually solving problems. 

Do not be afraid to take on new challenges with increasingly complex or unfamiliar problems because that is how you will grow (trust me I know this much). 
![Try Try Try](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7i13dfew8jy7zhn6so8c.jpg)
Seek guidance from resources around (like this article 😁) and collaborate with others and seek mentorship so you can glean experience from others and grow as a result.
As usual, we are here to help
![Iron legion](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jxpfv0i3nevilo1mt2e6.png)
Consult resources like books, tutorials, or online platforms (like this series 😁) that offer problem-solving tools and tips.

Participate in competitions, hackathons, or collaborative projects to solve problems collectively whenever you can. This is especially useful as you will need to collaborate with one or more teams when you get into the software development industry.

## To conclude
It is very important to note that problem-solving can be challenging and require perseverance. Embrace the process of learning and view obstacles and failings as opportunities for growth.

Stay positive, patient, and persistent in your problem-solving journey and remember that problem-solving skills are developed through practice and experience. As you tackle a wide range of problems and apply different strategies, you will become more proficient in understanding problems, analysing, planning, and executing solutions effectively. 💪💪💪

Until next time. Cheers

Previous post is [here](https://dev.to/jdonq/getting-started-in-software-development-a-path-to-a-rewarding-career-16ik)

Next post is [here](https://dev.to/jdonq/getting-started-in-software-development-a-path-to-a-rewarding-career-part-3a-3eg9)